ftp://ftp.krokus.ru/pub/OpenBSD/distfiles/xscreensaver-5.01.tar.gz
authorZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:43:41 +0000 (00:43 -0500)
committerZygo Blaxell <zblaxell@faye.furryterror.org>
Fri, 8 Feb 2013 17:54:39 +0000 (12:54 -0500)
-rw-r--r-- 1 zblaxell zblaxell 5270954 Nov  7  2006 xscreensaver-5.01.tar.gz
c371241c54f4c4cc2dd670852e39f212da3ca991  xscreensaver-5.01.tar.gz

104 files changed:
Makefile.in
OSX/SaverTester.plist
OSX/XScreenSaver.plist
OSX/bindist.rtf
README
config.h.in
configure
configure.in
driver/Makefile.in
driver/XScreenSaver.ad.in
driver/passwd-pam.c
driver/subprocs.c
driver/xscreensaver-getimage.c
driver/xscreensaver-text
hacks/Makefile.in
hacks/apple2-main.c
hacks/attraction.c
hacks/bumps.c
hacks/change_locale.h [deleted file]
hacks/config/README
hacks/config/bouboule.xml
hacks/config/boxed.xml
hacks/config/flipflop.xml
hacks/config/goop.xml
hacks/config/imsmap.xml
hacks/config/petri.xml
hacks/config/rd-bomb.xml
hacks/config/rdbomb.xml
hacks/config/rocks.xml
hacks/config/slidescreen.xml
hacks/config/slip.xml
hacks/config/speedmine.xml
hacks/config/sproingies.xml
hacks/config/xaos.xml
hacks/coral.c
hacks/critical.c
hacks/crystal.c
hacks/decayscreen.c
hacks/eruption.c
hacks/fireworkx.c
hacks/flag.c
hacks/glx/Makefile.in
hacks/glx/boxed.c
hacks/glx/carousel.c
hacks/glx/flipflop.c
hacks/glx/flipflop.man
hacks/glx/gltext.c
hacks/glx/pipes.c
hacks/glx/pipes.man
hacks/glx/sproingies.c
hacks/glx/sproingies.h
hacks/glx/sproingies.man
hacks/glx/sproingiewrap.c
hacks/glx/topblock.c
hacks/glx/topblock.h
hacks/goop.c
hacks/imsmap.man
hacks/interaggregate.c
hacks/jigsaw.c
hacks/julia.c
hacks/kaleidescope.c
hacks/noseguy.c
hacks/petri.c
hacks/piecewise.c
hacks/popsquares.c
hacks/ripples.c
hacks/rotzoomer.c
hacks/screenhack.c
hacks/slidescreen.c
hacks/squiral.c
hacks/starfish.c
hacks/twang.c
hacks/vidwhacker
hacks/xflame.c
hacks/xlockmore.c
intltool-update.in
po/Makefile.in.in
po/POTFILES.in
po/ca.po
po/da.po
po/de.po
po/et.po
po/fi.po
po/fr.po
po/hu.po
po/it.po
po/ja.po
po/ko.po
po/nb.po
po/nl.po
po/no.po
po/pl.po
po/pt.po
po/pt_BR.po
po/ru.po
po/sk.po
po/sv.po
po/vi.po
po/wa.po
po/zh_CN.po
po/zh_TW.po
utils/erase.c
utils/version.h
xscreensaver.spec

index 12ab264afee9749bacdfff14c4b7d9f349eb7628..c9ec0db3f8fd74cb0fd251b4417f135bd64d5ba6 100644 (file)
@@ -334,7 +334,7 @@ www::
   else                                                                     \
     set -x ;                                                               \
   fi ;                                                                     \
   else                                                                     \
     set -x ;                                                               \
   fi ;                                                                     \
-true  cvs add -kb $$BNAME $$BNAME2 ;                                       \
+  cvs add -kb $$BNAME $$BNAME2 ;                                           \
   cat $$TMP > download.html ;                                              \
   rm -f $$TMP ;                                                                    \
                                                                            \
   cat $$TMP > download.html ;                                              \
   rm -f $$TMP ;                                                                    \
                                                                            \
index c3de714f799e30261be9b8f3ccd38368c7ae82c7..1feabb217f23bf7fbc0dff982b1ff5f211da7a3b 100644 (file)
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>5.00</string>
+       <string>5.01</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5.00</string>
+       <string>5.01</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.4.0</string>
        <key>NSMainNibFile</key>
        <key>LSMinimumSystemVersion</key>
        <string>10.4.0</string>
        <key>NSMainNibFile</key>
index 2fa609aeca3c22fb3ecccc2e29ef858615e43335..a3e6b63ad9d2ef692206769375853c8d51d4063f 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>5.00</string>
+       <string>5.01</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5.00</string>
+       <string>5.01</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.4.0</string>
        <key>NSMainNibFile</key>
        <key>LSMinimumSystemVersion</key>
        <string>10.4.0</string>
        <key>NSMainNibFile</key>
index 98292809e3a3eaccd13295010c79f43aaa19a255..66f2d2c742625b4a7b289744ec96cfebfc6ffc34 100644 (file)
@@ -15,7 +15,7 @@ XScreenSaver
 \f1\b0 \
 by Jamie Zawinski \uc0\u8232 and many others\
 \
 \f1\b0 \
 by Jamie Zawinski \uc0\u8232 and many others\
 \
-version 5.00 \uc0\u8232 23-May-2006\
+version 5.01 \uc0\u8232 18-Sep-2006\
 \
 {\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}}\
 \pard\pardeftab720\li720
 \
 {\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}}\
 \pard\pardeftab720\li720
diff --git a/README b/README
index 64011bb30dbabd1b3de020490a7d0cea236f2874..1d6d93cba76d97f9d7a359f9d6584d9dcc1b1af4 100644 (file)
--- a/README
+++ b/README
@@ -38,6 +38,16 @@ XScreenSaver has an extensive manual -- please read it!
 
 ===============================================================================
 
 
 ===============================================================================
 
+Changes since 5.00:   * Backed out recent locale-related changes, since they
+                        broke far more things than they fixed.
+                      * Fail gracefully with ridiculously small window sizes.
+                      * `xflame' and `flag' ignore bitmap option on MacOS.
+                      * `speedmine' prefs work on MacOS.
+                      * Better explosions in `boxed'.
+                      * More dynamic motion in `sproingies'.
+                      * More options in `flipflop'.
+                      * Minor updates to `topblock'.
+                      * Various other minor fixes.
 Changes since 4.24:   * Ported to MacOS X! (10.4.0 or newer)
                       * API change: instead of providing a single screenhack()
                         function that does not return, screen savers using the
 Changes since 4.24:   * Ported to MacOS X! (10.4.0 or newer)
                       * API change: instead of providing a single screenhack()
                         function that does not return, screen savers using the
index 54e872c9bf48112c25e18f01bc66fbd11acca925..72be58acddbd16151343ed5b219a75cb1c882720 100644 (file)
@@ -12,6 +12,9 @@
  */
 
 
  */
 
 
+/* Define this to allow the root password to unlock the screen. */
+#undef ALLOW_ROOT_PASSWD
+
 /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
    systems. This function is required for `alloca.c' support on those systems.
    */
 /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
    systems. This function is required for `alloca.c' support on those systems.
    */
    lock/unlock the screen, instead of standard /etc/passwd authentication. */
 #undef HAVE_PAM
 
    lock/unlock the screen, instead of standard /etc/passwd authentication. */
 #undef HAVE_PAM
 
+/* Define this if you have pam_fail_delay function. see driver/passwd-pam.c.
+   */
+#undef HAVE_PAM_FAIL_DELAY
+
 /* Define this if you have a Linux-like /proc/interrupts file which can be
    examined to determine when keyboard activity has occurred. */
 #undef HAVE_PROC_INTERRUPTS
 /* Define this if you have a Linux-like /proc/interrupts file which can be
    examined to determine when keyboard activity has occurred. */
 #undef HAVE_PROC_INTERRUPTS
index e774dadf658766ea44a4a6220288cf4c918dea86..bbfafcef908a9963fe49a8bba4167318653bae96 100755 (executable)
--- a/configure
+++ b/configure
@@ -309,7 +309,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA SET_MAKE EGREP PERL X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS INTLTOOL_DESKTOP_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_KEYS_RULE INTLTOOL_OAF_RULE INTLTOOL_PONG_RULE INTLTOOL_SERVER_RULE INTLTOOL_SHEET_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_UI_RULE INTLTOOL_XML_RULE INTLTOOL_CAVES_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE INTLTOOL_PERL GETTEXT_PACKAGE RANLIB ac_ct_RANLIB ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB MKINSTALLDIRS login_manager_tmp pkg_config gnome_open_program gnome_url_show_program INCLUDES PREFERRED_DEMO_PROGRAM ALL_DEMO_PROGRAMS SAVER_LIBS MOTIF_LIBS GTK_LIBS XML_LIBS JPEG_LIBS HACK_LIBS XPM_LIBS PTY_LIBS GL_LIBS GLE_LIBS XDPMS_LIBS XINERAMA_LIBS PASSWD_LIBS INSTALL_SETUID SETUID_HACKS INSTALL_DIRS NEED_SETUID INSTALL_PAM NEW_LOGIN_COMMAND NEW_LOGIN_COMMAND_P DEFAULT_IMAGES_P DEFAULT_IMAGE_DIRECTORY DEFAULT_TEXT_FILE OBJCC EXES_OSX SCRIPTS_OSX MEN_OSX PASSWD_SRCS PASSWD_OBJS XMU_SRCS XMU_OBJS XMU_LIBS SAVER_GL_SRCS SAVER_GL_OBJS SAVER_GL_LIBS LOCK_SRCS LOCK_OBJS JPEG_EXES GL_EXES GL_UTIL_EXES GL_MEN GL_KLUDGE GLE_EXES GLE_KLUDGE GNOME24 GNOME22 NOGNOME HACKDIR HACKDIR_FULL GTK_DATADIR PO_DATADIR HACK_CONF_DIR GTK_EXTRA_OBJS APPDEFAULTS DEPEND DEPEND_FLAGS DEPEND_DEFINES LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA SET_MAKE EGREP PERL X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS INTLTOOL_DESKTOP_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_KEYS_RULE INTLTOOL_OAF_RULE INTLTOOL_PONG_RULE INTLTOOL_SERVER_RULE INTLTOOL_SHEET_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_UI_RULE INTLTOOL_XML_RULE INTLTOOL_CAVES_RULE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE INTLTOOL_PERL GETTEXT_PACKAGE RANLIB ac_ct_RANLIB ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB MKINSTALLDIRS login_manager_tmp pkg_config gnome_open_program gnome_url_show_program INCLUDES PREFERRED_DEMO_PROGRAM ALL_DEMO_PROGRAMS SAVER_LIBS MOTIF_LIBS GTK_LIBS XML_LIBS JPEG_LIBS HACK_LIBS XPM_LIBS PTY_LIBS GL_LIBS GLE_LIBS XDPMS_LIBS XINERAMA_LIBS PASSWD_LIBS INSTALL_SETUID SETUID_HACKS INSTALL_DIRS NEED_SETUID INSTALL_PAM HAVE_PAM_FAIL_DELAY NEW_LOGIN_COMMAND NEW_LOGIN_COMMAND_P DEFAULT_IMAGES_P DEFAULT_IMAGE_DIRECTORY DEFAULT_TEXT_FILE WITH_BROWSER OBJCC EXES_OSX SCRIPTS_OSX MEN_OSX PASSWD_SRCS PASSWD_OBJS XMU_SRCS XMU_OBJS XMU_LIBS SAVER_GL_SRCS SAVER_GL_OBJS SAVER_GL_LIBS LOCK_SRCS LOCK_OBJS JPEG_EXES GL_EXES GL_UTIL_EXES GL_MEN GL_KLUDGE GLE_EXES GLE_KLUDGE GNOME24 GNOME22 NOGNOME HACKDIR HACKDIR_FULL GTK_DATADIR PO_DATADIR HACK_CONF_DIR GTK_EXTRA_OBJS APPDEFAULTS DEPEND DEPEND_FLAGS DEPEND_DEFINES LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -851,6 +851,9 @@ Screen locking options:
   --enable-locking        Compile in support for locking the display.
   --disable-locking       Do not allow locking at all.
 
   --enable-locking        Compile in support for locking the display.
   --disable-locking       Do not allow locking at all.
 
+  --enable-root-passwd       Allow root passwd to unlock screen.
+  --disable-root-passwd       Do not allow that.
+
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
@@ -922,6 +925,7 @@ Graphics options:
   --with-image-directory=DIR  By default, some demos may display random images
                           from this directory.
   --with-text-file=FILE   By default, some demos may display this file.
   --with-image-directory=DIR  By default, some demos may display random images
                           from this directory.
   --with-text-file=FILE   By default, some demos may display this file.
+  --with-browser=BROWSER   Specify the browser to show help URL.
   --with-setuid-hacks     Allow some demos to be installed `setuid root'
                           (which is needed in order to ping other hosts.)
 
   --with-setuid-hacks     Allow some demos to be installed `setuid root'
                           (which is needed in order to ping other hosts.)
 
@@ -1536,6 +1540,12 @@ echo "command line was: $0 $@"
 
 
 
 
 
 
+
+
+
+
+
+
 
 
 
 
 
 
@@ -12352,6 +12362,29 @@ _ACEOF
 fi
 
 
 fi
 
 
+###############################################################################
+#
+#       Whether to allow root password to unblank.
+#
+###############################################################################
+# Check whether --enable-root-passwd or --disable-root-passwd was given.
+if test "${enable_root_passwd+set}" = set; then
+  enableval="$enable_root_passwd"
+  enable_root_passwd="$enableval"
+else
+  enable_root_passwd=yes
+fi;
+if test "$enable_root_passwd" = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define ALLOW_ROOT_PASSWD 1
+_ACEOF
+
+  true
+elif test "$enable_root_passwd" != no; then
+  echo "error: something wrong with root-passwd option. Check configure.in ."
+  exit 1
+fi
+
 ###############################################################################
 #
 #       Check for PAM.
 ###############################################################################
 #
 #       Check for PAM.
@@ -12840,6 +12873,80 @@ echo "${ECHO_T}two arguments" >&6
       echo "$as_me:$LINENO: result: unknown" >&5
 echo "${ECHO_T}unknown" >&6
     fi
       echo "$as_me:$LINENO: result: unknown" >&5
 echo "${ECHO_T}unknown" >&6
     fi
+
+# Check pam_fail_delay
+    echo "$as_me:$LINENO: checking pam_fail_delay in -lpam" >&5
+echo $ECHO_N "checking pam_fail_delay in -lpam... $ECHO_C" >&6
+    if test "${ac_cv_pam_fail_delay+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_LDFLAGS="$LDFLAGS"
+      LDFLAGS="-lpam"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <security/pam_appl.h>
+int
+main ()
+{
+pam_handle_t *pamh = 0;
+                  unsigned int usec = 1;
+                  int status = pam_fail_delay (pamh, usec);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_pam_fail_delay=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_pam_fail_delay=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+      ac_cv_pam_fail_delay=$ac_pam_fail_delay,
+      LD_FLAGS=$ac_save_LDFLAGS
+fi
+
+
+      if test "$ac_pam_fail_delay" = yes ; then
+        echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+        cat >>confdefs.h <<\_ACEOF
+#define HAVE_PAM_FAIL_DELAY 1
+_ACEOF
+
+      else
+        echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+      fi
+
   fi
 fi
 
   fi
 fi
 
@@ -14828,6 +14935,7 @@ fi
 
 # Check for the various Gnome help and URL loading programs.
 #
 
 # Check for the various Gnome help and URL loading programs.
 #
+WITH_BROWSER=gnome-open
 if test "$have_gtk" = yes; then
   for ac_prog in gnome-open
 do
 if test "$have_gtk" = yes; then
   for ac_prog in gnome-open
 do
@@ -16213,7 +16321,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 16220 "configure"
+#line 16328 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 #ifndef MESA_MAJOR_VERSION
 #include "confdefs.h"
 #include <GL/gl.h>
 #ifndef MESA_MAJOR_VERSION
@@ -19569,6 +19677,52 @@ ac_cv_textfile="$with_textfile"
 DEFAULT_TEXT_FILE="$ac_cv_textfile"
 
 
 DEFAULT_TEXT_FILE="$ac_cv_textfile"
 
 
+###############################################################################
+#
+#       Check the browser to see help URL
+#
+###############################################################################
+
+have_browser=no
+with_browser_req=unspecified
+
+
+# Check whether --with-browser or --without-browser was given.
+if test "${with_browser+set}" = set; then
+  withval="$with_browser"
+  with_browser="$withval"; with_browser_req="$withval"
+else
+  with_browser=no
+fi;
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_browser" in
+  no )
+  ;;
+  * )
+    WITH_BROWSER=$with_browser
+    gnome_open_program=$with_browser
+    echo "$as_me:$LINENO: checking for browser $with_browser" >&5
+echo $ECHO_N "checking for browser $with_browser... $ECHO_C" >&6
+    with_browser_fullpath=`which $with_browser 2>/dev/null`
+    case $with_browser_fullpath in
+        /* )
+               echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+                have_browser=yes
+                ;;
+       * )
+              echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+# Only warning: we don't want to install all packages for the
+# dependency of the browser in building stage...
+              echo "WARNING: browser not found: --with-browser=$with_browser"
+              ;;
+    esac
+  ;;
+esac
+ac_cv_browser="$with_browser"
+
 ###############################################################################
 #
 #       Check whether it's ok to install some hacks as setuid (e.g., "sonar")
 ###############################################################################
 #
 #       Check whether it's ok to install some hacks as setuid (e.g., "sonar")
@@ -19869,6 +20023,8 @@ INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'`
 
 
 
 
 
 
+
+
 
 
 
 
 
 
@@ -20604,11 +20760,13 @@ s,@SETUID_HACKS@,$SETUID_HACKS,;t t
 s,@INSTALL_DIRS@,$INSTALL_DIRS,;t t
 s,@NEED_SETUID@,$NEED_SETUID,;t t
 s,@INSTALL_PAM@,$INSTALL_PAM,;t t
 s,@INSTALL_DIRS@,$INSTALL_DIRS,;t t
 s,@NEED_SETUID@,$NEED_SETUID,;t t
 s,@INSTALL_PAM@,$INSTALL_PAM,;t t
+s,@HAVE_PAM_FAIL_DELAY@,$HAVE_PAM_FAIL_DELAY,;t t
 s,@NEW_LOGIN_COMMAND@,$NEW_LOGIN_COMMAND,;t t
 s,@NEW_LOGIN_COMMAND_P@,$NEW_LOGIN_COMMAND_P,;t t
 s,@DEFAULT_IMAGES_P@,$DEFAULT_IMAGES_P,;t t
 s,@DEFAULT_IMAGE_DIRECTORY@,$DEFAULT_IMAGE_DIRECTORY,;t t
 s,@DEFAULT_TEXT_FILE@,$DEFAULT_TEXT_FILE,;t t
 s,@NEW_LOGIN_COMMAND@,$NEW_LOGIN_COMMAND,;t t
 s,@NEW_LOGIN_COMMAND_P@,$NEW_LOGIN_COMMAND_P,;t t
 s,@DEFAULT_IMAGES_P@,$DEFAULT_IMAGES_P,;t t
 s,@DEFAULT_IMAGE_DIRECTORY@,$DEFAULT_IMAGE_DIRECTORY,;t t
 s,@DEFAULT_TEXT_FILE@,$DEFAULT_TEXT_FILE,;t t
+s,@WITH_BROWSER@,$WITH_BROWSER,;t t
 s,@OBJCC@,$OBJCC,;t t
 s,@EXES_OSX@,$EXES_OSX,;t t
 s,@SCRIPTS_OSX@,$SCRIPTS_OSX,;t t
 s,@OBJCC@,$OBJCC,;t t
 s,@EXES_OSX@,$EXES_OSX,;t t
 s,@SCRIPTS_OSX@,$SCRIPTS_OSX,;t t
index 03e1a7d2483ba870bf720ff0be840c0334b8ef40..8793c578d529302af61eaf2fcd2c05b05ac681e3 100644 (file)
@@ -191,6 +191,9 @@ AH_TEMPLATE([PASSWD_HELPER_PROGRAM],
 AH_TEMPLATE([NO_LOCKING],
            [Define this to remove the option of locking the screen at all.])
 
 AH_TEMPLATE([NO_LOCKING],
            [Define this to remove the option of locking the screen at all.])
 
+AH_TEMPLATE([ALLOW_ROOT_PASSWD],
+           [Define this to allow the root password to unlock the screen.])
+
 AH_TEMPLATE([HAVE_KERBEROS],
            [Define this if you want to use Kerberos authentication to
            lock/unlock the screen instead of your local password.  This
 AH_TEMPLATE([HAVE_KERBEROS],
            [Define this if you want to use Kerberos authentication to
            lock/unlock the screen instead of your local password.  This
@@ -221,6 +224,10 @@ AH_TEMPLATE([PAM_SERVICE_NAME],
            configured for xlock, so setting this to "xlock" would also work
            in that case.])
 
            configured for xlock, so setting this to "xlock" would also work
            in that case.])
 
+AH_TEMPLATE([HAVE_PAM_FAIL_DELAY],
+           [Define this if you have pam_fail_delay function.
+           see driver/passwd-pam.c.])
+
 AH_TEMPLATE([PAM_STRERROR_TWO_ARGS],
            [Define if you have PAM and pam_strerror() requires two
            arguments.])
 AH_TEMPLATE([PAM_STRERROR_TWO_ARGS],
            [Define if you have PAM and pam_strerror() requires two
            arguments.])
@@ -1791,6 +1798,23 @@ if test "$ac_macosx" = yes; then
 fi
 
 
 fi
 
 
+###############################################################################
+#
+#       Whether to allow root password to unblank.
+#
+###############################################################################
+AC_ARG_ENABLE(root-passwd, [
+  --enable-root-passwd       Allow root passwd to unlock screen.
+  --disable-root-passwd       Do not allow that.],
+  [enable_root_passwd="$enableval"],[enable_root_passwd=yes])
+if test "$enable_root_passwd" = yes; then
+  AC_DEFINE(ALLOW_ROOT_PASSWD)
+  true
+elif test "$enable_root_passwd" != no; then
+  echo "error: something wrong with root-passwd option. Check configure.in ."
+  exit 1
+fi
+
 ###############################################################################
 #
 #       Check for PAM.
 ###############################################################################
 #
 #       Check for PAM.
@@ -1872,6 +1896,28 @@ if test "$enable_locking" = yes -a "$with_pam" = yes; then
     else
       AC_MSG_RESULT(unknown)
     fi
     else
       AC_MSG_RESULT(unknown)
     fi
+
+# Check pam_fail_delay
+    AC_MSG_CHECKING(pam_fail_delay in -lpam)
+    AC_CACHE_VAL(ac_cv_pam_fail_delay,
+     [ac_save_LDFLAGS="$LDFLAGS"
+      LDFLAGS="-lpam"
+      AC_TRY_LINK([#include <security/pam_appl.h>],
+                  [pam_handle_t *pamh = 0;
+                  unsigned int usec = 1;
+                  int status = pam_fail_delay (pamh, usec);],
+                  [ac_pam_fail_delay=yes],
+                  [ac_pam_fail_delay=no])
+      ac_cv_pam_fail_delay=$ac_pam_fail_delay,
+      LD_FLAGS=$ac_save_LDFLAGS])
+
+      if test "$ac_pam_fail_delay" = yes ; then
+        AC_MSG_RESULT(yes)
+        AC_DEFINE(HAVE_PAM_FAIL_DELAY)
+      else
+        AC_MSG_RESULT(no)
+      fi
+
   fi
 fi
 
   fi
 fi
 
@@ -2430,6 +2476,7 @@ fi
 
 # Check for the various Gnome help and URL loading programs.
 #
 
 # Check for the various Gnome help and URL loading programs.
 #
+WITH_BROWSER=gnome-open
 if test "$have_gtk" = yes; then
   AC_CHECK_PROGS(gnome_open_program,     gnome-open)
   AC_CHECK_PROGS(gnome_url_show_program, gnome-url-show)
 if test "$have_gtk" = yes; then
   AC_CHECK_PROGS(gnome_open_program,     gnome-open)
   AC_CHECK_PROGS(gnome_url_show_program, gnome-url-show)
@@ -3357,6 +3404,45 @@ ac_cv_textfile="$with_textfile"
 DEFAULT_TEXT_FILE="$ac_cv_textfile"
 
 
 DEFAULT_TEXT_FILE="$ac_cv_textfile"
 
 
+###############################################################################
+#
+#       Check the browser to see help URL
+#
+###############################################################################
+
+have_browser=no
+with_browser_req=unspecified
+
+AC_ARG_WITH(browser,
+[  --with-browser=BROWSER   Specify the browser to show help URL.],
+  [with_browser="$withval"; with_browser_req="$withval"],
+  [with_browser=no ])
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_browser" in
+  no )
+  ;;
+  * )
+    WITH_BROWSER=$with_browser
+    gnome_open_program=$with_browser
+    AC_MSG_CHECKING([for browser $with_browser])
+    with_browser_fullpath=`which $with_browser 2>/dev/null`
+    case $with_browser_fullpath in
+        /* )
+               AC_MSG_RESULT(yes)
+                have_browser=yes
+                ;;
+       * )
+              AC_MSG_RESULT(no)
+# Only warning: we don't want to install all packages for the 
+# dependency of the browser in building stage...
+              echo "WARNING: browser not found: --with-browser=$with_browser"
+              ;;
+    esac
+  ;;
+esac
+ac_cv_browser="$with_browser"
+
 ###############################################################################
 #
 #       Check whether it's ok to install some hacks as setuid (e.g., "sonar")
 ###############################################################################
 #
 #       Check whether it's ok to install some hacks as setuid (e.g., "sonar")
@@ -3574,11 +3660,13 @@ AC_SUBST(SETUID_HACKS)
 AC_SUBST(INSTALL_DIRS)
 AC_SUBST(NEED_SETUID)
 AC_SUBST(INSTALL_PAM)
 AC_SUBST(INSTALL_DIRS)
 AC_SUBST(NEED_SETUID)
 AC_SUBST(INSTALL_PAM)
+AC_SUBST(HAVE_PAM_FAIL_DELAY)
 AC_SUBST(NEW_LOGIN_COMMAND)
 AC_SUBST(NEW_LOGIN_COMMAND_P)
 AC_SUBST(DEFAULT_IMAGES_P)
 AC_SUBST(DEFAULT_IMAGE_DIRECTORY)
 AC_SUBST(DEFAULT_TEXT_FILE)
 AC_SUBST(NEW_LOGIN_COMMAND)
 AC_SUBST(NEW_LOGIN_COMMAND_P)
 AC_SUBST(DEFAULT_IMAGES_P)
 AC_SUBST(DEFAULT_IMAGE_DIRECTORY)
 AC_SUBST(DEFAULT_TEXT_FILE)
+AC_SUBST(WITH_BROWSER)
 
 AC_SUBST(OBJCC)
 AC_SUBST(EXES_OSX)
 
 AC_SUBST(OBJCC)
 AC_SUBST(EXES_OSX)
index 3c0f796662c5e08aeda347e3996bf14a41268e51..e7a07d9c4dea9b00349b071ad7f19508d2f60d69 100644 (file)
@@ -472,7 +472,9 @@ install-pam:
            echo rm -f $$src ;                                          \
                 rm -f $$src ;                                          \
          fi ;                                                          \
            echo rm -f $$src ;                                          \
                 rm -f $$src ;                                          \
          fi ;                                                          \
-         if ! ( grep $$dest $$conf >/dev/null ); then                  \
+         if ( grep $$dest $$conf >/dev/null ); then                    \
+           echo ;                                                      \
+         else                                                          \
            e=echo ;                                                    \
  $$e ""                                                                             ;\
  $$e "  ####################################################################";\
            e=echo ;                                                    \
  $$e ""                                                                             ;\
  $$e "  ####################################################################";\
index eb59066224952ba1c1ee378839b53a1976c7bedc..840252df4c5bd37d2b6662fe3af0bdd776432c69 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 5.00b2b2
-!                              23-May-2006
+!                              version 5.01b2
+!                              18-Sep-2006
 !
 ! 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/
@@ -93,7 +93,7 @@ GetViewPortIsFullOfLies: False
 !
 !   Gnome 2.4, 2.6: (yelp can't display man pages, as of 2.6.3)
 !
 !
 !   Gnome 2.4, 2.6: (yelp can't display man pages, as of 2.6.3)
 !
-@GNOME24@*loadURL: gnome-open '%s'
+@GNOME24@*loadURL: @WITH_BROWSER@ '%s'
 @GNOME24@*manualCommand: gnome-terminal --title '%s manual' \
 @GNOME24@              --command '/bin/sh -c "man %s; read foo"'
 !
 @GNOME24@*manualCommand: gnome-terminal --title '%s manual' \
 @GNOME24@              --command '/bin/sh -c "man %s; read foo"'
 !
index 5c4f74f2d442fa3de14b829f5c91dcab2379b6af..a4b132123f7c8ce63078961b80617466efef6a54 100644 (file)
@@ -288,6 +288,7 @@ pam_passwd_valid_p (const char *typed_passwd, Bool verbose_p)
       goto DONE;
     }
 
       goto DONE;
     }
 
+#ifdef ALLOW_ROOT_PASSWD
   /* If that didn't work, set the user to root, and try to authenticate again.
    */
   if (user) free (user);
   /* If that didn't work, set the user to root, and try to authenticate again.
    */
   if (user) free (user);
@@ -310,6 +311,8 @@ pam_passwd_valid_p (const char *typed_passwd, Bool verbose_p)
     fprintf (stderr, "%s:   pam_authenticate (...) ==> %d (%s)\n",
              blurb(), status, PAM_STRERROR(pamh, status));
 
     fprintf (stderr, "%s:   pam_authenticate (...) ==> %d (%s)\n",
              blurb(), status, PAM_STRERROR(pamh, status));
 
+#endif /* ALLOW_ROOT_PASSWD */
+
  DONE:
   if (user) free (user);
   if (pamh)
  DONE:
   if (user) free (user);
   if (pamh)
index 604825cbe2bdbc681f6c8b0d64ffe6f062387bb5..0bbe4a87609c836239b693642957276d33f64a89 100644 (file)
@@ -1140,14 +1140,17 @@ hack_subproc_environment (saver_screen_info *ssi)
   const char *odpy = DisplayString (si->dpy);
   char *ndpy = (char *) malloc (strlen(odpy) + 20);
   char *nssw = (char *) malloc (40);
   const char *odpy = DisplayString (si->dpy);
   char *ndpy = (char *) malloc (strlen(odpy) + 20);
   char *nssw = (char *) malloc (40);
-  char *s;
+  char *s, *c;
 
   strcpy (ndpy, "DISPLAY=");
   s = ndpy + strlen(ndpy);
   strcpy (s, odpy);
 
 
   strcpy (ndpy, "DISPLAY=");
   s = ndpy + strlen(ndpy);
   strcpy (s, odpy);
 
-  while (*s && *s != ':') s++;                 /* skip to colon */
-  while (*s == ':') s++;                       /* skip over colons */
+  /* We have to find the last colon since it is the boundary between
+     hostname & screen - IPv6 numeric format addresses may have many
+     colons before that point, and DECnet addresses always have two colons */
+  c = strrchr(s,':');                          /* skip to last colon */
+  if (c != NULL) s = c+1;
   while (isdigit(*s)) s++;                     /* skip over dpy number */
   while (*s == '.') s++;                       /* skip over dot */
   if (s[-1] != '.') *s++ = '.';                        /* put on a dot */
   while (isdigit(*s)) s++;                     /* skip over dpy number */
   while (*s == '.') s++;                       /* skip over dot */
   if (s[-1] != '.') *s++ = '.';                        /* put on a dot */
index 6790ee10f5fa9af510fb1027afcb87be29c6f3d0..68637a7be4e2fb8662d035a293247ea48ef11993 100644 (file)
@@ -1442,6 +1442,19 @@ display_desktop (Screen *screen, Window window, Drawable drawable,
 }
 
 
 }
 
 
+/* Whether the given Drawable is unreasonably small.
+ */
+static Bool
+drawable_miniscule_p (Display *dpy, Drawable drawable)
+{
+  Window root;
+  int xx, yy;
+  unsigned int bw, d, w = 0, h = 0;
+  XGetGeometry (dpy, drawable, &root, &xx, &yy, &w, &h, &bw, &d);
+  return (w < 32 || h < 32);
+}
+
+
 /* Grabs an image (from a file, video, or the desktop) and renders it on
    the Drawable.  If `file' is specified, always use that file.  Otherwise,
    select randomly, based on the other arguments.
 /* Grabs an image (from a file, video, or the desktop) and renders it on
    the Drawable.  If `file' is specified, always use that file.  Otherwise,
    select randomly, based on the other arguments.
@@ -1525,6 +1538,15 @@ get_image (Screen *screen,
       image_p = False;
     }
 
       image_p = False;
     }
 
+  /* If the target drawable is really small, no good can come of that.
+     Always do colorbars in that case.
+   */
+  if (drawable_miniscule_p (dpy, drawable))
+    {
+      desk_p  = False;
+      video_p = False;
+      image_p = False;
+    }
 
 # ifndef _VROOT_H_
 #  error Error!  This file definitely needs vroot.h!
 
 # ifndef _VROOT_H_
 #  error Error!  This file definitely needs vroot.h!
index 2586a89ddf0a83bed6c462f379c31b997fcf008d..e6a00226863743cca1e138b8051957ebafa38de7 100755 (executable)
@@ -29,7 +29,7 @@ use Text::Wrap qw(wrap);
 use bytes;
 
 my $progname = $0; $progname =~ s@.*/@@g;
 use bytes;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.13 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.14 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 my $http_proxy = undef;
 
 my $verbose = 0;
 my $http_proxy = undef;
@@ -374,6 +374,10 @@ sub output() {
       system ("cat", "/etc/redhat-release");
     }
 
       system ("cat", "/etc/redhat-release");
     }
 
+    if (-f "/etc/release") {               # "Solaris 10 3/05 s10_74L2a X86"
+      safe_system ("head", "-1", "/etc/release");
+    }
+
     if (-f "/usr/sbin/system_profiler") {   # "Mac OS X 10.4.5 (8H14)"
       my $sp =                             # "iMac G5"
         `/usr/sbin/system_profiler SPSoftwareDataType SPHardwareDataType`;
     if (-f "/usr/sbin/system_profiler") {   # "Mac OS X 10.4.5 (8H14)"
       my $sp =                             # "iMac G5"
         `/usr/sbin/system_profiler SPSoftwareDataType SPHardwareDataType`;
index d5d0b5bed0e2d135194257b41a914656c4009d4d..22afca50ee45df32f72ccbe20f0b2297b0f722b0 100644 (file)
@@ -185,8 +185,7 @@ XDBE_OBJS   = $(UTILS_BIN)/xdbe.o
 
 HDRS           = screenhack.h screenhackI.h xlockmore.h xlockmoreI.h \
                  automata.h bubbles.h bumps.h xpm-pixmap.h apple2.h \
 
 HDRS           = screenhack.h screenhackI.h xlockmore.h xlockmoreI.h \
                  automata.h bubbles.h bumps.h xpm-pixmap.h apple2.h \
-                 analogtv.h pacman.h pacman_ai.h pacman_level.h \
-                 change_locale.h
+                 analogtv.h pacman.h pacman_ai.h pacman_level.h
 MEN            = anemone.man apollonian.man attraction.man \
                  blaster.man blitspin.man bouboule.man braid.man bsod.man \
                  bubbles.man bumps.man ccurve.man compass.man coral.man \
 MEN            = anemone.man apollonian.man attraction.man \
                  blaster.man blitspin.man bouboule.man braid.man bsod.man \
                  bubbles.man bumps.man ccurve.man compass.man coral.man \
@@ -1442,7 +1441,6 @@ rotor.o: $(srcdir)/xlockmore.h
 rotzoomer.o: ../config.h
 rotzoomer.o: $(srcdir)/screenhackI.h
 rotzoomer.o: $(srcdir)/screenhack.h
 rotzoomer.o: ../config.h
 rotzoomer.o: $(srcdir)/screenhackI.h
 rotzoomer.o: $(srcdir)/screenhack.h
-screenhack.o: $(srcdir)/change_locale.h
 screenhack.o: ../config.h
 screenhack.o: $(srcdir)/screenhackI.h
 shadebobs.o: ../config.h
 screenhack.o: ../config.h
 screenhack.o: $(srcdir)/screenhackI.h
 shadebobs.o: ../config.h
index 28fef9aa446cfc77a3ea5e890ecbb299f8495004..175ecb887827d90b4cc8fc172dc82d3e78203f01 100644 (file)
@@ -27,6 +27,7 @@
 #ifndef HAVE_COCOA
 # define XK_MISCELLANY
 # include <X11/keysymdef.h>
 #ifndef HAVE_COCOA
 # define XK_MISCELLANY
 # include <X11/keysymdef.h>
+# include <X11/Xlib.h>
 # include <X11/Xutil.h>
 # include <X11/Intrinsic.h>
 #endif
 # include <X11/Xutil.h>
 # include <X11/Intrinsic.h>
 #endif
index 0f0e5e73a8f01ca7287dd16c57152a51c6acef8a..8e25d244f1d11aa3544de2c9a4cb7486be218637 100644 (file)
@@ -729,12 +729,17 @@ attraction_draw (Display *dpy, Window window, void *closure)
          if(st->cbounce_p)  /* with correct bouncing */
            {
               /* so long as it's out of range, keep bouncing */
          if(st->cbounce_p)  /* with correct bouncing */
            {
               /* so long as it's out of range, keep bouncing */
+             /* limit the maximum number to bounce to 4.*/
+             int bounce_allowed = 4;
        
        
-              while( (st->balls[i].x >= (st->xlim - st->balls[i].size)) ||
+              while( bounce_allowed && (
+                    (st->balls[i].x >= (st->xlim - st->balls[i].size)) ||
                      (st->balls[i].y >= (st->ylim - st->balls[i].size)) ||
                      (st->balls[i].x <= 0) ||
                      (st->balls[i].y <= 0) )
                      (st->balls[i].y >= (st->ylim - st->balls[i].size)) ||
                      (st->balls[i].x <= 0) ||
                      (st->balls[i].y <= 0) )
+                    )
                 {
                 {
+                  bounce_allowed--;
                   if (st->balls[i].x >= (st->xlim - st->balls[i].size))
                     {
                       st->balls[i].x = (2*(st->xlim - st->balls[i].size) - st->balls[i].x);
                   if (st->balls[i].x >= (st->xlim - st->balls[i].size))
                     {
                       st->balls[i].x = (2*(st->xlim - st->balls[i].size) - st->balls[i].x);
index c9f00bb40b9c12ddfc6412d98af59ca3217bd335..2f510f5a9b5a5b15487a21ddb4e457a5e953b223 100644 (file)
@@ -346,7 +346,7 @@ static void InitBumpMap_2(Display *dpy, SBumps *pBumps)
        while( nSoften-- )
                softenMultiplier *= 1.0f + ( 1.0f / 3.0f );     /* Softening takes the max height down, so scale up to compensate. */
        maxHeight = pBumps->SpotLight.nLightRadius * softenMultiplier;
        while( nSoften-- )
                softenMultiplier *= 1.0f + ( 1.0f / 3.0f );     /* Softening takes the max height down, so scale up to compensate. */
        maxHeight = pBumps->SpotLight.nLightRadius * softenMultiplier;
-       nAverager = ( 3 * 0xFFFF ) / maxHeight;
+       nAverager = maxHeight ? ( 3 * 0xFFFF ) / maxHeight : 0;
 
        pBump = pBumps->aBumpMap;
        if( bInvert )   /* Funny, it's actually the 'else' that inverts the bump map... */
 
        pBump = pBumps->aBumpMap;
        if( bInvert )   /* Funny, it's actually the 'else' that inverts the bump map... */
@@ -361,7 +361,7 @@ static void InitBumpMap_2(Display *dpy, SBumps *pBumps)
 
                        pColor = pBumps->xColors;
                        for( iWidth=pBumps->iWinWidth; iWidth; --iWidth, ++pColor, ++pBump )
 
                        pColor = pBumps->xColors;
                        for( iWidth=pBumps->iWinWidth; iWidth; --iWidth, ++pColor, ++pBump )
-                               *pBump = ( ( pColor->red + pColor->green + pColor->blue ) / nAverager );
+                         *pBump = ( nAverager ? ( pColor->red + pColor->green + pColor->blue ) / nAverager : 0 );
                }
        }
        else
                }
        }
        else
@@ -376,7 +376,7 @@ static void InitBumpMap_2(Display *dpy, SBumps *pBumps)
        
                        pColor = pBumps->xColors;
                        for( iWidth=pBumps->iWinWidth; iWidth; --iWidth, ++pColor, ++pBump )
        
                        pColor = pBumps->xColors;
                        for( iWidth=pBumps->iWinWidth; iWidth; --iWidth, ++pColor, ++pBump )
-                               *pBump = ( maxHeight - ( ( pColor->red + pColor->green + pColor->blue ) / nAverager ) );
+                         *pBump = ( maxHeight - ( nAverager ? ( pColor->red + pColor->green + pColor->blue ) / nAverager : 0 ) );
                }
        }
 
                }
        }
 
diff --git a/hacks/change_locale.h b/hacks/change_locale.h
deleted file mode 100644 (file)
index 94e7eb1..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _CHANGE_LOCALE_H
-#define _CHANGE_LOCALE_H
-
-/* The xscreensaver hacks deal badly with these locales, since the
-   existing code by and large can't handle multi-byte characters.
-   So, if the current locale is set to one beginning with any of
-   these prefixes, we set the locale to "C" instead.
- */
-
-static const char * const change_locale[] = { 
-  "ja_JP",
-  "ko",
-  "zh",
-  NULL
-};
-
-#endif
index 982f8357cf2d25661bfcd753088e29f90a6a6992..77597ca2ca0736c1e9c4450dda820e3731885194 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 5.00b2b2
-                               23-May-2006
+                              version 5.01b2
+                               18-Sep-2006
 
                      http://www.jwz.org/xscreensaver/
 
 
                      http://www.jwz.org/xscreensaver/
 
index b580c17c6af30132175e4b97c6248c37a61cfd7e..8a1ded1f9706e961aad1e2bbae62af0bc4fa4871 100644 (file)
@@ -17,7 +17,7 @@
             _label="Number of Colors" _low-label="Two" _high-label="Many"
             low="1" high="255" default="64"/>
 
             _label="Number of Colors" _low-label="Two" _high-label="Many"
             low="1" high="255" default="64"/>
 
-  <boolean id="3d" _label="Do Red/Blue 3D seperation" arg-set="-3d"/>
+  <boolean id="3d" _label="Do Red/Blue 3D separation" arg-set="-3d"/>
 
   <_description>
 This draws what looks like a spinning, deforming balloon with
 
   <_description>
 This draws what looks like a spinning, deforming balloon with
index 6e4a88854e8042b650f53373e0e9bdb93e35b677..480348d9350330cc97144281dc3cdb1b557b1564 100644 (file)
 
   <number id="explosion" type="slider" arg="-explosion %"
           _label="Explosion Force" _low-label="Popcorn" _high-label="Nuke"
 
   <number id="explosion" type="slider" arg="-explosion %"
           _label="Explosion Force" _low-label="Popcorn" _high-label="Nuke"
-          low="1.0" high="50.0" default="25.0"/>
+          low="1.0" high="50.0" default="15.0"/>
+
+  <number id="decay" type="slider" arg="-decay %"
+          _label="Explosion Decay" _low-label="Linger" _high-label="Pop!"
+          low="0.0" high="1.0" default="0.1"/>
 
   <hgroup>
    <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
 
   <hgroup>
    <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
index 0a5cdeee6261637866e00b6b0037b04e40d9b6a4..150d0cb190265c965d78f78d065d4997392655ea 100644 (file)
@@ -4,17 +4,31 @@
 
   <command arg="-root"/>
 
 
   <command arg="-root"/>
 
+  <number id="size-x" type="spinbutton" arg="-size-x %"
+          _label="Width" low="3" high="20" default="9"/>
+  <number id="size-y" type="spinbutton" arg="-size-y %"
+          _label="Length" low="3" high="20" default="9"/>
+
   <number id="delay" type="slider" arg="-delay %"
           _label="Speed" _low-label="Slow" _high-label="Fast"
           low="0" high="50000" default="20000"
           convert="invert"/>
 
   <number id="delay" type="slider" arg="-delay %"
           _label="Speed" _low-label="Slow" _high-label="Fast"
           low="0" high="50000" default="20000"
           convert="invert"/>
 
+  <number id="spin" type="slider" arg="-spin %"
+          _label="Speed" _low-label="Stopped" _high-label="Whirlwind"
+          low="0" high="1.0" default="0.1"
+          convert="invert"/>
+
+  <select id="mode">
+    <option id="tiles"  _label="Tiles"/>
+    <option id="sticks" _label="Sticks" arg-set="-mode sticks"/>
+  </select>
   <boolean id="wire"    _label="Wireframe"              arg-set="-wireframe"/>
   <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
 
   <_description>
 Draws a grid of 3D colored tiles that change positions with each other.  
 
   <boolean id="wire"    _label="Wireframe"              arg-set="-wireframe"/>
   <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
 
   <_description>
 Draws a grid of 3D colored tiles that change positions with each other.  
 
-Written by Kevin Ogden; 2003.
+Written by Kevin Ogden and Sergio Gutierrez; 2003.
   </_description>
 </screensaver>
   </_description>
 </screensaver>
index a6fbfa139fde3c3f8bc7c9f4fc210953f72e6edc..ab87fa934c0c25183c559777ad870da2b21f7549 100644 (file)
@@ -42,7 +42,7 @@ change shape as they wander around the screen, and they are translucent,
 so you can see the lower blobs through the higher ones, and when one
 passes over another, their colors merge.  I got the idea for this from
 a cool mouse pad I have, which achieves the same kind of effect in real
 so you can see the lower blobs through the higher ones, and when one
 passes over another, their colors merge.  I got the idea for this from
 a cool mouse pad I have, which achieves the same kind of effect in real
-life by having several layers plastic with colored oil between them.
+life by having several layers of plastic with colored oil between them.
 
 Written by Jamie Zawinski; 1997.
   </_description>
 
 Written by Jamie Zawinski; 1997.
   </_description>
index 9fd6a40269d25d1809c1582e21628b927ef0327e..85142e12f8d3d6df7bfc70a7d33c795501d52454 100644 (file)
@@ -16,7 +16,7 @@
           low="1" high="7" default="7"/>
 
   <number id="delay2" type="slider" arg="-delay2 %"
           low="1" high="7" default="7"/>
 
   <number id="delay2" type="slider" arg="-delay2 %"
-          _label="Speed" _low-label="Slow" _high-label="Fast"
+          _label="Speed" _low-label="Fast" _high-label="Slow"
           low="0" high="1000000" default="20000"/>
 
   <number id="delay" type="slider" arg="-delay %"
           low="0" high="1000000" default="20000"/>
 
   <number id="delay" type="slider" arg="-delay %"
index cf60ffe1a43f53d25b139d7cdc7b618d7c2f6b6a..10455a6b3e8f6e7ff3087c5f88e9f34e8cd64e6f 100644 (file)
           low="0.0" high="1.0" default="0.2"/>
 
   <number id="minlifespeed" type="slider" arg="-minlifespeed %"
           low="0.0" high="1.0" default="0.2"/>
 
   <number id="minlifespeed" type="slider" arg="-minlifespeed %"
-          _label="Minium Rate of Growth" _low-label="Slow" _high-label="Fast"
+          _label="Minimum Rate of Growth" _low-label="Slow" _high-label="Fast"
           low="0.0" high="1.0" default="0.04"/>
 
     </vgroup>
     <vgroup>
 
   <number id="maxlifespeed" type="slider" arg="-maxlifespeed %"
           low="0.0" high="1.0" default="0.04"/>
 
     </vgroup>
     <vgroup>
 
   <number id="maxlifespeed" type="slider" arg="-maxlifespeed %"
-          _label="Maxium Rate of Growth" _low-label="Slow" _high-label="Fast"
+          _label="Maximum Rate of Growth" _low-label="Slow" _high-label="Fast"
           low="0.0" high="1.0" default="0.13"/>
 
   <number id="mindeathspeed" type="slider" arg="-mindeathspeed %"
           low="0.0" high="1.0" default="0.13"/>
 
   <number id="mindeathspeed" type="slider" arg="-mindeathspeed %"
-          _label="Minium Rate of Death" _low-label="Slow" _high-label="Fast"
+          _label="Minimum Rate of Death" _low-label="Slow" _high-label="Fast"
           low="0.0" high="1.0" default="0.42"/>
 
   <number id="maxdeathspeed" type="slider" arg="-maxdeathspeed %"
           low="0.0" high="1.0" default="0.42"/>
 
   <number id="maxdeathspeed" type="slider" arg="-maxdeathspeed %"
-          _label="Maxium Rate of Death" _low-label="Slow" _high-label="Fast"
+          _label="Maximum Rate of Death" _low-label="Slow" _high-label="Fast"
           low="0.0" high="1.0" default="0.46"/>
 
   <number id="minlifespan" type="slider" arg="-minlifespan %"
           low="0.0" high="1.0" default="0.46"/>
 
   <number id="minlifespan" type="slider" arg="-minlifespan %"
-          _label="Minium Lifespan" _low-label="Short" _high-label="Long"
+          _label="Minimum Lifespan" _low-label="Short" _high-label="Long"
           low="0" high="3000" default="500"/>
 
   <number id="maxlifespan" type="slider" arg="-maxlifespan %"
           low="0" high="3000" default="500"/>
 
   <number id="maxlifespan" type="slider" arg="-maxlifespan %"
-          _label="Maxium Lifespan" _low-label="Short" _high-label="Long"
+          _label="Maximum Lifespan" _low-label="Short" _high-label="Long"
           low="0" high="3000" default="1500"/>
 
     </vgroup>
           low="0" high="3000" default="1500"/>
 
     </vgroup>
index 4484a95b4a7f85ac03daf3a67f934fca2c5cd74c..746da2bc73d6e52e60f97cbe365dbe04ca120b90 100644 (file)
@@ -26,7 +26,7 @@
 
   <hgroup>
    <number id="reaction" type="spinbutton" arg="-reaction %"
 
   <hgroup>
    <number id="reaction" type="spinbutton" arg="-reaction %"
-           _label="Reaction/Difusion" low="-1" high="2" default="-1"/>
+           _label="Reaction/Diffusion" low="-1" high="2" default="-1"/>
    <number id="diffusion" type="spinbutton" arg="-diffusion %"
            _label="/" low="-1" high="2" default="-1"/>
   </hgroup>
    <number id="diffusion" type="spinbutton" arg="-diffusion %"
            _label="/" low="-1" high="2" default="-1"/>
   </hgroup>
index 4484a95b4a7f85ac03daf3a67f934fca2c5cd74c..746da2bc73d6e52e60f97cbe365dbe04ca120b90 100644 (file)
@@ -26,7 +26,7 @@
 
   <hgroup>
    <number id="reaction" type="spinbutton" arg="-reaction %"
 
   <hgroup>
    <number id="reaction" type="spinbutton" arg="-reaction %"
-           _label="Reaction/Difusion" low="-1" high="2" default="-1"/>
+           _label="Reaction/Diffusion" low="-1" high="2" default="-1"/>
    <number id="diffusion" type="spinbutton" arg="-diffusion %"
            _label="/" low="-1" high="2" default="-1"/>
   </hgroup>
    <number id="diffusion" type="spinbutton" arg="-diffusion %"
            _label="/" low="-1" high="2" default="-1"/>
   </hgroup>
index b34b73994998b44a75e89c89c622c55ef48eaffe..3b2229126f841f9fd8c9fb225117f428f4051df0 100644 (file)
@@ -20,7 +20,7 @@
     <boolean id="rotate" _label="Rotation" arg-unset="-no-rotate"/>
     <boolean id="rotate" _label="Steering" arg-unset="-no-move"/>
   </hgroup>
     <boolean id="rotate" _label="Rotation" arg-unset="-no-rotate"/>
     <boolean id="rotate" _label="Steering" arg-unset="-no-move"/>
   </hgroup>
-  <boolean id="3d" _label="Do Red/Blue 3D seperation" arg-set="-3d"/>
+  <boolean id="3d" _label="Do Red/Blue 3D separation" arg-set="-3d"/>
 
   <number id="ncolors" type="slider" arg="-colors %"
             _label="Number of Colors" _low-label="Two" _high-label="Many"
 
   <number id="ncolors" type="slider" arg="-colors %"
             _label="Number of Colors" _low-label="Two" _high-label="Many"
index 7ed50121032f0de59d46ad0c9ece67d05abf7c7d..19cc15ae135fc059f649387d702e8526ead4c558 100644 (file)
@@ -11,7 +11,7 @@
 
  <number id="delay2" type="slider" arg="-delay2 %"
          _label="Pause" _low-label="Short" _high-label="Long"
 
  <number id="delay2" type="slider" arg="-delay2 %"
          _label="Pause" _low-label="Short" _high-label="Long"
-         low="0" high="1000000" default="2000000"/>
+         low="0" high="2000000" default="1000000"/>
 
   <number id="increment" type="slider" arg="-increment %"
           _label="Slide Speed" _low-label="Slow" _high-label="Fast"
 
   <number id="increment" type="slider" arg="-increment %"
           _label="Slide Speed" _low-label="Slow" _high-label="Fast"
index 285377125480d9af3e631f2f3e4cae144474e4c4..f03492cd26f7fc2c2609b4977cb1d8400ae4a4b7 100644 (file)
@@ -25,9 +25,9 @@
   <_description>
 This program throws some random bits on the screen, then sucks them
 through a jet engine and spews them out the other side.  To avoid
   <_description>
 This program throws some random bits on the screen, then sucks them
 through a jet engine and spews them out the other side.  To avoid
-turning the image completely to mush, every now and then it will and
-then it interjects some splashes of color into the scene, or go into
-a spin cycle, or stretch the image like taffy.
+turning the image completely to mush, every now and then it will it
+interject some splashes of color into the scene, or go into a spin
+cycle, or stretch the image like taffy.
 
 Written by Scott Draves and Jamie Zawinski; 1997.
   </_description>
 
 Written by Scott Draves and Jamie Zawinski; 1997.
   </_description>
index a89f3447dbf97e30558ec39fe264ae8e2e3152e2..a3f03fd2852d3a09d3ddd8dcb6baecbb25108469 100644 (file)
@@ -42,7 +42,6 @@
   <!-- #### -psychedelic -->
 
   <boolean id="wire"    _label="Wireframe"              arg-set="-wireframe"/>
   <!-- #### -psychedelic -->
 
   <boolean id="wire"    _label="Wireframe"              arg-set="-wireframe"/>
-  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
 
   <_description>
 Simulates speeding down a rocky mineshaft, or a funky dancing worm.
 
   <_description>
 Simulates speeding down a rocky mineshaft, or a funky dancing worm.
index 14fa289d41ecef86886330623b641d49ca448793..2e4c92fdbf1a8f5771b4a6590e3b004c0e131bc8 100644 (file)
@@ -6,14 +6,15 @@
 
   <number id="count" type="slider" arg="-count %"
            _label="Sproingies" _low-label="One" _high-label="Lots"
 
   <number id="count" type="slider" arg="-count %"
            _label="Sproingies" _low-label="One" _high-label="Lots"
-          low="1" high="30" default="5"/>
+          low="1" high="30" default="8"/>
 
   <number id="delay" type="slider" arg="-delay %"
           _label="Speed" _low-label="Slow" _high-label="Fast"
 
   <number id="delay" type="slider" arg="-delay %"
           _label="Speed" _low-label="Slow" _high-label="Fast"
-          low="0" high="40000" default="25000"
+          low="0" high="40000" default="30000"
           convert="invert"/>
 
   <hgroup>
           convert="invert"/>
 
   <hgroup>
+   <boolean id="nofall" _label="Fall Off Edge" arg-set="-fall"/>
    <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
    <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
   </hgroup>
    <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
    <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
   </hgroup>
index 4ccd491ac5eed94a19f6935145fff3159091cf85..f1ce9896a9c264f4fce007ab9c5361e65784a8ae 100644 (file)
@@ -17,7 +17,7 @@
 XaoS generates fast fly-through animations of the Mandelbrot and other
 fractal sets.  This is not included with the XScreenSaver package, but
 if you don't have it already, you can find it at
 XaoS generates fast fly-through animations of the Mandelbrot and other
 fractal sets.  This is not included with the XScreenSaver package, but
 if you don't have it already, you can find it at
-&lt;http://xaos.theory.org/&gt;.
+&lt;http://wmi.math.u-szeged.hu/~kovzol/xaos/doku.php&gt;.
 
 Written by Thomas Marsh and Jan Hubicka.
   </_description>
 
 Written by Thomas Marsh and Jan Hubicka.
   </_description>
index b69f4361c2b34afd5c6f4079082d796e61fa5b00..9603455e42cef7866fb7f853beba7e5babf663eb 100644 (file)
@@ -100,12 +100,15 @@ init_coral(struct state *st)
     st->colorsloth = st->nwalkers*2/st->ncolors;
     XSetForeground(st->dpy, st->draw_gc, st->colors[st->colorindex].pixel);
 
     st->colorsloth = st->nwalkers*2/st->ncolors;
     XSetForeground(st->dpy, st->draw_gc, st->colors[st->colorindex].pixel);
 
+    if ((st->width <= 2) || (st->height <= 2)) return;
+
     for( i = 0; i < seeds; i++ ) {
         int x, y;
     for( i = 0; i < seeds; i++ ) {
         int x, y;
+       int max_repeat = 10;
         do {
           x = 1 + random() % (st->width - 2);
           y = 1 + random() % (st->height - 2);
         do {
           x = 1 + random() % (st->width - 2);
           y = 1 + random() % (st->height - 2);
-        } while( getdot(x, y) );
+        } while( getdot(x, y) && max_repeat--);
 
         setdot((x-1), (y-1)); setdot(x, (y-1)); setdot((x+1), (y-1));
        setdot((x-1),  y   ); setdot(x,  y   ); setdot((x+1),  y   );
 
         setdot((x-1), (y-1)); setdot(x, (y-1)); setdot((x+1), (y-1));
        setdot((x-1),  y   ); setdot(x,  y   ); setdot((x+1),  y   );
@@ -169,7 +172,8 @@ coral(struct state *st)
       st->nwalkers--;
       st->walkers[i].x = st->walkers[st->nwalkers].x;
       st->walkers[i].y = st->walkers[st->nwalkers].y;
       st->nwalkers--;
       st->walkers[i].x = st->walkers[st->nwalkers].x;
       st->walkers[i].y = st->walkers[st->nwalkers].y;
-      if( 0 == (st->nwalkers%st->colorsloth) ) {
+      if( 0 == 
+         ((st->colorsloth ? st->nwalkers%st->colorsloth : 0)) ) {
         color = True;
       }
                  
         color = True;
       }
                  
index 5669304b374df58b38c1bb18d146c3f88d4b5f45..f151925cc19fca86327ad141cb7695243ace400a 100644 (file)
@@ -289,7 +289,8 @@ critical_init (Display *dpy, Window window)
      screens. */
   model_w = 80;
   st->settings.cell_size = st->wattr.width / model_w;
      screens. */
   model_w = 80;
   st->settings.cell_size = st->wattr.width / model_w;
-  model_h = st->wattr.height / st->settings.cell_size;
+  model_h = st->settings.cell_size ?
+    st->wattr.height / st->settings.cell_size : 0;
 
   /* Construct the initial model state. */
 
 
   /* Construct the initial model state. */
 
index be090c2efc0a8fa076da55596a8e3116d9468a5d..5ceb91f6f2a2f29d2b1a862c8fe2703fe3d14f9e 100644 (file)
@@ -92,6 +92,9 @@ static const char sccsid[] = "@(#)crystal.c   4.12 98/09/10 xlockmore";
 #define DEF_MAXSIZE "False"
 #define DEF_CYCLE "True"
 
 #define DEF_MAXSIZE "False"
 #define DEF_CYCLE "True"
 
+#undef NRAND
+#define NRAND(n)           ( (n) ? (int) (LRAND() % (n)) : 0)
+
 #define min(a,b) ((a) <= (b) ? (a) : (b))
 
 static int  nx, ny;
 #define min(a,b) ((a) <= (b) ? (a) : (b))
 
 static int  nx, ny;
@@ -980,9 +983,12 @@ init_crystal(ModeInfo * mi)
                        cryst->offset_w = (int) (cryst->b * 0.5);
                }
        } else {
                        cryst->offset_w = (int) (cryst->b * 0.5);
                }
        } else {
+               int max_repeat = 10;
                cryst->offset_w = -1;
                cryst->offset_w = -1;
-               while (cryst->offset_w < 4 || (int) (cryst->offset_w - cryst->b *
-                                   sin((cryst->gamma - 90) * PI_RAD)) < 4) {
+               while (max_repeat-- && 
+                 (cryst->offset_w < 4 || (int) (cryst->offset_w - cryst->b *
+                                   sin((cryst->gamma - 90) * PI_RAD)) < 4)
+                          ) {
                        cryst->b = NRAND((int) (cryst->win_height / (cos((cryst->gamma - 90) *
                                            PI_RAD))) - cell_min) + cell_min;
                        if (cryst->planegroup > 8)
                        cryst->b = NRAND((int) (cryst->win_height / (cos((cryst->gamma - 90) *
                                            PI_RAD))) - cell_min) + cell_min;
                        if (cryst->planegroup > 8)
index 855d80a5e45dc819445d4219d838619fd7d18602..775e629282f9620aa8442fd2fddb2954e46321f7 100644 (file)
@@ -186,7 +186,7 @@ decayscreen_draw (Display *dpy, Window window, void *closure)
      default: abort();
     }
 
      default: abort();
     }
 
-#define nrnd(x) (random() % (x))
+#define nrnd(x) ((x) ? random() % (x) : x)
 
     if (st->mode == MELT || st->mode == STRETCH) {
       left = nrnd(st->sizex/2);
 
     if (st->mode == MELT || st->mode == STRETCH) {
       left = nrnd(st->sizex/2);
index 2084cbf27bc77cfd150c57f5d44f2c806e4cbab1..14809b9f7d80095788707c93001ed5b08b8da5eb 100644 (file)
@@ -116,6 +116,7 @@ static void Execute( struct state *st )
          else if (st->particles[i].xpos >= st->iWinWidth - 2)
            {
              st->particles[i].xpos = st->iWinWidth - 2;
          else if (st->particles[i].xpos >= st->iWinWidth - 2)
            {
              st->particles[i].xpos = st->iWinWidth - 2;
+             if (st->particles[i].xpos < 1) st->particles[i].xpos = 1;
              st->particles[i].xdir = -st->particles[i].xdir + 4;
              st->particles[i].colorindex = st->iColorCount;
            }
              st->particles[i].xdir = -st->particles[i].xdir + 4;
              st->particles[i].colorindex = st->iColorCount;
            }
@@ -129,9 +130,11 @@ static void Execute( struct state *st )
          else if (st->particles[i].ypos >= st->iWinHeight - 3)
            {
              st->particles[i].ypos = st->iWinHeight- 3;
          else if (st->particles[i].ypos >= st->iWinHeight - 3)
            {
              st->particles[i].ypos = st->iWinHeight- 3;
+             if (st->particles[i].ypos < 1) st->particles[i].ypos = 1;
              st->particles[i].ydir = (-st->particles[i].ydir >> 2) - (random() % 2);
              st->particles[i].colorindex = st->iColorCount;
            }
              st->particles[i].ydir = (-st->particles[i].ydir >> 2) - (random() % 2);
              st->particles[i].colorindex = st->iColorCount;
            }
+
          
          /* st->gravity kicks in */
          st->particles[i].ydir += st->gravity;
          
          /* st->gravity kicks in */
          st->particles[i].ydir += st->gravity;
@@ -140,6 +143,7 @@ static void Execute( struct state *st )
          st->particles[i].colorindex--;
          
          /* draw particle */
          st->particles[i].colorindex--;
          
          /* draw particle */
+         if (st->iWinHeight <= 2 || st->iWinWidth <= 2) continue;
          st->fire[st->particles[i].ypos][st->particles[i].xpos] = st->particles[i].colorindex;
          st->fire[st->particles[i].ypos][st->particles[i].xpos - 1] = st->particles[i].colorindex;
          st->fire[st->particles[i].ypos + 1][st->particles[i].xpos] = st->particles[i].colorindex;
          st->fire[st->particles[i].ypos][st->particles[i].xpos] = st->particles[i].colorindex;
          st->fire[st->particles[i].ypos][st->particles[i].xpos - 1] = st->particles[i].colorindex;
          st->fire[st->particles[i].ypos + 1][st->particles[i].xpos] = st->particles[i].colorindex;
index 3271212b4648f17336c6778e1b4bbfe16ebdd408..33f37178a569ef881a9714f79a4fff89a755bd27 100644 (file)
@@ -42,7 +42,7 @@ void mmx_blur(char *a, int b, int c, int d);
 void mmx_glow(char *a, int b, int c, int d, char *e);
 #endif
 
 void mmx_glow(char *a, int b, int c, int d, char *e);
 #endif
 
-#define rnd(x) ((int)(random() % (x)))
+#define rnd(x) ((x) ? (int)(random() % (x)) : 0)
 
 typedef struct {
   unsigned int burn;
 
 typedef struct {
   unsigned int burn;
@@ -161,6 +161,7 @@ static void glow(struct state *st)
   unsigned int w = st->width;
   unsigned int h = st->height;
   unsigned char *pa, *pb, *pm, *po;
   unsigned int w = st->width;
   unsigned int h = st->height;
   unsigned char *pa, *pb, *pm, *po;
+  if (!st->xim) return;
   pm = st->palaka1;
   po = st->palaka2;
   for(n=0;n<w*4;n++) 
   pm = st->palaka1;
   po = st->palaka2;
   for(n=0;n<w*4;n++) 
@@ -168,7 +169,7 @@ static void glow(struct state *st)
   pm+=n; po+=n; h-=2; 
   pa = pm-(w*4);
   pb = pm+(w*4);
   pm+=n; po+=n; h-=2; 
   pa = pm-(w*4);
   pb = pm+(w*4);
-  for(n=4;n<w*h*4-4;n++){
+  for(n=4;(signed) n< (signed) (w*h*4-4); n++){
   q    = pm[n-4] + (pm[n]*8) + pm[n+4] + 
          pa[n-4] + pa[n] + pa[n+4] + 
          pb[n-4] + pb[n] + pb[n+4];
   q    = pm[n-4] + (pm[n]*8) + pm[n+4] + 
          pa[n-4] + pa[n] + pa[n+4] + 
          pb[n-4] + pb[n] + pb[n+4];
@@ -272,6 +273,7 @@ static void resize(struct state *st)
   st->palaka2 = NULL;
   st->xim = XCreateImage(st->dpy, xwa.visual, xwa.depth, ZPixmap, 0, 0,
                     st->width, st->height, 8, 0);
   st->palaka2 = NULL;
   st->xim = XCreateImage(st->dpy, xwa.visual, xwa.depth, ZPixmap, 0, 0,
                     st->width, st->height, 8, 0);
+  if (!st->xim) return;
   st->palaka1 = (unsigned char *) calloc(st->xim->height+1,st->xim->width*4) + 8;
   if(st->flash_on|st->glow_on)
   st->palaka2 = (unsigned char *) calloc(st->xim->height+1,st->xim->width*4) + 8;
   st->palaka1 = (unsigned char *) calloc(st->xim->height+1,st->xim->width*4) + 8;
   if(st->flash_on|st->glow_on)
   st->palaka2 = (unsigned char *) calloc(st->xim->height+1,st->xim->width*4) + 8;
@@ -286,6 +288,7 @@ static void put_image(struct state *st)
 {
   int x,y,i,j;
   unsigned char r, g, b;
 {
   int x,y,i,j;
   unsigned char r, g, b;
+  if (!st->xim) return;
   i = 0;
   j = 0;
   if (st->depth==16) {
   i = 0;
   j = 0;
   if (st->depth==16) {
index 885fa898b6fcc32d5e945b3e1a504e1f15b3485a..c74e921de4698e9ac3d9b07055bde42b24e016cd 100644 (file)
@@ -192,6 +192,10 @@ make_flag_bits(ModeInfo *mi)
   char *bitmap_name = get_string_resource (dpy, "bitmap", "Bitmap");
   char *text = get_string_resource (dpy, "text", "Text");
 
   char *bitmap_name = get_string_resource (dpy, "bitmap", "Bitmap");
   char *text = get_string_resource (dpy, "text", "Text");
 
+#ifdef HAVE_COCOA
+  bitmap_name = 0;  /* #### always use default */
+#endif
+
   /* If neither a bitmap nor text are specified, randomly select either
         the builtin bitmap or builtin text. */
   if ((!bitmap_name || !*bitmap_name) && (!text || !*text))
   /* If neither a bitmap nor text are specified, randomly select either
         the builtin bitmap or builtin text. */
   if ((!bitmap_name || !*bitmap_name) && (!text || !*text))
index efa3af3513b86d205d9032188f09066ff194cf07..191985098979969dca514f2299fd0d871c768de1 100644 (file)
@@ -1064,6 +1064,7 @@ toaster_slots.o: $(srcdir)/gllist.h
 toaster_wing.o: $(srcdir)/gllist.h
 toast.o: $(srcdir)/gllist.h
 topblock.o: ../../config.h
 toaster_wing.o: $(srcdir)/gllist.h
 toast.o: $(srcdir)/gllist.h
 topblock.o: ../../config.h
+topblock.o: $(srcdir)/gltrackball.h
 topblock.o: $(srcdir)/sphere.h
 topblock.o: $(srcdir)/topblock.h
 trackball.o: ../../config.h
 topblock.o: $(srcdir)/sphere.h
 topblock.o: $(srcdir)/topblock.h
 trackball.o: ../../config.h
index 2bff1ec01219afb893d79f38cccdfb0ba3129a74..ef7e051f792cf7224281aa4ffa6fb6dba14f3e07 100644 (file)
@@ -53,7 +53,8 @@ static const char sccsid[] = "@(#)boxed.c     0.9 01/09/26 xlockmore";
 # define DEF_SPEED      "0.5"
 # define DEF_BALLS     "25"
 # define DEF_BALLSIZE   "2.0"
 # define DEF_SPEED      "0.5"
 # define DEF_BALLS     "25"
 # define DEF_BALLSIZE   "2.0"
-# define DEF_EXPLOSION "25.0f"
+# define DEF_EXPLOSION "15.0"
+# define DEF_DECAY     "0.1"
 
 #undef countof 
 #define countof(x) (int)(sizeof((x))/sizeof((*x)))
 
 #undef countof 
 #define countof(x) (int)(sizeof((x))/sizeof((*x)))
@@ -64,6 +65,7 @@ static GLfloat speed;  /* jwz -- overall speed factor applied to all motion */
 static int cfg_balls;
 static GLfloat cfg_ballsize;
 static GLfloat cfg_explosion;
 static int cfg_balls;
 static GLfloat cfg_ballsize;
 static GLfloat cfg_explosion;
+static GLfloat cfg_decay;
 
 
 static XrmOptionDescRec opts[] = {
 
 
 static XrmOptionDescRec opts[] = {
@@ -71,13 +73,15 @@ static XrmOptionDescRec opts[] = {
     {"-balls", ".boxed.balls", XrmoptionSepArg, 0},
     {"-ballsize", ".boxed.ballsize", XrmoptionSepArg, 0},
     {"-explosion", ".boxed.explosion", XrmoptionSepArg, 0},
     {"-balls", ".boxed.balls", XrmoptionSepArg, 0},
     {"-ballsize", ".boxed.ballsize", XrmoptionSepArg, 0},
     {"-explosion", ".boxed.explosion", XrmoptionSepArg, 0},
+    {"-decay", ".boxed.decay", XrmoptionSepArg, 0},
 };
 
 static argtype vars[] = {
     {&speed, "speed", "Speed", DEF_SPEED, t_Float},
     {&cfg_balls, "balls", "Balls", DEF_BALLS, t_Int},
     {&cfg_ballsize, "ballsize", "Ball Size", DEF_BALLSIZE, t_Float},
 };
 
 static argtype vars[] = {
     {&speed, "speed", "Speed", DEF_SPEED, t_Float},
     {&cfg_balls, "balls", "Balls", DEF_BALLS, t_Int},
     {&cfg_ballsize, "ballsize", "Ball Size", DEF_BALLSIZE, t_Float},
-    {&cfg_explosion, "explosion", "Exlosion", DEF_BALLSIZE, t_Float},
+    {&cfg_explosion, "explosion", "Explosion", DEF_EXPLOSION, t_Float},
+    {&cfg_decay, "decay", "Explosion Decay", DEF_DECAY, t_Float},
 };
 
 ENTRYPOINT ModeSpecOpt boxed_opts = {countof(opts), opts, countof(vars), vars, NULL};
 };
 
 ENTRYPOINT ModeSpecOpt boxed_opts = {countof(opts), opts, countof(vars), vars, NULL};
@@ -140,6 +144,7 @@ typedef struct {
    vectorf     loc;
    vectorf     dir;
    BOOL         far;
    vectorf     loc;
    vectorf     dir;
    BOOL         far;
+   BOOL         gone;
 } tri;
 
 typedef struct {
 } tri;
 
 typedef struct {
@@ -147,6 +152,7 @@ typedef struct {
    int                 lifetime;
    float       scalefac;
    float       explosion;
    int                 lifetime;
    float       scalefac;
    float       explosion;
+   float       decay;
    vectorf     color;
    tri         *tris;
    GLint       *indices;
    vectorf     color;
    tri         *tris;
    GLint       *indices;
@@ -158,6 +164,7 @@ typedef struct {
    int numballs;
    float ballsize;
    float explosion;
    int numballs;
    float ballsize;
    float explosion;
+   float decay;
    BOOL textures;
    BOOL transparent;
    float camspeed;
    BOOL textures;
    BOOL transparent;
    float camspeed;
@@ -482,6 +489,7 @@ static void createtrisfromball(triman* tman, vectorf *spherev, GLint *spherei, i
    
    for (i=0; i<(tman->num_tri); i++) {
       tman->tris[i].far = FALSE;
    
    for (i=0; i<(tman->num_tri); i++) {
       tman->tris[i].far = FALSE;
+      tman->tris[i].gone = FALSE;
       pos = i * 3;
       /* kopieer elke poly apart naar een tri structure */
       copyvector(&tman->vertices[pos+0],&spherev[spherei[pos+0]]);
       pos = i * 3;
       /* kopieer elke poly apart naar een tri structure */
       copyvector(&tman->vertices[pos+0],&spherev[spherei[pos+0]]);
@@ -543,6 +551,8 @@ static void updatetris(triman *t)
    GLfloat xd,zd;
    
    for (b=0;b<t->num_tri;b++) {
    GLfloat xd,zd;
    
    for (b=0;b<t->num_tri;b++) {
+      /* the exploded triangles disappear over time */
+      if (rnd() < t->decay) { t->tris[b].gone = TRUE; }
       /* apply gravity */
       t->tris[b].dir.y -= (0.1f * speed);
       /* apply movement */
       /* apply gravity */
       t->tris[b].dir.y -= (0.1f * speed);
       /* apply movement */
@@ -632,10 +642,13 @@ static void setdefaultconfig(boxed_config *config)
   cfg_balls = MAX(3,MIN(40,cfg_balls));
   cfg_ballsize = MAX(1.0f,MIN(5.0f,cfg_ballsize));
   cfg_explosion = MAX(0.0f,MIN(50.0f,cfg_explosion));
   cfg_balls = MAX(3,MIN(40,cfg_balls));
   cfg_ballsize = MAX(1.0f,MIN(5.0f,cfg_ballsize));
   cfg_explosion = MAX(0.0f,MIN(50.0f,cfg_explosion));
+  cfg_decay = MAX(0.0f,MIN(1.0f,cfg_decay));
+
   config->numballs = cfg_balls;
   config->textures = TRUE;
   config->transparent = FALSE;
   config->explosion = cfg_explosion;
   config->numballs = cfg_balls;
   config->textures = TRUE;
   config->transparent = FALSE;
   config->explosion = cfg_explosion;
+  config->decay = cfg_decay;
   config->ballsize = cfg_ballsize;
   config->camspeed = 35.0f;
 }
   config->ballsize = cfg_ballsize;
   config->camspeed = 35.0f;
 }
@@ -815,6 +828,7 @@ static void drawtriman(triman *t, int wire)
    glMaterialfv(GL_FRONT, GL_EMISSION,col);
    
    for (i=0; i<t->num_tri; i++) {
    glMaterialfv(GL_FRONT, GL_EMISSION,col);
    
    for (i=0; i<t->num_tri; i++) {
+      if (t->tris[i].gone == TRUE) { continue; }
       pos = i*3;
       glPushMatrix();
       glTranslatef(t->tris[i].loc.x,t->tris[i].loc.y,t->tris[i].loc.z);
       pos = i*3;
       glPushMatrix();
       glTranslatef(t->tris[i].loc.x,t->tris[i].loc.y,t->tris[i].loc.z);
@@ -1081,6 +1095,7 @@ pinit(ModeInfo * mi)
    
    for(i=0;i<bman->num_balls;i++) {
       gp->tman[i].explosion = (float) (((int)gp->config.explosion) / 15.0f );
    
    for(i=0;i<bman->num_balls;i++) {
       gp->tman[i].explosion = (float) (((int)gp->config.explosion) / 15.0f );
+      gp->tman[i].decay = gp->config.decay;
       gp->tman[i].vertices = NULL;
       gp->tman[i].normals = NULL;
       gp->tman[i].tris = NULL;
       gp->tman[i].vertices = NULL;
       gp->tman[i].normals = NULL;
       gp->tman[i].tris = NULL;
index 4fd1b2fcb2266856b203223004a9c97871ed239d..bc9dfb655bfce299b540b71abacc716e03a946c9 100644 (file)
@@ -218,11 +218,15 @@ load_image (ModeInfo *mi, image_frame *frame)
   if (wire)
     image_loaded_cb (0, 0, 0, 0, 0, 0, frame);
   else
   if (wire)
     image_loaded_cb (0, 0, 0, 0, 0, 0, frame);
   else
-    load_texture_async (mi->xgwa.screen, mi->window, *ss->glx_context,
-                        (MI_WIDTH(mi)  / 2) - 1,
-                        (MI_HEIGHT(mi) / 2) - 1,
-                        mipmap_p, frame->loading.texid, 
-                        image_loaded_cb, frame);
+    {
+      int w = (MI_WIDTH(mi)  / 2) - 1;
+      int h = (MI_HEIGHT(mi) / 2) - 1;
+      if (w <= 10) w = 10;
+      if (h <= 10) h = 10;
+      load_texture_async (mi->xgwa.screen, mi->window, *ss->glx_context, w, h,
+                          mipmap_p, frame->loading.texid, 
+                          image_loaded_cb, frame);
+    }
 }
 
 
 }
 
 
index bb21b9600a6d55a6113c8108c4df561018236a29..f38385e4072026d0b42925876fa5b5cee3bf20c4 100644 (file)
@@ -1,4 +1,5 @@
 /* flipflop, Copyright (c) 2003 Kevin Ogden <kogden1@hotmail.com>
 /* flipflop, Copyright (c) 2003 Kevin Ogden <kogden1@hotmail.com>
+ *                     (c) 2006 Sergio Gutiérrez "Sergut" <sergut@gmail.com>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -7,23 +8,42 @@
  * documentation.  No representations are made about the suitability of this
  * software for any purpose.  It is provided "as is" without express or
  * implied warranty.
  * documentation.  No representations are made about the suitability of this
  * software for any purpose.  It is provided "as is" without express or
  * implied warranty.
+ *
+ *
+ * 2003 Kevin Odgen                  First version
+ * 2006 Sergio Gutiérrez "Sergut"    Made several parameters dynamic and selectable
+ *                                   from the command line: size of the board, 
+ *                                   rotation speed and number of free squares; also
+ *                                   added the "sticks" mode.
+ *
  */
 
  */
 
-#define BOARDSIZE 9
-#define NUMSQUARES 76
-#define HALFTHICK 0.04
+#define DEF_FLIPFLOP_MODE  "tiles" /* Default mode (options: "tiles", "sticks") */
+#define DEF_BOARD_X_SIZE   "9"     /* Default width of the board */
+#define DEF_BOARD_Y_SIZE   "9"     /* Default length of the board */
+
+#define DEF_BOARD_SIZE     "0"     /* "0" means "no value selected by user". It is changed */ 
+#define DEF_NUMSQUARES     "0"     /* in function init_flipflop() to its correct value (that */ 
+#define DEF_FREESQUARES    "0"     /* is a function of the size of the board and the mode)*/
+
+#define DEF_SPIN           "0.1"   /* Default angular velocity: PI/10 rads/s    */
+
+#define DEF_STICK_THICK   54       /* Thickness for the sticks mode (over 100)  */
+#define DEF_STICK_RATIO   80       /* Ratio of sticks/total squares (over 100)  */
+#define DEF_TILE_THICK     4       /* Thickness for the tiles mode (over 100)   */
+#define DEF_TILE_RATIO    95       /* Ratio of tiles/total squares (over 100)   */
 
 #ifdef STANDALONE
 
 #ifdef STANDALONE
-#define DEFAULTS       "*delay:       20000       \n" \
-                       "*showFPS:       False       \n" \
-                      "*wireframe:     False     \n"
+#define DEFAULTS       "*delay:     20000     \n" \
+                       "*showFPS:   False     \n" \
+                       "*wireframe: False     \n"
 
 # define refresh_flipflop 0
 # include "xlockmore.h"
 
 #else
 # include "xlock.h"
 
 # define refresh_flipflop 0
 # include "xlockmore.h"
 
 #else
 # include "xlock.h"
-#endif
+#endif /* STANDALONE */
 
 #ifdef USE_GL
 
 
 #ifdef USE_GL
 
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
 static XrmOptionDescRec opts[] = {
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
 static XrmOptionDescRec opts[] = {
-  {"+rotate", ".flipflop.rotate", XrmoptionNoArg, "false" },
-  {"-rotate", ".flipflop.rotate", XrmoptionNoArg, "true" },
+    {"-sticks",         ".mode",            XrmoptionNoArg,  "sticks"},
+    {"-tiles",          ".mode",            XrmoptionNoArg,  "tiles" },
+    {"-mode",           ".mode",            XrmoptionSepArg, 0       },
+    {"-size",           ".size",            XrmoptionSepArg, 0       },
+    {"-size-x",         ".size_x",          XrmoptionSepArg, 0       },
+    {"-size-y",         ".size_y",          XrmoptionSepArg, 0       },
+    {"-count",          ".numsquares",      XrmoptionSepArg, 0       },
+    {"-free",           ".freesquares",     XrmoptionSepArg, 0       },
+    {"-spin",           ".spin",            XrmoptionSepArg, 0       },
 };
 
 };
 
-
-
-static int rotate, wire, clearbits;
+static int wire, clearbits;
+static int board_x_size, board_y_size, board_avg_size;
+static int numsquares, freesquares;
+static float half_thick;
+static float spin;
+static char* flipflopmode_str="tiles";
 
 static argtype vars[] = {
 
 static argtype vars[] = {
-  { &rotate, "rotate", "Rotate", "True", t_Bool},
+    { &flipflopmode_str, "mode",        "Mode",     DEF_FLIPFLOP_MODE,  t_String},
+    { &board_avg_size,   "size",        "Integer",  DEF_BOARD_SIZE,     t_Int},
+    { &board_x_size,     "size_x",      "Integer",  DEF_BOARD_X_SIZE,   t_Int},
+    { &board_y_size,     "size_y",      "Integer",  DEF_BOARD_Y_SIZE,   t_Int},
+    { &numsquares,       "numsquares",  "Integer",  DEF_NUMSQUARES,     t_Int},
+    { &freesquares,      "freesquares", "Integer",  DEF_NUMSQUARES,     t_Int},
+    { &spin,             "spin",        "Float",    DEF_SPIN,           t_Float},
 };
 
 ENTRYPOINT ModeSpecOpt flipflop_opts = {countof(opts), opts, countof(vars), vars, NULL};
 
 #ifdef USE_MODULES
 ModStruct   flipflop_description =
 };
 
 ENTRYPOINT ModeSpecOpt flipflop_opts = {countof(opts), opts, countof(vars), vars, NULL};
 
 #ifdef USE_MODULES
 ModStruct   flipflop_description =
-{"flipflop", "init_flipflop", "draw_flipflop", "release_flipflop",
- "draw_flipflop", "init_flipflop", NULL, &flipflop_opts,
- 1000, 1, 2, 1, 4, 1.0, "",
- "Flipflop", 0, NULL};
-
-#endif
-
-typedef struct{
-  /* 2D array specifying which squares are where (to avoid collisions) */
-  /* -1 means empty otherwise integer represents square index 0 - n-1 */
-  int occupied[ BOARDSIZE ][ BOARDSIZE ];
-  /* an array of xpositions of the squares */
-  int xpos[ NUMSQUARES ];
-  /* array of y positions of the squares */
-  int ypos[ NUMSQUARES ];
-  /* integer representing the direction of movement of a square */
-  int direction[ NUMSQUARES ]; /* 0 not, 1 x+, 2 y+, 3 x-, 4 y-*/
-  /* angle of moving square (during a flip) */
-  float angle[ NUMSQUARES ];
-  /* array of colors for a square.  rgb */
-  /* eg. color[ 4 ][ 0 ] is the red component of square 4 */
-  /* eg. color[ 5 ][ 2 ] is the blue component of square 5  */
-  float color[ NUMSQUARES ][ 3 ];
-  /* n is the number of square */
-} randsheet;
+    {"flipflop", "init_flipflop", "draw_flipflop", "release_flipflop",
+     "draw_flipflop", "init_flipflop", NULL, &flipflop_opts,
+     1000, 1, 2, 1, 4, 1.0, "",
+     "Flipflop", 0, NULL};
 
 
+#endif /* USE_MODULES */
 
 typedef struct {
 
 typedef struct {
-  GLXContext *glx_context;
-  Window window;
-  trackball_state *trackball;
-  Bool button_down_p;
+    /* array specifying which squares are where (to avoid collisions) */
+    /* -1 means empty otherwise integer represents square index 0 - n-1 */
+       /* occupied[x*board_y_size+y] is the tile [x][y] (i.e. that starts at column x and row y)*/
+    int *occupied; /* size: size_x * size_y */
+    /* an array of xpositions of the squares */
+    int *xpos; /* size: numsquares */
+    /* array of y positions of the squares */
+    int *ypos; /* size: numsquares */
+    /* integer representing the direction of movement of a square */
+    int *direction; /* 0 not, 1 x+, 2 y+, 3 x-, 4 y-*/ /* size: numsquares */
+    /* angle of moving square (during a flip) */
+    float *angle; /* size: numsquares */
+    /* array of colors for a square (RGB) */
+    /* eg. color[ 3*3 + 0 ] is the red   component of square 3 */
+    /* eg. color[ 4*3 + 1 ] is the green component of square 4 */
+    /* eg. color[ 5*3 + 2 ] is the blue  component of square 5 */
+    /*            ^-- n is the number of square */
+    float *color; /* size: numsquares * 3 */
+} randsheet;   
 
 
-  randsheet sheet;
+typedef struct {
+    GLXContext *glx_context;
+    Window window;
+    trackball_state *trackball;
+    Bool button_down_p;
+
+       randsheet *sheet;
 
 
-  double theta;
-  float flipspeed;  /* amount of flip.  1 is a entire flip */
-  float reldist;    /* relative distace of camera from center */
-  float energy;     /* likelehood a square will attempt a move */
+    float theta;      /* angle of rotation of the board                */
+    float flipspeed;  /* amount of flip;  1 is a entire flip           */
+    float reldist;    /* relative distace of camera from center        */
+    float energy;     /* likelyhood that a square will attempt to move */
 
 } Flipflopcreen;
 
 static Flipflopcreen *qs = NULL;
 
 
 } Flipflopcreen;
 
 static Flipflopcreen *qs = NULL;
 
-
+static void randsheet_create( randsheet *rs );
 static void randsheet_initialize( randsheet *rs );
 static void randsheet_initialize( randsheet *rs );
-static int randsheet_new_move( randsheet* rs );
-static int randsheet_new_move( randsheet* rs );
+static void randsheet_free( randsheet *rs );
+static int  randsheet_new_move( randsheet* rs );
 static void randsheet_move( randsheet *rs, float rot );
 static void randsheet_draw( randsheet *rs );
 static void setup_lights(void);
 static void randsheet_move( randsheet *rs, float rot );
 static void randsheet_draw( randsheet *rs );
 static void setup_lights(void);
@@ -109,172 +146,216 @@ static void draw_sheet(void);
 static void
 setup_lights(void)
 {
 static void
 setup_lights(void)
 {
-/*   GLfloat position0[] = { BOARDSIZE*0.5, BOARDSIZE*0.1, BOARDSIZE*0.5, 1.0 }; */
+    /*   GLfloat position0[] = { board_avg_size*0.5, board_avg_size*0.1, board_avg_size*0.5, 1.0 }; */
 
 
-/*   GLfloat position0[] = { -BOARDSIZE*0.5, 0.2*BOARDSIZE, -BOARDSIZE*0.5, 1.0 }; */
-  GLfloat position0[] = { 0, BOARDSIZE*0.3, 0, 1.0 };
+    /*   GLfloat position0[] = { -board_avg_size*0.5, 0.2*board_avg_size, -board_avg_size*0.5, 1.0 }; */
+    GLfloat position0[4];
+    position0[0] = 0;
+    position0[1] = board_avg_size*0.3;
+    position0[2] = 0;
+    position0[3] = 1;
 
 
-  if (wire) return;
+    if (wire) return;
 
 
-  glEnable(GL_LIGHTING);
-  glLightfv(GL_LIGHT0, GL_POSITION, position0);
-  glEnable(GL_LIGHT0);
- }
+    glEnable(GL_LIGHTING);
+    glLightfv(GL_LIGHT0, GL_POSITION, position0);
+    glEnable(GL_LIGHT0);
+}
 
 ENTRYPOINT Bool
 flipflop_handle_event (ModeInfo *mi, XEvent *event)
 {
 
 ENTRYPOINT Bool
 flipflop_handle_event (ModeInfo *mi, XEvent *event)
 {
-  Flipflopcreen *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 == ButtonPress &&
-           (event->xbutton.button == Button4 ||
-            event->xbutton.button == Button5))
-    {
-      gltrackball_mousewheel (c->trackball, event->xbutton.button, 5,
-                              !event->xbutton.state);
-      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;
+    Flipflopcreen *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 == ButtonPress &&
+             (event->xbutton.button == Button4 ||
+              event->xbutton.button == Button5))
+        {
+            gltrackball_mousewheel (c->trackball, event->xbutton.button, 5,
+                                    !event->xbutton.state);
+            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;
 }
 
 /* draw board */
 static void
 drawBoard(Flipflopcreen *c)
 {
 }
 
 /* draw board */
 static void
 drawBoard(Flipflopcreen *c)
 {
-  int i;
-  for( i=0; i < (c->energy) ; i++ )
-    randsheet_new_move( &c->sheet );
-  randsheet_move( &c->sheet, c->flipspeed * 3.14159 );
-  randsheet_draw( &c->sheet );
+    int i;
+    for( i=0; i < (c->energy) ; i++ ) {
+        randsheet_new_move( c->sheet );
+       }
+    randsheet_move( c->sheet, c->flipspeed * 3.14159 );
+    randsheet_draw( c->sheet );
 }
 
 
 static void
 display(Flipflopcreen *c)
 {
 }
 
 
 static void
 display(Flipflopcreen *c)
 {
-   GLfloat amb[] = { 0.8, 0.8, 0.8, 1.0 };
+    GLfloat amb[] = { 0.8, 0.8, 0.8, 1.0 };
 
 
 
 
- glClear(clearbits);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
   glClear(clearbits);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
 
 
-  glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.2);
-  glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.15/BOARDSIZE );
-  glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.15/BOARDSIZE );
-   glLightfv(GL_LIGHT0, GL_AMBIENT, amb);
+    glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.2);
+    glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.15/board_avg_size );
+    glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.15/board_avg_size );
+    glLightfv(GL_LIGHT0, GL_AMBIENT, amb);
 
 
 
 
-  /** setup perspectif */
-  glTranslatef(0.0, 0.0, -c->reldist*BOARDSIZE);
-  glRotatef(22.5, 1.0, 0.0, 0.0);
-  gltrackball_rotate (c->trackball);
-  glRotatef(c->theta*100, 0.0, 1.0, 0.0);
-  glTranslatef(-0.5*BOARDSIZE, 0.0, -0.5*BOARDSIZE);
+    /** setup perspectif */
+    glTranslatef(0.0, 0.0, -c->reldist*board_avg_size);
+    glRotatef(22.5, 1.0, 0.0, 0.0);  
+    gltrackball_rotate (c->trackball);
+    glRotatef(c->theta*100, 0.0, 1.0, 0.0);
+    glTranslatef(-0.5*board_x_size, 0.0, -0.5*board_y_size); /* Center the board */
 
 
-  drawBoard(c);
+    drawBoard(c);
 
 
-  if (!c->button_down_p)
-    c->theta += .001;
+    if (!c->button_down_p) {
+        c->theta += .01 * spin;
+       }
 
 }
 
 ENTRYPOINT void
 reshape_flipflop(ModeInfo *mi, int width, int height)
 {
 
 }
 
 ENTRYPOINT void
 reshape_flipflop(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, 1.0, 300.0);
-  glMatrixMode(GL_MODELVIEW);
+    GLfloat h = (GLfloat) height / (GLfloat) width;
+    glViewport(0,0, width, height);
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    gluPerspective(45, 1/h, 1.0, 300.0);
+    glMatrixMode(GL_MODELVIEW);
 }
 
 ENTRYPOINT void
 init_flipflop(ModeInfo *mi)
 {
 }
 
 ENTRYPOINT void
 init_flipflop(ModeInfo *mi)
 {
-  int screen = MI_SCREEN(mi);
-  Flipflopcreen *c;
-  wire = MI_IS_WIREFRAME(mi);
+       int screen; 
+    Flipflopcreen *c;
+
+       /* Set all constants to their correct values */
+       if (board_avg_size != 0) {  /* general size specified by user */
+               board_x_size = board_avg_size;
+               board_y_size = board_avg_size;
+       } else {
+               board_avg_size = (board_x_size + board_y_size) / 2;
+       }
+       if ((numsquares == 0) && (freesquares != 0)) {
+               numsquares = board_x_size * board_y_size - freesquares; 
+       }
+       if (strcmp(flipflopmode_str, "tiles")) {
+               half_thick = 1.0 * DEF_STICK_THICK / 100.0; 
+               if (numsquares == 0) {  /* No value defined by user */
+                       numsquares = board_x_size * board_y_size * DEF_STICK_RATIO / 100;
+               }
+       } else {
+               half_thick = 1.0 * DEF_TILE_THICK / 100.0; 
+               if (numsquares == 0) {  /* No value defined by user */
+                       numsquares = board_x_size * board_y_size * DEF_TILE_RATIO/ 100;;
+               }
+       }
+       if (board_avg_size < 2) {
+               fprintf (stderr,"%s: the board must be at least 2x2.\n", progname);
+               exit(1);
+       }
+       if ((board_x_size < 1) || (board_y_size < 1) || (numsquares < 1)) {
+               fprintf (stderr,"%s: the number of elements ('-count') and the dimensions of the board ('-size-x', '-size-y') must be positive integers.\n", progname);
+               exit(1);
+       }
+       if (board_x_size * board_y_size <= numsquares) {
+               fprintf (stderr,"%s: the number of elements ('-count') that you specified is too big \n for the dimensions of the board ('-size-x', '-size-y'). Nothing will move.\n", progname);
+       }
 
 
-  if(!qs &&
-     !(qs = (Flipflopcreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Flipflopcreen))))
-    return;
+    screen = MI_SCREEN(mi);
+    wire = MI_IS_WIREFRAME(mi);
 
 
-  c = &qs[screen];
-  c->window = MI_WINDOW(mi);
-  c->trackball = gltrackball_init ();
+    if(!qs &&
+       !(qs = (Flipflopcreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Flipflopcreen))))
+        return;
 
 
-  c->flipspeed = 0.03;
-  c->reldist = 1;
-  c->energy = 40;
+    c = &qs[screen];
+    c->window = MI_WINDOW(mi);
+    c->trackball = gltrackball_init ();
 
 
-  if((c->glx_context = init_GL(mi)))
-    reshape_flipflop(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
-  else
-    MI_CLEARWINDOW(mi);
+    c->flipspeed = 0.03;
+    c->reldist = 1;
+    c->energy = 40;
 
 
-  glClearColor(0.0, 0.0, 0.0, 0.0);
+    if((c->glx_context = init_GL(mi)))
+        reshape_flipflop(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+    else
+        MI_CLEARWINDOW(mi);
 
 
-  clearbits = GL_COLOR_BUFFER_BIT;
+       /* At this point, all the constants have already been set, */
+       /* so we can create the board */
+    c->sheet = (randsheet*) malloc(sizeof(randsheet)); 
+    randsheet_create( c->sheet ); 
 
 
-  glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
-  glEnable(GL_COLOR_MATERIAL);
-  setup_lights();
+    glClearColor(0.0, 0.0, 0.0, 0.0);
 
 
-  glEnable(GL_DEPTH_TEST);
-  clearbits |= GL_DEPTH_BUFFER_BIT;
-  glEnable(GL_CULL_FACE);
-  glCullFace(GL_BACK);
-  randsheet_initialize( &c->sheet );
+    clearbits = GL_COLOR_BUFFER_BIT;
 
 
+    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
+    glEnable(GL_COLOR_MATERIAL);
+    setup_lights();
 
 
+    glEnable(GL_DEPTH_TEST);
+    clearbits |= GL_DEPTH_BUFFER_BIT;
+    glEnable(GL_CULL_FACE);
+    glCullFace(GL_BACK);
+    randsheet_initialize( c->sheet );
 }
 
 ENTRYPOINT void
 draw_flipflop(ModeInfo *mi)
 {
 }
 
 ENTRYPOINT void
 draw_flipflop(ModeInfo *mi)
 {
-  Flipflopcreen *c = &qs[MI_SCREEN(mi)];
-  Window w = MI_WINDOW(mi);
-  Display *disp = MI_DISPLAY(mi);
+    Flipflopcreen *c = &qs[MI_SCREEN(mi)];
+    Window w = MI_WINDOW(mi);
+    Display *disp = MI_DISPLAY(mi);
 
 
-  if(!c->glx_context)
-    return;
+    if(!c->glx_context)
+        return;
 
 
-  glXMakeCurrent(disp, w, *(c->glx_context));
+    glXMakeCurrent(disp, w, *(c->glx_context));
 
 
-  display(c);
+    display(c);
 
 
-  if(mi->fps_p){
-    do_fps(mi);
-  }
+    if(mi->fps_p){
+        do_fps(mi);
+    }
 
 
-  glFinish();
-  glXSwapBuffers(disp, w);
+    glFinish();
+    glXSwapBuffers(disp, w);
 
 
 }
 
 
 }
@@ -282,9 +363,23 @@ draw_flipflop(ModeInfo *mi)
 ENTRYPOINT void
 release_flipflop(ModeInfo *mi)
 {
 ENTRYPOINT void
 release_flipflop(ModeInfo *mi)
 {
-  if(qs)
-    free((void *) qs);
-  qs = 0;
+  if(qs) {
+    int screen;
+
+    for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
+    {
+      Flipflopcreen *c = &qs[MI_SCREEN(mi)];
+      if (c->glx_context)
+        c->glx_context = 0;
+      if (c->sheet) {
+        randsheet_free(c->sheet);
+        free (c->sheet);
+        c->sheet = 0;
+      }
+    }
+    free(qs);
+    qs = 0;
+  }
 
   FreeAllGL(mi);
 }
 
   FreeAllGL(mi);
 }
@@ -294,84 +389,108 @@ release_flipflop(ModeInfo *mi)
 static void
 draw_sheet(void)
 {
 static void
 draw_sheet(void)
 {
-  glBegin( wire ? GL_LINE_LOOP : GL_QUADS );
-
-  glNormal3f( 0, -1, 0 );
-  glVertex3f( HALFTHICK,  -HALFTHICK,  HALFTHICK );
-  glVertex3f( 1-HALFTHICK,   -HALFTHICK, HALFTHICK );
-  glVertex3f( 1-HALFTHICK, -HALFTHICK,  1-HALFTHICK);
-  glVertex3f( HALFTHICK, -HALFTHICK, 1-HALFTHICK );
-
-  if (wire) { glEnd(); glBegin (GL_LINE_LOOP); }
-
-  /* back */
-  glNormal3f( 0, 1, 0 );
-  glVertex3f( HALFTHICK, HALFTHICK, 1-HALFTHICK );
-  glVertex3f( 1-HALFTHICK, HALFTHICK,  1-HALFTHICK);
-  glVertex3f( 1-HALFTHICK,   HALFTHICK, HALFTHICK );
-  glVertex3f( HALFTHICK,  HALFTHICK,  HALFTHICK );
-
-  if (wire) { glEnd(); return; }
-
-  /* 4 edges!!! weee.... */
-  glNormal3f( 0, 0, -1 );
-  glVertex3f( HALFTHICK, HALFTHICK, HALFTHICK );
-  glVertex3f( 1-HALFTHICK, HALFTHICK, HALFTHICK );
-  glVertex3f( 1-HALFTHICK, -HALFTHICK, HALFTHICK );
-  glVertex3f( HALFTHICK, -HALFTHICK, HALFTHICK );
-  glNormal3f( 0, 0, 1 );
-  glVertex3f( HALFTHICK, HALFTHICK, 1-HALFTHICK );
-  glVertex3f( HALFTHICK, -HALFTHICK, 1-HALFTHICK );
-  glVertex3f( 1-HALFTHICK, -HALFTHICK, 1-HALFTHICK );
-  glVertex3f( 1-HALFTHICK, HALFTHICK, 1-HALFTHICK );
-  glNormal3f( 1, 0, 0 );
-  glVertex3f( 1-HALFTHICK, HALFTHICK, 1-HALFTHICK );
-  glVertex3f( 1-HALFTHICK, -HALFTHICK, 1-HALFTHICK );
-  glVertex3f( 1-HALFTHICK, -HALFTHICK, HALFTHICK );
-  glVertex3f( 1-HALFTHICK, HALFTHICK, HALFTHICK );
-  glNormal3f( -1, 0, 0 );
-  glVertex3f( HALFTHICK, HALFTHICK, 1-HALFTHICK );
-  glVertex3f( HALFTHICK, HALFTHICK, HALFTHICK );
-  glVertex3f( HALFTHICK, -HALFTHICK, HALFTHICK );
-  glVertex3f( HALFTHICK, -HALFTHICK, 1-HALFTHICK );
-  glEnd();
+    glBegin( wire ? GL_LINE_LOOP : GL_QUADS );
+
+    glNormal3f( 0, -1, 0 );
+    glVertex3f( half_thick,  -half_thick,  half_thick );
+    glVertex3f( 1-half_thick,   -half_thick, half_thick );
+    glVertex3f( 1-half_thick, -half_thick,  1-half_thick);
+    glVertex3f( half_thick, -half_thick, 1-half_thick );
+
+    if (wire) { glEnd(); glBegin (GL_LINE_LOOP); }
+
+    /* back */
+    glNormal3f( 0, 1, 0 );
+    glVertex3f( half_thick, half_thick, 1-half_thick );
+    glVertex3f( 1-half_thick, half_thick,  1-half_thick);
+    glVertex3f( 1-half_thick,   half_thick, half_thick );
+    glVertex3f( half_thick,  half_thick,  half_thick );
+
+    if (wire) { glEnd(); return; }
+
+    /* 4 edges!!! weee.... */
+    glNormal3f( 0, 0, -1 );
+    glVertex3f( half_thick, half_thick, half_thick );
+    glVertex3f( 1-half_thick, half_thick, half_thick );
+    glVertex3f( 1-half_thick, -half_thick, half_thick );
+    glVertex3f( half_thick, -half_thick, half_thick );
+    glNormal3f( 0, 0, 1 );
+    glVertex3f( half_thick, half_thick, 1-half_thick );
+    glVertex3f( half_thick, -half_thick, 1-half_thick );
+    glVertex3f( 1-half_thick, -half_thick, 1-half_thick );
+    glVertex3f( 1-half_thick, half_thick, 1-half_thick );
+    glNormal3f( 1, 0, 0 );
+    glVertex3f( 1-half_thick, half_thick, 1-half_thick );
+    glVertex3f( 1-half_thick, -half_thick, 1-half_thick );
+    glVertex3f( 1-half_thick, -half_thick, half_thick );
+    glVertex3f( 1-half_thick, half_thick, half_thick );
+    glNormal3f( -1, 0, 0 );
+    glVertex3f( half_thick, half_thick, 1-half_thick );
+    glVertex3f( half_thick, half_thick, half_thick );
+    glVertex3f( half_thick, -half_thick, half_thick );
+    glVertex3f( half_thick, -half_thick, 1-half_thick );
+    glEnd();
+}
+
+/* Reserve memory for the randsheet */
+static void
+randsheet_create( randsheet *rs )
+{
+       rs -> occupied  = (int*) malloc(board_x_size*board_y_size * sizeof(int));
+       rs -> xpos      = (int*) malloc(numsquares * sizeof(int));
+       rs -> ypos      = (int*) malloc(numsquares * sizeof(int));
+       rs -> direction = (int*) malloc(numsquares * sizeof(int));
+       rs -> angle     = (float*) malloc(numsquares * sizeof(float));
+       rs -> color     = (float*) malloc(numsquares*3 * sizeof(float));
+}
+
+/* Free reserved memory for the randsheet */
+static void
+randsheet_free( randsheet *rs )
+{
+       free(rs->occupied);
+       free(rs->xpos);
+       free(rs->ypos);
+       free(rs->direction);
+       free(rs->angle);
+       free(rs->color);
 }
 
 static void
 randsheet_initialize( randsheet *rs )
 {
 }
 
 static void
 randsheet_initialize( randsheet *rs )
 {
-  int i, j, index;
-      index = 0;
-      /* put the moving sheets on the board */
-      for( i = 0; i < BOARDSIZE; i++ )
-       {
-         for( j = 0; j < BOARDSIZE; j++ )
-           {
-             /* initially fill up a corner with the moving squares */
-             if( index < NUMSQUARES )
-               {
-                 rs->occupied[ i ][ j ] = index;
-                 rs->xpos[ index ] = i;
-                 rs->ypos[ index ] = j;
-                 /* have the square colors start out as a pattern */
-                 rs->color[ index ][ 0 ] = ((i+j)%3 == 0)||((i+j+1)%3 == 0);
-                 rs->color[ index ][ 1 ] = ((i+j+1)%3 == 0);
-                 rs->color[ index ][ 2 ] = ((i+j+2)%3 == 0);
-                ++index;
-               }
-               /* leave everything else empty*/
-             else
-               {
-                 rs->occupied[ i ][ j ] = -1;
-               }
-           }
-       }
-       /* initially everything is at rest */
-      for( i=0; i<NUMSQUARES; i++ )
-       {
-         rs->direction[ i ] = 0;
-         rs->angle[ i ] = 0;
-       }
+    int i, j, index;
+    index = 0;
+    /* put the moving sheets on the board */
+    for( i = 0; i < board_x_size; i++ )
+        {
+            for( j = 0; j < board_y_size; j++ )
+                {
+                    /* initially fill up a corner with the moving squares */
+                    if( index < numsquares )
+                        {
+                            rs->occupied[ i * board_y_size + j ] = index;
+                            rs->xpos[ index ] = i;
+                            rs->ypos[ index ] = j;
+                            /* have the square colors start out as a pattern */
+                            rs->color[ index*3 + 0 ] = ((i+j)%3 == 0)||((i+j+1)%3 == 0);
+                            rs->color[ index*3 + 1 ] = ((i+j+1)%3 == 0);
+                            rs->color[ index*3 + 2 ] = ((i+j+2)%3 == 0);
+                            index++;
+                        }
+                    /* leave everything else empty*/
+                    else
+                        {
+                            rs->occupied[ i * board_y_size + j ] = -1;
+                        }
+                }
+        }
+    /* initially everything is at rest */
+    for( i=0; i<numsquares; i++ )
+        {
+            rs->direction[ i ] = 0;
+            rs->angle[ i ] = 0;
+        }
 }
 
 /* Pick and random square and direction and try to move it. */
 }
 
 /* Pick and random square and direction and try to move it. */
@@ -383,80 +502,80 @@ randsheet_initialize( randsheet *rs )
 static int
 randsheet_new_move( randsheet* rs )
 {
 static int
 randsheet_new_move( randsheet* rs )
 {
-      int i, j;
-      int num, dir;
-      /* pick a random square */
-      num = random( ) % NUMSQUARES;
-      i = rs->xpos[ num ];
-      j = rs->ypos[ num ];
-      /* pick a random direction */
-      dir = ( random( )% 4 ) + 1;
-
-      if( rs->direction[ num ] == 0 )
-       {
-         switch( dir )
-           {
-           case 1:
-             /* move up in x */
-             if( ( i + 1 ) < BOARDSIZE )
-               {
-                 if( rs->occupied[ i + 1 ][ j ] == -1 )
-                   {
-                     rs->direction[ num ] = dir;
-                     rs->occupied[ i + 1 ][ j ] = num;
-                     rs->occupied[ i ][ j ] = -1;
-                     return 1;
-                   }
-               }
-             return 0;
-             break;
-           case 2:
-             /* move up in y */
-             if( ( j + 1 ) < BOARDSIZE )
-               {
-                 if( rs->occupied[ i ][ j + 1 ] == -1 )
-                   {
-                     rs->direction[ num ] = dir;
-                     rs->occupied[ i ][ j + 1 ] = num;
-                     rs->occupied[ i ][ j ] = -1;
-                     return 1;
-                   }
-               }
-             return 0;
-             break;
-           case 3:
-             /* move down in x */
-             if( ( i - 1 ) >= 0 )
-               {
-                 if( rs->occupied[ i - 1][ j ] == -1 )
-                   {
-                     rs->direction[ num ] = dir;
-                     rs->occupied[ i - 1][ j ] = num;
-                     rs->occupied[ i ][ j ] = -1;
-                     return 1;
-                   }
-               }
-             return 0;
-             break;
-           case 4:
-             /* move down in y */
-             if( ( j - 1 ) >= 0 )
-               {
-                 if( rs->occupied[ i ][ j - 1 ] == -1 )
-                   {
-                     rs->direction[ num ] = dir;
-                     rs->occupied[ i ][ j - 1 ] = num;
-                     rs->occupied[ i ][ j ] = -1;
-                     return 1;
-                   }
-               }
-             return 0;
-             break;
-           default:
-             break;
-           }
-       }
-      return 0;
+    int i, j;
+    int num, dir;
+    /* pick a random square */
+    num = random( ) % numsquares;
+    i = rs->xpos[ num ];
+    j = rs->ypos[ num ];
+    /* pick a random direction */
+    dir = ( random( )% 4 ) + 1;
+
+    if( rs->direction[ num ] == 0 )
+        {
+            switch( dir )
+                {
+                case 1:
+                    /* move up in x */
+                    if( ( i + 1 ) < board_x_size )
+                        {
+                            if( rs->occupied[ (i + 1) * board_y_size + j ] == -1 )
+                                {
+                                    rs->direction[ num ] = dir;
+                                    rs->occupied[ (i + 1) * board_y_size + j ] = num;
+                                    rs->occupied[ i * board_y_size + j ] = -1;
+                                    return 1;
+                                }
+                        }
+                    return 0;
+                    break;
+                case 2:
+                    /* move up in y */
+                    if( ( j + 1 ) < board_y_size )
+                        {
+                            if( rs->occupied[ i * board_y_size + (j + 1) ] == -1 )
+                                {
+                                    rs->direction[ num ] = dir;
+                                    rs->occupied[ i * board_y_size + (j + 1) ] = num;
+                                    rs->occupied[ i * board_y_size + j ] = -1;
+                                    return 1;
+                                }
+                        }
+                    return 0;
+                    break;
+                case 3:
+                    /* move down in x */
+                    if( ( i - 1 ) >= 0 )
+                        {
+                            if( rs->occupied[ (i - 1) * board_y_size + j ] == -1 )
+                                {
+                                    rs->direction[ num ] = dir;
+                                    rs->occupied[ (i - 1) * board_y_size + j ] = num;
+                                    rs->occupied[ i * board_y_size + j ] = -1;
+                                    return 1;
+                                }
+                        }
+                    return 0;
+                    break;
+                case 4:
+                    /* move down in y */
+                    if( ( j - 1 ) >= 0 )
+                        {
+                            if( rs->occupied[ i * board_y_size + (j - 1) ] == -1 )
+                                {
+                                    rs->direction[ num ] = dir;
+                                    rs->occupied[ i * board_y_size + (j - 1) ] = num;
+                                    rs->occupied[ i * board_y_size + j ] = -1;
+                                    return 1;
+                                }
+                        }
+                    return 0;
+                    break;
+                default:
+                    break;
+                }
+        }
+    return 0;
 }
 
 /*   move a single frame.  */
 }
 
 /*   move a single frame.  */
@@ -464,121 +583,121 @@ randsheet_new_move( randsheet* rs )
 static void
 randsheet_move( randsheet *rs, float rot )
 {
 static void
 randsheet_move( randsheet *rs, float rot )
 {
-      int i, j, index;
-      for( index = 0 ; index < NUMSQUARES; index++ )
-       {
-         i = rs->xpos[ index ];
-         j = rs->ypos[ index ];
-         switch( rs->direction[ index ] )
-           {
-           case 0:
-             /* not moving */
-             break;
-           case 1:
-           /* move up in x */
-             rs->angle[ index ] += rot;
-             /* check to see if we have finished moving */
-             if( rs->angle[ index ] >= M_PI  )
-               {
-                 rs->xpos[ index ] += 1;
-                 rs->direction[ index ] = 0;
-                 rs->angle[ index ] = 0;
-               }
-             break;
-           case 2:
-           /* move up in y */
-             rs->angle[ index ] += rot;
-             /* check to see if we have finished moving */
-             if( rs->angle[ index ] >= M_PI  )
-               {
-                 rs->ypos[ index ] += 1;
-                 rs->direction[ index ] = 0;
-                 rs->angle[ index ] = 0;
-               }
-             break;
-           case 3:
-           /* down in x */
-             rs->angle[ index ] += rot;
-             /* check to see if we have finished moving */
-             if( rs->angle[ index ] >= M_PI  )
-               {
-                 rs->xpos[ index ] -= 1;
-                 rs->direction[ index ] = 0;
-                 rs->angle[ index ] = 0;
-               }
-             break;
-           case 4:
-           /* up in x */
-             rs->angle[ index ] += rot;
-             /* check to see if we have finished moving */
-             if( rs->angle[ index ] >= M_PI  )
-               {
-                 rs->ypos[ index ] -= 1;
-                 rs->direction[ index ] = 0;
-                 rs->angle[ index ] = 0;
-               }
-             break;
-           default:
-             break;
-           }
-       }
+    int i, j, index;
+    for( index = 0 ; index < numsquares; index++ )
+        {
+            i = rs->xpos[ index ];
+            j = rs->ypos[ index ];
+            switch( rs->direction[ index ] )
+                {
+                case 0:
+                    /* not moving */
+                    break;
+                case 1:
+                    /* move up in x */
+                    rs->angle[ index ] += rot;
+                    /* check to see if we have finished moving */
+                    if( rs->angle[ index ] >= M_PI  )
+                        {
+                            rs->xpos[ index ] += 1;
+                            rs->direction[ index ] = 0;
+                            rs->angle[ index ] = 0;
+                        }
+                    break;
+                case 2:
+                    /* move up in y */
+                    rs->angle[ index ] += rot;
+                    /* check to see if we have finished moving */
+                    if( rs->angle[ index ] >= M_PI  )
+                        {
+                            rs->ypos[ index ] += 1;
+                            rs->direction[ index ] = 0;
+                            rs->angle[ index ] = 0;
+                        }
+                    break;
+                case 3:
+                    /* down in x */
+                    rs->angle[ index ] += rot;
+                    /* check to see if we have finished moving */
+                    if( rs->angle[ index ] >= M_PI  )
+                        {
+                            rs->xpos[ index ] -= 1;
+                            rs->direction[ index ] = 0;
+                            rs->angle[ index ] = 0;
+                        }
+                    break;
+                case 4:
+                    /* up in x */
+                    rs->angle[ index ] += rot;
+                    /* check to see if we have finished moving */
+                    if( rs->angle[ index ] >= M_PI  )
+                        {
+                            rs->ypos[ index ] -= 1;
+                            rs->direction[ index ] = 0;
+                            rs->angle[ index ] = 0;
+                        }
+                    break;
+                default:
+                    break;
+                }
+        }
 }
 
 
 }
 
 
-    /* draw all the moving squares  */
+/* draw all the moving squares  */
 static void
 randsheet_draw( randsheet *rs )
 {
 static void
 randsheet_draw( randsheet *rs )
 {
-      int i, j;
-      int index;
-      /* for all moving squares ... */
-      for( index = 0; index < NUMSQUARES; index++ )
-       {
-         /* set color */
-         glColor3f( rs->color[ index ][ 0 ],
-                    rs->color[ index ][ 1 ],
-                    rs->color[ index ][ 2 ] );
-                    /* find x and y position */
-         i = rs->xpos[ index ];
-         j = rs->ypos[ index ];
-         glPushMatrix();
-         switch( rs->direction[ index ] )
-           {
-           case 0:
-
-           /* not moving */
-             /* front */
-             glTranslatef( i, 0, j );
-             break;
-           case 1:
-             glTranslatef( i+1, 0, j );
-             glRotatef( 180 - rs->angle[ index ]*180/M_PI, 0, 0, 1 );
-
-             break;
-           case 2:
-             glTranslatef( i, 0, j+1 );
-             glRotatef( 180 - rs->angle[ index ]*180/M_PI, -1, 0, 0 );
-
-             break;
-           case 3:
-             glTranslatef( i, 0, j );
-             glRotatef( rs->angle[ index ]*180/M_PI, 0, 0, 1 );
-             break;
-           case 4:
-             glTranslatef( i, 0, j );
-             glRotatef( rs->angle[ index ]*180/M_PI, -1, 0, 0 );
-             break;
-           default:
-             break;
-           }
-         draw_sheet();
-         glPopMatrix();
-
-       }
+    int i, j;
+    int index;
+    /* for all moving squares ... */
+    for( index = 0; index < numsquares; index++ )
+        {
+            /* set color */
+            glColor3f( rs->color[ index*3 + 0 ],
+                       rs->color[ index*3 + 1 ],
+                       rs->color[ index*3 + 2 ] );
+            /* find x and y position */
+            i = rs->xpos[ index ];
+            j = rs->ypos[ index ];
+            glPushMatrix();
+            switch( rs->direction[ index ] )
+                {
+                case 0:
+
+                    /* not moving */
+                    /* front */
+                    glTranslatef( i, 0, j );
+                    break;
+                case 1:
+                    glTranslatef( i+1, 0, j );
+                    glRotatef( 180 - rs->angle[ index ]*180/M_PI, 0, 0, 1 );
+
+                    break;
+                case 2:
+                    glTranslatef( i, 0, j+1 );
+                    glRotatef( 180 - rs->angle[ index ]*180/M_PI, -1, 0, 0 );
+
+                    break;
+                case 3:
+                    glTranslatef( i, 0, j );
+                    glRotatef( rs->angle[ index ]*180/M_PI, 0, 0, 1 );
+                    break;
+                case 4:
+                    glTranslatef( i, 0, j );
+                    glRotatef( rs->angle[ index ]*180/M_PI, -1, 0, 0 );
+                    break;
+                default:
+                    break;
+                }
+            draw_sheet();
+            glPopMatrix();
+
+        }
 }
 
 }
 
-/**** END RANDSHEET FUNCTIONS ***/
+/**** END RANDSHEET_BAK FUNCTIONS ***/
 
 XSCREENSAVER_MODULE ("Flipflop", flipflop)
 
 
 XSCREENSAVER_MODULE ("Flipflop", flipflop)
 
-#endif
+#endif /* USE_GL */
index 1ba6f5c080c1dd0683308feeae4696df1c49c317..e3b1d2a0aa4b1d2e69a6efe362da3b1f5130ad87 100644 (file)
@@ -6,12 +6,13 @@ flipflop - draws a grid of 3D squares that change positions
 [\-display \fIhost:display.screen\fP]
 [\-visual \fIvisual\fP]
 [\-window]
 [\-display \fIhost:display.screen\fP]
 [\-visual \fIvisual\fP]
 [\-window]
-[\-root]
+[\-count \fInumber\fP | \-free \fInumber\fP]
+[\-size \fInumber\fP]
+[\-size-x \fInumber\fP]
+[\-size-y \fInumber\fP]
+[\-spin \fInumber\fP]
+[\-mode sticks | tiles]
 [\-delay \fInumber\fP]
 [\-delay \fInumber\fP]
-[\-holdtime \fInumber\fP]
-[\-changetime \fInumber\fP]
-[\-no-texture]
-[\-no-fog]
 [\-wireframe]
 [\-fps]
 .SH DESCRIPTION
 [\-wireframe]
 [\-fps]
 .SH DESCRIPTION
@@ -29,14 +30,42 @@ Draw on a newly-created window.  This is the default.
 .B \-root
 Draw on the root window.
 .TP 8
 .B \-root
 Draw on the root window.
 .TP 8
+.B \-count \fInumber\fP
+Number of tiles on the board. A value of "0" means "default". The
+default number of tiles depends on the size of the board and the mode:
+95% of total tiles for "tiles" mode and 80% of total sticks for
+"sticks" mode (e.g. 76 tiles or 64 sticks for a 9x9 board). 
+.TP 8
+.B \-free \fInumber\fP
+Number of tiles missing from the board. See -count. 
+.TP 8
+.B \-size \fInumber\fP
+Number of tiles on each side of the board. Takes precedence over
+-size-x and -size-y. Default: 9.
+.TP 8
+.B \-size-x \fInumber\fP
+Width (in tiles) of the board. Default: 9.
+.TP 8
+.B \-size-y \fInumber\fP
+Length (in tiles) of the board. Default: 9.
+.TP 8
+.B \-spin \fInumber\fP
+Angular velocity for the rotation of the board. 
+.TP 8
+.B \-mode sticks 
+Draw hopping sticks instead of flipping tiles. 
+.TP 8
+.B \-mode tiles 
+Draw flipping tiles. This is the default. 
+.TP 8
 .B \-delay \fInumber\fP
 Per-frame delay, in microseconds.  Default: 20000 (0.02 seconds.).
 .TP 8
 .B \-delay \fInumber\fP
 Per-frame delay, in microseconds.  Default: 20000 (0.02 seconds.).
 .TP 8
-.B \-wireframe
-Only draw outlines.
-.TP 8
 .B \-fps | \-no-fps
 Whether to show a frames-per-second display at the bottom of the screen.
 .B \-fps | \-no-fps
 Whether to show a frames-per-second display at the bottom of the screen.
+.TP 8
+.B \-wireframe
+Only draw outlines.
 .SH ENVIRONMENT
 .PP
 .TP 8
 .SH ENVIRONMENT
 .PP
 .TP 8
@@ -58,4 +87,5 @@ 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
 suitability of this software for any purpose.  It is provided "as is" without
 express or implied warranty.
 .SH AUTHOR
-Kevin Ogden <kogden1@hotmail.com>
+Kevin Ogden <kogden1@hotmail.com>. Some additional code by Sergio
+Gutierrez <sergut@gmail.com>. 
index 71e379ad10ec0723eca993d4135fcceea391414f..a24eefa38f1eaa6798a64fb545147e19b08a5b48 100644 (file)
 
 #include <ctype.h>
 
 
 #include <ctype.h>
 
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif /* HAVE_LOCALE_H */
-
 #ifdef USE_GL /* whole file */
 
 #ifdef HAVE_COCOA
 #ifdef USE_GL /* whole file */
 
 #ifdef HAVE_COCOA
@@ -330,15 +326,6 @@ init_text (ModeInfo *mi)
   text_configuration *tp;
   int i;
 
   text_configuration *tp;
   int i;
 
-  /* setlocale (LC_TIME, "") only refers to environment:
-     not needed
-   */
-#if 0
-# ifdef HAVE_SETLOCALE
-  setlocale (LC_TIME, "");      /* for strftime() calls */
-# endif
-#endif
-
   if (!tps) {
     tps = (text_configuration *)
       calloc (MI_NUM_SCREENS(mi), sizeof (text_configuration));
   if (!tps) {
     tps = (text_configuration *)
       calloc (MI_NUM_SCREENS(mi), sizeof (text_configuration));
index 3defa33f343981a6fcdc8b91ec5d653df78e4432..e47361eaaaf8a1e0fffdacbd1fe3ee4ec8049e4a 100644 (file)
@@ -475,21 +475,6 @@ MakeShape(ModeInfo * mi, int newdir)
        }
 }
 
        }
 }
 
-ENTRYPOINT void
-reshape_pipes(ModeInfo * mi, int width, int height)
-{
-       pipesstruct *pp = &pipes[MI_SCREEN(mi)];
-
-       glViewport(0, 0, pp->WindW = (GLint) width, pp->WindH = (GLint) height);
-       glMatrixMode(GL_PROJECTION);
-       glLoadIdentity();
-       /*glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); */
-       gluPerspective(65.0, (GLfloat) width / (GLfloat) height, 0.1, 20.0);
-       glMatrixMode(GL_MODELVIEW);
-
-  glClear(GL_COLOR_BUFFER_BIT);
-}
-
 static void
 pinit(ModeInfo * mi, int zera)
 {
 static void
 pinit(ModeInfo * mi, int zera)
 {
@@ -609,6 +594,22 @@ pinit(ModeInfo * mi, int zera)
        pp->nowdir = SelectNeighbor(mi);
 }
 
        pp->nowdir = SelectNeighbor(mi);
 }
 
+ENTRYPOINT void
+reshape_pipes(ModeInfo * mi, int width, int height)
+{
+       pipesstruct *pp = &pipes[MI_SCREEN(mi)];
+    pinit(mi, 1);
+
+       glViewport(0, 0, pp->WindW = (GLint) width, pp->WindH = (GLint) height);
+       glMatrixMode(GL_PROJECTION);
+       glLoadIdentity();
+       /*glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); */
+       gluPerspective(65.0, (GLfloat) width / (GLfloat) height, 0.1, 20.0);
+       glMatrixMode(GL_MODELVIEW);
+
+  glClear(GL_COLOR_BUFFER_BIT);
+}
+
 ENTRYPOINT void
 init_pipes (ModeInfo * mi)
 {
 ENTRYPOINT void
 init_pipes (ModeInfo * mi)
 {
index 97d089eeec0e04dd0bdd4d38688773c0dfb30282..22a13aa26a77aa95166b4b92278868307bab1efd 100644 (file)
@@ -18,7 +18,7 @@ pipes - fill the screen with a plumbing system.
 [-db]
 [-fps]
 .SH DESCRIPTION
 [-db]
 [-fps]
 .SH DESCRIPTION
-If you've ever been in the same room with a Windows NT machine, you've
+If you've ever been in the same room as a Windows NT machine, you've
 probably seen this GL hack.  It fills the screen with a plumbing system.
 .SH OPTIONS
 .TP 8
 probably seen this GL hack.  It fills the screen with a plumbing system.
 .SH OPTIONS
 .TP 8
index b85bfca351c05ace4750f434f6aaef173f97f5b5..e5446f700716e7b62c9e1aa31901f51c97c40815 100644 (file)
@@ -45,13 +45,30 @@ static const char sccsid[] = "@(#)sproingies.c      4.04 97/07/28 xlockmore";
 #include "gllist.h"
 #include "sproingies.h"
 
 #include "gllist.h"
 #include "sproingies.h"
 
-#define MAXSPROING 100
-#define T_COUNT 40
-#define BOOM_FRAME 50
-
-struct sPosColor {
-       int         x, y, z, frame, life;
-       GLfloat     r, g, b;
+#define MAXSPROING           100
+#define TARGET_COUNT         40
+#define BOOM_FRAME           50
+#define NO_FRAME             (-10)
+#define RESET_SPROINGIE_LIFE (-30 + myrand(28))
+#define NEW_SPROINGIE_LIFE   (40 + myrand(200))
+#define JUMP_LEFT            0
+#define JUMP_RIGHT           1
+
+#define FIRST_FRAME          0
+#define LAST_FRAME           5 
+/*-
+ * The sproingies have six "real" frames, (s1_1 to s1_6) that show a
+ * sproingie jumping off a block, headed down and to the right. 
+ * The frames are numbered from 0 (FIRST_FRAME) to 5 (LAST_FRAME). 
+ * 
+ * There are other frame numbers for special cases (e.g. BOOM_FRAME).
+ */
+struct sPosColor {   /* Position and color of the sproingie     */
+       int x, y, z;     /*   Position                              */
+       int frame;       /*   Current frame (0-5)                   */
+       int life;        /*   Life points                           */
+       GLfloat r, g, b; /*   Color RGB                             */
+       int direction;   /*   Direction of next hop (left or right) */
 };
 
 typedef struct {
 };
 
 typedef struct {
@@ -81,6 +98,8 @@ myrand(int range)
        return ((int) (((float) range) * LRAND() / (MAXRAND)));
 }
 
        return ((int) (((float) range) * LRAND() / (MAXRAND)));
 }
 
+static int smart_sproingies = 0;
+
 static      GLuint
 build_TopsSides(int wireframe)
 {
 static      GLuint
 build_TopsSides(int wireframe)
 {
@@ -241,8 +260,6 @@ LayGround(int sx, int sy, int sz, int width, int height, sp_instance * si)
        }
 }
 
        }
 }
 
-#define RESET_SPROINGIE (-30 + myrand(28))
-
 static void
 AdvanceSproingie(int t, sp_instance * si)
 {
 static void
 AdvanceSproingie(int t, sp_instance * si)
 {
@@ -251,7 +268,7 @@ AdvanceSproingie(int t, sp_instance * si)
        struct sPosColor *S2 = &(si->positions[0]);
 
        if (thisSproingie->life > 0) {
        struct sPosColor *S2 = &(si->positions[0]);
 
        if (thisSproingie->life > 0) {
-               if ((++(thisSproingie->frame)) > 11) {
+               if ((++(thisSproingie->frame)) > LAST_FRAME) {
                        if (thisSproingie->frame >= BOOM_FRAME) {
                                if ((thisSproingie->r -= 0.08) < 0.0)
                                        thisSproingie->r = 0.0;
                        if (thisSproingie->frame >= BOOM_FRAME) {
                                if ((thisSproingie->r -= 0.08) < 0.0)
                                        thisSproingie->r = 0.0;
@@ -260,19 +277,17 @@ AdvanceSproingie(int t, sp_instance * si)
                                if ((thisSproingie->b -= 0.08) < 0.0)
                                        thisSproingie->b = 0.0;
                                if ((--(thisSproingie->life)) < 1) {
                                if ((thisSproingie->b -= 0.08) < 0.0)
                                        thisSproingie->b = 0.0;
                                if ((--(thisSproingie->life)) < 1) {
-                                       thisSproingie->life = RESET_SPROINGIE;
+                                       thisSproingie->life = RESET_SPROINGIE_LIFE;
                                }
                                return;
                        }
                                }
                                return;
                        }
-                       thisSproingie->x += 1;
-                       thisSproingie->y -= 2;
-                       thisSproingie->z += 1;
-                       thisSproingie->frame = 0;
+                       thisSproingie->frame = FIRST_FRAME;
 
 
+                       /* Check for collisions */
                        for (t2 = 0; t2 < si->maxsproingies; ++t2) {
                                if ((t2 != t) && (thisSproingie->x == S2->x) &&
                                    (thisSproingie->y == S2->y) && (thisSproingie->z == S2->z) &&
                        for (t2 = 0; t2 < si->maxsproingies; ++t2) {
                                if ((t2 != t) && (thisSproingie->x == S2->x) &&
                                    (thisSproingie->y == S2->y) && (thisSproingie->z == S2->z) &&
-                                   (S2->life > 10) && (S2->frame < 6)) {
+                                   (S2->life > 10) && (S2->frame < LAST_FRAME + 1)) {
 #if 0
                                        if (thisSproingie->life > S2->life) {
                                                S2->life = 10;
 #if 0
                                        if (thisSproingie->life > S2->life) {
                                                S2->life = 10;
@@ -295,17 +310,18 @@ AdvanceSproingie(int t, sp_instance * si)
                                ++S2;
                        }
                }
                                ++S2;
                        }
                }
+               /* Time to disappear... */
                if (!((thisSproingie->life == 10) &&
                if (!((thisSproingie->life == 10) &&
-                     (thisSproingie->frame > 0) &&
+                     (thisSproingie->frame > FIRST_FRAME) &&
                      (thisSproingie->frame < BOOM_FRAME))) {
                        if ((--(thisSproingie->life)) < 1) {
                      (thisSproingie->frame < BOOM_FRAME))) {
                        if ((--(thisSproingie->life)) < 1) {
-                               thisSproingie->life = RESET_SPROINGIE;
+                               thisSproingie->life = RESET_SPROINGIE_LIFE;
                        } else if (thisSproingie->life < 9) {
                                thisSproingie->frame -= 2;
                        } else if (thisSproingie->life < 9) {
                                thisSproingie->frame -= 2;
-                       }
-               }               /* else wait here for frame 0 to come about. */
+                       } 
+               }               /* ... else wait here for frame FIRST_FRAME to come about. */
        } else if (++(thisSproingie->life) >= 0) {
        } else if (++(thisSproingie->life) >= 0) {
-               if (t > 1) {
+               if (1 || t > 1) {
                        g_higher = -3 + myrand(5);
                        g_back = -2 + myrand(5);
                } else if (t == 1) {
                        g_higher = -3 + myrand(5);
                        g_back = -2 + myrand(5);
                } else if (t == 1) {
@@ -316,20 +332,20 @@ AdvanceSproingie(int t, sp_instance * si)
                        g_back = 0;
                }
 
                        g_back = 0;
                }
 
-               thisSproingie->x = (-g_higher - g_back);
-               thisSproingie->y = (g_higher << 1);
-               thisSproingie->z = (g_back - g_higher);
-               thisSproingie->life = 40 + myrand(200);
-               thisSproingie->frame = -10;
-               thisSproingie->r = (GLfloat) (40 + myrand(200)) / 255.0;
-               thisSproingie->g = (GLfloat) (40 + myrand(200)) / 255.0;
-               thisSproingie->b = (GLfloat) (40 + myrand(200)) / 255.0;
+               thisSproingie->x     = (-g_higher - g_back);
+               thisSproingie->y     = (g_higher << 1);
+               thisSproingie->z     = (g_back - g_higher);
+               thisSproingie->life  = NEW_SPROINGIE_LIFE;
+               thisSproingie->frame = NO_FRAME;
+               thisSproingie->r     = (GLfloat) (40 + myrand(200)) / 255.0;
+               thisSproingie->g     = (GLfloat) (40 + myrand(200)) / 255.0;
+               thisSproingie->b     = (GLfloat) (40 + myrand(200)) / 255.0;
 
                for (t2 = 0; t2 < si->maxsproingies; ++t2) {
                        if ((t2 != t) && (thisSproingie->x == S2->x) &&
                            (thisSproingie->y == S2->y) && (thisSproingie->z == S2->z) &&
 
                for (t2 = 0; t2 < si->maxsproingies; ++t2) {
                        if ((t2 != t) && (thisSproingie->x == S2->x) &&
                            (thisSproingie->y == S2->y) && (thisSproingie->z == S2->z) &&
-                           (S2->life > 10) && (S2->frame < 0)) {
-                               /* If one is already being born, just wait. */
+                           (S2->life > 10) && (S2->frame < FIRST_FRAME)) {
+                               /* If another is already on this place, wait. */
                                thisSproingie->life = -1;
                        }
                        ++S2;
                                thisSproingie->life = -1;
                        }
                        ++S2;
@@ -344,8 +360,11 @@ NextSproingie(int screen)
        int         ddx, t;
        struct sPosColor *thisSproingie = &(si->positions[0]);
 
        int         ddx, t;
        struct sPosColor *thisSproingie = &(si->positions[0]);
 
+       /* Although the sproingies cycle has six frames, the blocks cycle  */
+       /* has twelve. After a full cycle (12 frames), re-center positions */
+       /* of sproingies                                                   */
        if (++si->sframe > 11) {
        if (++si->sframe > 11) {
-               si->sframe = 0;
+               si->sframe = FIRST_FRAME;
                for (t = 0; t < si->maxsproingies; ++t) {
                        thisSproingie->x -= 1;
                        thisSproingie->y += 2;
                for (t = 0; t < si->maxsproingies; ++t) {
                        thisSproingie->x -= 1;
                        thisSproingie->y += 2;
@@ -353,6 +372,7 @@ NextSproingie(int screen)
                        ++thisSproingie;
                }
        }
                        ++thisSproingie;
                }
        }
+
        for (t = 0; t < si->maxsproingies; ++t) {
                AdvanceSproingie(t, si);
        }
        for (t = 0; t < si->maxsproingies; ++t) {
                AdvanceSproingie(t, si);
        }
@@ -378,7 +398,7 @@ NextSproingie(int screen)
 
                if ((si->target_rx == si->rotx) && (si->target_ry == si->roty) &&
                    (si->target_dist == si->dist)) {
 
                if ((si->target_rx == si->rotx) && (si->target_ry == si->roty) &&
                    (si->target_dist == si->dist)) {
-                       si->target_count = T_COUNT;
+                       si->target_count = TARGET_COUNT;
                        if (si->target_dist <= 32)
                                si->target_count >>= 2;
                }
                        if (si->target_dist <= 32)
                                si->target_count >>= 2;
                }
@@ -417,7 +437,7 @@ ResetEm(void)
                positions[t].y = 0;
                positions[t].z = 0;
                positions[t].life = -2;
                positions[t].y = 0;
                positions[t].z = 0;
                positions[t].life = -2;
-               positions[t].frame = 0;
+               positions[t].frame = FIRST_FRAME;
        }
 }
 
        }
 }
 
@@ -483,7 +503,7 @@ rotyBSubtract(void)
        roty = (roty - 45) % 360;
 }
 
        roty = (roty - 45) % 360;
 }
 
-#endif
+#endif /* __AUXFUNCS__ */
 
 static void
 RenderSproingie(int t, sp_instance * si)
 
 static void
 RenderSproingie(int t, sp_instance * si)
@@ -509,7 +529,8 @@ RenderSproingie(int t, sp_instance * si)
                        glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_color);
                }
        }
                        glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_color);
                }
        }
-       if (thisSproingie->frame < 0) {
+
+       if (thisSproingie->frame < FIRST_FRAME) {
                glEnable(GL_CLIP_PLANE0);
                glTranslatef((GLfloat) (thisSproingie->x),
                             (GLfloat) (thisSproingie->y) +
                glEnable(GL_CLIP_PLANE0);
                glTranslatef((GLfloat) (thisSproingie->x),
                             (GLfloat) (thisSproingie->y) +
@@ -544,17 +565,62 @@ RenderSproingie(int t, sp_instance * si)
                if (!si->wireframe) {
                        glEnable(GL_LIGHTING);
                }
                if (!si->wireframe) {
                        glEnable(GL_LIGHTING);
                }
-       } else if (thisSproingie->frame > 5) {
-               glTranslatef((GLfloat) (thisSproingie->x + 1),
-                            (GLfloat) (thisSproingie->y - 1), (GLfloat) (thisSproingie->z - 1));
-               glRotatef((GLfloat) - 90.0, 0.0, 1.0, 0.0);
-/**            glCallList(si->sproingies[thisSproingie->frame - 6]);*/
-/**/   renderList(si->sproingies[thisSproingie->frame - 6], si->wireframe);
        } else {
        } else {
-               glTranslatef((GLfloat) (thisSproingie->x), (GLfloat) (thisSproingie->y),
-                            (GLfloat) (thisSproingie->z));
+               if (thisSproingie->direction == JUMP_LEFT) {
+                       /* When the sproingie jumps to the left, the frames must be */
+                       /* rotated and translated */
+                       glTranslatef((GLfloat) (thisSproingie->x    ),
+                                                (GLfloat) (thisSproingie->y    ), 
+                                                (GLfloat) (thisSproingie->z - 1));
+                       glRotatef((GLfloat) - 90.0, 0.0, 1.0, 0.0);
+                       if (thisSproingie->frame == LAST_FRAME) {
+                               thisSproingie->x -= 0;
+                               thisSproingie->y -= 1;
+                               thisSproingie->z += 1;
+                       } 
+               } else {
+                       glTranslatef((GLfloat) (thisSproingie->x),
+                                                (GLfloat) (thisSproingie->y), 
+                                                (GLfloat) (thisSproingie->z));
+                       glRotatef((GLfloat) - 0.0, 0.0, 1.0, 0.0);
+                       if (thisSproingie->frame == LAST_FRAME) {
+                               thisSproingie->x += 1;
+                               thisSproingie->y -= 1;
+                               thisSproingie->z -= 0;
+                       }
+               }
+/*     } */
 /**            glCallList(si->sproingies[thisSproingie->frame]);*/
 /**/   renderList(si->sproingies[thisSproingie->frame], si->wireframe);
 /**            glCallList(si->sproingies[thisSproingie->frame]);*/
 /**/   renderList(si->sproingies[thisSproingie->frame], si->wireframe);
+
+               /* Every 6 frame cycle... */
+               if (thisSproingie->frame == LAST_FRAME) {
+                       /* ...check if the sproingies have gone out of the bricks */
+                       if (((thisSproingie->x - thisSproingie->z == 6) &&
+                                (2*thisSproingie->x + thisSproingie->y == 6)) ||
+                               ((thisSproingie->z - thisSproingie->x == 5) &&
+                                (2*thisSproingie->x + thisSproingie->y == -5))) {
+                               /* If they have, then they die */
+                               if (thisSproingie->life > 0 && thisSproingie->frame < BOOM_FRAME && thisSproingie->frame > FIRST_FRAME) {
+                                       thisSproingie->frame = BOOM_FRAME;
+                               }
+                       } else {
+                               /* If not, they choose a direction for the next hop */
+                               if (smart_sproingies) {
+                                       if ((thisSproingie->x - thisSproingie->z == 5) &&   
+                                               (2*thisSproingie->x + thisSproingie->y == 5)) {
+                                               thisSproingie->direction = JUMP_LEFT;
+                                       } else if ((thisSproingie->z - thisSproingie->x == 4) &&   
+                                                (2*thisSproingie->x + thisSproingie->y == -4)) {
+                                               thisSproingie->direction = JUMP_RIGHT;
+                                       } else {
+                                               thisSproingie->direction = myrand(2);
+                                       }
+                               } else {
+                                       thisSproingie->direction = myrand(2);
+                               }
+                       }
+               }
        }
 
        glPopMatrix();
        }
 
        glPopMatrix();
@@ -716,8 +782,8 @@ CleanupSproingies(int screen)
 }
 
 void
 }
 
 void
-InitSproingies(int wfmode, int grnd, int mspr, int screen, int numscreens,
-              int mono)
+InitSproingies(int wfmode, int grnd, int mspr, int smrtspr, 
+                          int screen, int numscreens, int mono)
 {
        GLfloat     ambient[] =
        {0.2, 0.2, 0.2, 1.0};
 {
        GLfloat     ambient[] =
        {0.2, 0.2, 0.2, 1.0};
@@ -748,6 +814,8 @@ InitSproingies(int wfmode, int grnd, int mspr, int screen, int numscreens,
        if (mspr >= MAXSPROING)
                mspr = MAXSPROING - 1;
 
        if (mspr >= MAXSPROING)
                mspr = MAXSPROING - 1;
 
+       smart_sproingies = smrtspr; 
+
        si->rotx = 0;
        si->roty = -45;
        si->dist = (16 << 2);
        si->rotx = 0;
        si->roty = -45;
        si->dist = (16 << 2);
@@ -777,7 +845,8 @@ InitSproingies(int wfmode, int grnd, int mspr, int screen, int numscreens,
                si->positions[t].y = 0;
                si->positions[t].z = 0;
                si->positions[t].life = (-t * ((si->maxsproingies > 19) ? 1 : 4)) - 2;
                si->positions[t].y = 0;
                si->positions[t].z = 0;
                si->positions[t].life = (-t * ((si->maxsproingies > 19) ? 1 : 4)) - 2;
-               si->positions[t].frame = 0;
+               si->positions[t].frame = FIRST_FRAME;
+               si->positions[t].direction = myrand(2);
        }
 
 #if 0                          /* Test boom */
        }
 
 #if 0                          /* Test boom */
@@ -848,6 +917,7 @@ InitSproingies(int wfmode, int grnd, int mspr, int screen, int numscreens,
        }
 }
 
        }
 }
 
-#endif
+#endif /* USE_GL */
 
 /* End of sproingies.c */
 
 /* End of sproingies.c */
+
index 4824111f544b9b669ee6f157d9d617f5ddcff470..81c6cb7e35d15334816e4c9a7bb2525353d18d98 100644 (file)
@@ -21,5 +21,5 @@ extern void DisplaySproingies(int screen,int pause);
 extern void NextSproingieDisplay(int screen,int pause);
 extern void ReshapeSproingies(int w, int h);
 extern void CleanupSproingies(int screen);
 extern void NextSproingieDisplay(int screen,int pause);
 extern void ReshapeSproingies(int w, int h);
 extern void CleanupSproingies(int screen);
-extern void InitSproingies(int wfmode, int grnd, int mspr, int screen, 
-                           int numscreens, int mono);
+extern void InitSproingies(int wfmode, int grnd, int mspr, int smrtspr,
+                           int screen, int numscreens, int mono);
index 5a45f384fc0814f6dc0115eb5350538785ef1565..d00c93b8fe628b33d77020bdc4019265ee9f6887 100644 (file)
@@ -10,6 +10,7 @@ sproingies - Q-Bert meets Marble Madness!
 [\-count \fInumber\fP]
 [\-delay \fInumber\fP]
 [\-size \fInumber\fP]
 [\-count \fInumber\fP]
 [\-delay \fInumber\fP]
 [\-size \fInumber\fP]
+[\-no\-fall]
 [\-wireframe]
 [\-fps]
 .SH DESCRIPTION
 [\-wireframe]
 [\-fps]
 .SH DESCRIPTION
@@ -35,6 +36,9 @@ Per-frame delay, in microseconds.  Default: 25000 (0.03 seconds.).
 .B \-size \fInumber\fP
 How much to scale the image down.  Default 0 (full screen.)
 .TP 8
 .B \-size \fInumber\fP
 How much to scale the image down.  Default 0 (full screen.)
 .TP 8
+.B \-no\-fall
+Make sproingies "smart", so they do not fall down the edge.
+.TP 8
 .B \-wireframe
 Render in wireframe instead of solid.
 .TP 8
 .B \-wireframe
 Render in wireframe instead of solid.
 .TP 8
@@ -61,4 +65,4 @@ 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
 suitability of this software for any purpose.  It is provided "as is" without
 express or implied warranty.
 .SH AUTHOR
-Ed Mackey.
+Ed Mackey. Some aditional code by Sergio Gutiérrez "Sergut". 
index f247c97e9f7a2d91e46c9131b5b26cf033e41ad9..b16c87da6f1d33ba2e0b8403ac8a407d13bbd6cd 100644 (file)
@@ -22,14 +22,19 @@ static const char sccsid[] = "@(#)sproingiewrap.c   4.07 97/11/24 xlockmore";
  *
  *    Programming:  Ed Mackey, http://www.netaxs.com/~emackey/
  *                  Gordon Wrigley, gdw33@student.canterbury.ac.nz
  *
  *    Programming:  Ed Mackey, http://www.netaxs.com/~emackey/
  *                  Gordon Wrigley, gdw33@student.canterbury.ac.nz
+ *                  Sergio Gutiérrez "Sergut", sergut@gmail.com
  *    Sproingie 3D objects modeled by:  Al Mackey, al@iam.com
  *       (using MetaNURBS in NewTek's Lightwave 3D v5).
  *
  * Revision History:
  *    Sproingie 3D objects modeled by:  Al Mackey, al@iam.com
  *       (using MetaNURBS in NewTek's Lightwave 3D v5).
  *
  * Revision History:
+ * 01-Sep-06: Make the sproingies select a new direction after each hop
+ *              (6 frames); if they fall towards the edge, they explode.
+ *              (TODO: let them fall for a time before they explode or
+ *               disappear) [sergut]
  * 13-Dec-02: Changed triangle normals into vertex normals to give a smooth
  * 13-Dec-02: Changed triangle normals into vertex normals to give a smooth
-                apperance and moved the sproingies from Display Lists to 
                              Vertex Arrays, still need to do this for the TopsSides.
-                (gordon)
+ *              apperance and moved the sproingies from Display Lists to
*              Vertex Arrays, still need to do this for the TopsSides.
+ *              [gordon]
  * 26-Apr-97: Added glPointSize() calls around explosions, plus other fixes.
  * 28-Mar-97: Added size support.
  * 22-Mar-97: Updated to use glX interface instead of xmesa one.
  * 26-Apr-97: Added glPointSize() calls around explosions, plus other fixes.
  * 28-Mar-97: Added size support.
  * 22-Mar-97: Updated to use glX interface instead of xmesa one.
@@ -40,31 +45,14 @@ static const char sccsid[] = "@(#)sproingiewrap.c   4.07 97/11/24 xlockmore";
  * 09-Dec-96: Written.
  */
 
  * 09-Dec-96: Written.
  */
 
-/*-
- * The sproingies have six "real" frames, (s1_1 to s1_6) that show a
- * sproingie jumping off a block, headed down and to the right.  But
- * the program thinks of sproingies as having twelve "virtual" frames,
- * with the latter six being copies of the first, only lowered and
- * rotated by 90 degrees (jumping to the left).  So after going
- * through 12 frames, a sproingie has gone down two rows but not
- * moved horizontally. 
- *
- * To have the sproingies randomly choose left/right jumps at each
- * block, the program should go back to thinking of only 6 frames,
- * and jumping down only one row when it is done.  Then it can pick a
- * direction for the next row.
- *
- * (Falling off the end might not be so bad either.  :) )  
- */
-
 #ifdef STANDALONE
 #ifdef STANDALONE
-# define DEFAULTS      "*delay:                25000   \n"                     \
-                                       "*count:                5       \n"                     \
-                                       "*cycles:               0       \n"                     \
+# define DEFAULTS      "*delay:                30000   \n"                     \
+                                       "*count:                8       \n"                     \
                                        "*size:                 0       \n"                     \
                                        "*showFPS:      False   \n"                     \
                                        "*fpsTop:       True    \n"                     \
                                        "*wireframe:    False   \n"
                                        "*size:                 0       \n"                     \
                                        "*showFPS:      False   \n"                     \
                                        "*fpsTop:       True    \n"                     \
                                        "*wireframe:    False   \n"
+
 # define refresh_sproingies 0
 # define sproingies_handle_event 0
 # include "xlockmore.h"                                /* from the xscreensaver distribution */
 # define refresh_sproingies 0
 # define sproingies_handle_event 0
 # include "xlockmore.h"                                /* from the xscreensaver distribution */
@@ -74,10 +62,26 @@ static const char sccsid[] = "@(#)sproingiewrap.c   4.07 97/11/24 xlockmore";
 
 #ifdef USE_GL
 
 
 #ifdef USE_GL
 
+#define DEF_SMART_SPROINGIES "True" /* Smart sproingies do not fall down the edge */
+
 #include "sproingies.h"
 
 #include "sproingies.h"
 
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+static XrmOptionDescRec opts[] = {
+    {"-fall",     ".smartSproingies",  XrmoptionNoArg,  "False"},
+    {"-no-fall",  ".smartSproingies",  XrmoptionNoArg,  "True"},
+};
+
+static int smrt_spr;
+
+static argtype vars[] = {
+    {&smrt_spr,  "smartSproingies",  "Boolean",  DEF_SMART_SPROINGIES,  t_Bool},
+};
+
 ENTRYPOINT ModeSpecOpt sproingies_opts =
 ENTRYPOINT ModeSpecOpt sproingies_opts =
-{0, NULL, 0, NULL, NULL};
+{countof(opts), opts, countof(vars), vars, NULL};
 
 #ifdef USE_MODULES
 ModStruct   sproingies_description =
 
 #ifdef USE_MODULES
 ModStruct   sproingies_description =
@@ -97,7 +101,8 @@ void        NextSproingieDisplay(int screen,int pause);
 void        DisplaySproingies(int screen,int pause);
 void        ReshapeSproingies(int w, int h);
 void        CleanupSproingies(int screen);
 void        DisplaySproingies(int screen,int pause);
 void        ReshapeSproingies(int w, int h);
 void        CleanupSproingies(int screen);
-void        InitSproingies(int wfmode, int grnd, int mspr, int screen, int numscreens, int mono);
+void        InitSproingies(int wfmode, int grnd, int mspr, int smrtspr,
+                                                  int screen, int numscreens, int mono);
 
 typedef struct {
        GLfloat     view_rotx, view_roty, view_rotz;
 
 typedef struct {
        GLfloat     view_rotx, view_roty, view_rotz;
@@ -112,18 +117,18 @@ typedef struct {
 
 static sproingiesstruct *sproingies = NULL;
 
 
 static sproingiesstruct *sproingies = NULL;
 
+
 ENTRYPOINT void
 init_sproingies (ModeInfo * mi)
 {
        Window      window = MI_WINDOW(mi);
        int         screen = MI_SCREEN(mi);
 
 ENTRYPOINT void
 init_sproingies (ModeInfo * mi)
 {
        Window      window = MI_WINDOW(mi);
        int         screen = MI_SCREEN(mi);
 
-       int         cycles = MI_CYCLES(mi);
        int         count = MI_COUNT(mi);
        int         size = MI_SIZE(mi);
 
        sproingiesstruct *sp;
        int         count = MI_COUNT(mi);
        int         size = MI_SIZE(mi);
 
        sproingiesstruct *sp;
-       int         wfmode = 0, grnd, mspr, w, h;
+       int         wfmode = 0, grnd = 0, mspr, w, h;
 
        if (sproingies == NULL) {
                if ((sproingies = (sproingiesstruct *) calloc(MI_NUM_SCREENS(mi),
 
        if (sproingies == NULL) {
                if ((sproingies = (sproingiesstruct *) calloc(MI_NUM_SCREENS(mi),
@@ -136,9 +141,9 @@ init_sproingies (ModeInfo * mi)
        sp->window = window;
        if ((sp->glx_context = init_GL(mi)) != NULL) {
 
        sp->window = window;
        if ((sp->glx_context = init_GL(mi)) != NULL) {
 
-               if ((cycles & 1) || MI_IS_WIREFRAME(mi))
+               if (MI_IS_WIREFRAME(mi))
                        wfmode = 1;
                        wfmode = 1;
-               grnd = (cycles >> 1);
+
                if (grnd > 2)
                        grnd = 2;
 
                if (grnd > 2)
                        grnd = 2;
 
@@ -147,7 +152,7 @@ init_sproingies (ModeInfo * mi)
                        mspr = 100;
 
                /* wireframe, ground, maxsproingies */
                        mspr = 100;
 
                /* wireframe, ground, maxsproingies */
-               InitSproingies(wfmode, grnd, mspr, MI_SCREEN(mi), MI_NUM_SCREENS(mi), sp->mono);
+               InitSproingies(wfmode, grnd, mspr, smrt_spr, MI_SCREEN(mi), MI_NUM_SCREENS(mi), sp->mono);
 
                /* Viewport is specified size if size >= MINSIZE && size < screensize */
                if (size == 0) {
 
                /* Viewport is specified size if size >= MINSIZE && size < screensize */
                if (size == 0) {
@@ -239,6 +244,6 @@ release_sproingies (ModeInfo * mi)
 
 XSCREENSAVER_MODULE ("Sproingies", sproingies)
 
 
 XSCREENSAVER_MODULE ("Sproingies", sproingies)
 
-#endif
+#endif /* USE_GL */
 
 /* End of sproingiewrap.c */
 
 /* End of sproingiewrap.c */
index 4377069798085d1593db1d3a1bb22be68fb7e04a..f2161e439df63e4a3165b0ba63472503e9344aaa 100644 (file)
-/* topblock, Copyright (c) 2006 rednuht <topblock.xscreensaver@jumpstation.co.uk>\r
- *\r
- * Permission to use, copy, modify, distribute, and sell this software and its\r
- * documentation for any purpose is hereby granted without fee, provided that\r
- * the above copyright notice appear in all copies and that both that\r
- * copyright notice and this permission notice appear in supporting\r
- * documentation.  No representations are made about the suitability of this\r
- * software for any purpose.  It is provided "as is" without express or \r
- * implied warranty.\r
- *\r
- * \r
- *\r
-\r
-topBlock - a simple openGL 3D hack of falling blocks\r
-based on jwz's dangerball hack\r
-\r
-The proporations of the blocks and their features is not even close to the commercial building block products offered by a variety companies.\r
-\r
-information on this hack might be found at \r
-http://www.jumpstation.co.uk/xscreensaver/topblock/\r
-\r
-History\r
-25/02/2006 v1.0 release\r
-29/04/2006 v1.11 updated to better fit with xscreensaver v5\r
-                 colors defaults to 7 (no black)\r
-*/\r
-\r
-#include <math.h>\r
-\r
-# define refresh_topBlock 0\r
-\r
-#define DEFAULTS       "*delay:        10000       \n" \\r
-                       "*count:        30           \n" \\r
-                       "*showFPS:      False       \n" \\r
-                       "*wireframe:    False       \n" \\r
-\r
-#undef countof\r
-#define countof(x) (sizeof((x))/sizeof((*x)))\r
-\r
-#include "xlockmore.h"\r
-#include "topblock.h"\r
-#include "sphere.h"\r
-#include <ctype.h>\r
-\r
-#ifdef USE_GL /* whole file */\r
-\r
-#ifdef HAVE_COCOA\r
-# include <OpenGL/glu.h>\r
-#else\r
-# include <GL/glu.h>\r
-#endif\r
-\r
-typedef struct\r
-{\r
-  GLXContext *glx_context;\r
-  int numFallingBlocks;\r
-  GLfloat highest,highestFalling;\r
-  GLfloat eyeLine,eyeX,eyeY,eyeZ;\r
-  int carpetWidth, carpetLength;\r
-  int followMode;\r
-  GLfloat followRadius,followAngle;\r
-  int plusheight;\r
-  GLuint       carpet;\r
-  GLuint       block;\r
-  NODE *blockNodeRoot;\r
-  NODE *blockNodeFollow;\r
-  GLfloat rotation;\r
-} topBlockSTATE;\r
-\r
-/* parameter vars */\r
-Bool override;\r
-Bool rotate;\r
-Bool follow;\r
-Bool drawCarpet;\r
-Bool drawBlob;\r
-Bool drawNipples;\r
-GLfloat rotateSpeed;\r
-GLfloat camX;\r
-GLfloat camY;\r
-GLfloat camZ;\r
-GLfloat dropSpeed;\r
-int maxFalling;\r
-int maxColors;\r
-int size;\r
-int spawn;\r
-int resolution;\r
-\r
-static XrmOptionDescRec opts[] = {\r
-  { "-size",        ".size",        XrmoptionSepArg, 0 },\r
-  { "-spawn",       ".spawn",       XrmoptionSepArg, 0 },\r
-  { "-camX",        ".camX",        XrmoptionSepArg, 0 },\r
-  { "-camY",        ".camY",        XrmoptionSepArg, 0 },\r
-  { "-camZ",        ".camZ",        XrmoptionSepArg, 0 },\r
-  { "+rotate",      ".rotate",      XrmoptionNoArg, "False" },\r
-  { "-rotate",      ".rotate",      XrmoptionNoArg, "True" },\r
-  { "+carpet",      ".carpet",      XrmoptionNoArg, "False" },\r
-  { "+nipples",     ".nipples",     XrmoptionNoArg, "False" },\r
-  { "-blob",        ".blob",        XrmoptionNoArg, "True" },\r
-  { "-rotateSpeed", ".rotateSpeed", XrmoptionSepArg, 0 },\r
-  { "-follow",      ".follow",      XrmoptionNoArg, "True" },\r
-  { "-maxFalling",  ".maxFalling",  XrmoptionSepArg, 0 },\r
-  { "-resolution",  ".resolution",  XrmoptionSepArg, 0 },\r
-  { "-maxColors",   ".maxColors",   XrmoptionSepArg, 0 },\r
-  { "-dropSpeed",   ".dropSpeed",   XrmoptionSepArg, 0 },\r
-  { "-override",    ".override",    XrmoptionNoArg, "True" },\r
-};\r
-\r
-#define DEF_override      "False"\r
-#define DEF_rotate        "True"\r
-#define DEF_follow        "False"\r
-#define DEF_drawCarpet    "True"\r
-#define DEF_drawBlob      "False"\r
-#define DEF_drawNipples   "True"\r
-#define DEF_rotateSpeed   "10"\r
-#define DEF_maxFalling    "500"\r
-#define DEF_maxColors     "7"\r
-#define DEF_size          "2"\r
-#define DEF_spawn         "50"\r
-#define DEF_resolution    "4"\r
-#define DEF_camX          "1"\r
-#define DEF_camY          "20"\r
-#define DEF_camZ          "25"\r
-#define DEF_dropSpeed     "4"\r
-\r
-static argtype vars[] = {\r
-  {&override,     "override",     "Override",     DEF_override,     t_Bool},\r
-  {&rotate,       "rotate",       "Rotate",       DEF_rotate,       t_Bool},\r
-  {&drawCarpet,   "carpet",       "Carpet",       DEF_drawCarpet,   t_Bool},\r
-  {&drawNipples,  "nipples",      "Nipples",      DEF_drawNipples,  t_Bool},\r
-  {&drawBlob,     "blob",         "Blob",         DEF_drawBlob,     t_Bool},\r
-  {&rotateSpeed,  "rotateSpeed",  "RotateSpeed",  DEF_rotateSpeed,  t_Float},\r
-  {&follow,       "follow",       "Follow",       DEF_follow,       t_Bool},\r
-  {&camX,         "camX",         "camX",         DEF_camX,         t_Float},\r
-  {&camY,         "camY",         "camY",         DEF_camY,         t_Float},\r
-  {&camZ,         "camZ",         "camZ",         DEF_camZ,         t_Float},\r
-  {&size,         "size",         "size",         DEF_size,         t_Int},\r
-  {&spawn,        "spawn",        "spawn",        DEF_spawn,        t_Int},\r
-  {&maxFalling,   "maxFalling",   "maxFalling",   DEF_maxFalling,   t_Int},\r
-  {&resolution,   "resolution",   "resolution",   DEF_resolution,   t_Int},\r
-  {&maxColors,    "maxColors",    "maxColors",    DEF_maxColors,    t_Int},\r
-  {&dropSpeed,    "dropSpeed",    "DropSpeed",    DEF_dropSpeed,    t_Float},\r
-};\r
-\r
-static topBlockSTATE *tbs = NULL;\r
-\r
-ModeSpecOpt topBlock_opts = {countof(opts), opts, countof(vars), vars, NULL};\r
-\r
-/* Window management, etc */\r
-ENTRYPOINT void\r
-reshape_topBlock (ModeInfo *mi, int width, int height) {\r
-  GLfloat h = (GLfloat) height / (GLfloat) width;\r
-  glViewport (0, 0, (GLint) width, (GLint) height);\r
-  glMatrixMode(GL_PROJECTION);\r
-  glLoadIdentity();\r
-  gluPerspective (60.0, 1/h, 1.0, 1000.0);\r
-  glMatrixMode(GL_MODELVIEW);\r
-  glLoadIdentity();\r
-  glClear(GL_COLOR_BUFFER_BIT);\r
-}\r
-\r
-/* clean up on exit, not required ... */\r
-ENTRYPOINT void\r
-  release_topBlock(ModeInfo *mi) {\r
-  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];\r
-       NODE *llCurrent, *llOld;\r
-       llCurrent = tb->blockNodeRoot;\r
-       while (llCurrent != NULL) {\r
-               llOld = llCurrent;\r
-               llCurrent = llCurrent->next;\r
-               free(llOld);\r
-       }\r
-}\r
-\r
-/* setup */\r
-ENTRYPOINT void \r
-init_topBlock (ModeInfo *mi)\r
-{\r
-  topBlockSTATE *tb;\r
-  int wire = MI_IS_WIREFRAME(mi);\r
-\r
-  if (!tbs) {\r
-    tbs = (topBlockSTATE *)\r
-      calloc (MI_NUM_SCREENS(mi), sizeof (topBlockSTATE));\r
-    if (!tbs) {\r
-      fprintf(stderr, "%s: out of memory\n", progname);\r
-      exit(1);\r
-    }\r
-  }\r
-\r
-  tb = &tbs[MI_SCREEN(mi)];\r
-\r
-  tb->glx_context = init_GL(mi);\r
-\r
-  reshape_topBlock (mi, MI_WIDTH(mi), MI_HEIGHT(mi));\r
-\r
-       if (wire) { drawNipples=False; }\r
-  tb->numFallingBlocks=0;\r
-\r
-       if (size>10) { size = 10; }\r
-       if (size<1) { size = 2; }\r
-       tb->carpetWidth = 8 * size;\r
-       tb->carpetLength = tb->carpetWidth;\r
-  \r
-  maxFalling=maxFalling*size;\r
-\r
-       if (spawn<4) { spawn=4; }\r
-       if (spawn>1000) { spawn=1000; }\r
-\r
-       if (rotateSpeed<1) {rotateSpeed=1; }\r
-       if (rotateSpeed>1000) {rotateSpeed=1000;}\r
-  rotateSpeed = rotateSpeed / 100;\r
-\r
-       if (resolution<4) {resolution=4;}\r
-       if (resolution>20) {resolution=20;}\r
-  resolution=resolution*2;\r
-\r
-       if (maxColors<1) {maxColors=1;}\r
-       if (maxColors>8) {maxColors=8;}\r
-\r
-       if (dropSpeed<1) {dropSpeed=1;}\r
-       if (dropSpeed>9) {dropSpeed=9;} /* 10+ produces blocks that can pass through each other */\r
-  \r
-       dropSpeed = 80/dropSpeed;\r
-       dropSpeed = (blockHeight/dropSpeed); \r
-\r
-  tb->glx_context = init_GL(mi);\r
-\r
-  reshape_topBlock (mi, MI_WIDTH(mi), MI_HEIGHT(mi));\r
-  if (0==1) {\r
-      glClearColor(1.0f, 1.0f, 1.0f, 0.5f);\r
-  } else {\r
-      glClearColor(0.0f, 0.0f, 0.0f, 0.5f);\r
-  }\r
-  glClearDepth(1.0f);\r
-  if (!wire) {\r
-    GLfloat pos[4] = {10.0, 10.0, 1.0, 0.0};\r
-    GLfloat amb[4] = {0.1, 0.1, 0.1, 1.0};\r
-    GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0};\r
-    GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0};\r
-\r
-    glEnable(GL_LIGHTING);\r
-    glEnable(GL_LIGHT0);\r
-    glLightfv(GL_LIGHT0, GL_POSITION, pos);\r
-    glLightfv(GL_LIGHT0, GL_AMBIENT,  amb); \r
-    glLightfv(GL_LIGHT0, GL_DIFFUSE,  dif);\r
-    glLightfv(GL_LIGHT0, GL_SPECULAR, spc); \r
-  }\r
-       glDepthFunc(GL_LEQUAL);\r
-  glEnable(GL_DEPTH_TEST);\r
-  glDisable(GL_CULL_FACE); /* all objects exhibit a reverse side */\r
-  glCullFace(GL_BACK); \r
-\r
-       if (drawBlob) {\r
-    buildBlobBlock(mi); \r
-       } else {\r
-         buildBlock(mi);               /* build the display list holding the simple block */\r
-       }\r
-  buildCarpet(mi);             /* build the base */\r
-       tb->highest=0;\r
-       tb->highestFalling=0;\r
-       tb->eyeLine=tb->highest;\r
-       tb->eyeX=0;\r
-       tb->eyeY=0;\r
-       tb->eyeZ=0;\r
-       tb->followMode=0;\r
-  if (follow) {\r
-    tb->plusheight=100;\r
-    camZ=camZ-60;\r
-  } else {\r
-    tb->rotation=random() % 360;\r
-    tb->eyeY=10;\r
-    tb->plusheight=30;\r
-  }\r
-       tb->followRadius=0;\r
-  /* override camera settings */\r
-  if (override) {\r
-    tb->plusheight=100;\r
-    drawCarpet=False;\r
-    camX=0;\r
-    camY=1;\r
-    camZ=0;\r
-    tb->eyeX=-1;\r
-    tb->eyeY=20;\r
-    tb->eyeZ=0;\r
-  }\r
-}\r
-\r
-/* provides the per frame entertainment */\r
-ENTRYPOINT void\r
-draw_topBlock (ModeInfo *mi) {\r
-       Display *dpy = MI_DISPLAY(mi);\r
-       Window window = MI_WINDOW(mi);\r
-       NODE *llCurrent;\r
-       NODE *llNode;\r
-       topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];\r
-       GLfloat spcN1x,spcN1y,spcN2x,spcN2y;\r
-       GLfloat spcC1x,spcC1y,spcC2x,spcC2y;\r
-       int wire = MI_IS_WIREFRAME(mi);\r
-         GLfloat color[4];     \r
-\r
-  if (!tb->glx_context)\r
-    return;\r
-  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tb->glx_context));\r
-\r
-       generateNewBlock(mi);\r
-\r
-       if (rotate) { tb->rotation += rotateSpeed; } \r
-       if (tb->rotation>=360) { tb->rotation=tb->rotation-360; } \r
-\r
-       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);             /* clear current */\r
-       glLoadIdentity();       /* resets directions, do it every time ! */\r
-\r
-       if (!follow) {\r
-               if (tb->highest>tb->eyeLine) { tb->eyeLine=tb->eyeLine + ((tb->highest-tb->eyeLine)/100);       } /* creates a smooth camera transition */\r
-               gluLookAt(camX, camY+tb->eyeLine, camZ, tb->eyeX, tb->eyeY+tb->eyeLine, tb->eyeZ, 0.0, 1.0, 0.0);               /* setup viewer, xyz cam, xyz looking at and where is up normaly 0,1,0 */\r
-               glRotatef(90, 1.0, 0.0, 0.0);                   /* x axis */\r
-       } else {\r
-               glRotatef(90, 0.0, 0.0, 1.0);     /* z axis */\r
-               followBlock(mi);\r
-       }\r
-       /* rotate the world */\r
-       glRotatef(tb->rotation, 0.0, 0.0, 1.0);         \r
-\r
-       llCurrent = tb->blockNodeRoot;\r
-       if (drawCarpet) {\r
-               /* center carpet */\r
-               glTranslatef(0.0-(tb->carpetWidth/2),0.0-(tb->carpetLength/2),0.0);\r
-               glCallList(tb->carpet);\r
-               glTranslatef(0.0+(tb->carpetWidth/2),0.0+(tb->carpetLength/2),0.0);\r
-               glTranslatef(0.0,0.0,-0.55);\r
-       }\r
-       tb->highestFalling=0;\r
-       while (llCurrent != NULL) {     /* for each block */\r
-               glPushMatrix(); /* save state */\r
-               /* set color */\r
-               switch (llCurrent->color) { \r
-                       case 0:\r
-                               color[0] = 1.0f;        \r
-                               color[1] = 0.0f;        \r
-                               color[2] = 0.0f;        \r
-                               color[3] = 1.0f;        \r
-                               break;\r
-                       case 1:\r
-                               color[0] = 0.0f;        \r
-                               color[1] = 1.0f;        \r
-                               color[2] = 0.0f;        \r
-                               color[3] = 1.0f;        \r
-                               break;\r
-                       case 2:\r
-                               color[0] = 0.0f;        \r
-                               color[1] = 0.0f;        \r
-                               color[2] = 1.0f;        \r
-                               color[3] = 1.0f;        \r
-                               break;\r
-                       case 3:\r
-                               color[0] = 0.95f;       \r
-                               color[1] = 0.95f;       \r
-                               color[2] = 0.95f;       \r
-                               color[3] = 1.0f;        \r
-                               break;\r
-                       case 4:\r
-                               color[0] = 1.0f;        \r
-                               color[1] = 0.5f;        \r
-                               color[2] = 0.0f;        \r
-                               color[3] = 1.0f;        \r
-                               break;\r
-                       case 5:\r
-                               color[0] = 1.0f;        \r
-                               color[1] = 1.0f;        \r
-                               color[2] = 0.0f;        \r
-                               color[3] = 1.0f;        \r
-                               break;\r
-                       case 6: \r
-                               color[0] = 0.5f;        \r
-                               color[1] = 0.5f;        \r
-                               color[2] = 0.5f;        \r
-                               color[3] = 1.0f;        \r
-                               break;\r
-                       case 7:\r
-                               color[0] = 0.05f;       \r
-                               color[1] = 0.05f;       \r
-                               color[2] = 0.05f;       \r
-                               color[3] = 1.0f;        \r
-                               break;\r
-               } \r
-               if (wire) { glColor3fv(color); }\r
-               else { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); }\r
-\r
-               if (llCurrent->falling==1) {\r
-       spcC2x = 0;\r
-           spcC2y = 0;\r
-           spcN2x = 0;\r
-           spcN2y = 0;\r
-                       if (llCurrent->height>tb->highestFalling) {tb->highestFalling=llCurrent->height;}\r
-                       /* all blocks fall at the same rate to avoid mid air collisions */\r
-                       llCurrent->height=llCurrent->height-dropSpeed;\r
-                       if (llCurrent->height<=0) {\r
-                               llCurrent->falling=0;\r
-                               if (tb->highest==0) { \r
-                                       tb->highest=tb->highest+blockHeight; \r
-                               }\r
-                       } \r
-                       if ( (llCurrent->height<=tb->highest+1) && (llCurrent->falling==1) ) {\r
-                               /* check for collision */\r
-                               llNode = tb->blockNodeRoot;\r
-                               spcC1x = llCurrent->x;\r
-                               spcC1y = llCurrent->y;\r
-                               switch(llCurrent->rotation) {\r
-                                       case getOrientation(0):\r
-                                               spcC2x = spcC1x;\r
-                                               spcC2y = spcC1y-2;\r
-                                               break;\r
-                                       case getOrientation(1):\r
-                                               spcC2x = spcC1x+2;\r
-                                               spcC2y = spcC1y;\r
-                                               break;\r
-                                       case getOrientation(2):\r
-                                               spcC2x = spcC1x;\r
-                                               spcC2y = spcC1y+2;\r
-                                               break;\r
-                                       case getOrientation(3):\r
-                                               spcC2x = spcC1x-2;\r
-                                               spcC2y = spcC1y;\r
-                                               break;\r
-                               }\r
-                               while (llNode != NULL) {\r
-                                       if ( (llNode->falling==0) && (llCurrent->falling==1) ) {\r
-                                               spcN1x = llNode->x;\r
-                                               spcN1y = llNode->y;\r
-                                               switch(llNode->rotation) {\r
-                                                       case getOrientation(0):\r
-                                                               spcN2x = spcN1x;\r
-                                                               spcN2y = spcN1y-2;\r
-                                                               break;\r
-                                                       case getOrientation(1):\r
-                                                               spcN2x = spcN1x+2;\r
-                                                               spcN2y = spcN1y;\r
-                                                               break;\r
-                                                       case getOrientation(2):\r
-                                                               spcN2x = spcN1x;\r
-                                                               spcN2y = spcN1y+2;\r
-                                                               break;\r
-                                                       case getOrientation(3):\r
-                                                               spcN2x = spcN1x-2;\r
-                                                               spcN2y = spcN1y;\r
-                                                               break;\r
-                                               }\r
-                                               if ( \r
-                                                       ( (spcC1x==spcN1x) && (spcC1y==spcN1y) ) ||\r
-                                                       ( (spcC1x==spcN2x) && (spcC1y==spcN2y) ) ||\r
-                                                       ( (spcC2x==spcN2x) && (spcC2y==spcN2y) ) ||\r
-                                                       ( (spcC2x==spcN1x) && (spcC2y==spcN1y) )\r
-                                               ){\r
-                                     if ( (llCurrent->height<=llNode->height+blockHeight+TOLLERANCE) && (llCurrent->height>=llNode->height+blockHeight-TOLLERANCE) )  {\r
-                                                   llCurrent->falling=0;\r
-                                                         llCurrent->height=llNode->height+blockHeight; /* if this is missing then small errors build up until the model fails */\r
-                                                         if ( (llCurrent->height<=tb->highest+TOLLERANCE) && (llCurrent->height>=tb->highest-TOLLERANCE) ) { \r
-                                                          tb->highest=tb->highest+blockHeight; \r
-                                                         }\r
-                                                 }\r
-                                         }\r
-                                 }\r
-                                 llNode=llNode->next;\r
-                         }                             \r
-                 }\r
-         } \r
-       /* set location in space */\r
-         glTranslatef(llCurrent->x,llCurrent->y,-llCurrent->height);\r
-         /* rotate */\r
-       glRotatef(llCurrent->rotation, 0.0f, 0.0f, 1.0f);\r
-       if ((tb->followMode==0) && (llCurrent->next==NULL)) {\r
-               tb->blockNodeFollow = llCurrent;\r
-               tb->followMode=1;\r
-       } \r
-       llCurrent = llCurrent->next;\r
-       /* draw   */\r
-       glCallList(tb->block); \r
-       glPopMatrix();  /* restore state */\r
-  } \r
-  if (mi->fps_p) do_fps (mi);\r
-  glFinish();\r
-\r
-       if (tb->highest>(5*maxFalling)) { drawCarpet=False; }\r
-  glXSwapBuffers(dpy, window);\r
-}\r
-\r
-\r
-\r
-/* camera is in follow mode, work out where we should be looking */\r
-static void followBlock(ModeInfo *mi) {\r
-       GLfloat xLen,yLen,cx,cy,rangle,xTarget,yTarget;\r
-  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];\r
-  cx=0;cy=0;\r
-       if ((tb->blockNodeFollow!=NULL) && (tb->followMode==1)){\r
-\r
-               if (tb->highest>tb->eyeLine) { tb->eyeLine=tb->eyeLine + ((tb->highest-tb->eyeLine)/100);       } \r
-                 /*tb->blockNodeFollow->color=1;  only noticable if you set the colors to 1 */\r
-               \r
-                       if (tb->blockNodeFollow->height > tb->eyeZ) { tb->eyeZ=tb->eyeZ +  ((tb->blockNodeFollow->height - tb->eyeZ)/100); } \r
-                       if (tb->blockNodeFollow->height < tb->eyeZ) { tb->eyeZ=tb->eyeZ - ((tb->eyeZ - tb->blockNodeFollow->height)/100); } \r
-               \r
-\r
-               /* when the scene is rotated we need to know where the block is in the 2 dimensional coordinates of the carpet area\r
-                  (see http://www.jumpstation.co.uk/rotation/)\r
-               */\r
-\r
-               if (tb->followRadius==0) {              \r
-                       xLen = tb->blockNodeFollow->x-cx;\r
-                       yLen = tb->blockNodeFollow->y-cy;\r
-                       tb->followRadius=sqrt( (xLen*xLen) + (yLen*yLen) );     \r
-                       tb->followAngle = (180/M_PI) * asin(xLen/tb->followRadius); \r
-                       tb->followAngle = quadrantCorrection(tb->followAngle,(int)cx,(int)cy,(int)tb->blockNodeFollow->x,(int)tb->blockNodeFollow->y);\r
-               }\r
-               rangle = (tb->followAngle+tb->rotation) * M_PI /180;\r
-               xTarget = cos(rangle) * tb->followRadius + cx;\r
-               yTarget = sin(rangle) * tb->followRadius + cy;\r
-               if (tb->followAngle>360) { tb->followAngle=tb->followAngle-360; }\r
-\r
-               if (xTarget < tb->eyeX) { tb->eyeX=tb->eyeX - ((tb->eyeX - xTarget)/100); }\r
-               if (xTarget > tb->eyeX) { tb->eyeX=tb->eyeX + ((xTarget - tb->eyeX)/100); }\r
-\r
-               if (yTarget < tb->eyeY) { tb->eyeY=tb->eyeY - ((tb->eyeY - yTarget)/100); }\r
-               if (yTarget > tb->eyeY) { tb->eyeY=tb->eyeY + ((yTarget - tb->eyeY)/100); }\r
- /*\r
-               tb->eyeX = xTarget;\r
-               tb->eyeY = yTarget;\r
-***************************************************************************\r
-*/\r
-               if (!tb->blockNodeFollow->falling) {  \r
-                       tb->followMode=0; \r
-                       /*tb->blockNodeFollow->color=2;  only noticable if you set the colors to 1 */\r
-                       tb->followRadius=0;\r
-               } \r
-       }\r
-       gluLookAt(camX, camY, camZ-tb->eyeLine, tb->eyeX, tb->eyeY, -tb->eyeZ,-1.0,0.0,0.0);\r
-}\r
-\r
-/* each quater of the circle has to be adjusted for */\r
-static double quadrantCorrection(double angle,int cx,int cy,int x,int y) {\r
-       if ((x>=cx) && (y>=cy)) {\r
-               angle = angle + (90-(angle-90) * 2); \r
-       } else if ((x>=cx) && (y<=cy)) {\r
-               angle = angle + 90; \r
-       } else if ((x<=cx) && (y<=cy)) {\r
-               angle = angle + 90; \r
-       } else if ((x<=cx) && (y>=cy)) {\r
-               angle = angle + (90-(angle-90) * 2); \r
-       }\r
-       return(angle-180);\r
-}\r
-\r
-/* if random chance then create a new falling block */\r
-static void generateNewBlock(ModeInfo *mi) {\r
-       NODE *llCurrent, *llTail;\r
-       GLfloat startOffx, startOffy;\r
-       int endOffx, endOffy;\r
-  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];\r
-       if ( ((random() % spawn) == 1) && (tb->highestFalling<getHeight((tb->plusheight-blockHeight)+tb->highest)) ) {  \r
-               startOffx=0;\r
-               endOffx=0;\r
-               startOffy=0;\r
-               endOffy=0;\r
-               tb->numFallingBlocks++;\r
-               llTail = tb->blockNodeRoot; \r
-               if (llTail == NULL) {\r
-                       if ((llCurrent = ((NODE*) malloc(sizeof(NODE)))) == NULL) {     fprintf(stderr, "%s: out of memory.\n", progname); }\r
-                       llTail = llCurrent;\r
-                       tb->blockNodeRoot = llCurrent; \r
-               } else {\r
-                       if (tb->numFallingBlocks>=maxFalling) {\r
-                               /* recycle */\r
-                               llCurrent=llTail->next;\r
-                               tb->blockNodeRoot=llCurrent->next;\r
-                       } else {\r
-                               if ((llCurrent = ((NODE*) malloc(sizeof(NODE)))) == NULL) {     fprintf(stderr, "%s: out of memory..\n", progname); }\r
-                       }\r
-                       while (llTail->next != NULL) { llTail = llTail->next; } /* find last item in list */\r
-               }\r
-               llCurrent->falling=1;\r
-               llCurrent->rotation=getOrientation(random() % 4); \r
-               if (llCurrent->rotation==getOrientation(0)) {\r
-                       startOffx=1.0;\r
-                       endOffx=0;\r
-                       startOffy=3.0;\r
-                       endOffy=-1;\r
-               } else if (llCurrent->rotation==getOrientation(1)) {\r
-                       startOffx=1.0;\r
-                       endOffx=-1;\r
-                       startOffy=1.0;\r
-                       endOffy=0;              \r
-               } else if (llCurrent->rotation==getOrientation(2)) {\r
-                       startOffx=1.0;\r
-                       endOffx=0;\r
-                       startOffy=3.0;\r
-                       endOffy=-1;             \r
-               } else if (llCurrent->rotation==getOrientation(3)) { \r
-                       startOffx=5.0;\r
-                       endOffx=-1;\r
-                       startOffy=1.0;\r
-                       endOffy=0;              \r
-               }\r
-\r
-               llCurrent->x=(startOffx-(tb->carpetLength/2)) + getLocation(random() % ((tb->carpetLength/2)+endOffx) );\r
-               llCurrent->y=(startOffy-(tb->carpetLength/2)) + getLocation(random() % ((tb->carpetLength/2)+endOffy) );\r
-               llCurrent->color=(random() % maxColors);\r
-               llCurrent->height=getHeight(tb->plusheight+tb->highest); \r
-               if (tb->numFallingBlocks>=maxFalling) {\r
-                       tb->numFallingBlocks--;\r
-                       tb->numFallingBlocks--;\r
-               } \r
-               llTail->next = llCurrent;\r
-               llTail = llCurrent;\r
-               llTail->next = NULL;\r
-\r
-       }\r
-}\r
-\r
-/* called at init this creates the 'carpet' display list item */\r
-static void buildCarpet(ModeInfo *mi) {\r
-       int i,c,x,y;\r
-       GLfloat color[4];\r
-       int wire = MI_IS_WIREFRAME(mi);\r
-       topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];\r
-       GLUquadricObj *quadratic;\r
-               color[0] = 0.0f;        \r
-               color[1] = 1.0f;        \r
-               color[2] = 0.0f;        \r
-               color[3] = 1.0f;        \r
-       tb->carpet=glGenLists(1);       /* only one */\r
-       glNewList(tb->carpet,GL_COMPILE);\r
-       glPushMatrix(); /* save state */\r
-       x=tb->carpetWidth;\r
-       y=tb->carpetLength;\r
-       if (wire) { glColor3fv(color); }\r
-       else { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); }\r
-       /* draw carpet plane */\r
-       glBegin( wire ? GL_LINE_LOOP : GL_QUADS );\r
-               /* draw top */\r
-               glNormal3f( 0, 0, -1 );\r
-               glVertex3f(0.0,0.0,0.0);\r
-               glVertex3f(x,0.0,0.0);\r
-               glVertex3f(x,y,0.0);\r
-               glVertex3f(0.0,y,0.0);\r
-           if (wire) { glEnd(); } \r
-               else {\r
-               /* add edge pieces */\r
-               /* side 1 */\r
-               glNormal3f( 0, -1, 0 );\r
-               glVertex3f(0.0,0.0,0.0);\r
-               glVertex3f(x,0.0,0.0);\r
-               glVertex3f(x,0,singleThick);\r
-               glVertex3f(0.0,0,singleThick);\r
-               /* side 2 */\r
-               glNormal3f( -1, 0, 0 );\r
-               glVertex3f(0.0,0.0,0.0);\r
-               glVertex3f(0,y,0.0);\r
-               glVertex3f(0,y,singleThick);\r
-               glVertex3f(0.0,0,singleThick);\r
-               /* side 3 */\r
-               glNormal3f( 1, 0, 0 );\r
-               glVertex3f(x,0.0,0.0);\r
-               glVertex3f(x,y,0.0);\r
-               glVertex3f(x,y,singleThick);\r
-               glVertex3f(x,0,singleThick);\r
-               /* side 4 */\r
-               glNormal3f( 0, 1, 0 );\r
-               glVertex3f(0,y,0.0);\r
-               glVertex3f(x,y,0.0);\r
-               glVertex3f(x,y,singleThick);\r
-               glVertex3f(0,y,singleThick);\r
-               }\r
-       glEnd();\r
-       /* nipples */\r
-       if (drawNipples) {\r
-               quadratic=gluNewQuadric();                      /* Create A Pointer To The Quadric Object */\r
-               gluQuadricNormals(quadratic, GLU_SMOOTH);       /* Create Smooth Normals  */\r
-               gluQuadricTexture(quadratic, GL_TRUE);          /* Create Texture Coords  */\r
-               glTranslatef(0.5f,0.5f,-.25);                   /* move to the cylinder center */\r
-               for (c=0;c<x;c++) {\r
-                       glPushMatrix(); /* save state */\r
-                       for (i=0;i<y;i++) {\r
-                               gluCylinder(quadratic, cylSize, cylSize, 0.25f, resolution, resolution);        /* quad, radius(bottom, radius(top), height, subdivisions (around Z), subdevisions (along Z) */\r
-                               glRotatef(180, 0.0f, 1.0f, 0.0f); /* they are upside down */\r
-                               gluDisk(quadratic, 0.0f, cylSize, resolution, resolution );      /* inner size (cd hole), outer size (radius), subdivisions radial, subdivisions circular  */\r
-                               glRotatef(180, 0.0f, 1.0f, 0.0f); /* recover */\r
-                               glTranslatef(0.0f,1.0f,0.0f);                   /* move to the next cylinder center (backward) */\r
-                       }\r
-                       glPopMatrix();  /* save state */\r
-                       glTranslatef(1.0f,0.0f,0.0f);                   /* reset   */\r
-               }\r
-       }\r
-       glPopMatrix();  /* restore state */\r
-       glEndList();    \r
-}\r
-\r
-/* using the verticies arrays builds the plane, now with normals */\r
-static void polygonPlane(int wire, int a, int b, int c , int d, int i)\r
-{\r
-       GLfloat topBlockNormals[5][3] = { {0,0,-1},     {0,1,0}, {1,0,0}, {0,0,1}, {0,-1,0} };\r
-       GLfloat topBlockVertices[8][3] = { {-0.49,-2.97,-0.99}, {0.99,-2.97,-0.99}, {0.99,0.99,-0.99}  , {-0.49,0.99,-0.99}, {-0.49,-2.97,0.99} , {0.99,-2.97,0.99}, {0.99,0.99,0.99}   , {-0.49,0.99,0.99} };\r
-       glBegin( wire ? GL_LINE_LOOP : GL_POLYGON);\r
-               glNormal3fv(topBlockNormals[i] );\r
-               glVertex3fv(topBlockVertices[a]);\r
-               glVertex3fv(topBlockVertices[b]);\r
-               glVertex3fv(topBlockVertices[c]);\r
-               glVertex3fv(topBlockVertices[d]);\r
-       glEnd();\r
-}\r
-\r
-/* called at init this creates the 'block' display list item */\r
-/* the spheres came about originaly as quick way to test the directional lighting/normals */\r
-static void buildBlock(ModeInfo *mi) {\r
-       int i,c;\r
-  int wire = MI_IS_WIREFRAME(mi);\r
-  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];\r
-       GLUquadricObj *quadratic;\r
-       tb->block=glGenLists(1);        /* only one */\r
-       glNewList(tb->block,GL_COMPILE);\r
-       glPushMatrix(); /* save state */\r
-       glRotatef(90, 0.0f, 1.0f, 0.0f);\r
-       /* base */\r
-       polygonPlane(wire, 0,3,2,1,0);\r
-       polygonPlane(wire, 2,3,7,6,1);\r
-       polygonPlane(wire, 1,2,6,5,2); \r
-       polygonPlane(wire, 4,5,6,7,3); \r
-       polygonPlane(wire, 0,1,5,4,4);\r
-       if (drawNipples) {\r
-               /* nipples */\r
-               /* draw 8 cylinders each with a disk cap */\r
-               quadratic=gluNewQuadric();                      /* Create A Pointer To The Quadric Object  */\r
-               gluQuadricNormals(quadratic, GLU_SMOOTH);       /* Create Smooth Normals  */\r
-               glRotatef(90, 0.0f, 1.0f, 0.0f);                /* 'aim' the pointer ready for the cylinder */\r
-               glTranslatef(0.5f,0.5f,0.99f);                  /* move to the cylinder center */\r
-               for (c=0;c<2;c++) {\r
-                       for (i=0;i<4;i++) {\r
-                               gluCylinder(quadratic, cylSize, cylSize, 0.25f, resolution, resolution);        /* quad, radius(bottom, radius(top), height, subdivisions (around Z), subdevisions (along Z) */\r
-                               glTranslatef(0.0f,0.0f,0.25f);                  /* move to the cylinder cap  */\r
-                               gluDisk(quadratic, 0.0f, cylSize, resolution, resolution );      /* inner size (cd hole), outer size (radius), subdivisions radial, subdivisions circular  */\r
-                               glTranslatef(0.0f,0.0f,-0.25f);                 /* move back from the cylinder cap  */\r
-                               if (c==0) {     \r
-                                       glTranslatef(0.0f,-1.0f,0.0f);                  /* move to the next cylinder center (forward) */\r
-                               } else {\r
-                                       glTranslatef(0.0f,1.0f,0.0f);                   /* move to the next cylinder center (backward) */\r
-                               }\r
-                       }\r
-                       glTranslatef(-1.0f,1.0f,0.0f);                  /* move to the cylinder center */\r
-               }\r
-               /* udders */\r
-               /* 3 cylinders on the underside */\r
-               glTranslatef(1.5f,-2.5f,-1.5f);         /* move to the center, under the top of the brick        */\r
-               for (c=0;c<3;c++) {\r
-                       gluCylinder(quadratic, uddSize, uddSize, 1.5f, resolution, resolution); /* quad, radius(bottom, radius(top), height, subdivisions (around Z), subdevisions (along Z) */\r
-                       glTranslatef(0.0f,-1.0f,0.0f);          /* move to the center */        \r
-               }\r
-       }\r
-       glPopMatrix();  /* restore state */\r
-       glEndList();    \r
-}\r
-\r
-/* \r
-       rip off of the builBlock() function creating the GL compilied pointer "block" but only creates two spheres.\r
-       spheres are created with unit_sphere from spheres.h to allow wire frame \r
-*/\r
-static void buildBlobBlock(ModeInfo *mi) {\r
-  int wire = MI_IS_WIREFRAME(mi);\r
-  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];\r
-       tb->block=glGenLists(1);        /* only one */\r
-       glNewList(tb->block,GL_COMPILE);\r
-       glPushMatrix();\r
-  glScalef(1.4,1.4,1.4);\r
-  unit_sphere (resolution/2,resolution, wire);\r
-  glPopMatrix();\r
-  glTranslatef(0.0f,-2.0f,0.0f);\r
-  glScalef(1.4,1.4,1.4);\r
-  unit_sphere (resolution/2,resolution, wire);\r
-       glEndList();    \r
-}\r
-\r
-\r
-/* handle input events or not if daemon running the show */\r
-ENTRYPOINT Bool \r
-topBlock_handle_event (ModeInfo *mi, XEvent *event) {\r
-  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];\r
-       if (event->xany.type == KeyPress)    {\r
-    KeySym keysym;\r
-    char c = 0;\r
-    XLookupString (&event->xkey, &c, 1, &keysym, 0);\r
-    if (c == 'a') {\r
-                       tb->eyeX=tb->eyeX+1;\r
-                       return True;\r
-               } else if (c == 'z') {\r
-                       tb->eyeX=tb->eyeX-1;\r
-                       return True;\r
-               } else if (c == 's') {\r
-                       tb->eyeY=tb->eyeY+1;\r
-                       return True;\r
-               } else if (c == 'x') {\r
-                       tb->eyeY=tb->eyeY-1;\r
-                       return True;\r
-               } else if (c == 'd') {\r
-                       tb->eyeZ=tb->eyeZ+1;\r
-                       return True;\r
-               } else if (c == 'c') {\r
-                       tb->eyeZ=tb->eyeZ-1;\r
-                       return True;\r
-               } else if (c == 'f') {\r
-                       camX=camX+1;\r
-                       return True;\r
-               } else if (c == 'v') {\r
-                       camX=camX-1;\r
-                       return True;\r
-               } else if (c == 'g') {\r
-                       camY=camY+1;\r
-                       return True;\r
-               } else if (c == 'b') {\r
-                       camY=camY-1;\r
-                       return True;\r
-               } else if (c == 'h') {\r
-                       camZ=camZ+1;\r
-                       return True;\r
-               } else if (c == 'n') {\r
-                       camZ=camZ-1;\r
-                       return True;\r
-               } else if (c == 'r') {\r
-                       tb->rotation += 1;\r
-                       return True;\r
-               }\r
-       }\r
-       return False;\r
-}\r
-\r
-/* this is tha main change for v5 compatability and acompanying ENTRYPOINTS */\r
-XSCREENSAVER_MODULE_2 ("topBlock", topblock, topBlock)\r
-\r
-#endif /* USE_GL */\r
+/* topblock, Copyright (c) 2006 rednuht <topblock.xscreensaver@jumpstation.co.uk>
+ *
+ * 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.
+ *
+ * 
+ *
+
+topBlock - a simple openGL 3D hack of falling blocks
+based on jwz's dangerball hack
+
+The proporations of the blocks and their features is not even close to the commercial building block products offered by a variety companies.
+
+information on this hack might be found at 
+http://www.jumpstation.co.uk/xscreensaver/topblock/
+
+History
+25/02/2006 v1.0 release
+29/04/2006 v1.11 updated to better fit with xscreensaver v5
+                 colors defaults to 7 (no black)
+19/06/2006 v1.2  fixed dropSpeed = 7 bug, added gltrackball support and some code neatening, thanks to Valdis Kletnieks and JWZ for their input.
+*/
+
+#include <math.h>
+
+# define refresh_topBlock 0
+
+#define DEFAULTS       "*delay:        10000       \n" \
+                       "*count:        30           \n" \
+                       "*showFPS:      False       \n" \
+                       "*wireframe:    False       \n" \
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#include "xlockmore.h"
+#include "topblock.h"
+#include "sphere.h"
+#include "gltrackball.h"
+#include <ctype.h>
+
+#ifdef USE_GL /* whole file */
+
+#ifdef HAVE_COCOA
+# include <OpenGL/glu.h>
+#else
+# include <GL/glu.h>
+#endif
+
+typedef struct
+{
+  GLXContext *glx_context;
+  trackball_state *trackball;
+  Bool button_down_p;
+  int numFallingBlocks;
+  GLfloat highest,highestFalling;
+  GLfloat eyeLine,eyeX,eyeY,eyeZ;
+  int carpetWidth, carpetLength;
+  int followMode;
+  GLfloat followRadius,followAngle;
+  int plusheight;
+  GLuint       carpet;
+  GLuint       block;
+  NODE *blockNodeRoot;
+  NODE *blockNodeFollow;
+  GLfloat rotation;
+} topBlockSTATE;
+
+/* parameter vars */
+Bool override;
+Bool rotate;
+Bool follow;
+Bool drawCarpet;
+Bool drawBlob;
+Bool drawNipples;
+GLfloat rotateSpeed;
+GLfloat camX;
+GLfloat camY;
+GLfloat camZ;
+GLfloat dropSpeed;
+int maxFalling;
+int maxColors;
+int size;
+int spawn;
+int resolution;
+
+static XrmOptionDescRec opts[] = {
+  { "-size",        ".size",        XrmoptionSepArg, 0 },
+  { "-spawn",       ".spawn",       XrmoptionSepArg, 0 },
+  { "-camX",        ".camX",        XrmoptionSepArg, 0 },
+  { "-camY",        ".camY",        XrmoptionSepArg, 0 },
+  { "-camZ",        ".camZ",        XrmoptionSepArg, 0 },
+  { "+rotate",      ".rotate",      XrmoptionNoArg, "False" },
+  { "-rotate",      ".rotate",      XrmoptionNoArg, "True" },
+  { "+carpet",      ".carpet",      XrmoptionNoArg, "False" },
+  { "+nipples",     ".nipples",     XrmoptionNoArg, "False" },
+  { "-blob",        ".blob",        XrmoptionNoArg, "True" },
+  { "-rotateSpeed", ".rotateSpeed", XrmoptionSepArg, 0 },
+  { "-follow",      ".follow",      XrmoptionNoArg, "True" },
+  { "-maxFalling",  ".maxFalling",  XrmoptionSepArg, 0 },
+  { "-resolution",  ".resolution",  XrmoptionSepArg, 0 },
+  { "-maxColors",   ".maxColors",   XrmoptionSepArg, 0 },
+  { "-dropSpeed",   ".dropSpeed",   XrmoptionSepArg, 0 },
+  { "-override",    ".override",    XrmoptionNoArg, "True" },
+};
+
+#define DEF_override      "False"
+#define DEF_rotate        "True"
+#define DEF_follow        "False"
+#define DEF_drawCarpet    "True"
+#define DEF_drawBlob      "False"
+#define DEF_drawNipples   "True"
+#define DEF_rotateSpeed   "10"
+#define DEF_maxFalling    "500"
+#define DEF_maxColors     "7"
+#define DEF_size          "2"
+#define DEF_spawn         "50"
+#define DEF_resolution    "4"
+#define DEF_camX          "1"
+#define DEF_camY          "20"
+#define DEF_camZ          "25"
+#define DEF_dropSpeed     "4"
+
+static argtype vars[] = {
+  {&override,     "override",     "Override",     DEF_override,     t_Bool},
+  {&rotate,       "rotate",       "Rotate",       DEF_rotate,       t_Bool},
+  {&drawCarpet,   "carpet",       "Carpet",       DEF_drawCarpet,   t_Bool},
+  {&drawNipples,  "nipples",      "Nipples",      DEF_drawNipples,  t_Bool},
+  {&drawBlob,     "blob",         "Blob",         DEF_drawBlob,     t_Bool},
+  {&rotateSpeed,  "rotateSpeed",  "RotateSpeed",  DEF_rotateSpeed,  t_Float},
+  {&follow,       "follow",       "Follow",       DEF_follow,       t_Bool},
+  {&camX,         "camX",         "camX",         DEF_camX,         t_Float},
+  {&camY,         "camY",         "camY",         DEF_camY,         t_Float},
+  {&camZ,         "camZ",         "camZ",         DEF_camZ,         t_Float},
+  {&size,         "size",         "size",         DEF_size,         t_Int},
+  {&spawn,        "spawn",        "spawn",        DEF_spawn,        t_Int},
+  {&maxFalling,   "maxFalling",   "maxFalling",   DEF_maxFalling,   t_Int},
+  {&resolution,   "resolution",   "resolution",   DEF_resolution,   t_Int},
+  {&maxColors,    "maxColors",    "maxColors",    DEF_maxColors,    t_Int},
+  {&dropSpeed,    "dropSpeed",    "DropSpeed",    DEF_dropSpeed,    t_Float},
+};
+
+static topBlockSTATE *tbs = NULL;
+
+ModeSpecOpt topBlock_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+/* Window management, etc */
+ENTRYPOINT void
+reshape_topBlock (ModeInfo *mi, int width, int height) {
+  GLfloat h = (GLfloat) height / (GLfloat) width;
+  glViewport (0, 0, (GLint) width, (GLint) height);
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  gluPerspective (60.0, 1/h, 1.0, 1000.0);
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  glClear(GL_COLOR_BUFFER_BIT);
+}
+
+/* clean up on exit, not required ... */
+ENTRYPOINT void
+  release_topBlock(ModeInfo *mi) {
+  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];
+       NODE *llCurrent, *llOld;
+       llCurrent = tb->blockNodeRoot;
+       while (llCurrent != NULL) {
+               llOld = llCurrent;
+               llCurrent = llCurrent->next;
+               free(llOld);
+       }
+}
+
+/* setup */
+ENTRYPOINT void 
+init_topBlock (ModeInfo *mi)
+{
+  topBlockSTATE *tb;
+  int wire = MI_IS_WIREFRAME(mi);
+
+  if (!tbs) {
+    tbs = (topBlockSTATE *)
+      calloc (MI_NUM_SCREENS(mi), sizeof (topBlockSTATE));
+    if (!tbs) {
+      fprintf(stderr, "%s: out of memory\n", progname);
+      exit(1);
+    }
+  }
+
+  tb = &tbs[MI_SCREEN(mi)];
+
+  tb->glx_context = init_GL(mi);
+
+  reshape_topBlock (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+       if (wire) { drawNipples=False; }
+  tb->numFallingBlocks=0;
+
+       if (size>10) { size = 10; }
+       if (size<1) { size = 2; }
+       tb->carpetWidth = 8 * size;
+       tb->carpetLength = tb->carpetWidth;
+  
+  maxFalling*=size;
+
+       if (spawn<4) { spawn=4; }
+       if (spawn>1000) { spawn=1000; }
+
+       if (rotateSpeed<1) {rotateSpeed=1; }
+       if (rotateSpeed>1000) {rotateSpeed=1000;}
+  rotateSpeed /= 100;
+
+       if (resolution<4) {resolution=4;}
+       if (resolution>20) {resolution=20;}
+  resolution*=2;
+
+       if (maxColors<1) {maxColors=1;}
+       if (maxColors>8) {maxColors=8;}
+
+       if (dropSpeed<1) {dropSpeed=1;}
+       if (dropSpeed>9) {dropSpeed=9;} /* 10+ produces blocks that can pass through each other */
+  
+       dropSpeed = 80/dropSpeed;
+       dropSpeed = (blockHeight/dropSpeed); 
+
+  tb->glx_context = init_GL(mi);
+
+  reshape_topBlock (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+  if (0==1) {
+      glClearColor(1.0f, 1.0f, 1.0f, 0.5f);
+  } else {
+      glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
+  }
+  glClearDepth(1.0f);
+  if (!wire) {
+    GLfloat pos[4] = {10.0, 10.0, 1.0, 0.0};
+    GLfloat amb[4] = {0.1, 0.1, 0.1, 1.0};
+    GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0};
+    GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0};
+
+    glEnable(GL_LIGHTING);
+    glEnable(GL_LIGHT0);
+    glLightfv(GL_LIGHT0, GL_POSITION, pos);
+    glLightfv(GL_LIGHT0, GL_AMBIENT,  amb); 
+    glLightfv(GL_LIGHT0, GL_DIFFUSE,  dif);
+    glLightfv(GL_LIGHT0, GL_SPECULAR, spc); 
+  }
+       glDepthFunc(GL_LEQUAL);
+  glEnable(GL_DEPTH_TEST);
+  glDisable(GL_CULL_FACE); /* all objects exhibit a reverse side */
+  glCullFace(GL_BACK); 
+
+       if (drawBlob) {
+    buildBlobBlock(mi); 
+       } else {
+         buildBlock(mi);               /* build the display list holding the simple block */
+       }
+  buildCarpet(mi);             /* build the base */
+       tb->highest=0;
+       tb->highestFalling=0;
+       tb->eyeLine=tb->highest;
+       tb->eyeX=0;
+       tb->eyeY=0;
+       tb->eyeZ=0;
+       tb->followMode=0;
+  if (follow) {
+    tb->plusheight=100;
+    camZ=camZ-60;
+  } else {
+    tb->rotation=random() % 360;
+    tb->eyeY=10;
+    tb->plusheight=30;
+  }
+       tb->followRadius=0;
+  /* override camera settings */
+  if (override) {
+    tb->plusheight=100;
+    drawCarpet=False;
+    camX=0;
+    camY=1;
+    camZ=0;
+    tb->eyeX=-1;
+    tb->eyeY=20;
+    tb->eyeZ=0;
+  }
+  tb->trackball = gltrackball_init ();
+}
+
+/* provides the per frame entertainment */
+ENTRYPOINT void
+draw_topBlock (ModeInfo *mi) {
+       Display *dpy = MI_DISPLAY(mi);
+       Window window = MI_WINDOW(mi);
+       NODE *llCurrent;
+       NODE *llNode;
+       topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];
+       GLfloat spcN1x,spcN1y,spcN2x,spcN2y;
+       GLfloat spcC1x,spcC1y,spcC2x,spcC2y;
+       int wire = MI_IS_WIREFRAME(mi);
+         GLfloat color[4];     
+
+  if (!tb->glx_context)
+    return;
+  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tb->glx_context));
+
+       generateNewBlock(mi);
+
+       if (rotate && (!tb->button_down_p)) { tb->rotation += rotateSpeed; } 
+       if (tb->rotation>=360) { tb->rotation=tb->rotation-360; } 
+
+       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);             /* clear current */
+       glLoadIdentity();       /* resets directions, do it every time ! */
+       if (!follow) {
+               if (tb->highest>tb->eyeLine) { tb->eyeLine+=((tb->highest-tb->eyeLine)/100);    } /* creates a smooth camera transition */
+               gluLookAt(camX, camY+tb->eyeLine, camZ, tb->eyeX, tb->eyeY+tb->eyeLine, tb->eyeZ, 0.0, 1.0, 0.0);               /* setup viewer, xyz cam, xyz looking at and where is up normaly 0,1,0 */
+               glRotatef(90, 1.0, 0.0, 0.0);                   /* x axis */
+       } else {
+               glRotatef(90, 0.0, 0.0, 1.0);     /* z axis */
+               followBlock(mi);
+       }
+       glRotatef(-90, 1.0, 0.0, 0.0);          
+  gltrackball_rotate (tb->trackball);
+       glRotatef(90, 1.0, 0.0, 0.0);           
+
+       /* rotate the world */
+       glRotatef(tb->rotation, 0.0, 0.0, 1.0);         
+
+       llCurrent = tb->blockNodeRoot;
+       if (drawCarpet) {
+               /* center carpet */
+               glTranslatef(0.0-(tb->carpetWidth/2),0.0-(tb->carpetLength/2),0.0);
+               glCallList(tb->carpet);
+               glTranslatef(0.0+(tb->carpetWidth/2),0.0+(tb->carpetLength/2),0.0);
+               glTranslatef(0.0,0.0,-0.55);
+       }
+       tb->highestFalling=0;
+       while (llCurrent != NULL) {     /* for each block */
+               glPushMatrix(); /* save state */
+               /* set color */
+               switch (llCurrent->color) { 
+                       case 0:
+                               color[0] = 1.0f;        
+                               color[1] = 0.0f;        
+                               color[2] = 0.0f;        
+                               color[3] = 1.0f;        
+                               break;
+                       case 1:
+                               color[0] = 0.0f;        
+                               color[1] = 1.0f;        
+                               color[2] = 0.0f;        
+                               color[3] = 1.0f;        
+                               break;
+                       case 2:
+                               color[0] = 0.0f;        
+                               color[1] = 0.0f;        
+                               color[2] = 1.0f;        
+                               color[3] = 1.0f;        
+                               break;
+                       case 3:
+                               color[0] = 0.95f;       
+                               color[1] = 0.95f;       
+                               color[2] = 0.95f;       
+                               color[3] = 1.0f;        
+                               break;
+                       case 4:
+                               color[0] = 1.0f;        
+                               color[1] = 0.5f;        
+                               color[2] = 0.0f;        
+                               color[3] = 1.0f;        
+                               break;
+                       case 5:
+                               color[0] = 1.0f;        
+                               color[1] = 1.0f;        
+                               color[2] = 0.0f;        
+                               color[3] = 1.0f;        
+                               break;
+                       case 6: 
+                               color[0] = 0.5f;        
+                               color[1] = 0.5f;        
+                               color[2] = 0.5f;        
+                               color[3] = 1.0f;        
+                               break;
+                       case 7:
+                               color[0] = 0.05f;       
+                               color[1] = 0.05f;       
+                               color[2] = 0.05f;       
+                               color[3] = 1.0f;        
+                               break;
+               } 
+               if (wire) { glColor3fv(color); }
+               else { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); }
+
+               if (llCurrent->falling==1) {
+       spcC2x = 0;
+           spcC2y = 0;
+           spcN2x = 0;
+           spcN2y = 0;
+                       if (llCurrent->height>tb->highestFalling) {tb->highestFalling=llCurrent->height;}
+                       /* all blocks fall at the same rate to avoid mid air collisions */
+                       llCurrent->height-=dropSpeed;
+                       if (llCurrent->height<=0) {
+                               llCurrent->falling=0;
+                               if (tb->highest==0) { 
+                                       tb->highest+=blockHeight; 
+                               }
+                       } 
+                       if ( (llCurrent->height<=tb->highest+1) && (llCurrent->falling==1) ) {
+                               /* check for collision */
+                               llNode = tb->blockNodeRoot;
+                               spcC1x = llCurrent->x;
+                               spcC1y = llCurrent->y;
+                               switch(llCurrent->rotation) {
+                                       case getOrientation(0):
+                                               spcC2x = spcC1x;
+                                               spcC2y = spcC1y-2;
+                                               break;
+                                       case getOrientation(1):
+                                               spcC2x = spcC1x+2;
+                                               spcC2y = spcC1y;
+                                               break;
+                                       case getOrientation(2):
+                                               spcC2x = spcC1x;
+                                               spcC2y = spcC1y+2;
+                                               break;
+                                       case getOrientation(3):
+                                               spcC2x = spcC1x-2;
+                                               spcC2y = spcC1y;
+                                               break;
+                               }
+                               while (llNode != NULL) {
+                                       if ( (llNode->falling==0) && (llCurrent->falling==1) ) {
+                                               spcN1x = llNode->x;
+                                               spcN1y = llNode->y;
+                                               switch(llNode->rotation) {
+                                                       case getOrientation(0):
+                                                               spcN2x = spcN1x;
+                                                               spcN2y = spcN1y-2;
+                                                               break;
+                                                       case getOrientation(1):
+                                                               spcN2x = spcN1x+2;
+                                                               spcN2y = spcN1y;
+                                                               break;
+                                                       case getOrientation(2):
+                                                               spcN2x = spcN1x;
+                                                               spcN2y = spcN1y+2;
+                                                               break;
+                                                       case getOrientation(3):
+                                                               spcN2x = spcN1x-2;
+                                                               spcN2y = spcN1y;
+                                                               break;
+                                               }
+                                               if ( 
+                                                       ( (spcC1x==spcN1x) && (spcC1y==spcN1y) ) ||
+                                                       ( (spcC1x==spcN2x) && (spcC1y==spcN2y) ) ||
+                                                       ( (spcC2x==spcN2x) && (spcC2y==spcN2y) ) ||
+                                                       ( (spcC2x==spcN1x) && (spcC2y==spcN1y) )
+                                               ){
+              if ( fabs(llCurrent->height-(llNode->height+blockHeight)) <= TOLERANCE) { 
+
+                                                   llCurrent->falling=0;
+                                                         llCurrent->height=llNode->height+blockHeight; /* if this is missing then small errors build up until the model fails */
+                if ( fabs(llCurrent->height-tb->highest) <= TOLERANCE+blockHeight ) {
+                 tb->highest+=blockHeight; 
+                                                         }
+                                                 }
+                                         }
+                                 }
+                                 llNode=llNode->next;
+                         }                             
+                 }
+         } 
+       /* set location in space */
+         glTranslatef(llCurrent->x,llCurrent->y,-llCurrent->height);
+         /* rotate */
+       glRotatef(llCurrent->rotation, 0.0f, 0.0f, 1.0f);
+       if ((tb->followMode==0) && (llCurrent->next==NULL)) {
+               tb->blockNodeFollow = llCurrent;
+               tb->followMode=1;
+       } 
+       llCurrent = llCurrent->next;
+       /* draw   */
+       glCallList(tb->block); 
+       glPopMatrix();  /* restore state */
+  } 
+  if (mi->fps_p) do_fps (mi);
+  glFinish();
+
+       if (tb->highest>(5*maxFalling)) { drawCarpet=False; }
+  glXSwapBuffers(dpy, window);
+}
+
+
+
+/* camera is in follow mode, work out where we should be looking */
+static void followBlock(ModeInfo *mi) {
+       GLfloat xLen,yLen,cx,cy,rangle,xTarget,yTarget;
+  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];
+  cx=0;cy=0;
+       if ((tb->blockNodeFollow!=NULL) && (tb->followMode==1)){
+
+               if (tb->highest>tb->eyeLine) { tb->eyeLine+= ((tb->highest-tb->eyeLine)/100);   } 
+                 /*tb->blockNodeFollow->color=1;  only noticable if you set the colors to 1 */
+               
+                       if (tb->blockNodeFollow->height > tb->eyeZ) { tb->eyeZ+= ((tb->blockNodeFollow->height - tb->eyeZ)/100); } 
+                       if (tb->blockNodeFollow->height < tb->eyeZ) { tb->eyeZ-= ((tb->eyeZ - tb->blockNodeFollow->height)/100); } 
+               
+
+               /* when the scene is rotated we need to know where the block is in the 2 dimensional coordinates of the carpet area
+                  (see http://www.jumpstation.co.uk/rotation/)
+               */
+
+               if (tb->followRadius==0) {              
+                       xLen = tb->blockNodeFollow->x-cx;
+                       yLen = tb->blockNodeFollow->y-cy;
+                       tb->followRadius=sqrt( (xLen*xLen) + (yLen*yLen) );     
+                       tb->followAngle = (180/M_PI) * asin(xLen/tb->followRadius); 
+                       tb->followAngle = quadrantCorrection(tb->followAngle,(int)cx,(int)cy,(int)tb->blockNodeFollow->x,(int)tb->blockNodeFollow->y);
+               }
+               rangle = (tb->followAngle+tb->rotation) * M_PI /180;
+               xTarget = cos(rangle) * tb->followRadius + cx;
+               yTarget = sin(rangle) * tb->followRadius + cy;
+               if (tb->followAngle>360) { tb->followAngle=tb->followAngle-360; }
+
+               if (xTarget < tb->eyeX) { tb->eyeX-= ((tb->eyeX - xTarget)/100); }
+               if (xTarget > tb->eyeX) { tb->eyeX+= ((xTarget - tb->eyeX)/100); }
+
+               if (yTarget < tb->eyeY) { tb->eyeY-= ((tb->eyeY - yTarget)/100); }
+               if (yTarget > tb->eyeY) { tb->eyeY+= ((yTarget - tb->eyeY)/100); }
+               if (!tb->blockNodeFollow->falling) {  
+                       tb->followMode=0; 
+                       /*tb->blockNodeFollow->color=2;  only noticable if you set the colors to 1 */
+                       tb->followRadius=0;
+               } 
+       }
+       gluLookAt(camX, camY, camZ-tb->eyeLine, tb->eyeX, tb->eyeY, -tb->eyeZ,-1.0,0.0,0.0);
+}
+
+/* each quater of the circle has to be adjusted for */
+static double quadrantCorrection(double angle,int cx,int cy,int x,int y) {
+       if ((x>=cx) && (y>=cy)) {
+               angle +=  (90-(angle-90) * 2); 
+       } else if ((x>=cx) && (y<=cy)) {
+               angle +=  90; 
+       } else if ((x<=cx) && (y<=cy)) {
+               angle +=  90; 
+       } else if ((x<=cx) && (y>=cy)) {
+               angle += (90-(angle-90) * 2); 
+       }
+       return(angle-180);
+}
+
+/* if random chance then create a new falling block */
+static void generateNewBlock(ModeInfo *mi) {
+       NODE *llCurrent, *llTail;
+       GLfloat startOffx, startOffy;
+       int endOffx, endOffy;
+  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];
+       if ( ((random() % spawn) == 1) && (tb->highestFalling<getHeight((tb->plusheight-blockHeight)+tb->highest)) ) {  
+               startOffx=0;
+               endOffx=0;
+               startOffy=0;
+               endOffy=0;
+               tb->numFallingBlocks++;
+               llTail = tb->blockNodeRoot; 
+               if (llTail == NULL) {
+                       if ((llCurrent = ((NODE*) malloc(sizeof(NODE)))) == NULL) {     fprintf(stderr, "%s: out of memory.\n", progname); }
+                       llTail = llCurrent;
+                       tb->blockNodeRoot = llCurrent; 
+               } else {
+                       if (tb->numFallingBlocks>=maxFalling) {
+                               /* recycle */
+                               llCurrent=llTail->next;
+                               tb->blockNodeRoot=llCurrent->next;
+                       } else {
+                               if ((llCurrent = ((NODE*) malloc(sizeof(NODE)))) == NULL) {     fprintf(stderr, "%s: out of memory..\n", progname); }
+                       }
+                       while (llTail->next != NULL) { llTail = llTail->next; } /* find last item in list */
+               }
+               llCurrent->falling=1;
+               llCurrent->rotation=getOrientation(random() % 4); 
+               if (llCurrent->rotation==getOrientation(0)) {
+                       startOffx=1.0;
+                       endOffx=0;
+                       startOffy=3.0;
+                       endOffy=-1;
+               } else if (llCurrent->rotation==getOrientation(1)) {
+                       startOffx=1.0;
+                       endOffx=-1;
+                       startOffy=1.0;
+                       endOffy=0;              
+               } else if (llCurrent->rotation==getOrientation(2)) {
+                       startOffx=1.0;
+                       endOffx=0;
+                       startOffy=3.0;
+                       endOffy=-1;             
+               } else if (llCurrent->rotation==getOrientation(3)) { 
+                       startOffx=5.0;
+                       endOffx=-1;
+                       startOffy=1.0;
+                       endOffy=0;              
+               }
+
+               llCurrent->x=(startOffx-(tb->carpetLength/2)) + getLocation(random() % ((tb->carpetLength/2)+endOffx) );
+               llCurrent->y=(startOffy-(tb->carpetLength/2)) + getLocation(random() % ((tb->carpetLength/2)+endOffy) );
+               llCurrent->color=(random() % maxColors);
+               llCurrent->height=getHeight(tb->plusheight+tb->highest); 
+               if (tb->numFallingBlocks>=maxFalling) {
+                       tb->numFallingBlocks--;
+                       tb->numFallingBlocks--;
+               } 
+               llTail->next = llCurrent;
+               llTail = llCurrent;
+               llTail->next = NULL;
+
+       }
+}
+
+/* called at init this creates the 'carpet' display list item */
+static void buildCarpet(ModeInfo *mi) {
+       int i,c,x,y;
+       GLfloat color[4];
+       int wire = MI_IS_WIREFRAME(mi);
+       topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];
+       GLUquadricObj *quadratic;
+               color[0] = 0.0f;        
+               color[1] = 1.0f;        
+               color[2] = 0.0f;        
+               color[3] = 1.0f;        
+       tb->carpet=glGenLists(1);       /* only one */
+       glNewList(tb->carpet,GL_COMPILE);
+       glPushMatrix(); /* save state */
+       x=tb->carpetWidth;
+       y=tb->carpetLength;
+       if (wire) { glColor3fv(color); }
+       else { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); }
+       /* draw carpet plane */
+       glBegin( wire ? GL_LINE_LOOP : GL_QUADS );
+               /* draw top */
+               glNormal3f( 0, 0, -1 );
+               glVertex3f(0.0,0.0,0.0);
+               glVertex3f(x,0.0,0.0);
+               glVertex3f(x,y,0.0);
+               glVertex3f(0.0,y,0.0);
+           if (wire) { glEnd(); } 
+               else {
+               /* add edge pieces */
+               /* side 1 */
+               glNormal3f( 0, -1, 0 );
+               glVertex3f(0.0,0.0,0.0);
+               glVertex3f(x,0.0,0.0);
+               glVertex3f(x,0,singleThick);
+               glVertex3f(0.0,0,singleThick);
+               /* side 2 */
+               glNormal3f( -1, 0, 0 );
+               glVertex3f(0.0,0.0,0.0);
+               glVertex3f(0,y,0.0);
+               glVertex3f(0,y,singleThick);
+               glVertex3f(0.0,0,singleThick);
+               /* side 3 */
+               glNormal3f( 1, 0, 0 );
+               glVertex3f(x,0.0,0.0);
+               glVertex3f(x,y,0.0);
+               glVertex3f(x,y,singleThick);
+               glVertex3f(x,0,singleThick);
+               /* side 4 */
+               glNormal3f( 0, 1, 0 );
+               glVertex3f(0,y,0.0);
+               glVertex3f(x,y,0.0);
+               glVertex3f(x,y,singleThick);
+               glVertex3f(0,y,singleThick);
+               }
+       glEnd();
+       /* nipples */
+       if (drawNipples) {
+               quadratic=gluNewQuadric();                      /* Create A Pointer To The Quadric Object */
+               gluQuadricNormals(quadratic, GLU_SMOOTH);       /* Create Smooth Normals  */
+               gluQuadricTexture(quadratic, GL_TRUE);          /* Create Texture Coords  */
+               glTranslatef(0.5f,0.5f,-.25);                   /* move to the cylinder center */
+               for (c=0;c<x;c++) {
+                       glPushMatrix(); /* save state */
+                       for (i=0;i<y;i++) {
+                               gluCylinder(quadratic, cylSize, cylSize, 0.25f, resolution, resolution);        /* quad, radius(bottom, radius(top), height, subdivisions (around Z), subdevisions (along Z) */
+                               glRotatef(180, 0.0f, 1.0f, 0.0f); /* they are upside down */
+                               gluDisk(quadratic, 0.0f, cylSize, resolution, resolution );      /* inner size (cd hole), outer size (radius), subdivisions radial, subdivisions circular  */
+                               glRotatef(180, 0.0f, 1.0f, 0.0f); /* recover */
+                               glTranslatef(0.0f,1.0f,0.0f);                   /* move to the next cylinder center (backward) */
+                       }
+                       glPopMatrix();  /* save state */
+                       glTranslatef(1.0f,0.0f,0.0f);                   /* reset   */
+               }
+       }
+       glPopMatrix();  /* restore state */
+       glEndList();    
+}
+
+/* using the verticies arrays builds the plane, now with normals */
+static void polygonPlane(int wire, int a, int b, int c , int d, int i)
+{
+       GLfloat topBlockNormals[5][3] = { {0,0,-1},     {0,1,0}, {1,0,0}, {0,0,1}, {0,-1,0} };
+       GLfloat topBlockVertices[8][3] = { {-0.49,-2.97,-0.99}, {0.99,-2.97,-0.99}, {0.99,0.99,-0.99}  , {-0.49,0.99,-0.99}, {-0.49,-2.97,0.99} , {0.99,-2.97,0.99}, {0.99,0.99,0.99}   , {-0.49,0.99,0.99} };
+       glBegin( wire ? GL_LINE_LOOP : GL_POLYGON);
+               glNormal3fv(topBlockNormals[i] );
+               glVertex3fv(topBlockVertices[a]);
+               glVertex3fv(topBlockVertices[b]);
+               glVertex3fv(topBlockVertices[c]);
+               glVertex3fv(topBlockVertices[d]);
+       glEnd();
+}
+
+/* called at init this creates the 'block' display list item */
+/* the spheres came about originaly as quick way to test the directional lighting/normals */
+static void buildBlock(ModeInfo *mi) {
+       int i,c;
+  int wire = MI_IS_WIREFRAME(mi);
+  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];
+       GLUquadricObj *quadratic;
+       tb->block=glGenLists(1);        /* only one */
+       glNewList(tb->block,GL_COMPILE);
+       glPushMatrix(); /* save state */
+       glRotatef(90, 0.0f, 1.0f, 0.0f);
+       /* base */
+       polygonPlane(wire, 0,3,2,1,0);
+       polygonPlane(wire, 2,3,7,6,1);
+       polygonPlane(wire, 1,2,6,5,2); 
+       polygonPlane(wire, 4,5,6,7,3); 
+       polygonPlane(wire, 0,1,5,4,4);
+       if (drawNipples) {
+               /* nipples */
+               /* draw 8 cylinders each with a disk cap */
+               quadratic=gluNewQuadric();                      /* Create A Pointer To The Quadric Object  */
+               gluQuadricNormals(quadratic, GLU_SMOOTH);       /* Create Smooth Normals  */
+               glRotatef(90, 0.0f, 1.0f, 0.0f);                /* 'aim' the pointer ready for the cylinder */
+               glTranslatef(0.5f,0.5f,0.99f);                  /* move to the cylinder center */
+               for (c=0;c<2;c++) {
+                       for (i=0;i<4;i++) {
+                               gluCylinder(quadratic, cylSize, cylSize, 0.25f, resolution, resolution);        /* quad, radius(bottom, radius(top), height, subdivisions (around Z), subdevisions (along Z) */
+                               glTranslatef(0.0f,0.0f,0.25f);                  /* move to the cylinder cap  */
+                               gluDisk(quadratic, 0.0f, cylSize, resolution, resolution );      /* inner size (cd hole), outer size (radius), subdivisions radial, subdivisions circular  */
+                               glTranslatef(0.0f,0.0f,-0.25f);                 /* move back from the cylinder cap  */
+                               if (c==0) {     
+                                       glTranslatef(0.0f,-1.0f,0.0f);                  /* move to the next cylinder center (forward) */
+                               } else {
+                                       glTranslatef(0.0f,1.0f,0.0f);                   /* move to the next cylinder center (backward) */
+                               }
+                       }
+                       glTranslatef(-1.0f,1.0f,0.0f);                  /* move to the cylinder center */
+               }
+               /* udders */
+               /* 3 cylinders on the underside */
+               glTranslatef(1.5f,-2.5f,-1.5f);         /* move to the center, under the top of the brick        */
+               for (c=0;c<3;c++) {
+                       gluCylinder(quadratic, uddSize, uddSize, 1.5f, resolution, resolution); /* quad, radius(bottom, radius(top), height, subdivisions (around Z), subdevisions (along Z) */
+                       glTranslatef(0.0f,-1.0f,0.0f);          /* move to the center */        
+               }
+       }
+       glPopMatrix();  /* restore state */
+       glEndList();    
+}
+
+/* 
+       rip off of the builBlock() function creating the GL compilied pointer "block" but only creates two spheres.
+       spheres are created with unit_sphere from spheres.h to allow wire frame 
+*/
+static void buildBlobBlock(ModeInfo *mi) {
+  int wire = MI_IS_WIREFRAME(mi);
+  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];
+       tb->block=glGenLists(1);        /* only one */
+       glNewList(tb->block,GL_COMPILE);
+       glPushMatrix();
+  glScalef(1.4,1.4,1.4);
+  unit_sphere (resolution/2,resolution, wire);
+  glPopMatrix();
+  glTranslatef(0.0f,-2.0f,0.0f);
+  glScalef(1.4,1.4,1.4);
+  unit_sphere (resolution/2,resolution, wire);
+       glEndList();    
+}
+
+
+/* handle input events or not if daemon running the show */
+ENTRYPOINT Bool 
+topBlock_handle_event (ModeInfo *mi, XEvent *event) {
+  topBlockSTATE *tb = &tbs[MI_SCREEN(mi)];
+       if (event->xany.type == KeyPress)    {
+    KeySym keysym;
+    char c = 0;
+    XLookupString (&event->xkey, &c, 1, &keysym, 0);
+    if (c == 'a') {
+                       tb->eyeX++;
+                       return True;
+               } else if (c == 'z') {
+                       tb->eyeX--;
+                       return True;
+               } else if (c == 's') {
+                       tb->eyeY--;
+                       return True;
+               } else if (c == 'x') {
+                       tb->eyeY++;
+                       return True;
+               } else if (c == 'd') {
+                       tb->eyeZ++;
+                       return True;
+               } else if (c == 'c') {
+                       tb->eyeZ--;
+                       return True;
+               } else if (c == 'f') {
+                       camX++;
+                       return True;
+               } else if (c == 'v') {
+                       camX--;
+                       return True;
+               } else if (c == 'g') {
+                       camY++;
+                       return True;
+               } else if (c == 'b') {
+                       camY--;
+                       return True;
+               } else if (c == 'h') {
+                       camZ++;
+                       return True;
+               } else if (c == 'n') {
+                       camZ--;
+                       return True;
+               } else if (c == 'r') {
+                       tb->rotation++;
+                       return True;
+               }
+       }
+  if (event->xany.type == ButtonPress &&
+      event->xbutton.button == Button1)
+    {
+      tb->button_down_p = True;
+      gltrackball_start (tb->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)
+    {
+      tb->button_down_p = False;
+      return True;
+    }
+  else if (event->xany.type == ButtonPress &&
+           (event->xbutton.button == Button4 ||
+            event->xbutton.button == Button5))
+    {
+      gltrackball_mousewheel (tb->trackball, event->xbutton.button, 10,
+                              !!event->xbutton.state);
+      return True;
+    }
+  else if (event->xany.type == MotionNotify &&
+           tb->button_down_p)
+    {
+      gltrackball_track (tb->trackball,
+                         event->xmotion.x, event->xmotion.y,
+                         MI_WIDTH (mi), MI_HEIGHT (mi));
+      return True;
+    }
+       return False;
+}
+
+/* this is tha main change for v5 compatability and acompanying ENTRYPOINTS */
+XSCREENSAVER_MODULE_2 ("topBlock", topblock, topBlock)
+
+#endif /* USE_GL */
index 51b3d442e72e48e92c152c50f9852cee34d43aff..1a66c5d27e63d33727406aee6e31204214433253 100644 (file)
@@ -1,45 +1,45 @@
-/* topblock - openGL based hack  */\r
-\r
-static void buildCarpet(ModeInfo *);\r
-static void polygonPlane(int, int, int, int, int ,int);\r
-static void buildBlock(ModeInfo *);\r
-static void generateNewBlock(ModeInfo *);\r
-static void followBlock(ModeInfo *);\r
-static void buildBlobBlock(ModeInfo *);\r
-static double quadrantCorrection(double,int,int,int,int);\r
-\r
-/* this structure holds all the attributes about a block */\r
-typedef struct blockNode {\r
-       int color;              /* indexed */\r
-       int rotation;           /* indexed: 0=S-N, 1=W-E, 2=N-S, 3=E-W */\r
-       GLfloat height;\r
-       GLfloat x;\r
-       GLfloat y;\r
-       int falling;            \r
-       struct blockNode *next;\r
-} NODE;\r
-\r
-\r
-/* some handy macros and definitions */\r
-#define blockHeight 1.49f\r
-#define getHeight(a) (a * blockHeight)\r
-\r
-#define getOrientation(a) (a * 90)\r
-\r
-#define blockWidth 2.0f\r
-#define getLocation(a) (a * blockWidth)\r
-\r
-#define TOLLERANCE 0.1\r
-\r
-#define cylSize 0.333334f\r
-#define uddSize 0.4f\r
-#define        singleThick 0.29        /* defines the thickness of the carpet */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+/* topblock - openGL based hack  */
+
+static void buildCarpet(ModeInfo *);
+static void polygonPlane(int, int, int, int, int ,int);
+static void buildBlock(ModeInfo *);
+static void generateNewBlock(ModeInfo *);
+static void followBlock(ModeInfo *);
+static void buildBlobBlock(ModeInfo *);
+static double quadrantCorrection(double,int,int,int,int);
+
+/* this structure holds all the attributes about a block */
+typedef struct blockNode {
+       int color;              /* indexed */
+       int rotation;           /* indexed: 0=S-N, 1=W-E, 2=N-S, 3=E-W */
+       GLfloat height;
+       GLfloat x;
+       GLfloat y;
+       int falling;            
+       struct blockNode *next;
+} NODE;
+
+
+/* some handy macros and definitions */
+#define blockHeight 1.49f
+#define getHeight(a) (a * blockHeight)
+
+#define getOrientation(a) (a * 90)
+
+#define blockWidth 2.0f
+#define getLocation(a) (a * blockWidth)
+
+#define TOLERANCE 0.1f
+
+#define cylSize 0.333334f
+#define uddSize 0.4f
+#define        singleThick 0.29        /* defines the thickness of the carpet */
+
+
+
+
+
+
+
+
+
index 4241950c0c386dc43a4cef014fb2358cf6c69a84..b7670e7cf3fbcb7176b20998f52b342eeabf7e63 100644 (file)
@@ -258,9 +258,11 @@ make_layer (Display *dpy, Window window, int width, int height, int nblobs)
 
   blob_max = (width < height ? width : height) / 2;
   blob_min = (blob_max * 2) / 3;
 
   blob_max = (width < height ? width : height) / 2;
   blob_min = (blob_max * 2) / 3;
-  for (i = 0; i < layer->nblobs; i++)
+  for (i = 0; i < layer->nblobs; i++){
+    int j = blob_max - blob_min;
     layer->blobs[i] = make_blob (dpy, width, height,
     layer->blobs[i] = make_blob (dpy, width, height,
-                                (random() % (blob_max-blob_min)) + blob_min);
+                                (j ? random() % j : 0) + blob_min);
+  }
 
   layer->pixmap = XCreatePixmap (dpy, window, width, height, 1);
   layer->gc = XCreateGC (dpy, layer->pixmap, 0, &gcv);
 
   layer->pixmap = XCreatePixmap (dpy, window, width, height, 1);
   layer->gc = XCreateGC (dpy, layer->pixmap, 0, &gcv);
index 4c29db860123e9c3f192b4d6f687e496498b1688..efedb516b2218a74c80bf4ba6710f21098702b14 100644 (file)
@@ -3,7 +3,7 @@
 imsmap - generate fractal maps
 .SH SYNOPSIS
 .B imsmap
 imsmap - generate fractal maps
 .SH SYNOPSIS
 .B imsmap
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIint\fP] [\-delay \fIseconds\fP] [\-iterations \fIint\fP] [\-mode h|s|v|random]
+[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIint\fP] [\-delay \fIseconds\fP] [\-delay2 \fImicroseconds\fP] [\-iterations \fIint\fP] [\-mode h|s|v|random]
 .SH DESCRIPTION
 The \fIimsmap\fP program generates map or cloud-like patterns.  It looks
 quite different in monochrome and color.
 .SH DESCRIPTION
 The \fIimsmap\fP program generates map or cloud-like patterns.  It looks
 quite different in monochrome and color.
@@ -33,6 +33,9 @@ How many colors to use.  Default 50.
 .B \-delay \fIinteger\fP
 How long to delay between images.  Default 10 seconds.
 .TP 8
 .B \-delay \fIinteger\fP
 How long to delay between images.  Default 10 seconds.
 .TP 8
+.B \-delay2 \fIinteger\fP
+How long to delay between bitmaps.  Default 200000 (0.2 seconds).
+.TP 8
 .B \-iterations \fIinteger\fP
 A measure of the resolution of the resultant image, from 0 to 7.  Default 7.
 .TP 8
 .B \-iterations \fIinteger\fP
 A measure of the resolution of the resultant image, from 0 to 7.  Default 7.
 .TP 8
index 441bd8465ca67d336f7e96d9632bf6204a74c1e0..cd063f75e49407ee87ddd465de154e4353d600cd 100644 (file)
@@ -352,11 +352,11 @@ static inline void drawPoint(int x, int y, unsigned long color, double intensity
 {
     unsigned long c;
 
 {
     unsigned long c;
 
-    if ( x >= f->width ) x -= f->width;
-    else if ( x < 0 ) x += f->width;
+    while ( x >= f->width ) x -= f->width;
+    while ( x < 0 ) x += f->width;
        
        
-    if ( y >= f->height ) y -= f->height;
-    else if ( y < 0 ) y += f->height;
+    while ( y >= f->height ) y -= f->height;
+    while ( y < 0 ) y += f->height;
 
     /* if ( in_bounds(f, x, y) ) ... */
 
 
     /* if ( in_bounds(f, x, y) ) ... */
 
@@ -566,7 +566,7 @@ static void build_field(Display *dpy, Window window, XWindowAttributes xgwa, GC
        {
            if (i < base_orbits )
            {
        {
            if (i < base_orbits )
            {
-               if ( f->base_on_center )
+               if ( f->base_on_center )
                    circle->center = &f->center_of_universe; 
                else
                {
                    circle->center = &f->center_of_universe; 
                else
                {
@@ -719,7 +719,9 @@ static void drawIntersections(Display *dpy, Window window, GC fgc, struct field
                double d, dsqr, dx, dy;
                Circle *c2 = f->circles + j;
 
                double d, dsqr, dx, dy;
                Circle *c2 = f->circles + j;
 
+#ifdef TIME_ME
                ++f->possible_intersections;
                ++f->possible_intersections;
+#endif
                dx = c2->x - c1->x;
                dy = c2->y - c1->y;
 
                dx = c2->x - c1->x;
                dy = c2->y - c1->y;
 
@@ -745,7 +747,9 @@ static void drawIntersections(Display *dpy, Window window, GC fgc, struct field
                     * intersection 
                     */
 
                     * intersection 
                     */
 
+#ifdef TIME_ME
                    ++f->intersection_count;
                    ++f->intersection_count;
+#endif
 
                    /* unit vector in direction of c1 to c2 */
                    bx = dx / d;
 
                    /* unit vector in direction of c1 to c2 */
                    bx = dx / d;
index dce647bcc4e21307b67c7133b13dfd6efe42cd5e..aad5710d8a6599da0f0da48ff9a959425720215b 100644 (file)
@@ -225,7 +225,7 @@ make_puzzle_pixmap_pair (Display *dpy, Drawable d, int size, int bw,
                          int *x_ret, int *y_ret,
                          Pixmap *mask_ret, Pixmap *outline_ret)
 {
                          int *x_ret, int *y_ret,
                          Pixmap *mask_ret, Pixmap *outline_ret)
 {
-  int w = size * 3;
+  int w = (size ? size * 3 : 2);
   int h = w;
   int x = size;
   int y = size;
   int h = w;
   int x = size;
   int y = size;
@@ -404,8 +404,8 @@ jigsaw_init_1 (struct state *st)
   make_puzzle_pixmaps (st);
 
   cmap = xgwa.colormap;
   make_puzzle_pixmaps (st);
 
   cmap = xgwa.colormap;
-  st->width  = xgwa.width  / st->piece_width;
-  st->height = xgwa.height / st->piece_height;
+  st->width  = (st->piece_width ? xgwa.width  / st->piece_width : 0);
+  st->height = (st->piece_height ? xgwa.height / st->piece_height : 0);
   st->x_border = (xgwa.width  - (st->width  * st->piece_width)) / 2;
   st->y_border = (xgwa.height - (st->height * st->piece_width)) / 2;
 
   st->x_border = (xgwa.width  - (st->width  * st->piece_width)) / 2;
   st->y_border = (xgwa.height - (st->height * st->piece_width)) / 2;
 
index 6a7323def51dc9687448082d5dec6f87a180cfaf..8e12cd8c9ea9a012e9aa86ae45f38dae39b6c45b 100644 (file)
@@ -20,6 +20,7 @@ static const char sccsid[] = "@(#)julia.c     4.03 97/04/10 xlockmore";
  * other special, indirect and consequential damages.
  *
  * Revision History:
  * other special, indirect and consequential damages.
  *
  * Revision History:
+ * 10-Jun-06: j.grahl@ucl.ac.uk: tweaked functions for parameter of Julia set
  * 28-May-97: jwz@jwz.org: added interactive frobbing with the mouse.
  * 10-May-97: jwz@jwz.org: turned into a standalone program.
  * 02-Dec-95: snagged boilerplate from hop.c
  * 28-May-97: jwz@jwz.org: added interactive frobbing with the mouse.
  * 10-May-97: jwz@jwz.org: turned into a standalone program.
  * 02-Dec-95: snagged boilerplate from hop.c
@@ -159,6 +160,7 @@ incr(ModeInfo * mi, juliastruct * jp)
        else
          {
          NOTRACK:
        else
          {
          NOTRACK:
+#if 0
                jp->cr = 1.5 * (sin(M_PI * (jp->inc / 300.0)) *
                                                sin(jp->inc * M_PI / 200.0));
                jp->ci = 1.5 * (cos(M_PI * (jp->inc / 300.0)) *
                jp->cr = 1.5 * (sin(M_PI * (jp->inc / 300.0)) *
                                                sin(jp->inc * M_PI / 200.0));
                jp->ci = 1.5 * (cos(M_PI * (jp->inc / 300.0)) *
@@ -166,6 +168,15 @@ incr(ModeInfo * mi, juliastruct * jp)
 
                jp->cr += 0.5 * cos(M_PI * jp->inc / 400.0);
                jp->ci += 0.5 * sin(M_PI * jp->inc / 400.0);
 
                jp->cr += 0.5 * cos(M_PI * jp->inc / 400.0);
                jp->ci += 0.5 * sin(M_PI * jp->inc / 400.0);
+#else
+        jp->cr = 1.5 * (sin(M_PI * (jp->inc / 290.0)) *
+                        sin(jp->inc * M_PI / 210.0));
+        jp->ci = 1.5 * (cos(M_PI * (jp->inc / 310.0)) *
+                        cos(jp->inc * M_PI / 190.0));
+
+        jp->cr += 0.5 * cos(M_PI * jp->inc / 395.0);
+        jp->ci += 0.5 * sin(M_PI * jp->inc / 410.0);
+#endif
          }
 }
 
          }
 }
 
index 8c727317e19a63b369e97ae8e74ea6330fd6045e..c2b11ec1db552b91e7de457a3816d8993be5d620 100644 (file)
@@ -228,10 +228,10 @@ init_ksegment (GLOBAL *g, OBJECT *obj)
 {
 
   /* Give the segment some random values */
 {
 
   /* Give the segment some random values */
-  ((Ksegment *)obj->cur)->x1 = random() % g->xoff;
-  ((Ksegment *)obj->cur)->y1 = random() % g->yoff;
-  ((Ksegment *)obj->cur)->x2 = random() % g->xoff;
-  ((Ksegment *)obj->cur)->y2 = random() % g->yoff;
+  ((Ksegment *)obj->cur)->x1 = (g->xoff ? random() % g->xoff : 0);
+  ((Ksegment *)obj->cur)->y1 = (g->yoff ? random() % g->yoff : 0);
+  ((Ksegment *)obj->cur)->x2 = (g->xoff ? random() % g->xoff : 0);
+  ((Ksegment *)obj->cur)->y2 = (g->yoff ? random() % g->yoff : 0);
 }
 
 
 }
 
 
index f6502bef5621059f5214e5291c52bf0debcfd939..0db99601d09eb119a9602226ceea4cee46fe4d39 100644 (file)
@@ -196,6 +196,17 @@ move (struct state *st)
                st->move_length = st->Width / 100 + random() % 90, tries = 8;
            else
                tries--;
                st->move_length = st->Width / 100 + random() % 90, tries = 8;
            else
                tries--;
+           /* There maybe the case that we won't be able to exit from
+              this routine (especially when the geometry is too small)!!
+
+              Ensure that we can exit from this routine.
+            */
+#if 1
+           if (!tries && (st->move_length <= 1)) {
+             st->move_length = 1;
+             break;
+           }
+#endif
            switch (random() % 8)
            {
            case 0:
            switch (random() % 8)
            {
            case 0:
@@ -239,7 +250,8 @@ move (struct state *st)
            }
        } while (!st->move_dir);
     }
            }
        } while (!st->move_dir);
     }
-    walk(st, st->move_dir);
+    if (st->move_dir)
+      walk(st, st->move_dir);
     --st->move_length;
     st->next_fn = move;
 }
     --st->move_length;
     st->next_fn = move;
 }
index 84722bbf8e52c4276142cc66231d3bdc36c681cf..275fb42c83740304dfd2470b93bae72d91028cd5 100644 (file)
@@ -121,8 +121,8 @@ struct state {
 };
 
 
 };
 
 
-#define cell_x(c) (((c) - st->arr) % st->arr_width)
-#define cell_y(c) (((c) - st->arr) / st->arr_width)
+#define cell_x(c) (st->arr_width ? ((c) - st->arr) % st->arr_width : 0)
+#define cell_y(c) (st->arr_width ? ((c) - st->arr) / st->arr_width : 0)
 
 
 static int random_life_value (struct state *st)
 
 
 static int random_life_value (struct state *st)
@@ -437,8 +437,8 @@ setup_display (struct state *st)
           }
       }
 
           }
       }
 
-    st->xSize = st->windowWidth / st->arr_width;
-    st->ySize = st->windowHeight / st->arr_height;
+    st->xSize = st->arr_width ? st->windowWidth / st->arr_width : 0;
+    st->ySize = st->arr_height ? st->windowHeight / st->arr_height : 0;
     if (st->xSize > st->ySize)
     {
        st->xSize = st->ySize;
     if (st->xSize > st->ySize)
     {
        st->xSize = st->ySize;
@@ -482,6 +482,9 @@ static void setup_arr (struct state *st)
 
     XFillRectangle (st->dpy, st->window, st->coloredGCs[0], 0, 0, 
                    st->windowWidth, st->windowHeight);
 
     XFillRectangle (st->dpy, st->window, st->coloredGCs[0], 0, 0, 
                    st->windowWidth, st->windowHeight);
+    
+    if (!st->arr_width) st->arr_width = 1;
+    if (!st->arr_height) st->arr_height = 1;
 
     st->arr = (cell *) calloc (sizeof(cell), st->arr_width * st->arr_height);  
     if (!st->arr)
 
     st->arr = (cell *) calloc (sizeof(cell), st->arr_width * st->arr_height);  
     if (!st->arr)
@@ -494,7 +497,7 @@ static void setup_arr (struct state *st)
     for (y = 0; y < st->arr_height; y++)
     {
       int row = y * st->arr_width;
     for (y = 0; y < st->arr_height; y++)
     {
       int row = y * st->arr_width;
-       for (x = 0; x < st->arr_width; x++) 
+       for (x = 0; x < st->arr_width; x++) 
        {
            st->arr[row+x].speed = 0.0;
            st->arr[row+x].growth = 0.0;
        {
            st->arr[row+x].speed = 0.0;
            st->arr[row+x].growth = 0.0;
@@ -586,8 +589,8 @@ static void randblip (struct state *st, int doit)
     
     while (n--) 
     {
     
     while (n--) 
     {
-       int x = random () % st->arr_width;
-       int y = random () % st->arr_height;
+      int x = st->arr_width ? random () % st->arr_width : 0;
+      int y = st->arr_height ? random () % st->arr_height : 0;
        int c;
        FLOAT s;
        if (b)
        int c;
        FLOAT s;
        if (b)
@@ -597,7 +600,7 @@ static void randblip (struct state *st, int doit)
        }
        else
        {
        }
        else
        {
-           c = (random () % (st->count-1)) + 1;
+           c = ((st->count - 1) ? random () % (st->count-1) : 0) + 1;
            s = RAND_FLOAT * (st->maxlifespeed - st->minlifespeed) + st->minlifespeed;
        }
        newcell (st, &st->arr[y * st->arr_width + x], c, s);
            s = RAND_FLOAT * (st->maxlifespeed - st->minlifespeed) + st->minlifespeed;
        }
        newcell (st, &st->arr[y * st->arr_width + x], c, s);
@@ -637,7 +640,7 @@ static void update (struct state *st)
            int x = cell_x(a) + coords->x;
            int y = cell_y(a) + coords->y;
            coords++;
            int x = cell_x(a) + coords->x;
            int y = cell_y(a) + coords->y;
            coords++;
-           
+
            if (x < 0) x = st->arr_width - 1;
            else if (x >= st->arr_width) x = 0;
            
            if (x < 0) x = st->arr_width - 1;
            else if (x >= st->arr_width) x = 0;
            
@@ -650,9 +653,9 @@ static void update (struct state *st)
        if (a->growth >= st->diaglim) 
            killcell (st, a);
     }
        if (a->growth >= st->diaglim) 
            killcell (st, a);
     }
-    
+
     randblip (st, (st->head->next) == st->tail);
     randblip (st, (st->head->next) == st->tail);
-    
+
     for (a = st->head->next; a != st->tail; a = a->next)
     {
        if (a->isnext) 
     for (a = st->head->next; a != st->tail; a = a->next)
     {
        if (a->isnext) 
index 09fc4b621609ae0e2e371759a8c4562500f6b59c..0053eff2fc45ee7d8062c44c3480d88adc905de7 100644 (file)
@@ -358,7 +358,7 @@ static circle *init_circles(struct state *st, int n, int w, int h)
   dr = floor(maxradius * h) - r0 + 1;
 
   for (i=0;i<n;i++) {
   dr = floor(maxradius * h) - r0 + 1;
 
   for (i=0;i<n;i++) {
-    c[i].r = r0 + random() % dr;
+    c[i].r = r0 + ((dr > 0) ? random() % dr : 0);
     c[i].x = c[i].r + frand(w - 1 - 2 * c[i].r);
     c[i].y = c[i].r + frand(h - 1 - 2 * c[i].r);
     c[i].visible = random() & 1;
     c[i].x = c[i].r + frand(w - 1 - 2 * c[i].r);
     c[i].y = c[i].r + frand(h - 1 - 2 * c[i].r);
     c[i].visible = random() & 1;
index 6c26165f6dc4cc6fdad76194c421b8d4e225c9fa..0bea52ef6c9145aff1b4043d9bf2538d6b76b983 100644 (file)
@@ -83,8 +83,8 @@ popsquares_init (Display *dpy, Window window)
 
   st->sw = st->xgwa.width / st->subdivision;
   st->sh = st->xgwa.height / st->subdivision;
 
   st->sw = st->xgwa.width / st->subdivision;
   st->sh = st->xgwa.height / st->subdivision;
-  st->gw = st->xgwa.width / st->sw;
-  st->gh = st->xgwa.height / st->sh;
+  st->gw = st->sw ? st->xgwa.width / st->sw : 0;
+  st->gh = st->sh ? st->xgwa.height / st->sh : 0;
   st->nsquares = st->gw * st->gh;
 
   gcv.foreground = fg.pixel;
   st->nsquares = st->gw * st->gh;
 
   gcv.foreground = fg.pixel;
index 1fd3831f927267c2ffc52dae54c3ef1ce0e109c8..153f620e09171c22ea3d89a0cbef34737378b76f 100644 (file)
@@ -757,10 +757,13 @@ add_drop(struct state *st, ripple_mode mode, int drop)
   case ripple_blob: {
     double power;
 
   case ripple_blob: {
     double power;
 
+    int tmp_i, tmp_j;
     power = drop_dist[random() % (sizeof(drop_dist)/sizeof(drop_dist[0]))]; /* clumsy */
     dheight = (int)(drop * (power + 0.01));
     power = drop_dist[random() % (sizeof(drop_dist)/sizeof(drop_dist[0]))]; /* clumsy */
     dheight = (int)(drop * (power + 0.01));
-    newx = radius + border + (random() % (int)(st->width - 2*border - 2*radius*power));
-    newy = radius + border + (random() % (int)(st->height - 2*border - 2*radius*power));
+    tmp_i = (int)(st->width - 2*border - 2*radius*power);
+    tmp_j = (int)(st->height - 2*border - 2*radius*power);
+    newx = radius + border + ((tmp_i > 0) ? random() % tmp_i : 0);
+    newy = radius + border + ((tmp_j > 0) ? random() % tmp_j : 0);
     add_circle_drop(st, newx, newy, radius, dheight);
   }
   break;
     add_circle_drop(st, newx, newy, radius, dheight);
   }
   break;
@@ -770,12 +773,15 @@ add_drop(struct state *st, ripple_mode mode, int drop)
     int x;
     int cx, cy;
     short *buf = (random()&1) ? st->bufferA : st->bufferB;
     int x;
     int cx, cy;
     short *buf = (random()&1) ? st->bufferA : st->bufferB;
+    int tmp_i, tmp_j;
 
     radius = (1 + (random() % 5)) * (1 + (random() % 5));
     dheight = drop / 128;
     if (random() & 1) dheight = -dheight;
 
     radius = (1 + (random() % 5)) * (1 + (random() % 5));
     dheight = drop / 128;
     if (random() & 1) dheight = -dheight;
-    newx = radius + border + (random() % (st->width - 2*border - 2*radius));
-    newy = radius + border + (random() % (st->height - 2*border - 2*radius));
+    tmp_i = st->width - 2*border - 2*radius;
+    tmp_j = st->height - 2*border - 2*radius;
+    newx = radius + border + ((tmp_i > 0) ? random() % tmp_i : 0);
+    newy = radius + border + ((tmp_j > 0) ? random() % tmp_j : 0);
     x = newy * st->width + newx;
     for (cy = -radius; cy <= radius; cy++)
       for (cx = -radius; cx <= radius; cx++)
     x = newy * st->width + newx;
     for (cy = -radius; cy <= radius; cy++)
       for (cx = -radius; cx <= radius; cx++)
index 52b382f629d7298d5f0f9e64d936660876150581..29a566275445ae07a6e70bacd5698a057e9bae53 100644 (file)
@@ -176,8 +176,8 @@ reset_zoom (struct state *st, struct zoom_area *za)
     za->ww = st->width - za->w;
     za->hh = st->height - za->h;
 
     za->ww = st->width - za->w;
     za->hh = st->height - za->h;
 
-    za->x = (random() % za->ww);
-    za->y = (random() % za->hh);
+    za->x = (za->ww ? random() % za->ww : 0);
+    za->y = (za->hh ? random() % za->hh : 0);
 
     za->dx = ((2 * (random() & 1)) - 1) * (100 + random() % 300);
     za->dy = ((2 * (random() & 1)) - 1) * (100 + random() % 300);
 
     za->dx = ((2 * (random() & 1)) - 1) * (100 + random() % 300);
     za->dy = ((2 * (random() & 1)) - 1) * (100 + random() % 300);
@@ -269,8 +269,9 @@ init_hack (struct state *st)
     st->zoom_box[i] = create_zoom (st);
   }
 
     st->zoom_box[i] = create_zoom (st);
   }
 
-  memcpy (st->buffer_map->data, st->orig_map->data,
-          st->height * st->buffer_map->bytes_per_line);
+  if (st->height && st->orig_map->data)
+    memcpy (st->buffer_map->data, st->orig_map->data,
+           st->height * st->buffer_map->bytes_per_line);
 
   DisplayImage(st, 0, 0, st->width, st->height);
 }
 
   DisplayImage(st, 0, 0, st->width, st->height);
 }
index f4db428a2d9db1a8fbc130cf1e5b65bf3d87ec71..8ea025d0da6068ba5e3b8795718a14d61c960d27 100644 (file)
 #include "screenhackI.h"
 #include "version.h"
 #include "vroot.h"
 #include "screenhackI.h"
 #include "version.h"
 #include "vroot.h"
-#include "change_locale.h"
-#if HAVE_SETLOCALE
-#include <locale.h>
-#endif
 
 #ifndef _XSCREENSAVER_VROOT_H_
 # error Error!  You have an old version of vroot.h!  Check -I args.
 
 #ifndef _XSCREENSAVER_VROOT_H_
 # error Error!  You have an old version of vroot.h!  Check -I args.
@@ -162,27 +158,6 @@ static XrmOptionDescRec *merged_options;
 static int merged_options_size;
 static char **merged_defaults;
 
 static int merged_options_size;
 static char **merged_defaults;
 
-static void 
-reset_locale (void)
-{
-#ifdef HAVE_SETLOCALE
-  const char *current_locale = setlocale(LC_ALL, "");
-  const char *cmp_locale;
-  int j = 0;
-
-  while ((cmp_locale = change_locale[j]))
-    {
-      if (!strncmp(current_locale, cmp_locale, strlen(cmp_locale)))
-       {
-         setlocale(LC_ALL, "C");
-         break;
-       }
-      j++;
-    }
-#endif /* HAVE_SETLOCALE */
-}
-
-
 static void
 merge_options (void)
 {
 static void
 merge_options (void)
 {
@@ -738,7 +713,6 @@ main (int argc, char **argv)
   char version[255];
 
   fix_fds();
   char version[255];
 
   fix_fds();
-  reset_locale();
 
   progname = argv[0];   /* reset later */
   progclass = ft->progclass;
 
   progname = argv[0];   /* reset later */
   progclass = ft->progclass;
index fe4d24aef62dbc3902ed9cc32bebf8dc1d4f272e..42d3fefca029a6b10a03d81b640f7f334f942f90 100644 (file)
@@ -326,7 +326,8 @@ slidescreen_draw (Display *dpy, Window window, void *closure)
      /* alternate between horizontal and vertical slides */
      /* note that draw_dir specifies the direction the _hole_ moves, not the tiles */
      if (st->draw_last == VERTICAL) {
      /* alternate between horizontal and vertical slides */
      /* note that draw_dir specifies the direction the _hole_ moves, not the tiles */
      if (st->draw_last == VERTICAL) {
-       if ((st->draw_rnd = random () % (st->grid_w - 1)) < st->hole_x) {
+       if (((st->grid_w > 1) ? st->draw_rnd = random () % (st->grid_w - 1) : 0)
+          < st->hole_x) {
          st->draw_dx = -1; st->draw_dir = LEFT;  st->hole_x -= st->draw_rnd;
        } else {
          st->draw_dx =  1; st->draw_dir = RIGHT; st->draw_rnd -= st->hole_x;
          st->draw_dx = -1; st->draw_dir = LEFT;  st->hole_x -= st->draw_rnd;
        } else {
          st->draw_dx =  1; st->draw_dir = RIGHT; st->draw_rnd -= st->hole_x;
@@ -334,7 +335,8 @@ slidescreen_draw (Display *dpy, Window window, void *closure)
        st->draw_dy = 0; st->draw_w = st->draw_size = st->draw_rnd + 1; st->draw_h = 1;
        st->draw_last = HORIZONTAL;
      } else {
        st->draw_dy = 0; st->draw_w = st->draw_size = st->draw_rnd + 1; st->draw_h = 1;
        st->draw_last = HORIZONTAL;
      } else {
-       if ((st->draw_rnd = random () % (st->grid_h - 1)) < st->hole_y) {
+       if (((st->grid_h > 1) ? st->draw_rnd = random () % (st->grid_h - 1) : 0)
+          < st->hole_y) {
          st->draw_dy = -1; st->draw_dir = UP;    st->hole_y -= st->draw_rnd;
        } else {
          st->draw_dy =  1; st->draw_dir = DOWN;  st->draw_rnd -= st->hole_y;
          st->draw_dy = -1; st->draw_dir = UP;    st->hole_y -= st->draw_rnd;
        } else {
          st->draw_dy =  1; st->draw_dir = DOWN;  st->draw_rnd -= st->hole_y;
index dbde586f7d922f24b352f2428e0ca56bcd86302c..3e13116e534e0c63219bf884362c10fd0100d0fd 100644 (file)
@@ -198,10 +198,12 @@ squiral_draw (Display *dpy, Window window, void *closure)
     memset(&st->fill[(st->height-st->inclear-1)*st->width], 0, sizeof(int)*st->width);
     st->inclear++;
     XDrawLine(st->dpy, st->window, st->erase_gc, 0, st->inclear, st->width-1, st->inclear);
     memset(&st->fill[(st->height-st->inclear-1)*st->width], 0, sizeof(int)*st->width);
     st->inclear++;
     XDrawLine(st->dpy, st->window, st->erase_gc, 0, st->inclear, st->width-1, st->inclear);
-    memset(&st->fill[st->inclear*st->width], 0, sizeof(int)*st->width);
+    if (st->inclear < st->height)
+      memset(&st->fill[st->inclear*st->width], 0, sizeof(int)*st->width);
     XDrawLine(st->dpy, st->window, st->erase_gc, 0, st->height-st->inclear-1, st->width-1,
               st->height-st->inclear-1);
     XDrawLine(st->dpy, st->window, st->erase_gc, 0, st->height-st->inclear-1, st->width-1,
               st->height-st->inclear-1);
-    memset(&st->fill[(st->height-st->inclear-1)*st->width], 0, sizeof(int)*st->width);
+    if (st->height - st->inclear >= 1)
+      memset(&st->fill[(st->height-st->inclear-1)*st->width], 0, sizeof(int)*st->width);
     st->inclear++;
     if(st->inclear>st->height/2) st->inclear=st->height;
   }
     st->inclear++;
     if(st->inclear>st->height/2) st->inclear=st->height;
   }
index f013482baff954bd5088628566f9d16f68836df5..4390b2da118550d5bdbf9aac68393ee559d9e20a 100644 (file)
@@ -345,6 +345,8 @@ reset_starfish (struct state *st)
       if (st->colors)
        free (st->colors);
       st->colors = 0;
       if (st->colors)
        free (st->colors);
       st->colors = 0;
+      XFreeGC (st->dpy, st->gc);
+      st->gc = 0;
     }
 
   st->ncolors = get_integer_resource (st->dpy, "colors", "Colors");
     }
 
   st->ncolors = get_integer_resource (st->dpy, "colors", "Colors");
@@ -479,6 +481,8 @@ starfish_draw (Display *dpy, Window window, void *closure)
             s = reset_starfish (st);
           else
             s = make_window_starfish (st);
             s = reset_starfish (st);
           else
             s = make_window_starfish (st);
+
+         st->starfish = s;
         }
     }
 
         }
     }
 
index ce22944fca1c22b38cceacb54a1030f856961813..79bbd8f735b6b10cfef31bdc595e2e96a001c9a0 100644 (file)
@@ -554,8 +554,8 @@ static void setupModel (struct state *st)
        st->tileSize = st->windowHeight / 2;
     }
 
        st->tileSize = st->windowHeight / 2;
     }
 
-    st->columns = st->windowWidth / st->tileSize;
-    st->rows = st->windowHeight / st->tileSize;
+    st->columns = st->tileSize ? st->windowWidth / st->tileSize : 0;
+    st->rows = st->tileSize ? st->windowHeight / st->tileSize : 0;
 
     if ((st->maxColumns != 0) && (st->columns > st->maxColumns))
     {
 
     if ((st->maxColumns != 0) && (st->columns > st->maxColumns))
     {
index aa7deb3803e46f1914c315ebdf96427367cab748..1496495120833e4d54e7e3c931f1e2255cfdef17 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
 #!/usr/bin/perl -w
-# vidwhacker, for xscreensaver.  Copyright (c) 1998-2005 Jamie Zawinski.
+# vidwhacker, for xscreensaver.  Copyright (c) 1998-2006 Jamie Zawinski.
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
@@ -21,7 +21,7 @@ use diagnostics;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.28 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.29 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 my $use_stdin = 0;
 
 my $verbose = 0;
 my $use_stdin = 0;
@@ -479,6 +479,12 @@ sub main() {
 
   read_config;
 
 
   read_config;
 
+  # sanity checking - is pbm installed?
+  # (this is a non-exhaustive but representative list)
+  foreach ("ppmtopgm", "pgmenhance", "pnminvert", "pnmarith", "pnmdepth") {
+    which ($_) || error "$_ not found on \$PATH.";
+  }
+
   if (!$use_stdout) {
     $_ = `xdpyinfo 2>&-`;
     ($screen_width) =~ m/ dimensions: +(\d+)x(\d+) pixels/;
   if (!$use_stdout) {
     $_ = `xdpyinfo 2>&-`;
     ($screen_width) =~ m/ dimensions: +(\d+)x(\d+) pixels/;
index 717689baef0454673ef9c290f91b9e462c4fcf5c..04b82c1a96d689061722c8b59bab9932dcbe0ca7 100644 (file)
@@ -607,6 +607,10 @@ loadBitmap(struct state *st, int *w, int *h)
 {
   char *bitmap_name = get_string_resource (st->dpy, "bitmap", "Bitmap");
 
 {
   char *bitmap_name = get_string_resource (st->dpy, "bitmap", "Bitmap");
 
+#ifdef HAVE_COCOA
+  bitmap_name = "(default)"; /* #### always use builtin */
+#endif /* HAVE_COCOA */
+  
   if (!bitmap_name ||
       !*bitmap_name ||
       !strcmp(bitmap_name, "none"))
   if (!bitmap_name ||
       !*bitmap_name ||
       !strcmp(bitmap_name, "none"))
index 2fadd7946f0de3eaded5cdc1186cff62d583b2df..6018469239a478a7c0cac736843603b1b00abb56 100644 (file)
@@ -441,7 +441,7 @@ xlockmore_init (Display *dpy, Window window,
   mi->size      = get_integer_resource (dpy, "size", "Int");
 
   mi->threed = get_boolean_resource (dpy, "use3d", "Boolean");
   mi->size      = get_integer_resource (dpy, "size", "Int");
 
   mi->threed = get_boolean_resource (dpy, "use3d", "Boolean");
-  mi->threed_delta = get_float_resource (dpy, "delta3d", "Boolean");
+  mi->threed_delta = get_float_resource (dpy, "delta3d", "Float");
   mi->threed_right_color = get_pixel_resource (dpy,
                                               mi->xgwa.colormap, "right3d", "Color");
   mi->threed_left_color = get_pixel_resource (dpy,
   mi->threed_right_color = get_pixel_resource (dpy,
                                               mi->xgwa.colormap, "right3d", "Color");
   mi->threed_left_color = get_pixel_resource (dpy,
index 43edc0211c1466ac36969db76851b2ff0c88d323..2eae87b49204873de07d14b03b1712808839b9c2 100644 (file)
@@ -415,6 +415,10 @@ sub generate_headers
            if (/\.($xml_extension|$ini_extension)$/ || /^\[/){
               $_ =~ s/^\[[^\[].*]\s*//;
                my $filename = "../$_";
            if (/\.($xml_extension|$ini_extension)$/ || /^\[/){
               $_ =~ s/^\[[^\[].*]\s*//;
                my $filename = "../$_";
+               my $srcdir = $ENV{'top_srcdir'};
+               if ($srcdir){
+                  $filename="$srcdir/$_" ;
+               };
 
                if ($VERBOSE){
                    system($EXTRACT, "--update", "--type=$gettext_type", $filename);
 
                if ($VERBOSE){
                    system($EXTRACT, "--update", "--type=$gettext_type", $filename);
@@ -435,6 +439,12 @@ sub generate_po_template
 
     move ("POTFILES.in", "POTFILES.in.old");
 
 
     move ("POTFILES.in", "POTFILES.in.old");
 
+    my $srcdir = $ENV{'top_srcdir'};
+    my $adddirectory = "--directory=." ;
+    if ($srcdir){
+        $adddirectory = "--directory=$srcdir";
+    }
+
     open INFILE, "<POTFILES.in.old";
     open OUTFILE, ">POTFILES.in";
     while (<INFILE>) {
     open INFILE, "<POTFILES.in.old";
     open OUTFILE, ">POTFILES.in";
     while (<INFILE>) {
@@ -447,6 +457,7 @@ sub generate_po_template
 
     system ("xgettext", "--default-domain\=$MODULE", 
                        "--directory\=\.\.",
 
     system ("xgettext", "--default-domain\=$MODULE", 
                        "--directory\=\.\.",
+                       "$adddirectory" ,
                        "--add-comments", 
                        "--keyword\=\_", 
                        "--keyword\=N\_", 
                        "--add-comments", 
                        "--keyword\=\_", 
                        "--keyword\=N\_", 
index e03fd79fbb10c17693c47d4b614e5451938e1c20..c2e15de521301d4be9c102e04268f38ab37c7578 100644 (file)
@@ -192,8 +192,8 @@ all-no:
 $(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES)
        @INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
        export INTLTOOL_EXTRACT ; \
 $(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES)
        @INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
        export INTLTOOL_EXTRACT ; \
-       echo $(GENPOT) ; \
-            $(GENPOT)
+       echo top_srcdir=$(top_srcdir) $(GENPOT) ; \
+            top_srcdir=$(top_srcdir) $(GENPOT)
 
 install-strip: install
 
 
 install-strip: install
 
@@ -292,7 +292,7 @@ generate_potfiles_in:
        @tmp=po.$$$$ ;                          \
         file=POTFILES.in ;                     \
         ( cd $(top_srcdir);                    \
        @tmp=po.$$$$ ;                          \
         file=POTFILES.in ;                     \
         ( cd $(top_srcdir);                    \
-          echo "# Auto-generated: `date`" ;    \
+          echo "# Auto-generated: `LANG=C date`" ;     \
           ( grep -l '_("' driver/*.[ch] ;      \
             ls driver/*.glade2                 \
                driver/*.desktop.in             \
           ( grep -l '_("' driver/*.[ch] ;      \
             ls driver/*.glade2                 \
                driver/*.desktop.in             \
@@ -320,6 +320,9 @@ update-po: Makefile
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
          lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
        for cat in $$catalogs; do \
          cat=`basename $$cat`; \
          lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+          if [ ! -f $$lang.po ] ; then \
+             cp $(srcdir)/$$lang.po . ; \
+          fi ; \
          cp $$lang.po $$lang.old.po; \
          echo $(MSGMERGE) $$lang; \
          if   $(MSGMERGE) $$lang >/dev/null 2>&1; then \
          cp $$lang.po $$lang.old.po; \
          echo $(MSGMERGE) $$lang; \
          if   $(MSGMERGE) $$lang >/dev/null 2>&1; then \
index 5ed4509048270e51e0877dc8e350ebcf007013a9..7d4329890093d7862fea527280055e941b482334 100644 (file)
@@ -1,4 +1,4 @@
-# Auto-generated: Tue May 23 16:01:41 PDT 2006
+# Auto-generated: Mon Sep 18 19:36:43 PDT 2006
 driver/demo-Gtk-conf.c
 driver/demo-Gtk-support.c
 driver/demo-Gtk-widgets.c
 driver/demo-Gtk-conf.c
 driver/demo-Gtk-support.c
 driver/demo-Gtk-widgets.c
index 3aaedbb566506f4f142e47a236fdc28c3a3da0ba..7fc5724fe1901ef62e9e59f4fe0e3d0854a3c4b6 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -2145,7 +2145,7 @@ msgid "Bouboule"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -6034,27 +6034,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7088,7 +7088,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index c07a09a3355df3f390a4c3ad9db1a75c498dfdff..1466d37f0b57742d4c191646eb28b786b7a5a11a 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -2347,7 +2347,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Brug rød/blå 3d-separation"
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Brug rød/blå 3d-separation"
 
 #: hacks/config/bouboule.xml.h:7
@@ -6692,27 +6692,27 @@ msgid "Fertility"
 msgstr "Fertilitet"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Fertilitet"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr "Maksimal levetid"
 
 #: hacks/config/petri.xml.h:13
 msgstr "Maksimal levetid"
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr "Maksimal dødelighed"
 
 #: hacks/config/petri.xml.h:14
 msgstr "Maksimal dødelighed"
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr "Maksimal reproduktion"
 
 #: hacks/config/petri.xml.h:15
 msgstr "Maksimal reproduktion"
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr "Minimal levetid"
 
 #: hacks/config/petri.xml.h:16
 msgstr "Minimal levetid"
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr "Minimal dødelighed"
 
 #: hacks/config/petri.xml.h:17
 msgstr "Minimal dødelighed"
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr "Minimal reproduktion"
 
 #: hacks/config/petri.xml.h:18
 msgstr "Minimal reproduktion"
 
 #: hacks/config/petri.xml.h:18
@@ -7800,7 +7800,7 @@ msgid "RD-Bomb"
 msgstr "Reaktionsdiffusionsbombe"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr "Reaktionsdiffusionsbombe"
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr "Reaktion/diffusion"
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr "Reaktion/diffusion"
 
 #: hacks/config/rd-bomb.xml.h:16
index dbc2cd34f53ff50fca6e7363b0dbfe1c72e3df53..ba9f9a9eedc9b6c8d42f5e21bdd48d9ab854d355 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -2302,7 +2302,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Rot/Blat 3D-Trennung vornehmen"
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Rot/Blat 3D-Trennung vornehmen"
 
 #: hacks/config/bouboule.xml.h:7
@@ -6468,27 +6468,27 @@ msgid "Fertility"
 msgstr "Fruchtbarkeit"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Fruchtbarkeit"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr "Maximale Lebenserwartung"
 
 #: hacks/config/petri.xml.h:13
 msgstr "Maximale Lebenserwartung"
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr "Maximale Todesrate"
 
 #: hacks/config/petri.xml.h:14
 msgstr "Maximale Todesrate"
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr "Maximale Wachstumsrate"
 
 #: hacks/config/petri.xml.h:15
 msgstr "Maximale Wachstumsrate"
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr "Minimale Lebenserwartung"
 
 #: hacks/config/petri.xml.h:16
 msgstr "Minimale Lebenserwartung"
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr "Minimale Todesrate"
 
 #: hacks/config/petri.xml.h:17
 msgstr "Minimale Todesrate"
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr "Maximale Wachstumsrate"
 
 #: hacks/config/petri.xml.h:18
 msgstr "Maximale Wachstumsrate"
 
 #: hacks/config/petri.xml.h:18
@@ -7577,7 +7577,7 @@ msgid "RD-Bomb"
 msgstr "RD-Bombe"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr "RD-Bombe"
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr "Reaktion / Diffusion"
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr "Reaktion / Diffusion"
 
 #: hacks/config/rd-bomb.xml.h:16
index 527625358a7cc8f3d3e25d5eaa0341e18c84d22b..b769928cd4bceb61b0dc4354e267ed5bf1468993 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -2162,7 +2162,7 @@ msgid "Bouboule"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -6097,27 +6097,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7156,7 +7156,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index b81aef502bba385c8337df6690cb8551b41dd3ba..7bb4e10b261daf9fa71167eb64ba63ce004b0d80 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -2168,7 +2168,7 @@ msgid "Bouboule"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -6061,27 +6061,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7116,7 +7116,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index 43d830fd05739f22e0909c13aec7610c9828847d..dfca6a102ec4938657cb66a72629192e794bde1b 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: xscreensaver 5.00\n"
 "Report-Msgid-Bugs-To: \n"
 msgstr ""
 "Project-Id-Version: xscreensaver 5.00\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-02-13 12:26+0100\n"
+"POT-Creation-Date: 2006-05-24 12:23+0200\n"
 "PO-Revision-Date: 2006-02-13 16:18+0100\n"
 "Last-Translator: Eric Lassauge <lassauge@users.sourceforge.net>\n"
 "Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
 "PO-Revision-Date: 2006-02-13 16:18+0100\n"
 "Last-Translator: Eric Lassauge <lassauge@users.sourceforge.net>\n"
 "Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
@@ -14,11 +14,11 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: driver/demo-Gtk-conf.c:818
+#: driver/demo-Gtk-conf.c:839
 msgid "Browse..."
 msgstr "Parcourir... "
 
 msgid "Browse..."
 msgstr "Parcourir... "
 
-#: driver/demo-Gtk-conf.c:1110
+#: driver/demo-Gtk-conf.c:1131
 msgid "Select file."
 msgstr "Sélectionnez un fichier."
 
 msgid "Select file."
 msgstr "Sélectionnez un fichier."
 
@@ -151,7 +151,7 @@ msgid ""
 "return.)"
 msgstr ""
 "Démo de l'économiseur d'écran sélectionné en mode plein-écran (cliquer avec "
 "return.)"
 msgstr ""
 "Démo de l'économiseur d'écran sélectionné en mode plein-écran (cliquer avec "
-"la souris pour en sortir.)"
+"la souris pour en sortir)."
 
 #: driver/demo-Gtk-widgets.c:492
 msgid "Settings..."
 
 #: driver/demo-Gtk-widgets.c:492
 msgid "Settings..."
@@ -279,7 +279,7 @@ msgid ""
 "Whether the screen should slowly fade to black when the screen saver "
 "activates."
 msgstr ""
 "Whether the screen should slowly fade to black when the screen saver "
 "activates."
 msgstr ""
-"L'écran doit-il fondre lentement au noir quand l'économiseur d'écran s'active"
+"L'écran doit-il fondre lentement au noir quand l'économiseur d'écran s'active."
 
 #: driver/demo-Gtk-widgets.c:867
 msgid "Fade To Black When Blanking"
 
 #: driver/demo-Gtk-widgets.c:867
 msgid "Fade To Black When Blanking"
@@ -291,7 +291,7 @@ msgid ""
 "deactivates."
 msgstr ""
 "L'écran doit-il fondre lentement depuis le noir quand l'économiseur d'écran "
 "deactivates."
 msgstr ""
 "L'écran doit-il fondre lentement depuis le noir quand l'économiseur d'écran "
-"se désactive"
+"se désactive."
 
 #: driver/demo-Gtk-widgets.c:884
 msgid "Fade From Black When Unblanking"
 
 #: driver/demo-Gtk-widgets.c:884
 msgid "Fade From Black When Unblanking"
@@ -510,7 +510,7 @@ msgstr "Valider"
 msgid "Cancel"
 msgstr "Annuler"
 
 msgid "Cancel"
 msgstr "Annuler"
 
-#: driver/demo-Gtk.c:692 driver/demo-Gtk.c:4282
+#: driver/demo-Gtk.c:692 driver/demo-Gtk.c:4286
 #, c-format
 msgid ""
 "Warning:\n"
 #, c-format
 msgid ""
 "Warning:\n"
@@ -526,7 +526,7 @@ msgstr ""
 #: driver/demo-Gtk.c:740
 msgid "For updates, check http://www.jwz.org/xscreensaver/"
 msgstr ""
 #: driver/demo-Gtk.c:740
 msgid "For updates, check http://www.jwz.org/xscreensaver/"
 msgstr ""
-"Traduction © 2005, Eric Lassauge http://lassauge.free.fr/xscreensaver/\n"
+"Traduction © 2006, Eric Lassauge http://lassauge.free.fr/xscreensaver/\n"
 "\n"
 "Pour les mises à jour, vérifier sur http://www.jwz.org/xscreensaver/"
 
 "\n"
 "Pour les mises à jour, vérifier sur http://www.jwz.org/xscreensaver/"
 
@@ -702,7 +702,7 @@ msgstr "Non"
 msgid "Installed"
 msgstr "installé"
 
 msgid "Installed"
 msgstr "installé"
 
-#: driver/demo-Gtk.c:4292
+#: driver/demo-Gtk.c:4296
 #, c-format
 msgid ""
 "Warning:\n"
 #, c-format
 msgid ""
 "Warning:\n"
@@ -735,7 +735,7 @@ msgstr ""
 "\n"
 "Relancer le démon xscreensaver maintenant ?\n"
 
 "\n"
 "Relancer le démon xscreensaver maintenant ?\n"
 
-#: driver/demo-Gtk.c:4317
+#: driver/demo-Gtk.c:4321
 #, c-format
 msgid ""
 "Warning:\n"
 #, c-format
 msgid ""
 "Warning:\n"
@@ -762,7 +762,7 @@ msgstr ""
 "\n"
 "Relancer le démon sur «%s» en tant que «%s» maintenant ?\n"
 
 "\n"
 "Relancer le démon sur «%s» en tant que «%s» maintenant ?\n"
 
-#: driver/demo-Gtk.c:4339
+#: driver/demo-Gtk.c:4343
 #, c-format
 msgid ""
 "Warning:\n"
 #, c-format
 msgid ""
 "Warning:\n"
@@ -781,12 +781,12 @@ msgstr ""
 "\n"
 "Relancer le démon xscreensaver maintenant ?\n"
 
 "\n"
 "Relancer le démon xscreensaver maintenant ?\n"
 
-#: driver/demo-Gtk.c:4800
+#: driver/demo-Gtk.c:4804
 #, c-format
 msgid "%s: unknown option: %s\n"
 msgstr "%s : option inconnue : %s\n"
 
 #, c-format
 msgid "%s: unknown option: %s\n"
 msgstr "%s : option inconnue : %s\n"
 
-#: driver/demo-Gtk.c:4865
+#: driver/demo-Gtk.c:4869
 msgid "Screensaver Preferences"
 msgstr "Préférences économiseur d'écran"
 
 msgid "Screensaver Preferences"
 msgstr "Préférences économiseur d'écran"
 
@@ -820,7 +820,7 @@ msgstr "Fondu au noir lors du _verrouillage"
 
 #: driver/xscreensaver-demo.glade2.h:17
 msgid "Fading and Colormaps"
 
 #: driver/xscreensaver-demo.glade2.h:17
 msgid "Fading and Colormaps"
-msgstr "Flétrissement des couleurs"
+msgstr "Fondu et palette de couleurs"
 
 #: driver/xscreensaver-demo.glade2.h:19
 msgid "Grab Desktop _Images"
 
 #: driver/xscreensaver-demo.glade2.h:19
 msgid "Grab Desktop _Images"
@@ -828,7 +828,7 @@ msgstr "Capturer des _images du bureau"
 
 #: driver/xscreensaver-demo.glade2.h:20
 msgid "Grab _Video Frames"
 
 #: driver/xscreensaver-demo.glade2.h:20
 msgid "Grab _Video Frames"
-msgstr "Captures des trames _vidéo"
+msgstr "Capturer des trames _vidéo"
 
 #: driver/xscreensaver-demo.glade2.h:23
 msgid "How long after the screen blanks until a password will be required."
 
 #: driver/xscreensaver-demo.glade2.h:23
 msgid "How long after the screen blanks until a password will be required."
@@ -845,7 +845,7 @@ msgid ""
 "mode.)"
 msgstr ""
 "Combien de temps avant l'activation d'un autre économiseur d'écran (en mode "
 "mode.)"
 msgstr ""
 "Combien de temps avant l'activation d'un autre économiseur d'écran (en mode "
-"aléatoire)"
+"aléatoire)."
 
 #: driver/xscreensaver-demo.glade2.h:27
 msgid "How long until the monitor goes completely black."
 
 #: driver/xscreensaver-demo.glade2.h:27
 msgid "How long until the monitor goes completely black."
@@ -931,7 +931,7 @@ msgstr ""
 
 #: driver/xscreensaver-demo.glade2.h:59
 msgid "When idle or locked, blacken the screen only."
 
 #: driver/xscreensaver-demo.glade2.h:59
 msgid "When idle or locked, blacken the screen only."
-msgstr "En attente ou blocage, seuelment effacer l'écran."
+msgstr "En attente ou blocage, seulement effacer l'écran."
 
 #: driver/xscreensaver-demo.glade2.h:60
 msgid ""
 
 #: driver/xscreensaver-demo.glade2.h:60
 msgid ""
@@ -1092,71 +1092,73 @@ msgstr "Bras"
 #: hacks/config/anemone.xml.h:3 hacks/config/anemotaxis.xml.h:5
 #: hacks/config/ant.xml.h:6 hacks/config/antinspect.xml.h:4
 #: hacks/config/antmaze.xml.h:3 hacks/config/antspotlight.xml.h:3
 #: hacks/config/anemone.xml.h:3 hacks/config/anemotaxis.xml.h:5
 #: hacks/config/ant.xml.h:6 hacks/config/antinspect.xml.h:4
 #: hacks/config/antmaze.xml.h:3 hacks/config/antspotlight.xml.h:3
-#: hacks/config/apollonian.xml.h:5 hacks/config/atlantis.xml.h:4
+#: hacks/config/apollonian.xml.h:5 hacks/config/atlantis.xml.h:5
 #: hacks/config/attraction.xml.h:8 hacks/config/atunnel.xml.h:3
 #: hacks/config/attraction.xml.h:8 hacks/config/atunnel.xml.h:3
-#: hacks/config/barcode.xml.h:4 hacks/config/blaster.xml.h:3
+#: hacks/config/barcode.xml.h:6 hacks/config/blaster.xml.h:3
 #: hacks/config/blinkbox.xml.h:5 hacks/config/blitspin.xml.h:4
 #: hacks/config/blinkbox.xml.h:5 hacks/config/blitspin.xml.h:4
-#: hacks/config/blocktube.xml.h:4 hacks/config/boing.xml.h:2
-#: hacks/config/bouboule.xml.h:3 hacks/config/bouncingcow.xml.h:6
+#: hacks/config/blocktube.xml.h:5 hacks/config/boing.xml.h:2
+#: hacks/config/bouboule.xml.h:3 hacks/config/bouncingcow.xml.h:5
 #: hacks/config/boxed.xml.h:6 hacks/config/boxfit.xml.h:8
 #: hacks/config/braid.xml.h:4 hacks/config/bubble3d.xml.h:4
 #: hacks/config/bubbles.xml.h:8 hacks/config/bumps.xml.h:3
 #: hacks/config/cage.xml.h:2 hacks/config/carousel.xml.h:5
 #: hacks/config/ccurve.xml.h:7 hacks/config/celtic.xml.h:3
 #: hacks/config/circuit.xml.h:4 hacks/config/cloudlife.xml.h:3
 #: hacks/config/boxed.xml.h:6 hacks/config/boxfit.xml.h:8
 #: hacks/config/braid.xml.h:4 hacks/config/bubble3d.xml.h:4
 #: hacks/config/bubbles.xml.h:8 hacks/config/bumps.xml.h:3
 #: hacks/config/cage.xml.h:2 hacks/config/carousel.xml.h:5
 #: hacks/config/ccurve.xml.h:7 hacks/config/celtic.xml.h:3
 #: hacks/config/circuit.xml.h:4 hacks/config/cloudlife.xml.h:3
-#: hacks/config/compass.xml.h:3 hacks/config/coral.xml.h:7
+#: hacks/config/compass.xml.h:3 hacks/config/coral.xml.h:6
 #: hacks/config/critical.xml.h:3 hacks/config/crystal.xml.h:6
 #: hacks/config/critical.xml.h:3 hacks/config/crystal.xml.h:6
-#: hacks/config/cube21.xml.h:6 hacks/config/cubenetic.xml.h:8
-#: hacks/config/cubestorm.xml.h:4 hacks/config/cynosure.xml.h:4
+#: hacks/config/cube21.xml.h:6 hacks/config/cubenetic.xml.h:5
+#: hacks/config/cubestorm.xml.h:4 hacks/config/cynosure.xml.h:3
 #: hacks/config/dangerball.xml.h:3 hacks/config/decayscreen.xml.h:2
 #: 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/deluxe.xml.h:5 hacks/config/demon.xml.h:4
 #: hacks/config/discrete.xml.h:2 hacks/config/distort.xml.h:4
 #: hacks/config/discrete.xml.h:2 hacks/config/distort.xml.h:4
-#: hacks/config/drift.xml.h:3 hacks/config/endgame.xml.h:3
+#: hacks/config/drift.xml.h:4 hacks/config/endgame.xml.h:3
 #: hacks/config/engine.xml.h:8 hacks/config/epicycle.xml.h:5
 #: hacks/config/eruption.xml.h:5 hacks/config/euler2d.xml.h:3
 #: hacks/config/extrusion.xml.h:3 hacks/config/fadeplot.xml.h:4
 #: hacks/config/engine.xml.h:8 hacks/config/epicycle.xml.h:5
 #: hacks/config/eruption.xml.h:5 hacks/config/euler2d.xml.h:3
 #: hacks/config/extrusion.xml.h:3 hacks/config/fadeplot.xml.h:4
-#: hacks/config/fireworkx.xml.h:3 hacks/config/flag.xml.h:2
-#: hacks/config/flame.xml.h:6 hacks/config/flipflop.xml.h:1
+#: hacks/config/fireworkx.xml.h:4 hacks/config/flag.xml.h:2
+#: hacks/config/flame.xml.h:5 hacks/config/flipflop.xml.h:2
 #: hacks/config/flipscreen3d.xml.h:1 hacks/config/fliptext.xml.h:3
 #: hacks/config/flipscreen3d.xml.h:1 hacks/config/fliptext.xml.h:3
-#: hacks/config/flow.xml.h:2 hacks/config/fluidballs.xml.h:5
+#: hacks/config/flow.xml.h:4 hacks/config/fluidballs.xml.h:5
 #: hacks/config/flyingtoasters.xml.h:5 hacks/config/fontglide.xml.h:4
 #: hacks/config/forest.xml.h:1 hacks/config/fuzzyflakes.xml.h:7
 #: hacks/config/galaxy.xml.h:3 hacks/config/gears.xml.h:2
 #: hacks/config/gflux.xml.h:6 hacks/config/glblur.xml.h:4
 #: hacks/config/glforestfire.xml.h:4 hacks/config/glhanoi.xml.h:3
 #: hacks/config/flyingtoasters.xml.h:5 hacks/config/fontglide.xml.h:4
 #: hacks/config/forest.xml.h:1 hacks/config/fuzzyflakes.xml.h:7
 #: hacks/config/galaxy.xml.h:3 hacks/config/gears.xml.h:2
 #: hacks/config/gflux.xml.h:6 hacks/config/glblur.xml.h:4
 #: hacks/config/glforestfire.xml.h:4 hacks/config/glhanoi.xml.h:3
-#: hacks/config/glknots.xml.h:3 hacks/config/glmatrix.xml.h:8
-#: hacks/config/glplanet.xml.h:2 hacks/config/glsnake.xml.h:6
-#: hacks/config/gltext.xml.h:4 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/glknots.xml.h:3 hacks/config/glmatrix.xml.h:5
+#: hacks/config/glplanet.xml.h:2 hacks/config/glschool.xml.h:5
+#: hacks/config/glsnake.xml.h:6 hacks/config/gltext.xml.h:4
+#: hacks/config/goop.xml.h:4 hacks/config/grav.xml.h:2
+#: hacks/config/greynetic.xml.h:2 hacks/config/halftone.xml.h:5
+#: hacks/config/halo.xml.h:3 hacks/config/hopalong.xml.h:9
 #: hacks/config/hyperball.xml.h:2 hacks/config/hypercube.xml.h:2
 #: hacks/config/hyperball.xml.h:2 hacks/config/hypercube.xml.h:2
-#: hacks/config/hypertorus.xml.h:6 hacks/config/ifs.xml.h:4
-#: hacks/config/interaggregate.xml.h:1 hacks/config/interference.xml.h:7
-#: hacks/config/intermomentary.xml.h:1 hacks/config/jigglypuff.xml.h:6
-#: hacks/config/jigsaw.xml.h:3 hacks/config/juggle.xml.h:2
-#: hacks/config/juggler3d.xml.h:2 hacks/config/julia.xml.h:2
-#: hacks/config/kaleidescope.xml.h:2 hacks/config/klein.xml.h:2
-#: hacks/config/kumppa.xml.h:3 hacks/config/lament.xml.h:2
-#: hacks/config/laser.xml.h:3 hacks/config/lavalite.xml.h:10
-#: hacks/config/lightning.xml.h:1 hacks/config/lisa.xml.h:2
-#: hacks/config/lissie.xml.h:3 hacks/config/lmorph.xml.h:3
-#: hacks/config/loop.xml.h:1 hacks/config/maze.xml.h:4
-#: hacks/config/memscroller.xml.h:5 hacks/config/menger.xml.h:3
-#: hacks/config/metaballs.xml.h:4 hacks/config/mirrorblob.xml.h:11
-#: hacks/config/mismunch.xml.h:2 hacks/config/moebius.xml.h:3
-#: hacks/config/moire2.xml.h:2 hacks/config/molecule.xml.h:11
-#: hacks/config/morph3d.xml.h:3 hacks/config/mountain.xml.h:2
-#: hacks/config/munch.xml.h:3 hacks/config/nerverot.xml.h:9
-#: hacks/config/noof.xml.h:2 hacks/config/pacman.xml.h:1
-#: hacks/config/penetrate.xml.h:3 hacks/config/penrose.xml.h:3
-#: hacks/config/petri.xml.h:5 hacks/config/phosphor.xml.h:4
-#: hacks/config/piecewise.xml.h:4 hacks/config/pinion.xml.h:5
-#: hacks/config/pipes.xml.h:5 hacks/config/polyhedra.xml.h:17
-#: hacks/config/polyominoes.xml.h:2 hacks/config/polytopes.xml.h:11
-#: hacks/config/pong.xml.h:1 hacks/config/popsquares.xml.h:3
-#: hacks/config/providence.xml.h:2 hacks/config/pulsar.xml.h:11
-#: hacks/config/pyro.xml.h:4 hacks/config/qix.xml.h:7
-#: hacks/config/queens.xml.h:1 hacks/config/rd-bomb.xml.h:9
+#: hacks/config/hypertorus.xml.h:5 hacks/config/ifs.xml.h:3
+#: hacks/config/imsmap.xml.h:6 hacks/config/interaggregate.xml.h:2
+#: hacks/config/interference.xml.h:7 hacks/config/intermomentary.xml.h:4
+#: hacks/config/jigglypuff.xml.h:6 hacks/config/jigsaw.xml.h:3
+#: hacks/config/juggle.xml.h:5 hacks/config/juggler3d.xml.h:2
+#: hacks/config/julia.xml.h:3 hacks/config/kaleidescope.xml.h:4
+#: hacks/config/klein.xml.h:2 hacks/config/kumppa.xml.h:3
+#: hacks/config/lament.xml.h:2 hacks/config/laser.xml.h:3
+#: hacks/config/lavalite.xml.h:9 hacks/config/lightning.xml.h:2
+#: hacks/config/lisa.xml.h:2 hacks/config/lissie.xml.h:2
+#: hacks/config/lmorph.xml.h:3 hacks/config/loop.xml.h:1
+#: hacks/config/maze.xml.h:4 hacks/config/memscroller.xml.h:5
+#: hacks/config/menger.xml.h:3 hacks/config/metaballs.xml.h:4
+#: hacks/config/mirrorblob.xml.h:11 hacks/config/mismunch.xml.h:2
+#: hacks/config/moebius.xml.h:2 hacks/config/moire2.xml.h:1
+#: hacks/config/molecule.xml.h:11 hacks/config/morph3d.xml.h:3
+#: hacks/config/mountain.xml.h:1 hacks/config/munch.xml.h:3
+#: hacks/config/nerverot.xml.h:9 hacks/config/noof.xml.h:2
+#: hacks/config/pacman.xml.h:1 hacks/config/penetrate.xml.h:3
+#: hacks/config/penrose.xml.h:3 hacks/config/petri.xml.h:5
+#: hacks/config/phosphor.xml.h:3 hacks/config/piecewise.xml.h:4
+#: hacks/config/pinion.xml.h:5 hacks/config/pipes.xml.h:7
+#: hacks/config/polyhedra.xml.h:17 hacks/config/polyominoes.xml.h:2
+#: hacks/config/polytopes.xml.h:11 hacks/config/pong.xml.h:1
+#: hacks/config/popsquares.xml.h:3 hacks/config/providence.xml.h:2
+#: hacks/config/pulsar.xml.h:10 hacks/config/pyro.xml.h:4
+#: hacks/config/qix.xml.h:8 hacks/config/queens.xml.h:1
+#: hacks/config/rd-bomb.xml.h:9 hacks/config/rdbomb.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/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
@@ -1164,108 +1166,108 @@ msgstr "Bras"
 #: 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/spheremonics.xml.h:5 hacks/config/spiral.xml.h:3
 #: 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/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/spotlight.xml.h:2 hacks/config/sproingies.xml.h:1
+#: hacks/config/squiral.xml.h:4 hacks/config/stairs.xml.h:2
 #: hacks/config/starfish.xml.h:3 hacks/config/starwars.xml.h:6
 #: hacks/config/strange.xml.h:1 hacks/config/substrate.xml.h:7
 #: hacks/config/superquadrics.xml.h:4 hacks/config/swirl.xml.h:2
 #: hacks/config/starfish.xml.h:3 hacks/config/starwars.xml.h:6
 #: hacks/config/strange.xml.h:1 hacks/config/substrate.xml.h:7
 #: hacks/config/superquadrics.xml.h:4 hacks/config/swirl.xml.h:2
-#: hacks/config/t3d.xml.h:6 hacks/config/tangram.xml.h:2
-#: hacks/config/thornbird.xml.h:2 hacks/config/triangle.xml.h:1
-#: hacks/config/truchet.xml.h:1 hacks/config/twang.xml.h:3
-#: hacks/config/vines.xml.h:1 hacks/config/worm.xml.h:3
-#: hacks/config/wormhole.xml.h:2 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:5
-#: hacks/config/xmountains.xml.h:13 hacks/config/xplanet.xml.h:8
-#: hacks/config/xrayswarm.xml.h:2 hacks/config/zoom.xml.h:2
+#: hacks/config/t3d.xml.h:7 hacks/config/tangram.xml.h:1
+#: hacks/config/thornbird.xml.h:2 hacks/config/topblock.xml.h:7
+#: hacks/config/triangle.xml.h:1 hacks/config/truchet.xml.h:1
+#: hacks/config/twang.xml.h:3 hacks/config/vines.xml.h:1
+#: hacks/config/worm.xml.h:3 hacks/config/wormhole.xml.h:2
+#: hacks/config/xflame.xml.h:4 hacks/config/xjack.xml.h:1
+#: hacks/config/xmatrix.xml.h:5 hacks/config/xmountains.xml.h:13
+#: hacks/config/xplanet.xml.h:8 hacks/config/xrayswarm.xml.h:2
+#: hacks/config/zoom.xml.h:2
 msgid "Fast"
 msgstr "Rapide"
 
 #: hacks/config/anemone.xml.h:4 hacks/config/anemotaxis.xml.h:6
 #: hacks/config/blaster.xml.h:4 hacks/config/bouboule.xml.h:4
 msgid "Fast"
 msgstr "Rapide"
 
 #: hacks/config/anemone.xml.h:4 hacks/config/anemotaxis.xml.h:6
 #: hacks/config/blaster.xml.h:4 hacks/config/bouboule.xml.h:4
-#: hacks/config/boxed.xml.h:7 hacks/config/coral.xml.h:8
-#: hacks/config/cubenetic.xml.h:9 hacks/config/eruption.xml.h:6
+#: hacks/config/boxed.xml.h:7 hacks/config/coral.xml.h:7
+#: hacks/config/cubenetic.xml.h:6 hacks/config/eruption.xml.h:6
 #: hacks/config/euler2d.xml.h:4 hacks/config/fiberlamp.xml.h:2
 #: hacks/config/euler2d.xml.h:4 hacks/config/fiberlamp.xml.h:2
-#: hacks/config/flame.xml.h:7 hacks/config/fluidballs.xml.h:6
-#: hacks/config/fuzzyflakes.xml.h:8 hacks/config/kaleidescope.xml.h:3
+#: hacks/config/flame.xml.h:6 hacks/config/fluidballs.xml.h:6
+#: hacks/config/fuzzyflakes.xml.h:8 hacks/config/glschool.xml.h:6
+#: hacks/config/julia.xml.h:4 hacks/config/kaleidescope.xml.h:5
 #: hacks/config/lisa.xml.h:3 hacks/config/pedal.xml.h:4
 #: 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/substrate.xml.h:8 hacks/config/thornbird.xml.h:3
-#: hacks/config/whirlwindwarp.xml.h:1 hacks/config/wormhole.xml.h:3
-#: hacks/config/xfishtank.xml.h:4
+#: hacks/config/petri.xml.h:7 hacks/config/piecewise.xml.h:5
+#: hacks/config/qix.xml.h:9 hacks/config/substrate.xml.h:8
+#: hacks/config/thornbird.xml.h:3 hacks/config/whirlwindwarp.xml.h:1
+#: hacks/config/wormhole.xml.h:3
 msgid "Few"
 msgstr "Peu"
 
 #: hacks/config/anemone.xml.h:5 hacks/config/anemotaxis.xml.h:7
 #: hacks/config/ant.xml.h:9 hacks/config/apollonian.xml.h:7
 msgid "Few"
 msgstr "Peu"
 
 #: hacks/config/anemone.xml.h:5 hacks/config/anemotaxis.xml.h:7
 #: hacks/config/ant.xml.h:9 hacks/config/apollonian.xml.h:7
-#: hacks/config/attraction.xml.h:18 hacks/config/blaster.xml.h:6
+#: hacks/config/attraction.xml.h:17 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/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/crystal.xml.h:8 hacks/config/cubenetic.xml.h:10
+#: hacks/config/cynosure.xml.h:5 hacks/config/deco.xml.h:5
+#: hacks/config/deluxe.xml.h:7 hacks/config/demon.xml.h:6
+#: hacks/config/discrete.xml.h:4 hacks/config/drift.xml.h:6
 #: hacks/config/epicycle.xml.h:8 hacks/config/eruption.xml.h:12
 #: hacks/config/euler2d.xml.h:8 hacks/config/fadeplot.xml.h:6
 #: hacks/config/fiberlamp.xml.h:6 hacks/config/flag.xml.h:5
 #: hacks/config/epicycle.xml.h:8 hacks/config/eruption.xml.h:12
 #: hacks/config/euler2d.xml.h:8 hacks/config/fadeplot.xml.h:6
 #: hacks/config/fiberlamp.xml.h:6 hacks/config/flag.xml.h:5
-#: hacks/config/flame.xml.h:11 hacks/config/flow.xml.h:7
-#: hacks/config/fluidballs.xml.h:13 hacks/config/forest.xml.h:3
+#: hacks/config/flame.xml.h:11 hacks/config/flow.xml.h:9
+#: hacks/config/fluidballs.xml.h:13 hacks/config/forest.xml.h:4
 #: hacks/config/fuzzyflakes.xml.h:12 hacks/config/galaxy.xml.h:6
 #: hacks/config/fuzzyflakes.xml.h:12 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:8
-#: hacks/config/imsmap.xml.h:9 hacks/config/interference.xml.h:14
-#: hacks/config/julia.xml.h:6 hacks/config/kaleidescope.xml.h:5
-#: hacks/config/laser.xml.h:6 hacks/config/lightning.xml.h:3
-#: hacks/config/lisa.xml.h:5 hacks/config/lissie.xml.h:6
-#: hacks/config/loop.xml.h:4 hacks/config/metaballs.xml.h:6
+#: hacks/config/grav.xml.h:4 hacks/config/halo.xml.h:5
+#: hacks/config/hopalong.xml.h:15 hacks/config/ifs.xml.h:7
+#: hacks/config/imsmap.xml.h:10 hacks/config/interference.xml.h:14
+#: hacks/config/julia.xml.h:9 hacks/config/kaleidescope.xml.h:7
+#: hacks/config/laser.xml.h:6 hacks/config/lightning.xml.h:4
+#: hacks/config/lisa.xml.h:6 hacks/config/lissie.xml.h:5
+#: hacks/config/loop.xml.h:5 hacks/config/metaballs.xml.h:6
 #: hacks/config/mismunch.xml.h:4 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/mismunch.xml.h:4 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:4 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:8
+#: hacks/config/penrose.xml.h:5 hacks/config/petri.xml.h:11
+#: hacks/config/piecewise.xml.h:7 hacks/config/polyominoes.xml.h:5
+#: hacks/config/qix.xml.h:15 hacks/config/rd-bomb.xml.h:12
+#: hacks/config/rdbomb.xml.h:12 hacks/config/ripples.xml.h:8
 #: 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:2
 #: 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:2
-#: 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/swirl.xml.h:4 hacks/config/thornbird.xml.h:4
+#: hacks/config/triangle.xml.h:3 hacks/config/vines.xml.h:3
 #: hacks/config/whirlwindwarp.xml.h:4 hacks/config/worm.xml.h:4
 #: hacks/config/whirlwindwarp.xml.h:4 hacks/config/worm.xml.h:4
-#: hacks/config/xearth.xml.h:12 hacks/config/xfishtank.xml.h:8
 msgid "Many"
 msgstr "Beaucoup"
 
 #: hacks/config/anemone.xml.h:6 hacks/config/ant.xml.h:11
 msgid "Many"
 msgstr "Beaucoup"
 
 #: hacks/config/anemone.xml.h:6 hacks/config/ant.xml.h:11
-#: hacks/config/apollonian.xml.h:8 hacks/config/attraction.xml.h:19
+#: hacks/config/apollonian.xml.h:8 hacks/config/attraction.xml.h:18
 #: 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/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/cynosure.xml.h:6 hacks/config/deco.xml.h:8
+#: hacks/config/deluxe.xml.h:8 hacks/config/demon.xml.h:7
+#: hacks/config/discrete.xml.h:6 hacks/config/drift.xml.h:7
 #: hacks/config/epicycle.xml.h:9 hacks/config/eruption.xml.h:14
 #: 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/epicycle.xml.h:9 hacks/config/eruption.xml.h:14
 #: 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:8 hacks/config/forest.xml.h:4
+#: hacks/config/flow.xml.h:10 hacks/config/forest.xml.h:5
 #: hacks/config/galaxy.xml.h:7 hacks/config/grav.xml.h:5
 #: 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/imsmap.xml.h:10 hacks/config/interference.xml.h:15
-#: hacks/config/julia.xml.h:7 hacks/config/laser.xml.h:8
-#: hacks/config/lightning.xml.h:4 hacks/config/lisa.xml.h:6
-#: hacks/config/lissie.xml.h:7 hacks/config/loop.xml.h:5
+#: hacks/config/halo.xml.h:7 hacks/config/hopalong.xml.h:17
+#: hacks/config/imsmap.xml.h:11 hacks/config/interference.xml.h:15
+#: hacks/config/julia.xml.h:10 hacks/config/laser.xml.h:8
+#: hacks/config/lightning.xml.h:5 hacks/config/lisa.xml.h:7
+#: hacks/config/lissie.xml.h:6 hacks/config/loop.xml.h:6
 #: hacks/config/metaballs.xml.h:10 hacks/config/moire.xml.h:7
 #: hacks/config/moire2.xml.h:5 hacks/config/mountain.xml.h:6
 #: hacks/config/metaballs.xml.h:10 hacks/config/moire.xml.h:7
 #: hacks/config/moire2.xml.h:5 hacks/config/mountain.xml.h:6
-#: hacks/config/penrose.xml.h:5 hacks/config/polyominoes.xml.h:6
+#: hacks/config/penrose.xml.h:6 hacks/config/polyominoes.xml.h:6
 #: hacks/config/popsquares.xml.h:4 hacks/config/rd-bomb.xml.h:13
 #: hacks/config/popsquares.xml.h:4 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:3
-#: 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
+#: hacks/config/rdbomb.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:3 hacks/config/swirl.xml.h:5
+#: hacks/config/thornbird.xml.h:5 hacks/config/triangle.xml.h:4
+#: hacks/config/vines.xml.h:4 hacks/config/worm.xml.h:5
 msgid "Number of Colors"
 msgstr "Nombre de couleurs"
 
 msgid "Number of Colors"
 msgstr "Nombre de couleurs"
 
@@ -1281,13 +1283,13 @@ msgstr "Rarement"
 #: hacks/config/anemone.xml.h:9 hacks/config/anemotaxis.xml.h:10
 #: hacks/config/ant.xml.h:15 hacks/config/antinspect.xml.h:6
 #: hacks/config/antmaze.xml.h:5 hacks/config/antspotlight.xml.h:5
 #: hacks/config/anemone.xml.h:9 hacks/config/anemotaxis.xml.h:10
 #: hacks/config/ant.xml.h:15 hacks/config/antinspect.xml.h:6
 #: hacks/config/antmaze.xml.h:5 hacks/config/antspotlight.xml.h:5
-#: hacks/config/apollonian.xml.h:11 hacks/config/atlantis.xml.h:13
-#: hacks/config/attraction.xml.h:26 hacks/config/atunnel.xml.h:6
-#: hacks/config/barcode.xml.h:6 hacks/config/blaster.xml.h:8
+#: hacks/config/apollonian.xml.h:11 hacks/config/atlantis.xml.h:14
+#: hacks/config/attraction.xml.h:25 hacks/config/atunnel.xml.h:6
+#: hacks/config/barcode.xml.h:8 hacks/config/blaster.xml.h:8
 #: hacks/config/blinkbox.xml.h:8 hacks/config/blitspin.xml.h:7
 #: hacks/config/blocktube.xml.h:9 hacks/config/boing.xml.h:10
 #: hacks/config/bouboule.xml.h:8 hacks/config/bouncingcow.xml.h:10
 #: hacks/config/blinkbox.xml.h:8 hacks/config/blitspin.xml.h:7
 #: hacks/config/blocktube.xml.h:9 hacks/config/boing.xml.h:10
 #: hacks/config/bouboule.xml.h:8 hacks/config/bouncingcow.xml.h:10
-#: hacks/config/boxed.xml.h:15 hacks/config/boxfit.xml.h:12
+#: hacks/config/boxed.xml.h:15 hacks/config/boxfit.xml.h:13
 #: hacks/config/braid.xml.h:11 hacks/config/bubble3d.xml.h:6
 #: hacks/config/bubbles.xml.h:10 hacks/config/bumps.xml.h:4
 #: hacks/config/cage.xml.h:4 hacks/config/carousel.xml.h:14
 #: hacks/config/braid.xml.h:11 hacks/config/bubble3d.xml.h:6
 #: hacks/config/bubbles.xml.h:10 hacks/config/bumps.xml.h:4
 #: hacks/config/cage.xml.h:4 hacks/config/carousel.xml.h:14
@@ -1295,153 +1297,154 @@ msgstr "Rarement"
 #: hacks/config/circuit.xml.h:10 hacks/config/cloudlife.xml.h:11
 #: 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/circuit.xml.h:10 hacks/config/cloudlife.xml.h:11
 #: 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/cube21.xml.h:16 hacks/config/cubenetic.xml.h:22
+#: hacks/config/cube21.xml.h:16 hacks/config/cubenetic.xml.h:19
 #: hacks/config/cubestorm.xml.h:8 hacks/config/cynosure.xml.h:9
 #: hacks/config/dangerball.xml.h:5 hacks/config/decayscreen.xml.h:17
 #: hacks/config/cubestorm.xml.h:8 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/endgame.xml.h:5
+#: hacks/config/deluxe.xml.h:9 hacks/config/demon.xml.h:8
+#: hacks/config/discrete.xml.h:7 hacks/config/distort.xml.h:12
+#: hacks/config/drift.xml.h:9 hacks/config/endgame.xml.h:6
 #: hacks/config/engine.xml.h:15 hacks/config/epicycle.xml.h:10
 #: hacks/config/eruption.xml.h:19 hacks/config/euler2d.xml.h:14
 #: hacks/config/extrusion.xml.h:11 hacks/config/fadeplot.xml.h:8
 #: hacks/config/fireworkx.xml.h:9 hacks/config/flag.xml.h:7
 #: hacks/config/flame.xml.h:14 hacks/config/flipflop.xml.h:5
 #: hacks/config/flipscreen3d.xml.h:6 hacks/config/fliptext.xml.h:13
 #: hacks/config/engine.xml.h:15 hacks/config/epicycle.xml.h:10
 #: hacks/config/eruption.xml.h:19 hacks/config/euler2d.xml.h:14
 #: hacks/config/extrusion.xml.h:11 hacks/config/fadeplot.xml.h:8
 #: hacks/config/fireworkx.xml.h:9 hacks/config/flag.xml.h:7
 #: hacks/config/flame.xml.h:14 hacks/config/flipflop.xml.h:5
 #: hacks/config/flipscreen3d.xml.h:6 hacks/config/fliptext.xml.h:13
-#: hacks/config/flow.xml.h:10 hacks/config/fluidballs.xml.h:18
+#: hacks/config/flow.xml.h:16 hacks/config/fluidballs.xml.h:18
 #: hacks/config/flyingtoasters.xml.h:11 hacks/config/fontglide.xml.h:13
 #: hacks/config/flyingtoasters.xml.h:11 hacks/config/fontglide.xml.h:13
-#: hacks/config/forest.xml.h:5 hacks/config/fuzzyflakes.xml.h:15
-#: hacks/config/galaxy.xml.h:11 hacks/config/gears.xml.h:7
+#: hacks/config/forest.xml.h:6 hacks/config/fuzzyflakes.xml.h:15
+#: hacks/config/galaxy.xml.h:10 hacks/config/gears.xml.h:8
 #: hacks/config/gflux.xml.h:12 hacks/config/glblur.xml.h:14
 #: hacks/config/gflux.xml.h:12 hacks/config/glblur.xml.h:14
-#: hacks/config/glforestfire.xml.h:14 hacks/config/glhanoi.xml.h:8
-#: hacks/config/glknots.xml.h:17 hacks/config/glmatrix.xml.h:18
-#: hacks/config/glplanet.xml.h:8 hacks/config/glsnake.xml.h:12
-#: hacks/config/gltext.xml.h:15 hacks/config/goop.xml.h:10
-#: hacks/config/grav.xml.h:8 hacks/config/greynetic.xml.h:3
-#: hacks/config/halo.xml.h:10 hacks/config/hopalong.xml.h:21
+#: hacks/config/glforestfire.xml.h:13 hacks/config/glhanoi.xml.h:8
+#: hacks/config/glknots.xml.h:17 hacks/config/glmatrix.xml.h:15
+#: hacks/config/glplanet.xml.h:8 hacks/config/glschool.xml.h:14
+#: hacks/config/glsnake.xml.h:12 hacks/config/gltext.xml.h:15
+#: hacks/config/goop.xml.h:10 hacks/config/grav.xml.h:8
+#: hacks/config/greynetic.xml.h:4 hacks/config/halftone.xml.h:15
+#: hacks/config/halo.xml.h:11 hacks/config/hopalong.xml.h:21
 #: hacks/config/hyperball.xml.h:8 hacks/config/hypercube.xml.h:7
 #: hacks/config/hyperball.xml.h:8 hacks/config/hypercube.xml.h:7
-#: hacks/config/hypertorus.xml.h:18 hacks/config/ifs.xml.h:13
-#: hacks/config/interaggregate.xml.h:4 hacks/config/interference.xml.h:17
-#: hacks/config/intermomentary.xml.h:4 hacks/config/jigglypuff.xml.h:16
-#: hacks/config/jigsaw.xml.h:5 hacks/config/juggle.xml.h:8
-#: hacks/config/juggler3d.xml.h:12 hacks/config/julia.xml.h:8
-#: hacks/config/kaleidescope.xml.h:7 hacks/config/klein.xml.h:7
-#: hacks/config/kumppa.xml.h:8 hacks/config/lament.xml.h:6
-#: hacks/config/laser.xml.h:10 hacks/config/lavalite.xml.h:27
-#: hacks/config/lightning.xml.h:5 hacks/config/lisa.xml.h:8
-#: hacks/config/lissie.xml.h:9 hacks/config/lmorph.xml.h:11
-#: hacks/config/loop.xml.h:7 hacks/config/maze.xml.h:14
-#: hacks/config/memscroller.xml.h:7 hacks/config/menger.xml.h:16
-#: hacks/config/metaballs.xml.h:13 hacks/config/mirrorblob.xml.h:18
-#: hacks/config/mismunch.xml.h:10 hacks/config/moebius.xml.h:7
-#: hacks/config/moire2.xml.h:6 hacks/config/molecule.xml.h:23
-#: hacks/config/morph3d.xml.h:6 hacks/config/mountain.xml.h:7
-#: hacks/config/munch.xml.h:7 hacks/config/nerverot.xml.h:20
-#: hacks/config/noof.xml.h:5 hacks/config/pacman.xml.h:5
-#: hacks/config/penetrate.xml.h:6 hacks/config/penrose.xml.h:8
-#: hacks/config/petri.xml.h:23 hacks/config/phosphor.xml.h:7
-#: hacks/config/piecewise.xml.h:9 hacks/config/pinion.xml.h:13
-#: hacks/config/pipes.xml.h:15 hacks/config/polyhedra.xml.h:111
-#: hacks/config/polyominoes.xml.h:10 hacks/config/polytopes.xml.h:20
-#: hacks/config/pong.xml.h:4 hacks/config/popsquares.xml.h:5
-#: hacks/config/providence.xml.h:5 hacks/config/pulsar.xml.h:15
-#: hacks/config/pyro.xml.h:13 hacks/config/qix.xml.h:19
-#: hacks/config/queens.xml.h:4 hacks/config/rd-bomb.xml.h:17
+#: hacks/config/hypertorus.xml.h:18 hacks/config/ifs.xml.h:12
+#: hacks/config/imsmap.xml.h:14 hacks/config/interaggregate.xml.h:5
+#: hacks/config/interference.xml.h:17 hacks/config/intermomentary.xml.h:7
+#: hacks/config/jigglypuff.xml.h:16 hacks/config/jigsaw.xml.h:5
+#: hacks/config/juggle.xml.h:16 hacks/config/juggler3d.xml.h:12
+#: hacks/config/julia.xml.h:11 hacks/config/kaleidescope.xml.h:9
+#: hacks/config/klein.xml.h:7 hacks/config/kumppa.xml.h:8
+#: hacks/config/lament.xml.h:5 hacks/config/laser.xml.h:10
+#: hacks/config/lavalite.xml.h:27 hacks/config/lightning.xml.h:6
+#: hacks/config/lisa.xml.h:9 hacks/config/lissie.xml.h:8
+#: hacks/config/lmorph.xml.h:11 hacks/config/loop.xml.h:8
+#: hacks/config/maze.xml.h:14 hacks/config/memscroller.xml.h:7
+#: hacks/config/menger.xml.h:16 hacks/config/metaballs.xml.h:13
+#: hacks/config/mirrorblob.xml.h:18 hacks/config/mismunch.xml.h:10
+#: hacks/config/moebius.xml.h:5 hacks/config/moire2.xml.h:6
+#: hacks/config/molecule.xml.h:23 hacks/config/morph3d.xml.h:10
+#: hacks/config/mountain.xml.h:9 hacks/config/munch.xml.h:7
+#: hacks/config/nerverot.xml.h:20 hacks/config/noof.xml.h:5
+#: hacks/config/pacman.xml.h:5 hacks/config/penetrate.xml.h:7
+#: hacks/config/penrose.xml.h:8 hacks/config/petri.xml.h:23
+#: hacks/config/phosphor.xml.h:6 hacks/config/piecewise.xml.h:11
+#: hacks/config/pinion.xml.h:13 hacks/config/pipes.xml.h:19
+#: hacks/config/polyhedra.xml.h:111 hacks/config/polyominoes.xml.h:10
+#: hacks/config/polytopes.xml.h:20 hacks/config/pong.xml.h:4
+#: hacks/config/popsquares.xml.h:5 hacks/config/providence.xml.h:5
+#: hacks/config/pulsar.xml.h:14 hacks/config/pyro.xml.h:13
+#: hacks/config/qix.xml.h:20 hacks/config/queens.xml.h:4
+#: hacks/config/rd-bomb.xml.h:17 hacks/config/rdbomb.xml.h:17
 #: hacks/config/ripples.xml.h:12 hacks/config/rocks.xml.h:9
 #: hacks/config/rotor.xml.h:11 hacks/config/rubik.xml.h:9
 #: hacks/config/ripples.xml.h:12 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/sballs.xml.h:12 hacks/config/shadebobs.xml.h:10
 #: hacks/config/sierpinski.xml.h:7 hacks/config/sierpinski3d.xml.h:8
 #: 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/slidescreen.xml.h:10 hacks/config/slip.xml.h:7
+#: hacks/config/speedmine.xml.h:12 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/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/squiral.xml.h:14 hacks/config/stairs.xml.h:4
+#: hacks/config/starfish.xml.h:9 hacks/config/starwars.xml.h:12
 #: hacks/config/strange.xml.h:4 hacks/config/substrate.xml.h:15
 #: hacks/config/strange.xml.h:4 hacks/config/substrate.xml.h:15
-#: hacks/config/superquadrics.xml.h:8 hacks/config/swirl.xml.h:6
-#: hacks/config/t3d.xml.h:11 hacks/config/tangram.xml.h:4
-#: hacks/config/thornbird.xml.h:7 hacks/config/triangle.xml.h:5
-#: hacks/config/truchet.xml.h:2 hacks/config/twang.xml.h:9
-#: hacks/config/vines.xml.h:4 hacks/config/worm.xml.h:7
-#: hacks/config/wormhole.xml.h:5 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:15
-#: hacks/config/xplanet.xml.h:59 hacks/config/xrayswarm.xml.h:3
-#: hacks/config/zoom.xml.h:6
+#: hacks/config/superquadrics.xml.h:11 hacks/config/swirl.xml.h:6
+#: hacks/config/t3d.xml.h:12 hacks/config/tangram.xml.h:3
+#: hacks/config/thornbird.xml.h:7 hacks/config/topblock.xml.h:17
+#: hacks/config/triangle.xml.h:5 hacks/config/truchet.xml.h:2
+#: hacks/config/twang.xml.h:10 hacks/config/vines.xml.h:5
+#: hacks/config/worm.xml.h:7 hacks/config/wormhole.xml.h:6
+#: hacks/config/xflame.xml.h:5 hacks/config/xjack.xml.h:2
+#: hacks/config/xmatrix.xml.h:16 hacks/config/xplanet.xml.h:59
+#: hacks/config/xrayswarm.xml.h:3 hacks/config/zoom.xml.h:6
 msgid "Slow"
 msgstr "Lent(e)"
 
 #: hacks/config/anemone.xml.h:10 hacks/config/anemotaxis.xml.h:12
 #: hacks/config/ant.xml.h:17 hacks/config/antinspect.xml.h:7
 #: hacks/config/antmaze.xml.h:6 hacks/config/antspotlight.xml.h:6
 msgid "Slow"
 msgstr "Lent(e)"
 
 #: hacks/config/anemone.xml.h:10 hacks/config/anemotaxis.xml.h:12
 #: hacks/config/ant.xml.h:17 hacks/config/antinspect.xml.h:7
 #: hacks/config/antmaze.xml.h:6 hacks/config/antspotlight.xml.h:6
-#: hacks/config/apollonian.xml.h:12 hacks/config/attraction.xml.h:28
-#: hacks/config/atunnel.xml.h:7 hacks/config/barcode.xml.h:7
+#: hacks/config/apollonian.xml.h:12 hacks/config/attraction.xml.h:27
+#: hacks/config/atunnel.xml.h:7 hacks/config/barcode.xml.h:9
 #: hacks/config/blaster.xml.h:9 hacks/config/blinkbox.xml.h:9
 #: hacks/config/blaster.xml.h:9 hacks/config/blinkbox.xml.h:9
-#: hacks/config/blocktube.xml.h:11 hacks/config/boing.xml.h:12
-#: hacks/config/bouboule.xml.h:9 hacks/config/boxfit.xml.h:14
+#: hacks/config/blocktube.xml.h:10 hacks/config/boing.xml.h:12
+#: hacks/config/bouboule.xml.h:9 hacks/config/boxfit.xml.h:15
 #: hacks/config/braid.xml.h:12 hacks/config/bubble3d.xml.h:7
 #: hacks/config/bubbles.xml.h:11 hacks/config/bumps.xml.h:5
 #: hacks/config/braid.xml.h:12 hacks/config/bubble3d.xml.h:7
 #: hacks/config/bubbles.xml.h:11 hacks/config/bumps.xml.h:5
-#: hacks/config/cage.xml.h:6 hacks/config/celtic.xml.h:9
+#: hacks/config/cage.xml.h:5 hacks/config/celtic.xml.h:9
 #: hacks/config/circuit.xml.h:11 hacks/config/cloudlife.xml.h:13
 #: 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/circuit.xml.h:11 hacks/config/cloudlife.xml.h:13
 #: 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/cubenetic.xml.h:21 hacks/config/cynosure.xml.h:10
 #: hacks/config/dangerball.xml.h:6 hacks/config/decayscreen.xml.h:18
 #: 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/endgame.xml.h:6
+#: hacks/config/deluxe.xml.h:10 hacks/config/demon.xml.h:10
+#: hacks/config/discrete.xml.h:9 hacks/config/distort.xml.h:14
+#: hacks/config/drift.xml.h:10 hacks/config/endgame.xml.h:7
 #: hacks/config/engine.xml.h:16 hacks/config/epicycle.xml.h:11
 #: hacks/config/eruption.xml.h:20 hacks/config/euler2d.xml.h:15
 #: hacks/config/engine.xml.h:16 hacks/config/epicycle.xml.h:11
 #: hacks/config/eruption.xml.h:20 hacks/config/euler2d.xml.h:15
-#: hacks/config/extrusion.xml.h:13 hacks/config/fadeplot.xml.h:10
+#: hacks/config/extrusion.xml.h:12 hacks/config/fadeplot.xml.h:10
 #: hacks/config/fireworkx.xml.h:11 hacks/config/flag.xml.h:9
 #: hacks/config/fireworkx.xml.h:11 hacks/config/flag.xml.h:9
-#: hacks/config/flame.xml.h:15 hacks/config/flipflop.xml.h:7
+#: hacks/config/flame.xml.h:15 hacks/config/flipflop.xml.h:6
 #: hacks/config/flipscreen3d.xml.h:7 hacks/config/fliptext.xml.h:14
 #: hacks/config/flipscreen3d.xml.h:7 hacks/config/fliptext.xml.h:14
-#: hacks/config/flow.xml.h:12 hacks/config/fluidballs.xml.h:20
-#: hacks/config/forest.xml.h:6 hacks/config/fuzzyflakes.xml.h:17
-#: hacks/config/galaxy.xml.h:12 hacks/config/glblur.xml.h:16
-#: hacks/config/glforestfire.xml.h:15 hacks/config/glplanet.xml.h:10
-#: hacks/config/gltext.xml.h:17 hacks/config/goop.xml.h:11
-#: hacks/config/grav.xml.h:9 hacks/config/greynetic.xml.h:4
-#: hacks/config/halo.xml.h:11 hacks/config/hopalong.xml.h:23
-#: hacks/config/hyperball.xml.h:9 hacks/config/hypercube.xml.h:8
-#: hacks/config/ifs.xml.h:14 hacks/config/interaggregate.xml.h:5
-#: hacks/config/intermomentary.xml.h:5 hacks/config/jigsaw.xml.h:7
-#: hacks/config/juggle.xml.h:9 hacks/config/julia.xml.h:10
-#: hacks/config/kaleidescope.xml.h:8 hacks/config/klein.xml.h:8
-#: hacks/config/kumppa.xml.h:9 hacks/config/lament.xml.h:7
+#: hacks/config/flow.xml.h:18 hacks/config/fluidballs.xml.h:20
+#: hacks/config/forest.xml.h:7 hacks/config/fuzzyflakes.xml.h:17
+#: hacks/config/galaxy.xml.h:11 hacks/config/glblur.xml.h:16
+#: hacks/config/glforestfire.xml.h:14 hacks/config/glplanet.xml.h:9
+#: hacks/config/glschool.xml.h:15 hacks/config/gltext.xml.h:16
+#: hacks/config/goop.xml.h:11 hacks/config/grav.xml.h:9
+#: hacks/config/greynetic.xml.h:5 hacks/config/halo.xml.h:12
+#: hacks/config/hopalong.xml.h:23 hacks/config/hyperball.xml.h:9
+#: hacks/config/hypercube.xml.h:8 hacks/config/ifs.xml.h:13
+#: hacks/config/imsmap.xml.h:16 hacks/config/interaggregate.xml.h:6
+#: hacks/config/intermomentary.xml.h:8 hacks/config/jigsaw.xml.h:7
+#: hacks/config/juggle.xml.h:17 hacks/config/julia.xml.h:13
+#: hacks/config/kaleidescope.xml.h:10 hacks/config/klein.xml.h:8
+#: hacks/config/kumppa.xml.h:9 hacks/config/lament.xml.h:6
 #: hacks/config/laser.xml.h:11 hacks/config/lavalite.xml.h:30
 #: hacks/config/laser.xml.h:11 hacks/config/lavalite.xml.h:30
-#: hacks/config/lightning.xml.h:6 hacks/config/lisa.xml.h:9
-#: hacks/config/lissie.xml.h:11 hacks/config/lmorph.xml.h:12
-#: hacks/config/loop.xml.h:9 hacks/config/memscroller.xml.h:8
-#: hacks/config/menger.xml.h:18 hacks/config/metaballs.xml.h:15
-#: hacks/config/mirrorblob.xml.h:20 hacks/config/mismunch.xml.h:12
-#: hacks/config/moebius.xml.h:10 hacks/config/moire2.xml.h:7
-#: hacks/config/molecule.xml.h:25 hacks/config/morph3d.xml.h:7
-#: hacks/config/mountain.xml.h:8 hacks/config/munch.xml.h:9
+#: hacks/config/lightning.xml.h:7 hacks/config/lisa.xml.h:10
+#: hacks/config/lissie.xml.h:10 hacks/config/lmorph.xml.h:12
+#: hacks/config/loop.xml.h:10 hacks/config/memscroller.xml.h:8
+#: hacks/config/menger.xml.h:17 hacks/config/metaballs.xml.h:15
+#: hacks/config/mirrorblob.xml.h:19 hacks/config/mismunch.xml.h:12
+#: hacks/config/moebius.xml.h:7 hacks/config/moire2.xml.h:7
+#: hacks/config/molecule.xml.h:24 hacks/config/morph3d.xml.h:11
+#: hacks/config/mountain.xml.h:10 hacks/config/munch.xml.h:9
 #: hacks/config/nerverot.xml.h:22 hacks/config/noof.xml.h:6
 #: hacks/config/nerverot.xml.h:22 hacks/config/noof.xml.h:6
-#: hacks/config/pacman.xml.h:6 hacks/config/penrose.xml.h:9
-#: hacks/config/petri.xml.h:25 hacks/config/phosphor.xml.h:8
-#: hacks/config/piecewise.xml.h:11 hacks/config/pipes.xml.h:16
-#: hacks/config/polyominoes.xml.h:11 hacks/config/pong.xml.h:5
-#: hacks/config/popsquares.xml.h:6 hacks/config/providence.xml.h:7
-#: hacks/config/pulsar.xml.h:17 hacks/config/qix.xml.h:22
-#: hacks/config/queens.xml.h:6 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/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:5 hacks/config/substrate.xml.h:16
-#: hacks/config/superquadrics.xml.h:10 hacks/config/swirl.xml.h:7
-#: hacks/config/t3d.xml.h:13 hacks/config/tangram.xml.h:5
-#: hacks/config/thornbird.xml.h:8 hacks/config/triangle.xml.h:6
-#: hacks/config/truchet.xml.h:3 hacks/config/twang.xml.h:10
-#: hacks/config/vines.xml.h:5 hacks/config/whirlygig.xml.h:13
-#: hacks/config/worm.xml.h:8 hacks/config/xearth.xml.h:25
+#: hacks/config/pacman.xml.h:6 hacks/config/penrose.xml.h:10
+#: hacks/config/petri.xml.h:25 hacks/config/phosphor.xml.h:7
+#: hacks/config/piecewise.xml.h:13 hacks/config/pipes.xml.h:20
+#: hacks/config/polyominoes.xml.h:11 hacks/config/popsquares.xml.h:6
+#: hacks/config/providence.xml.h:6 hacks/config/pulsar.xml.h:15
+#: hacks/config/qix.xml.h:23 hacks/config/queens.xml.h:6
+#: hacks/config/rotor.xml.h:12 hacks/config/rubik.xml.h:11
+#: hacks/config/sballs.xml.h:13 hacks/config/shadebobs.xml.h:11
+#: hacks/config/sierpinski.xml.h:9 hacks/config/sierpinski3d.xml.h:9
+#: hacks/config/slidescreen.xml.h:12 hacks/config/slip.xml.h:9
+#: hacks/config/speedmine.xml.h:13 hacks/config/sphere.xml.h:6
+#: hacks/config/spheremonics.xml.h:21 hacks/config/spiral.xml.h:10
+#: hacks/config/spotlight.xml.h:6 hacks/config/sproingies.xml.h:7
+#: hacks/config/squiral.xml.h:16 hacks/config/stairs.xml.h:5
+#: hacks/config/starfish.xml.h:10 hacks/config/strange.xml.h:5
+#: hacks/config/substrate.xml.h:16 hacks/config/swirl.xml.h:7
+#: hacks/config/t3d.xml.h:14 hacks/config/tangram.xml.h:5
+#: hacks/config/thornbird.xml.h:8 hacks/config/topblock.xml.h:20
+#: hacks/config/triangle.xml.h:6 hacks/config/truchet.xml.h:3
+#: hacks/config/twang.xml.h:12 hacks/config/vines.xml.h:6
+#: hacks/config/whirlygig.xml.h:13 hacks/config/worm.xml.h:8
 #: hacks/config/xflame.xml.h:6 hacks/config/xjack.xml.h:3
 #: hacks/config/xflame.xml.h:6 hacks/config/xjack.xml.h:3
-#: hacks/config/xmatrix.xml.h:18 hacks/config/xplanet.xml.h:60
+#: hacks/config/xmatrix.xml.h:19 hacks/config/xplanet.xml.h:60
 #: hacks/config/xrayswarm.xml.h:4 hacks/config/zoom.xml.h:7
 msgid "Speed"
 msgstr "Vitesse"
 #: hacks/config/xrayswarm.xml.h:4 hacks/config/zoom.xml.h:7
 msgid "Speed"
 msgstr "Vitesse"
@@ -1451,10 +1454,9 @@ msgid "Tentacles"
 msgstr "Tentacules"
 
 #: hacks/config/anemone.xml.h:12 hacks/config/cubestorm.xml.h:11
 msgstr "Tentacules"
 
 #: hacks/config/anemone.xml.h:12 hacks/config/cubestorm.xml.h:11
-#: hacks/config/deluxe.xml.h:10 hacks/config/fuzzyflakes.xml.h:18
+#: hacks/config/deluxe.xml.h:11 hacks/config/fuzzyflakes.xml.h:18
 #: hacks/config/glknots.xml.h:19 hacks/config/lmorph.xml.h:13
 #: hacks/config/glknots.xml.h:19 hacks/config/lmorph.xml.h:13
-#: hacks/config/pong.xml.h:7 hacks/config/starfish.xml.h:11
-#: hacks/config/thornbird.xml.h:9
+#: hacks/config/starfish.xml.h:12 hacks/config/thornbird.xml.h:9
 msgid "Thick"
 msgstr "Épais(se)"
 
 msgid "Thick"
 msgstr "Épais(se)"
 
@@ -1465,10 +1467,9 @@ msgid "Thickness"
 msgstr "Épaisseur"
 
 #: hacks/config/anemone.xml.h:14 hacks/config/cubestorm.xml.h:12
 msgstr "Épaisseur"
 
 #: hacks/config/anemone.xml.h:14 hacks/config/cubestorm.xml.h:12
-#: hacks/config/deluxe.xml.h:11 hacks/config/fuzzyflakes.xml.h:20
+#: hacks/config/deluxe.xml.h:12 hacks/config/fuzzyflakes.xml.h:20
 #: hacks/config/glknots.xml.h:21 hacks/config/lmorph.xml.h:14
 #: hacks/config/glknots.xml.h:21 hacks/config/lmorph.xml.h:14
-#: hacks/config/pong.xml.h:8 hacks/config/starfish.xml.h:12
-#: hacks/config/thornbird.xml.h:11
+#: hacks/config/starfish.xml.h:13 hacks/config/thornbird.xml.h:11
 msgid "Thin"
 msgstr "Fin(e)"
 
 msgid "Thin"
 msgstr "Fin(e)"
 
@@ -1477,40 +1478,40 @@ msgid "Turn speed"
 msgstr "Vitesse de rotation"
 
 #: hacks/config/anemone.xml.h:16 hacks/config/ant.xml.h:22
 msgstr "Vitesse de rotation"
 
 #: hacks/config/anemone.xml.h:16 hacks/config/ant.xml.h:22
-#: hacks/config/apollonian.xml.h:13 hacks/config/attraction.xml.h:32
+#: hacks/config/apollonian.xml.h:13 hacks/config/attraction.xml.h:31
 #: 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/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/discrete.xml.h:11 hacks/config/drift.xml.h:11
 #: 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/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:15
-#: hacks/config/forest.xml.h:8 hacks/config/galaxy.xml.h:14
+#: hacks/config/flame.xml.h:16 hacks/config/flow.xml.h:21
+#: hacks/config/forest.xml.h:8 hacks/config/galaxy.xml.h:13
 #: hacks/config/grav.xml.h:11 hacks/config/halo.xml.h:13
 #: hacks/config/grav.xml.h:11 hacks/config/halo.xml.h:13
-#: hacks/config/hopalong.xml.h:25 hacks/config/imsmap.xml.h:15
-#: hacks/config/interference.xml.h:19 hacks/config/julia.xml.h:12
+#: hacks/config/hopalong.xml.h:25 hacks/config/imsmap.xml.h:18
+#: hacks/config/interference.xml.h:19 hacks/config/julia.xml.h:14
 #: hacks/config/laser.xml.h:12 hacks/config/lightning.xml.h:8
 #: hacks/config/lisa.xml.h:12 hacks/config/lissie.xml.h:13
 #: hacks/config/loop.xml.h:12 hacks/config/metaballs.xml.h:16
 #: hacks/config/laser.xml.h:12 hacks/config/lightning.xml.h:8
 #: hacks/config/lisa.xml.h:12 hacks/config/lissie.xml.h:13
 #: hacks/config/loop.xml.h:12 hacks/config/metaballs.xml.h:16
-#: 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:10 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:8 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
+#: hacks/config/moire.xml.h:10 hacks/config/moire2.xml.h:9
+#: hacks/config/mountain.xml.h:11 hacks/config/nerverot.xml.h:23
+#: hacks/config/penrose.xml.h:12 hacks/config/polyominoes.xml.h:12
+#: hacks/config/rd-bomb.xml.h:20 hacks/config/rdbomb.xml.h:20
+#: hacks/config/rocks.xml.h:12 hacks/config/rotor.xml.h:13
+#: hacks/config/shadebobs.xml.h:13 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:15 hacks/config/strange.xml.h:8
+#: 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
 msgid "Two"
 msgstr "Deux"
 
 #: hacks/config/anemone.xml.h:17
 msgid "Two"
 msgstr "Deux"
 
 #: hacks/config/anemone.xml.h:17
-msgid "Wiggling tentacles. By Gabriel Finch."
-msgstr "Tentacules agitées. Par Gabriel Finch."
+msgid "Wiggling tentacles. Written by Gabriel Finch; 2002."
+msgstr "Tentacules agitées. Écrit par Gabriel Finch; 2002."
 
 #: hacks/config/anemone.xml.h:18
 msgid "Withdraw freqency"
 
 #: hacks/config/anemone.xml.h:18
 msgid "Withdraw freqency"
@@ -1525,7 +1526,7 @@ msgid ""
 "Anemotaxis demonstrates a search algorithm designed for locating a source of "
 "odor in turbulent atmosphere. The searcher is able to sense the odor and "
 "determine local instantaneous wind direction. The goal is to find the source "
 "Anemotaxis demonstrates a search algorithm designed for locating a source of "
 "odor in turbulent atmosphere. The searcher is able to sense the odor and "
 "determine local instantaneous wind direction. The goal is to find the source "
-"in the shortest mean time. Written by Eugene Balkovsky."
+"in the shortest mean time. Written by Eugene Balkovsky; 2004."
 msgstr ""
 
 #: hacks/config/anemotaxis.xml.h:3
 msgstr ""
 
 #: hacks/config/anemotaxis.xml.h:3
@@ -1553,15 +1554,15 @@ msgstr "Sources"
 #: hacks/config/ant.xml.h:1
 msgid ""
 "A cellular automaton that is really a two-dimensional Turing machine: as the "
 #: hacks/config/ant.xml.h:1
 msgid ""
 "A cellular automaton that is really a two-dimensional Turing machine: as the "
-"heads (``ants'') walk along the screen, they change pixel values in their "
+"heads (\"ants\") walk along the screen, they change pixel values in their "
 "path. Then, as they pass over changed pixels, their behavior is influenced. "
 "path. Then, as they pass over changed pixels, their behavior is influenced. "
-"Written by David Bagley."
+"Written by David Bagley; 1997."
 msgstr ""
 "Un automate cellulaire qui est en fait une machine de Turing "
 "bidimensionnelle: à mesure que les têtes («fourmis») marchent le long de "
 "l'écran, elles changent la valeur des pixels sur leur chemin. Ensuite, leur "
 "comportement est influencé lorsqu'elles passent sur les pixels modifiés. "
 msgstr ""
 "Un automate cellulaire qui est en fait une machine de Turing "
 "bidimensionnelle: à mesure que les têtes («fourmis») marchent le long de "
 "l'écran, elles changent la valeur des pixels sur leur chemin. Ensuite, leur "
 "comportement est influencé lorsqu'elles passent sur les pixels modifiés. "
-"Écrit par David Bagley."
+"Écrit par David Bagley; 1997."
 
 #: hacks/config/ant.xml.h:2
 msgid "Ant"
 
 #: hacks/config/ant.xml.h:2
 msgid "Ant"
@@ -1585,18 +1586,21 @@ msgstr "Cellules à 4 côtés"
 
 #: hacks/config/ant.xml.h:8 hacks/config/attraction.xml.h:13
 #: hacks/config/cloudlife.xml.h:7 hacks/config/cube21.xml.h:8
 
 #: hacks/config/ant.xml.h:8 hacks/config/attraction.xml.h:13
 #: hacks/config/cloudlife.xml.h:7 hacks/config/cube21.xml.h:8
-#: 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/cubenetic.xml.h:8 hacks/config/demon.xml.h:5
+#: hacks/config/discrete.xml.h:3 hacks/config/distort.xml.h:6
 #: hacks/config/fadeplot.xml.h:5 hacks/config/flag.xml.h:4
 #: hacks/config/fadeplot.xml.h:5 hacks/config/flag.xml.h:4
-#: hacks/config/flow.xml.h:4 hacks/config/fluidballs.xml.h:12
-#: hacks/config/fuzzyflakes.xml.h:10 hacks/config/gleidescope.xml.h:7
-#: hacks/config/halftone.xml.h:8 hacks/config/hopalong.xml.h:13
-#: hacks/config/interference.xml.h:11 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/piecewise.xml.h:5
-#: hacks/config/rd-bomb.xml.h:11 hacks/config/rorschach.xml.h:5
-#: hacks/config/rubik.xml.h:4 hacks/config/sierpinski.xml.h:3
-#: hacks/config/slip.xml.h:3
+#: hacks/config/flow.xml.h:6 hacks/config/fluidballs.xml.h:12
+#: hacks/config/fuzzyflakes.xml.h:10 hacks/config/gleidescope.xml.h:6
+#: hacks/config/halftone.xml.h:9 hacks/config/hopalong.xml.h:13
+#: hacks/config/interference.xml.h:11 hacks/config/julia.xml.h:7
+#: hacks/config/lissie.xml.h:3 hacks/config/loop.xml.h:3
+#: hacks/config/moire.xml.h:4 hacks/config/penrose.xml.h:4
+#: hacks/config/piecewise.xml.h:6 hacks/config/rd-bomb.xml.h:11
+#: hacks/config/rdbomb.xml.h:11 hacks/config/rorschach.xml.h:5
+#: hacks/config/rubik.xml.h:5 hacks/config/sierpinski.xml.h:3
+#: hacks/config/slidescreen.xml.h:4 hacks/config/slip.xml.h:3
+#: hacks/config/spotlight.xml.h:3 hacks/config/topblock.xml.h:10
+#: hacks/config/twang.xml.h:7
 msgid "Large"
 msgstr "Important(e)"
 
 msgid "Large"
 msgstr "Important(e)"
 
@@ -1608,7 +1612,7 @@ msgstr "Cellules à 8 côtés"
 msgid "Random Cell Shape"
 msgstr "Forme de cellule aléatoire"
 
 msgid "Random Cell Shape"
 msgstr "Forme de cellule aléatoire"
 
-#: hacks/config/ant.xml.h:13 hacks/config/speedmine.xml.h:11
+#: hacks/config/ant.xml.h:13
 msgid "Sharp Turns"
 msgstr "Virages serrés"
 
 msgid "Sharp Turns"
 msgstr "Virages serrés"
 
@@ -1616,20 +1620,23 @@ msgstr "Virages serrés"
 msgid "Six Sided Cells"
 msgstr "Cellules à 6 côtés"
 
 msgid "Six Sided Cells"
 msgstr "Cellules à 6 côtés"
 
-#: hacks/config/ant.xml.h:16 hacks/config/attraction.xml.h:27
+#: hacks/config/ant.xml.h:16 hacks/config/attraction.xml.h:26
 #: hacks/config/cloudlife.xml.h:12 hacks/config/cube21.xml.h:17
 #: hacks/config/cloudlife.xml.h:12 hacks/config/cube21.xml.h:17
-#: 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/cubenetic.xml.h:20 hacks/config/demon.xml.h:9
+#: hacks/config/discrete.xml.h:8 hacks/config/distort.xml.h:13
 #: hacks/config/fadeplot.xml.h:9 hacks/config/flag.xml.h:8
 #: hacks/config/fadeplot.xml.h:9 hacks/config/flag.xml.h:8
-#: hacks/config/flow.xml.h:11 hacks/config/fluidballs.xml.h:19
-#: hacks/config/fuzzyflakes.xml.h:16 hacks/config/gleidescope.xml.h:12
-#: hacks/config/halftone.xml.h:14 hacks/config/hopalong.xml.h:22
-#: hacks/config/interference.xml.h:18 hacks/config/julia.xml.h:9
-#: hacks/config/lissie.xml.h:10 hacks/config/loop.xml.h:8
+#: hacks/config/flow.xml.h:17 hacks/config/fluidballs.xml.h:19
+#: hacks/config/fuzzyflakes.xml.h:16 hacks/config/gleidescope.xml.h:11
+#: hacks/config/halftone.xml.h:16 hacks/config/hopalong.xml.h:22
+#: hacks/config/interference.xml.h:18 hacks/config/julia.xml.h:12
+#: hacks/config/lissie.xml.h:9 hacks/config/loop.xml.h:9
 #: hacks/config/metaballs.xml.h:14 hacks/config/moire.xml.h:9
 #: hacks/config/metaballs.xml.h:14 hacks/config/moire.xml.h:9
-#: hacks/config/piecewise.xml.h:10 hacks/config/rd-bomb.xml.h:18
+#: hacks/config/penrose.xml.h:9 hacks/config/piecewise.xml.h:12
+#: hacks/config/rd-bomb.xml.h:18 hacks/config/rdbomb.xml.h:18
 #: hacks/config/rorschach.xml.h:8 hacks/config/rubik.xml.h:10
 #: hacks/config/rorschach.xml.h:8 hacks/config/rubik.xml.h:10
-#: hacks/config/sierpinski.xml.h:8 hacks/config/slip.xml.h:8
+#: hacks/config/sierpinski.xml.h:8 hacks/config/slidescreen.xml.h:11
+#: hacks/config/slip.xml.h:8 hacks/config/spotlight.xml.h:5
+#: hacks/config/topblock.xml.h:18 hacks/config/twang.xml.h:11
 msgid "Small"
 msgstr "Faible"
 
 msgid "Small"
 msgstr "Faible"
 
@@ -1639,7 +1646,7 @@ msgstr "Cellules à 3 côtés"
 
 #: hacks/config/ant.xml.h:19 hacks/config/demon.xml.h:12
 #: hacks/config/discrete.xml.h:10 hacks/config/fadeplot.xml.h:11
 
 #: hacks/config/ant.xml.h:19 hacks/config/demon.xml.h:12
 #: hacks/config/discrete.xml.h:10 hacks/config/fadeplot.xml.h:11
-#: hacks/config/flag.xml.h:12 hacks/config/flow.xml.h:14
+#: hacks/config/flag.xml.h:12 hacks/config/flow.xml.h:20
 #: hacks/config/lissie.xml.h:12 hacks/config/loop.xml.h:11
 #: hacks/config/rubik.xml.h:12 hacks/config/sierpinski.xml.h:11
 #: hacks/config/slip.xml.h:11
 #: hacks/config/lissie.xml.h:12 hacks/config/loop.xml.h:11
 #: hacks/config/rubik.xml.h:12 hacks/config/sierpinski.xml.h:11
 #: hacks/config/slip.xml.h:11
@@ -1665,44 +1672,47 @@ msgstr "Dessiner les ombres"
 #: hacks/config/antinspect.xml.h:3
 msgid ""
 "Draws a trio of ants moving their spheres around a circle. Written by Blair "
 #: hacks/config/antinspect.xml.h:3
 msgid ""
 "Draws a trio of ants moving their spheres around a circle. Written by Blair "
-"Tennessy."
+"Tennessy; 2004."
 msgstr ""
 "Dessine un trio de fourmis déplacant une sphère en cercle. Écrit pas Blair "
 msgstr ""
 "Dessine un trio de fourmis déplacant une sphère en cercle. Écrit pas Blair "
-"Tennessy."
+"Tennessy; 2004."
 
 #: hacks/config/antinspect.xml.h:5 hacks/config/antmaze.xml.h:4
 
 #: hacks/config/antinspect.xml.h:5 hacks/config/antmaze.xml.h:4
-#: hacks/config/antspotlight.xml.h:4 hacks/config/atlantis.xml.h:11
+#: hacks/config/antspotlight.xml.h:4 hacks/config/atlantis.xml.h:12
 #: hacks/config/atunnel.xml.h:5 hacks/config/blocktube.xml.h:8
 #: hacks/config/atunnel.xml.h:5 hacks/config/blocktube.xml.h:8
-#: hacks/config/boing.xml.h:8 hacks/config/boxed.xml.h:14
-#: hacks/config/bubble3d.xml.h:5 hacks/config/cage.xml.h:3
-#: hacks/config/carousel.xml.h:12 hacks/config/circuit.xml.h:9
-#: hacks/config/cube21.xml.h:13 hacks/config/cubenetic.xml.h:21
+#: hacks/config/boing.xml.h:8 hacks/config/bouncingcow.xml.h:9
+#: hacks/config/boxed.xml.h:14 hacks/config/bubble3d.xml.h:5
+#: hacks/config/cage.xml.h:3 hacks/config/carousel.xml.h:12
+#: hacks/config/circuit.xml.h:9 hacks/config/crackberg.xml.h:16
+#: hacks/config/cube21.xml.h:13 hacks/config/cubenetic.xml.h:18
 #: hacks/config/cubestorm.xml.h:7 hacks/config/dangerball.xml.h:4
 #: hacks/config/cubestorm.xml.h:7 hacks/config/dangerball.xml.h:4
-#: hacks/config/endgame.xml.h:4 hacks/config/engine.xml.h:14
-#: hacks/config/extrusion.xml.h:10 hacks/config/flipflop.xml.h:4
-#: hacks/config/flipscreen3d.xml.h:5 hacks/config/fliptext.xml.h:12
-#: hacks/config/fluidballs.xml.h:17 hacks/config/flurry.xml.h:9
-#: hacks/config/flyingtoasters.xml.h:10 hacks/config/gears.xml.h:6
-#: hacks/config/gflux.xml.h:11 hacks/config/glblur.xml.h:13
-#: hacks/config/gleidescope.xml.h:10 hacks/config/glforestfire.xml.h:13
-#: hacks/config/glhanoi.xml.h:7 hacks/config/glknots.xml.h:16
-#: hacks/config/glmatrix.xml.h:17 hacks/config/glplanet.xml.h:7
+#: hacks/config/dnalogo.xml.h:3 hacks/config/endgame.xml.h:5
+#: hacks/config/engine.xml.h:14 hacks/config/extrusion.xml.h:10
+#: hacks/config/flipflop.xml.h:4 hacks/config/flipscreen3d.xml.h:5
+#: hacks/config/fliptext.xml.h:12 hacks/config/fluidballs.xml.h:17
+#: hacks/config/flurry.xml.h:9 hacks/config/flyingtoasters.xml.h:10
+#: hacks/config/gears.xml.h:7 hacks/config/gflux.xml.h:11
+#: hacks/config/glblur.xml.h:13 hacks/config/gleidescope.xml.h:9
+#: hacks/config/glforestfire.xml.h:12 hacks/config/glhanoi.xml.h:7
+#: hacks/config/glknots.xml.h:16 hacks/config/glmatrix.xml.h:14
+#: hacks/config/glplanet.xml.h:7 hacks/config/glschool.xml.h:13
 #: hacks/config/glslideshow.xml.h:19 hacks/config/glsnake.xml.h:10
 #: hacks/config/gltext.xml.h:14 hacks/config/hypertorus.xml.h:17
 #: hacks/config/jigglypuff.xml.h:15 hacks/config/juggler3d.xml.h:11
 #: hacks/config/glslideshow.xml.h:19 hacks/config/glsnake.xml.h:10
 #: hacks/config/gltext.xml.h:14 hacks/config/hypertorus.xml.h:17
 #: hacks/config/jigglypuff.xml.h:15 hacks/config/juggler3d.xml.h:11
-#: hacks/config/klein.xml.h:6 hacks/config/lament.xml.h:5
+#: hacks/config/klein.xml.h:6 hacks/config/lament.xml.h:4
 #: hacks/config/lavalite.xml.h:26 hacks/config/menger.xml.h:15
 #: hacks/config/lavalite.xml.h:26 hacks/config/menger.xml.h:15
-#: hacks/config/mirrorblob.xml.h:17 hacks/config/moebius.xml.h:6
-#: hacks/config/molecule.xml.h:22 hacks/config/morph3d.xml.h:5
+#: hacks/config/mirrorblob.xml.h:17 hacks/config/moebius.xml.h:4
+#: hacks/config/molecule.xml.h:22 hacks/config/morph3d.xml.h:9
 #: hacks/config/noof.xml.h:4 hacks/config/pinion.xml.h:12
 #: hacks/config/noof.xml.h:4 hacks/config/pinion.xml.h:12
-#: hacks/config/pipes.xml.h:14 hacks/config/polyhedra.xml.h:110
+#: hacks/config/pipes.xml.h:18 hacks/config/polyhedra.xml.h:110
 #: hacks/config/polytopes.xml.h:18 hacks/config/providence.xml.h:4
 #: hacks/config/polytopes.xml.h:18 hacks/config/providence.xml.h:4
-#: hacks/config/pulsar.xml.h:14 hacks/config/queens.xml.h:3
-#: 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:7
-#: hacks/config/timetunnel.xml.h:9
+#: hacks/config/pulsar.xml.h:13 hacks/config/queens.xml.h:3
+#: hacks/config/rubik.xml.h:7 hacks/config/sballs.xml.h:11
+#: hacks/config/sierpinski3d.xml.h:6 hacks/config/speedmine.xml.h:10
+#: hacks/config/spheremonics.xml.h:18 hacks/config/sproingies.xml.h:5
+#: hacks/config/stairs.xml.h:3 hacks/config/starwars.xml.h:11
+#: hacks/config/stonerview.xml.h:2 hacks/config/superquadrics.xml.h:10
+#: hacks/config/timetunnel.xml.h:9 hacks/config/topblock.xml.h:16
 msgid "Show Frames-per-Second"
 msgstr "Afficher «trames par seconde» (FPS)"
 
 msgid "Show Frames-per-Second"
 msgstr "Afficher «trames par seconde» (FPS)"
 
@@ -1712,9 +1722,11 @@ msgstr "Labyrinthe des fourmis"
 
 #: hacks/config/antmaze.xml.h:2
 msgid ""
 
 #: hacks/config/antmaze.xml.h:2
 msgid ""
-"Antmaze draws a few views of a few ants walking around in a simple maze. "
-"Written by Blair Tennessy."
+"Draws a few views of a few ants walking around in a simple maze. Written by "
+"Blair Tennessy; 2005."
 msgstr ""
 msgstr ""
+"Dessine quelques vues de fourmis se baladant dans un labyrinthe simple."
+" Écrit pas Blair Tennessy; 2005."
 
 #: hacks/config/antspotlight.xml.h:1
 msgid "AntSpotlight"
 
 #: hacks/config/antspotlight.xml.h:1
 msgid "AntSpotlight"
@@ -1722,9 +1734,11 @@ msgstr "Faisceau lumineux"
 
 #: hacks/config/antspotlight.xml.h:2
 msgid ""
 
 #: hacks/config/antspotlight.xml.h:2
 msgid ""
-"Antspotlight draws an ant (with a headlight) who walks on top of an image of "
-"your desktop or other image. Written by Blair Tennessy."
+"Draws an ant (with a headlight) who walks on top of an image of your desktop "
+"or other image. Written by Blair Tennessy; 2003."
 msgstr ""
 msgstr ""
+"Antspotlight dessine une fourmi (avec une lampe frontale) qui se promène sur "
+"une image de votre bureau ou une autre image. Écrit par Blair Tennessy; 2OO3."
 
 #: hacks/config/apollonian.xml.h:1
 msgid "Apollonian"
 
 #: hacks/config/apollonian.xml.h:1
 msgid "Apollonian"
@@ -1749,10 +1763,10 @@ msgstr "Inclure les géométries alternatives"
 #: hacks/config/apollonian.xml.h:9
 msgid ""
 "Packs a large circle with smaller circles, demonstrating the Descartes "
 #: 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."
+"Circle Theorem. Written by Allan R. Wilks and David Bagley; 2002."
 msgstr ""
 "Remplit un grand cercle de cercles plus petits et démontre ainsi le théorème "
 msgstr ""
 "Remplit un grand cercle de cercles plus petits et démontre ainsi le théorème "
-"des cercles de Descartes. Écrit par Allan R. Wilks et David Bagley."
+"des cercles de Descartes. Écrit par Allan R. Wilks et David Bagley; 2002."
 
 #: hacks/config/apollonian.xml.h:10
 msgid "Shallow"
 
 #: hacks/config/apollonian.xml.h:10
 msgid "Shallow"
@@ -1763,138 +1777,122 @@ msgid "Apple ]["
 msgstr "Apple ]["
 
 #: hacks/config/apple2.xml.h:2
 msgstr "Apple ]["
 
 #: hacks/config/apple2.xml.h:2
-msgid "Basic Programming Mode"
-msgstr "Mode programmation en BASIC"
-
-#: hacks/config/apple2.xml.h:3 hacks/config/halo.xml.h:8
-#: hacks/config/imsmap.xml.h:11
-msgid "Random Mode"
+msgid "Choose display mode randomly"
 msgstr "Mode aléatoire"
 
 msgstr "Mode aléatoire"
 
+#: hacks/config/apple2.xml.h:3
+msgid "Display images"
+msgstr "Afficher des images"
+
 #: hacks/config/apple2.xml.h:4
 #: hacks/config/apple2.xml.h:4
+msgid "Display scrolling text"
+msgstr "Afficher un texte défilant"
+
+#: hacks/config/apple2.xml.h:5
+msgid "Run BASIC programs"
+msgstr "Exécuter des programmes BASIC"
+
+#: hacks/config/apple2.xml.h:6
 msgid ""
 "Simulates an original Apple ][ Plus computer in all its 1979 glory. It also "
 "reproduces the appearance of display on a color television set of the "
 msgid ""
 "Simulates an original Apple ][ Plus computer in all its 1979 glory. It also "
 "reproduces the appearance of display on a color television set of the "
-"period. In \"Text Mode\", it displays the output of a program, or the "
-"contents of a file or URL, as configured on the \"Advanced\" tab of the main "
-"Screensaver Preferences window. In \"Slideshow Mode\", it chooses a number "
-"of images from the image source you configured into XScreenSaver and "
-"displays them within the limitations of the Apple ][ display hardware. (Six "
-"available colors in hi-res mode!) In \"Basic Programming Mode\", a simulated "
-"user types in a BASIC program and runs it. By Trevor Blackwell."
+"period. In \"Basic Programming Mode\", a simulated user types in a BASIC "
+"program and runs it. In \"Text Mode\", it displays the output of a program, "
+"or the contents of a file or URL. In \"Slideshow Mode\", it chooses random "
+"images and displays them within the limitations of the Apple ][ display "
+"hardware. (Six available colors in hi-res mode!) Written by Trevor "
+"Blackwell; 2003."
 msgstr ""
 "Simule une machine Apple ][ Plus dans toute sa gloire de 1979. Il reproduit "
 msgstr ""
 "Simule une machine Apple ][ Plus dans toute sa gloire de 1979. Il reproduit "
-"également l'affichage d'une télévision couleur de l'époque. En mode \"Texte"
-"\", il affiche la sortie d'une commande (p.ex. \"fortune\"). En Mode "
-"\"diaporama\", il choisis des images depuis la source d'image configurée "
-"dans XScreenSaver et les affiche avec les limitations de l'écran de l'Apple ]"
-"[ (seulement 6 couleurs en mode haute résolution!). Dans le mode "
-"\"Programmation en BASIC\", un utilisateur simulé tape des commandes BASIC "
-"et lance le programme. Par Trevor Blackwell."
-
-#: hacks/config/apple2.xml.h:5
-msgid "Slideshow Mode"
-msgstr "Mode diaporama"
-
-#: hacks/config/apple2.xml.h:6
-msgid "Text Mode"
-msgstr "Mode texte"
+"également l'affichage d'une télévision couleur de l'époque. "
+"En mode «Programmation BASIC», un utilisateur simulé tape des commandes BASIC "
+"et lance le programme. En mode «Texte», il affiche la sortie d'un programme "
+"ou le contenu d'un fichier ou d'une URL. En Mode «Diaporama», il choisis des "
+"images aléatoirement et les affiche avec les limitations de l'écran de l'Apple"
+" ][ (seulement 6 couleurs en mode haute résolution!)."
+" Écrit par Trevor Blackwell; 2003."
 
 #: hacks/config/apple2.xml.h:7 hacks/config/fliptext.xml.h:17
 
 #: hacks/config/apple2.xml.h:7 hacks/config/fliptext.xml.h:17
-#: hacks/config/fontglide.xml.h:15 hacks/config/noseguy.xml.h:7
-#: hacks/config/phosphor.xml.h:9 hacks/config/starwars.xml.h:17
+#: hacks/config/fontglide.xml.h:15 hacks/config/noseguy.xml.h:3
+#: hacks/config/phosphor.xml.h:10 hacks/config/starwars.xml.h:16
 msgid "Text Program"
 msgstr "Programme générant du texte"
 
 #: hacks/config/atlantis.xml.h:1
 msgid "Text Program"
 msgstr "Programme générant du texte"
 
 #: hacks/config/atlantis.xml.h:1
+msgid ""
+"A 3D animation of a number of sharks, dolphins, and whales. Written by Mark "
+"Kilgard; 1998."
+msgstr ""
+"Une animation 3D avec des requins, des "
+"dauphins et des baleines. Initialement écrit par Mark Kilgard ; 1994. Porté par Eric Lassauge pour xlock; 1998."
+
+#: hacks/config/atlantis.xml.h:2
 msgid "Agressive"
 msgstr "Agressif"
 
 msgid "Agressive"
 msgstr "Agressif"
 
-#: hacks/config/atlantis.xml.h:2
+#: hacks/config/atlantis.xml.h:3
 msgid "Atlantis"
 msgid "Atlantis"
-msgstr "Atlantide"
+msgstr "Atlantis"
 
 
-#: hacks/config/atlantis.xml.h:3
+#: hacks/config/atlantis.xml.h:4
 msgid "Clear Water"
 msgstr "Eau claire"
 
 msgid "Clear Water"
 msgstr "Eau claire"
 
-#: hacks/config/atlantis.xml.h:5
+#: hacks/config/atlantis.xml.h:6
 msgid "Flat Background"
 msgstr "Arrière-plan uni"
 
 msgid "Flat Background"
 msgstr "Arrière-plan uni"
 
-#: hacks/config/atlantis.xml.h:6
+#: hacks/config/atlantis.xml.h:7
 msgid "Gradient Background"
 msgstr "Arrière-plan dégradé"
 
 msgid "Gradient Background"
 msgstr "Arrière-plan dégradé"
 
-#: hacks/config/atlantis.xml.h:7
+#: hacks/config/atlantis.xml.h:8
 msgid "Number of Sharks"
 msgstr "Nombre de requins"
 
 msgid "Number of Sharks"
 msgstr "Nombre de requins"
 
-#: hacks/config/atlantis.xml.h:8
+#: hacks/config/atlantis.xml.h:9
 msgid "Shark Proximity"
 msgstr "Comportement des requins"
 
 msgid "Shark Proximity"
 msgstr "Comportement des requins"
 
-#: hacks/config/atlantis.xml.h:9
+#: hacks/config/atlantis.xml.h:10
 msgid "Shark Speed"
 msgstr "Vitesse des requins"
 
 msgid "Shark Speed"
 msgstr "Vitesse des requins"
 
-#: hacks/config/atlantis.xml.h:10
+#: hacks/config/atlantis.xml.h:11
 msgid "Shimmering Water"
 msgstr "Eau miroitante"
 
 msgid "Shimmering Water"
 msgstr "Eau miroitante"
 
-#: hacks/config/atlantis.xml.h:12
+#: hacks/config/atlantis.xml.h:13
 msgid "Shy"
 msgstr "Timide"
 
 msgid "Shy"
 msgstr "Timide"
 
-#: hacks/config/atlantis.xml.h:14 hacks/config/cage.xml.h:5
-#: hacks/config/extrusion.xml.h:12 hacks/config/gears.xml.h:8
-#: hacks/config/glplanet.xml.h:9 hacks/config/glsnake.xml.h:13
-#: hacks/config/gltext.xml.h:16 hacks/config/menger.xml.h:17
-#: hacks/config/mismunch.xml.h:11 hacks/config/molecule.xml.h:24
-#: hacks/config/munch.xml.h:8 hacks/config/providence.xml.h:6
-#: hacks/config/sierpinski3d.xml.h:9 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:9 hacks/config/webcollage.xml.h:8
-msgid "Solid"
-msgstr "Plein"
-
 #: hacks/config/atlantis.xml.h:15
 #: hacks/config/atlantis.xml.h:15
-msgid ""
-"This is xfishtank writ large: a GL animation of a number of sharks, "
-"dolphins, and whales. The swimming motions are great. Originally written by "
-"Mark Kilgard."
-msgstr ""
-"Voici un aquarium grand format: une animation GL avec des requins, des "
-"dauphins et des baleines. Les mouvements de nage sont magnifiques. "
-"Initialement écrit par Mark Kilgard (porté par Eric Lassauge pour xlock)."
-
-#: hacks/config/atlantis.xml.h:16
 msgid "Whale Speed"
 msgstr "Vitesse des baleines"
 
 msgid "Whale Speed"
 msgstr "Vitesse des baleines"
 
-#: hacks/config/atlantis.xml.h:17 hacks/config/atunnel.xml.h:10
-#: hacks/config/blinkbox.xml.h:10 hacks/config/blocktube.xml.h:13
-#: hacks/config/boing.xml.h:15 hacks/config/boxed.xml.h:17
-#: hacks/config/cage.xml.h:9 hacks/config/crackberg.xml.h:23
-#: hacks/config/cube21.xml.h:28 hacks/config/cubestorm.xml.h:14
-#: hacks/config/dangerball.xml.h:11 hacks/config/extrusion.xml.h:19
-#: hacks/config/flipflop.xml.h:8 hacks/config/flyingtoasters.xml.h:14
-#: hacks/config/gears.xml.h:11 hacks/config/glforestfire.xml.h:20
-#: hacks/config/glhanoi.xml.h:10 hacks/config/glknots.xml.h:23
-#: hacks/config/glplanet.xml.h:15 hacks/config/glsnake.xml.h:15
-#: hacks/config/gltext.xml.h:21 hacks/config/jigglypuff.xml.h:25
-#: hacks/config/juggler3d.xml.h:13 hacks/config/lament.xml.h:9
-#: hacks/config/lavalite.xml.h:32 hacks/config/menger.xml.h:21
-#: hacks/config/mirrorblob.xml.h:23 hacks/config/moebius.xml.h:11
-#: hacks/config/molecule.xml.h:27 hacks/config/pinion.xml.h:15
-#: hacks/config/polyhedra.xml.h:166 hacks/config/providence.xml.h:9
-#: hacks/config/pulsar.xml.h:20 hacks/config/queens.xml.h:7
-#: hacks/config/sballs.xml.h:18 hacks/config/sierpinski3d.xml.h:12
-#: hacks/config/speedmine.xml.h:18 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:12
-#: hacks/config/tangram.xml.h:8
+#: hacks/config/atlantis.xml.h:16 hacks/config/atunnel.xml.h:9
+#: hacks/config/blinkbox.xml.h:10 hacks/config/blocktube.xml.h:12
+#: hacks/config/boing.xml.h:15 hacks/config/bouncingcow.xml.h:11
+#: hacks/config/boxed.xml.h:17 hacks/config/cage.xml.h:7
+#: hacks/config/crackberg.xml.h:22 hacks/config/cube21.xml.h:27
+#: hacks/config/cubenetic.xml.h:27 hacks/config/cubestorm.xml.h:14
+#: hacks/config/dangerball.xml.h:11 hacks/config/dnalogo.xml.h:4
+#: hacks/config/extrusion.xml.h:17 hacks/config/flipflop.xml.h:7
+#: hacks/config/flyingtoasters.xml.h:13 hacks/config/gears.xml.h:11
+#: hacks/config/glforestfire.xml.h:17 hacks/config/glhanoi.xml.h:10
+#: hacks/config/glknots.xml.h:23 hacks/config/glmatrix.xml.h:19
+#: hacks/config/glplanet.xml.h:14 hacks/config/glschool.xml.h:18
+#: hacks/config/glsnake.xml.h:14 hacks/config/gltext.xml.h:20
+#: hacks/config/jigglypuff.xml.h:25 hacks/config/juggler3d.xml.h:13
+#: hacks/config/lament.xml.h:8 hacks/config/lavalite.xml.h:32
+#: hacks/config/menger.xml.h:20 hacks/config/mirrorblob.xml.h:22
+#: hacks/config/molecule.xml.h:26 hacks/config/pinion.xml.h:15
+#: hacks/config/polyhedra.xml.h:166 hacks/config/providence.xml.h:8
+#: hacks/config/queens.xml.h:7 hacks/config/sballs.xml.h:17
+#: hacks/config/sierpinski3d.xml.h:11 hacks/config/speedmine.xml.h:17
+#: hacks/config/spheremonics.xml.h:25 hacks/config/sproingies.xml.h:9
+#: hacks/config/stonerview.xml.h:4 hacks/config/superquadrics.xml.h:14
+#: hacks/config/tangram.xml.h:8 hacks/config/topblock.xml.h:22
 msgid "Wireframe"
 msgstr "Fil de fer"
 
 msgid "Wireframe"
 msgstr "Fil de fer"
 
@@ -1911,6 +1909,7 @@ msgid "Ball Mass"
 msgstr "Masse des balles"
 
 #: hacks/config/attraction.xml.h:4 hacks/config/fluidballs.xml.h:3
 msgstr "Masse des balles"
 
 #: hacks/config/attraction.xml.h:4 hacks/config/fluidballs.xml.h:3
+#: hacks/config/juggle.xml.h:1
 msgid "Balls"
 msgstr "Balles"
 
 msgid "Balls"
 msgstr "Balles"
 
@@ -1919,7 +1918,7 @@ msgid "Bounce Off Walls"
 msgstr "Rebondir sur les murs"
 
 #: hacks/config/attraction.xml.h:6 hacks/config/hopalong.xml.h:1
 msgstr "Rebondir sur les murs"
 
 #: hacks/config/attraction.xml.h:6 hacks/config/hopalong.xml.h:1
-#: hacks/config/interference.xml.h:5 hacks/config/qix.xml.h:2
+#: hacks/config/interference.xml.h:4 hacks/config/qix.xml.h:3
 #: hacks/config/wander.xml.h:3
 msgid "Color Contrast"
 msgstr "Contraste des couleurs"
 #: hacks/config/wander.xml.h:3
 msgid "Color Contrast"
 msgstr "Contraste des couleurs"
@@ -1934,20 +1933,21 @@ msgstr "Rayons pleins"
 
 #: hacks/config/attraction.xml.h:10 hacks/config/carousel.xml.h:7
 #: hacks/config/ccurve.xml.h:9 hacks/config/cloudlife.xml.h:5
 
 #: hacks/config/attraction.xml.h:10 hacks/config/carousel.xml.h:7
 #: hacks/config/ccurve.xml.h:9 hacks/config/cloudlife.xml.h:5
-#: hacks/config/cubenetic.xml.h:10 hacks/config/euler2d.xml.h:5
-#: hacks/config/flame.xml.h:9 hacks/config/fliptext.xml.h:9
-#: hacks/config/glslideshow.xml.h:13 hacks/config/goop.xml.h:6
-#: hacks/config/halftone.xml.h:7 hacks/config/hopalong.xml.h:10
-#: hacks/config/hyperball.xml.h:3 hacks/config/hypercube.xml.h:3
+#: hacks/config/cubenetic.xml.h:7 hacks/config/euler2d.xml.h:5
+#: hacks/config/flame.xml.h:8 hacks/config/fliptext.xml.h:9
+#: hacks/config/glschool.xml.h:10 hacks/config/glslideshow.xml.h:13
+#: hacks/config/goop.xml.h:6 hacks/config/halftone.xml.h:8
+#: hacks/config/hopalong.xml.h:10 hacks/config/hyperball.xml.h:3
+#: hacks/config/hypercube.xml.h:3 hacks/config/ifs.xml.h:4
 #: hacks/config/interference.xml.h:8 hacks/config/jigglypuff.xml.h:8
 #: hacks/config/interference.xml.h:8 hacks/config/jigglypuff.xml.h:8
-#: hacks/config/kumppa.xml.h:4 hacks/config/lavalite.xml.h:12
+#: hacks/config/kumppa.xml.h:4 hacks/config/lavalite.xml.h:11
 #: hacks/config/nerverot.xml.h:11 hacks/config/petri.xml.h:8
 #: 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/pyro.xml.h:5 hacks/config/qix.xml.h:11
 #: hacks/config/speedmine.xml.h:5 hacks/config/spheremonics.xml.h:6
 #: hacks/config/spiral.xml.h:4 hacks/config/squiral.xml.h:6
 #: hacks/config/speedmine.xml.h:5 hacks/config/spheremonics.xml.h:6
 #: hacks/config/spiral.xml.h:4 hacks/config/squiral.xml.h:6
-#: hacks/config/superquadrics.xml.h:5 hacks/config/t3d.xml.h:7
-#: hacks/config/twang.xml.h:5 hacks/config/wander.xml.h:8
-#: hacks/config/xmountains.xml.h:17
+#: hacks/config/superquadrics.xml.h:5 hacks/config/t3d.xml.h:8
+#: hacks/config/topblock.xml.h:9 hacks/config/twang.xml.h:5
+#: hacks/config/wander.xml.h:8 hacks/config/xmountains.xml.h:17
 msgid "High"
 msgstr "Haut(e)"
 
 msgid "High"
 msgstr "Haut(e)"
 
@@ -1959,179 +1959,167 @@ msgstr "Ignorer les bords de l'écran"
 msgid "Inward"
 msgstr "Intérieur"
 
 msgid "Inward"
 msgstr "Intérieur"
 
-#: hacks/config/attraction.xml.h:14
-msgid ""
-"Like qix, this uses a simple simple motion model to generate many different "
-"display modes. The control points attract each other up to a certain "
-"distance, and then begin to repel each other. The attraction/repulsion is "
-"proportional to the distance between any two particles, similar to the "
-"strong and weak nuclear forces. One of the most interesting ways to watch "
-"this hack is simply as bouncing balls, because their motions and "
-"interactions with each other are so odd. Sometimes two balls will get into a "
-"tight orbit around each other, to be interrupted later by a third, or by the "
-"edge of the screen. It looks quite chaotic. Written by Jamie Zawinski, based "
-"on Lisp code by John Pezaris."
-msgstr ""
-"Comme qix, il utilise un modèle de mouvement simple pour générer de nombreux "
-"modes d'affichage différents. Les points de contrôle s'attirent jusqu'à une "
-"certaine distance, puis commencent à se repousser. Le rapport d'attraction/"
-"répulsion est proportionnel à la distance entre deux particules, à l'instar "
-"des forces nucléaires fortes et faibles. Il est particulièrement intéressant "
-"de regarder ce hack simplement sous la forme de balles qui rebondissent, car "
-"leurs mouvements et leurs interactions sont très étranges. Il arrive parfois "
-"que deux balles entrent en orbite l'une avec l'autre, avant d'être "
-"interrompues par une troisième ou par le bord de l'écran. L'ensemble est "
-"assez chaotique. Écrit par Jamie Zawinski, sur la base d'un code Lisp de "
-"John Pezaris."
-
-#: hacks/config/attraction.xml.h:15 hacks/config/deluxe.xml.h:5
+#: hacks/config/attraction.xml.h:14 hacks/config/deluxe.xml.h:6
 #: hacks/config/lmorph.xml.h:7 hacks/config/pedal.xml.h:5
 #: hacks/config/starfish.xml.h:4 hacks/config/whirlygig.xml.h:10
 msgid "Lines"
 msgstr "Ligne"
 
 #: hacks/config/lmorph.xml.h:7 hacks/config/pedal.xml.h:5
 #: hacks/config/starfish.xml.h:4 hacks/config/whirlygig.xml.h:10
 msgid "Lines"
 msgstr "Ligne"
 
-#: hacks/config/attraction.xml.h:16 hacks/config/blocktube.xml.h:5
+#: hacks/config/attraction.xml.h:15 hacks/config/blocktube.xml.h:6
 #: hacks/config/braid.xml.h:6 hacks/config/celtic.xml.h:4
 #: hacks/config/braid.xml.h:6 hacks/config/celtic.xml.h:4
-#: hacks/config/crackberg.xml.h:13 hacks/config/cube21.xml.h:9
-#: hacks/config/cynosure.xml.h:5 hacks/config/drift.xml.h:8
+#: hacks/config/crackberg.xml.h:11 hacks/config/cube21.xml.h:9
+#: hacks/config/cynosure.xml.h:4 hacks/config/drift.xml.h:5
 #: hacks/config/eruption.xml.h:11 hacks/config/euler2d.xml.h:6
 #: hacks/config/fiberlamp.xml.h:5 hacks/config/fireflies.xml.h:21
 #: hacks/config/eruption.xml.h:11 hacks/config/euler2d.xml.h:6
 #: hacks/config/fiberlamp.xml.h:5 hacks/config/fireflies.xml.h:21
-#: hacks/config/flow.xml.h:6 hacks/config/fontglide.xml.h:8
-#: hacks/config/galaxy.xml.h:5 hacks/config/juggle.xml.h:4
+#: hacks/config/flow.xml.h:8 hacks/config/fontglide.xml.h:8
+#: hacks/config/galaxy.xml.h:5 hacks/config/juggle.xml.h:10
 #: hacks/config/klein.xml.h:4 hacks/config/laser.xml.h:5
 #: hacks/config/menger.xml.h:4 hacks/config/metaballs.xml.h:5
 #: hacks/config/mismunch.xml.h:3 hacks/config/munch.xml.h:4
 #: hacks/config/nerverot.xml.h:13 hacks/config/petri.xml.h:9
 #: hacks/config/klein.xml.h:4 hacks/config/laser.xml.h:5
 #: hacks/config/menger.xml.h:4 hacks/config/metaballs.xml.h:5
 #: hacks/config/mismunch.xml.h:3 hacks/config/munch.xml.h:4
 #: hacks/config/nerverot.xml.h:13 hacks/config/petri.xml.h:9
-#: 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/pipes.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/slidescreen.xml.h:5
 #: hacks/config/spheremonics.xml.h:7 hacks/config/substrate.xml.h:11
 #: hacks/config/spheremonics.xml.h:7 hacks/config/substrate.xml.h:11
-#: hacks/config/timetunnel.xml.h:6 hacks/config/wander.xml.h:10
-#: hacks/config/whirlwindwarp.xml.h:3
+#: hacks/config/superquadrics.xml.h:6 hacks/config/timetunnel.xml.h:6
+#: hacks/config/wander.xml.h:10 hacks/config/whirlwindwarp.xml.h:3
 msgid "Long"
 msgstr "Long(ue)"
 
 msgid "Long"
 msgstr "Long(ue)"
 
-#: hacks/config/attraction.xml.h:17 hacks/config/carousel.xml.h:9
+#: hacks/config/attraction.xml.h:16 hacks/config/carousel.xml.h:9
 #: hacks/config/ccurve.xml.h:10 hacks/config/cloudlife.xml.h:8
 #: hacks/config/ccurve.xml.h:10 hacks/config/cloudlife.xml.h:8
-#: hacks/config/cubenetic.xml.h:12 hacks/config/euler2d.xml.h:7
+#: hacks/config/cubenetic.xml.h:9 hacks/config/euler2d.xml.h:7
 #: hacks/config/flame.xml.h:10 hacks/config/fliptext.xml.h:10
 #: hacks/config/glslideshow.xml.h:16 hacks/config/goop.xml.h:7
 #: hacks/config/flame.xml.h:10 hacks/config/fliptext.xml.h:10
 #: hacks/config/glslideshow.xml.h:16 hacks/config/goop.xml.h:7
-#: hacks/config/halftone.xml.h:9 hacks/config/hopalong.xml.h:14
+#: hacks/config/halftone.xml.h:10 hacks/config/hopalong.xml.h:14
 #: hacks/config/hyperball.xml.h:6 hacks/config/hypercube.xml.h:5
 #: hacks/config/hyperball.xml.h:6 hacks/config/hypercube.xml.h:5
-#: hacks/config/interference.xml.h:12 hacks/config/jigglypuff.xml.h:11
-#: hacks/config/kumppa.xml.h:6 hacks/config/lavalite.xml.h:14
-#: 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/superquadrics.xml.h:6 hacks/config/t3d.xml.h:8
-#: hacks/config/twang.xml.h:7 hacks/config/wander.xml.h:11
+#: hacks/config/ifs.xml.h:6 hacks/config/interference.xml.h:12
+#: hacks/config/jigglypuff.xml.h:11 hacks/config/kumppa.xml.h:6
+#: hacks/config/lavalite.xml.h:14 hacks/config/nerverot.xml.h:14
+#: hacks/config/petri.xml.h:10 hacks/config/pyro.xml.h:7
+#: hacks/config/qix.xml.h:14 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/superquadrics.xml.h:7
+#: hacks/config/t3d.xml.h:9 hacks/config/topblock.xml.h:11
+#: hacks/config/twang.xml.h:8 hacks/config/wander.xml.h:11
 msgid "Low"
 msgstr "Bas(se)"
 
 msgid "Low"
 msgstr "Bas(se)"
 
-#: hacks/config/attraction.xml.h:20
+#: hacks/config/attraction.xml.h:19
 msgid "Orbital Mode"
 msgstr "Mode orbital"
 
 msgid "Orbital Mode"
 msgstr "Mode orbital"
 
-#: hacks/config/attraction.xml.h:21
+#: hacks/config/attraction.xml.h:20
 msgid "Outward"
 msgstr "Extérieur"
 
 msgid "Outward"
 msgstr "Extérieur"
 
-#: hacks/config/attraction.xml.h:22
+#: hacks/config/attraction.xml.h:21
 msgid "Polygons"
 msgstr "Polygones"
 
 msgid "Polygons"
 msgstr "Polygones"
 
-#: hacks/config/attraction.xml.h:23 hacks/config/fuzzyflakes.xml.h:13
-#: hacks/config/spotlight.xml.h:3 hacks/config/xplanet.xml.h:55
+#: hacks/config/attraction.xml.h:22 hacks/config/fuzzyflakes.xml.h:13
+#: hacks/config/xplanet.xml.h:55
 msgid "Radius"
 msgstr "Rayon"
 
 msgid "Radius"
 msgstr "Rayon"
 
-#: hacks/config/attraction.xml.h:24
+#: hacks/config/attraction.xml.h:23
 msgid "Repulsion Threshold"
 msgstr "Seuil de répulsion"
 
 msgid "Repulsion Threshold"
 msgstr "Seuil de répulsion"
 
-#: hacks/config/attraction.xml.h:25 hacks/config/blocktube.xml.h:7
+#: hacks/config/attraction.xml.h:24 hacks/config/blocktube.xml.h:7
 #: hacks/config/braid.xml.h:10 hacks/config/celtic.xml.h:7
 #: hacks/config/braid.xml.h:10 hacks/config/celtic.xml.h:7
-#: hacks/config/crackberg.xml.h:17 hacks/config/cube21.xml.h:12
-#: hacks/config/cynosure.xml.h:8 hacks/config/drift.xml.h:11
+#: hacks/config/crackberg.xml.h:15 hacks/config/cube21.xml.h:12
+#: hacks/config/cynosure.xml.h:8 hacks/config/drift.xml.h:8
 #: hacks/config/eruption.xml.h:18 hacks/config/euler2d.xml.h:12
 #: hacks/config/fiberlamp.xml.h:7 hacks/config/fireflies.xml.h:34
 #: hacks/config/eruption.xml.h:18 hacks/config/euler2d.xml.h:12
 #: hacks/config/fiberlamp.xml.h:7 hacks/config/fireflies.xml.h:34
-#: hacks/config/flow.xml.h:9 hacks/config/galaxy.xml.h:9
-#: hacks/config/juggle.xml.h:7 hacks/config/klein.xml.h:5
+#: hacks/config/flow.xml.h:15 hacks/config/galaxy.xml.h:9
+#: hacks/config/juggle.xml.h:15 hacks/config/klein.xml.h:5
 #: hacks/config/laser.xml.h:9 hacks/config/menger.xml.h:14
 #: hacks/config/metaballs.xml.h:12 hacks/config/mismunch.xml.h:8
 #: hacks/config/munch.xml.h:6 hacks/config/nerverot.xml.h:19
 #: hacks/config/laser.xml.h:9 hacks/config/menger.xml.h:14
 #: hacks/config/metaballs.xml.h:12 hacks/config/mismunch.xml.h:8
 #: hacks/config/munch.xml.h:6 hacks/config/nerverot.xml.h:19
-#: hacks/config/petri.xml.h:22 hacks/config/polyominoes.xml.h:9
-#: hacks/config/rotor.xml.h:9 hacks/config/shadebobs.xml.h:8
-#: hacks/config/sierpinski3d.xml.h:5 hacks/config/spheremonics.xml.h:17
-#: hacks/config/substrate.xml.h:14 hacks/config/timetunnel.xml.h:8
-#: hacks/config/wander.xml.h:12 hacks/config/whirlwindwarp.xml.h:6
+#: hacks/config/petri.xml.h:22 hacks/config/pipes.xml.h:17
+#: hacks/config/polyominoes.xml.h:9 hacks/config/rotor.xml.h:9
+#: hacks/config/shadebobs.xml.h:9 hacks/config/sierpinski3d.xml.h:5
+#: hacks/config/slidescreen.xml.h:7 hacks/config/spheremonics.xml.h:17
+#: hacks/config/substrate.xml.h:14 hacks/config/superquadrics.xml.h:9
+#: hacks/config/timetunnel.xml.h:8 hacks/config/wander.xml.h:12
+#: hacks/config/whirlwindwarp.xml.h:6
 msgid "Short"
 msgstr "Court(e)"
 
 msgid "Short"
 msgstr "Court(e)"
 
-#: hacks/config/attraction.xml.h:29
+#: hacks/config/attraction.xml.h:28
 msgid "Splines"
 msgstr "Rayons"
 
 msgid "Splines"
 msgstr "Rayons"
 
-#: hacks/config/attraction.xml.h:30 hacks/config/fireflies.xml.h:42
+#: hacks/config/attraction.xml.h:29 hacks/config/fireflies.xml.h:42
 msgid "Tails"
 msgstr "Queues"
 
 msgid "Tails"
 msgstr "Queues"
 
-#: hacks/config/attraction.xml.h:31 hacks/config/euler2d.xml.h:16
-#: hacks/config/juggle.xml.h:10
+#: hacks/config/attraction.xml.h:30 hacks/config/euler2d.xml.h:16
+#: hacks/config/juggle.xml.h:18
 msgid "Trail Length"
 msgstr "Longueur de la traînée"
 
 msgid "Trail Length"
 msgstr "Longueur de la traînée"
 
+#: hacks/config/attraction.xml.h:32
+msgid ""
+"Uses a simple simple motion model to generate many different display modes. "
+"The control points attract each other up to a certain distance, and then "
+"begin to repel each other. The attraction/repulsion is proportional to the "
+"distance between any two particles, similar to the strong and weak nuclear "
+"forces. Written by Jamie Zawinski and John Pezaris; 1992."
+msgstr ""
+
 #: hacks/config/atunnel.xml.h:1
 msgid "Atunnel"
 msgstr "Tunnel GL"
 
 #: hacks/config/atunnel.xml.h:2
 msgid ""
 #: hacks/config/atunnel.xml.h:1
 msgid "Atunnel"
 msgstr "Tunnel GL"
 
 #: hacks/config/atunnel.xml.h:2
 msgid ""
-"Draws an animation of a textured tunnel in GL. Requires OpenGL, and a "
-"machine with fast hardware support for texture maps. Written by Eric "
-"Lassauge and Roman Podobedov."
+"Draws an animation of a textured tunnel in GL. Written by Eric Lassauge and "
+"Roman Podobedov; 2003."
 msgstr ""
 msgstr ""
-"Dessine une animation d'un tunnel texturé en 3D. Nécessite OpenGL et une "
-"machine avec un support matériel puissant pour les textures. Écrit par Eric "
-"Lassauge &lt;lassauge@users.sourceforge.net&gt; et Roman Podobedov."
-
-#: hacks/config/atunnel.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
-msgid "Normal"
-msgstr "Normal"
+"Dessine une animation d'un tunnel texturé en 3D. "
+"Écrit par Eric Lassauge <lassauge@users.sourceforge.net> et Roman Podobedov; 2003."
 
 
-#: hacks/config/atunnel.xml.h:8 hacks/config/cube21.xml.h:24
-#: hacks/config/glforestfire.xml.h:18 hacks/config/lament.xml.h:8
-#: hacks/config/sballs.xml.h:17
-msgid "Untextured"
-msgstr "Sans texture"
+#: hacks/config/atunnel.xml.h:4 hacks/config/boing.xml.h:4
+#: hacks/config/crackberg.xml.h:10
+msgid "Lighting"
+msgstr "Éclair"
 
 
-#: hacks/config/atunnel.xml.h:9
-msgid "Use light"
-msgstr "Utiliser l'éclairage"
+#: hacks/config/atunnel.xml.h:8 hacks/config/blocktube.xml.h:11
+#: hacks/config/cube21.xml.h:22 hacks/config/cubenetic.xml.h:25
+#: hacks/config/glmatrix.xml.h:17 hacks/config/lament.xml.h:7
+#: hacks/config/sballs.xml.h:16
+msgid "Textured"
+msgstr "Texturé"
 
 #: hacks/config/barcode.xml.h:1
 msgid "Barcode"
 
 #: hacks/config/barcode.xml.h:1
 msgid "Barcode"
-msgstr "Codes barre"
+msgstr "Code-barres"
 
 #: hacks/config/barcode.xml.h:2
 msgid "Barcode Clock (24 Hour)"
 
 #: hacks/config/barcode.xml.h:2
 msgid "Barcode Clock (24 Hour)"
-msgstr "Horloge codes barre (24 heures)"
+msgstr "Horloge code-barres (24 heures)"
 
 #: hacks/config/barcode.xml.h:3
 msgid "Barcode Clock (AM/PM)"
 
 #: hacks/config/barcode.xml.h:3
 msgid "Barcode Clock (AM/PM)"
-msgstr "Horloge codes barre (AM/PM)"
+msgstr "Horloge code-barres (AM/PM)"
 
 
-#: hacks/config/barcode.xml.h:5
-msgid "Scrolling Barcodes"
-msgstr "Codes barre défilants"
+#: hacks/config/barcode.xml.h:4
+msgid "Barcode Grid"
+msgstr "Grille des code-barres"
 
 
-#: hacks/config/barcode.xml.h:8
+#: hacks/config/barcode.xml.h:5
 msgid ""
 msgid ""
-"This draws a random sequence of colorful barcodes scrolling across your "
-"screen. CONSUME! By Dan Bornstein."
+"Draws a random sequence of colorful barcodes scrolling across your screen. "
+"CONSUME! Written by Dan Bornstein; 2003."
 msgstr ""
 msgstr ""
+"Dessine une séquence aléatoire de codes-barres colorés qui défilent sur "
+"votre écran. CONSOMMEZ ! Écrit par Dan Bornstein; 2003."
+
+#: hacks/config/barcode.xml.h:7
+msgid "Scrolling Barcodes"
+msgstr "Codes-barres défilants"
 
 #: hacks/config/blaster.xml.h:1
 msgid "Blaster"
 
 #: hacks/config/blaster.xml.h:1
 msgid "Blaster"
@@ -2141,11 +2129,11 @@ msgstr "Explosion"
 msgid ""
 "Draws a simulation of flying space-combat robots (cleverly disguised as "
 "colored circles) doing battle in front of a moving star field. Written by "
 msgid ""
 "Draws a simulation of flying space-combat robots (cleverly disguised as "
 "colored circles) doing battle in front of a moving star field. Written by "
-"Jonathan Lin."
+"Jonathan Lin; 1999."
 msgstr ""
 "Dessine une simulation de robots de combat volants (ingénieusement déguisés "
 "en cercles colorés) en guerre sur un fond de champ stellaire animé. Écrit "
 msgstr ""
 "Dessine une simulation de robots de combat volants (ingénieusement déguisés "
 "en cercles colorés) en guerre sur un fond de champ stellaire animé. Écrit "
-"par Jonathan Lin."
+"par Jonathan Lin; 1999."
 
 #: hacks/config/blaster.xml.h:5 hacks/config/penetrate.xml.h:4
 msgid "Lasers"
 
 #: hacks/config/blaster.xml.h:5 hacks/config/penetrate.xml.h:4
 msgid "Lasers"
@@ -2155,7 +2143,7 @@ msgstr "Lasers"
 msgid "Robots"
 msgstr "Robots"
 
 msgid "Robots"
 msgstr "Robots"
 
-#: hacks/config/blaster.xml.h:10 hacks/config/glplanet.xml.h:11
+#: hacks/config/blaster.xml.h:10 hacks/config/glplanet.xml.h:10
 msgid "Stars"
 msgstr "Étoiles"
 
 msgid "Stars"
 msgstr "Étoiles"
 
@@ -2165,13 +2153,13 @@ msgstr "BlinkBox"
 
 #: hacks/config/blinkbox.xml.h:2
 msgid "Box Size"
 
 #: hacks/config/blinkbox.xml.h:2
 msgid "Box Size"
-msgstr "Taille boite"
+msgstr "Taille boîte"
 
 #: hacks/config/blinkbox.xml.h:3
 msgid "Dissolve"
 msgstr "Dissolution"
 
 
 #: hacks/config/blinkbox.xml.h:3
 msgid "Dissolve"
 msgstr "Dissolution"
 
-#: hacks/config/blinkbox.xml.h:4 hacks/config/phosphor.xml.h:3
+#: hacks/config/blinkbox.xml.h:4 hacks/config/phosphor.xml.h:2
 msgid "Fade"
 msgstr "Flétrissement"
 
 msgid "Fade"
 msgstr "Flétrissement"
 
@@ -2182,7 +2170,7 @@ msgstr "Flou de déplacement"
 #: hacks/config/blinkbox.xml.h:7
 msgid ""
 "Shows a ball contained inside of a bounding box. Colored blocks blink in "
 #: hacks/config/blinkbox.xml.h:7
 msgid ""
 "Shows a ball contained inside of a bounding box. Colored blocks blink in "
-"when the ball hits the edges. Written by Jeremy English."
+"when the ball hits the edges. Written by Jeremy English; 2003."
 msgstr ""
 
 #: hacks/config/blitspin.xml.h:1
 msgstr ""
 
 #: hacks/config/blitspin.xml.h:1
@@ -2202,31 +2190,14 @@ msgid "Fuzzy Rotation Speed"
 msgstr "Vitesse de rotation du brouillage"
 
 #: hacks/config/blitspin.xml.h:6
 msgstr "Vitesse de rotation du brouillage"
 
 #: hacks/config/blitspin.xml.h:6
-msgid "Grab Screen"
-msgstr "Capturer l'écran"
-
-#: hacks/config/blitspin.xml.h:8
-msgid ""
-"The ``blitspin'' hack repeatedly rotates a bitmap by 90 degrees by using "
-"logical operations: the bitmap is divided into quadrants, and the quadrants "
-"are shifted clockwise. Then the same thing is done again with progressively "
-"smaller quadrants, except that all sub-quadrants of a given size are rotated "
-"in parallel. Written by Jamie Zawinski based on some cool SmallTalk code "
-"seen in in Byte Magazine in 1981. As you watch it, the image appears to "
-"dissolve into static and then reconstitute itself, but rotated. You can "
-"provide the image to use, as an XBM or XPM file, or tell it to grab a screen "
-"image and rotate that."
-msgstr ""
-"Le mode Rotation Bitmap fait pivoter à plusieurs reprises un bitmap de 90° à "
-"l'aide d'opérations logiques: le bitmap est divisé en quadrants, qui "
-"pivotent dans le sens horaire. La même opération est répétée avec des "
-"quadrants progressivement plus petits, à ceci près que tous les sous-"
-"quadrants d'une certaine taille pivotent parallèlement. Écrit par Jamie "
-"Zawinski sur la base d'un super code SmallTalk trouvé dans Byte Magazine en "
-"1981. Lorsque vous la regardez, l'image semble se dissoudre en parasites "
-"puis se reconstituer avec une rotation. Vous pouvez fournir l'image à "
-"utiliser, au format XBM ou XPM, ou effectuer une capture d'écran et la faire "
-"pivoter."
+msgid ""
+"Repeatedly rotates a bitmap by 90 degrees by using logical operations: the "
+"bitmap is divided into quadrants, and the quadrants are shifted clockwise. "
+"Then the same thing is done again with progressively smaller quadrants, "
+"except that all sub-quadrants of a given size are rotated in parallel. As "
+"you watch it, the image appears to dissolve into static and then "
+"reconstitute itself, but rotated. Written by Jamie Zawinski; 1992."
+msgstr ""
 
 #: hacks/config/blocktube.xml.h:1
 msgid "BlockTube"
 
 #: hacks/config/blocktube.xml.h:1
 msgid "BlockTube"
@@ -2240,18 +2211,10 @@ msgstr "Durée de changement de couleur"
 msgid "Color Hold Time"
 msgstr "Durée de rétention de couleur"
 
 msgid "Color Hold Time"
 msgstr "Durée de rétention de couleur"
 
-#: hacks/config/blocktube.xml.h:6
-msgid "Reflective Blocks"
-msgstr "Blocs Réflechissants"
-
-#: hacks/config/blocktube.xml.h:10
-msgid "Solid Blocks"
-msgstr "Blocs pleins"
-
-#: hacks/config/blocktube.xml.h:12
+#: hacks/config/blocktube.xml.h:4
 msgid ""
 msgid ""
-"This hack draws a swirling, falling tunnel of reflective slabs. They fade "
-"from hue to hue. Written by Lars R. Damerow."
+"Draws a swirling, falling tunnel of reflective slabs. They fade from hue to "
+"hue. Written by Lars R. Damerow; 2003."
 msgstr ""
 
 #: hacks/config/boing.xml.h:1
 msgstr ""
 
 #: hacks/config/boing.xml.h:1
@@ -2263,10 +2226,6 @@ msgstr "Boïng"
 msgid "Huge"
 msgstr "Énorme"
 
 msgid "Huge"
 msgstr "Énorme"
 
-#: hacks/config/boing.xml.h:4 hacks/config/crackberg.xml.h:12
-msgid "Lighting"
-msgstr "Éclair"
-
 #: hacks/config/boing.xml.h:5
 msgid "Meridians"
 msgstr "Méridiens"
 #: hacks/config/boing.xml.h:5
 msgid "Meridians"
 msgstr "Méridiens"
@@ -2279,11 +2238,9 @@ msgstr "Parallèles"
 msgid "Scanlines"
 msgstr "Lignes"
 
 msgid "Scanlines"
 msgstr "Lignes"
 
-#: hacks/config/boing.xml.h:9 hacks/config/galaxy.xml.h:10
-#: hacks/config/lisa.xml.h:7 hacks/config/lissie.xml.h:8
-#: hacks/config/loop.xml.h:6 hacks/config/penrose.xml.h:7
-#: hacks/config/pong.xml.h:3 hacks/config/rotor.xml.h:10
-#: hacks/config/rubik.xml.h:8 hacks/config/sproingies.xml.h:5
+#: hacks/config/boing.xml.h:9 hacks/config/lisa.xml.h:8
+#: hacks/config/lissie.xml.h:7 hacks/config/loop.xml.h:7
+#: hacks/config/rotor.xml.h:10 hacks/config/rubik.xml.h:8
 #: hacks/config/wander.xml.h:13 hacks/config/worm.xml.h:6
 msgid "Size"
 msgstr "Taille"
 #: hacks/config/wander.xml.h:13 hacks/config/worm.xml.h:6
 msgid "Size"
 msgstr "Taille"
@@ -2298,20 +2255,20 @@ msgid ""
 "which was written by Dale Luck and RJ Mical during a break at the 1984 "
 "Consumer Electronics Show (or so the legend goes.) This looks like the "
 "original Amiga demo if you turn off \"smoothing\" and \"lighting\" and turn "
 "which was written by Dale Luck and RJ Mical during a break at the 1984 "
 "Consumer Electronics Show (or so the legend goes.) This looks like the "
 "original Amiga demo if you turn off \"smoothing\" and \"lighting\" and turn "
-"on \"scanlines\". Written by Jamie Zawinski."
+"on \"scanlines\". Written by Jamie Zawinski; 2005."
 msgstr ""
 
 #: hacks/config/boing.xml.h:14 hacks/config/boxed.xml.h:16
 #: hacks/config/fireflies.xml.h:43 hacks/config/pinion.xml.h:14
 msgid "Tiny"
 msgstr ""
 
 #: hacks/config/boing.xml.h:14 hacks/config/boxed.xml.h:16
 #: hacks/config/fireflies.xml.h:43 hacks/config/pinion.xml.h:14
 msgid "Tiny"
-msgstr "Fin"
+msgstr "Fin(e)"
 
 #: hacks/config/bouboule.xml.h:1
 msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 
 #: hacks/config/bouboule.xml.h:1
 msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Séparation rouge/bleu 3D"
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Séparation rouge/bleu 3D"
 
 #: hacks/config/bouboule.xml.h:7
@@ -2321,58 +2278,53 @@ msgstr "Nombre de taches"
 #: hacks/config/bouboule.xml.h:10
 msgid ""
 "This draws what looks like a spinning, deforming balloon with varying-sized "
 #: hacks/config/bouboule.xml.h:10
 msgid ""
 "This draws what looks like a spinning, deforming balloon with varying-sized "
-"spots painted on its invisible surface. Written by Jeremie Petit."
+"spots painted on its invisible surface. Written by Jeremie Petit; 1997."
 msgstr ""
 "Dessine une sorte de ballon qui tournoie et se déforme. Des taches de taille "
 msgstr ""
 "Dessine une sorte de ballon qui tournoie et se déforme. Des taches de taille "
-"variable sont peintes sur sa surface invisible. Écrit par Jeremie Petit."
+"variable sont peintes sur sa surface invisible. Écrit par Jeremie Petit; 1997."
 
 #: hacks/config/bouncingcow.xml.h:1
 
 #: hacks/config/bouncingcow.xml.h:1
-msgid "A Cow. A Trampoline. Together, they fight crime. By Jamie Zawinski."
+msgid ""
+"A Cow. A Trampoline. Together, they fight crime. Written by Jamie Zawinski; "
+"2003."
 msgstr ""
 "Une vache. Un trampoline. Ensemble ils combattent le crime. Écrit par Jamie "
 msgstr ""
 "Une vache. Un trampoline. Ensemble ils combattent le crime. Écrit par Jamie "
-"Zawinski."
+"Zawinski; 2003."
 
 #: hacks/config/bouncingcow.xml.h:2 hacks/config/boxed.xml.h:1
 #: hacks/config/carousel.xml.h:3 hacks/config/ccurve.xml.h:3
 #: hacks/config/cubestorm.xml.h:1 hacks/config/flyingtoasters.xml.h:3
 #: hacks/config/fontglide.xml.h:1 hacks/config/gears.xml.h:1
 #: hacks/config/gflux.xml.h:1 hacks/config/glknots.xml.h:1
 
 #: hacks/config/bouncingcow.xml.h:2 hacks/config/boxed.xml.h:1
 #: hacks/config/carousel.xml.h:3 hacks/config/ccurve.xml.h:3
 #: hacks/config/cubestorm.xml.h:1 hacks/config/flyingtoasters.xml.h:3
 #: hacks/config/fontglide.xml.h:1 hacks/config/gears.xml.h:1
 #: hacks/config/gflux.xml.h:1 hacks/config/glknots.xml.h:1
-#: hacks/config/glmatrix.xml.h:1 hacks/config/jigglypuff.xml.h:1
-#: hacks/config/pinion.xml.h:3 hacks/config/polyhedra.xml.h:3
-#: hacks/config/pyro.xml.h:1 hacks/config/rd-bomb.xml.h:6
+#: hacks/config/glmatrix.xml.h:1 hacks/config/halftone.xml.h:1
+#: hacks/config/jigglypuff.xml.h:1 hacks/config/pinion.xml.h:3
+#: hacks/config/polyhedra.xml.h:3 hacks/config/pyro.xml.h:1
+#: hacks/config/rd-bomb.xml.h:6 hacks/config/rdbomb.xml.h:6
 #: hacks/config/rocks.xml.h:1 hacks/config/starwars.xml.h:1
 #: hacks/config/rocks.xml.h:1 hacks/config/starwars.xml.h:1
-#: hacks/config/wormhole.xml.h:1 hacks/config/xfishtank.xml.h:1
+#: hacks/config/superquadrics.xml.h:1 hacks/config/wormhole.xml.h:1
 msgid "Animation Speed"
 msgstr "Vitesse d'animation"
 
 #: hacks/config/bouncingcow.xml.h:3
 msgid "Animation Speed"
 msgstr "Vitesse d'animation"
 
 #: hacks/config/bouncingcow.xml.h:3
-msgid "Beefy Cow"
-msgstr "Vache costaude"
-
-#: hacks/config/bouncingcow.xml.h:4
 msgid "Bounce Speed"
 msgstr "Vitesse de rebond"
 
 msgid "Bounce Speed"
 msgstr "Vitesse de rebond"
 
-#: hacks/config/bouncingcow.xml.h:5
+#: hacks/config/bouncingcow.xml.h:4
 msgid "BouncingCow"
 msgstr "Vache bondissante"
 
 msgid "BouncingCow"
 msgstr "Vache bondissante"
 
-#: hacks/config/bouncingcow.xml.h:7
+#: hacks/config/bouncingcow.xml.h:6
 msgid "Herd"
 msgstr "Troupeau"
 
 msgid "Herd"
 msgstr "Troupeau"
 
-#: hacks/config/bouncingcow.xml.h:8
+#: hacks/config/bouncingcow.xml.h:7
 msgid "Moo"
 msgstr "Meuh"
 
 msgid "Moo"
 msgstr "Meuh"
 
-#: hacks/config/bouncingcow.xml.h:9
+#: hacks/config/bouncingcow.xml.h:8
 msgid "Number of Cows"
 msgstr "Nombre de vaches"
 
 msgid "Number of Cows"
 msgstr "Nombre de vaches"
 
-#: hacks/config/bouncingcow.xml.h:11
-msgid "Wireframe Cow"
-msgstr "Vache file de fer"
-
 #: hacks/config/boxed.xml.h:2 hacks/config/fluidballs.xml.h:2
 msgid "Ball Size"
 msgstr "Taille des balles"
 #: hacks/config/boxed.xml.h:2 hacks/config/fluidballs.xml.h:2
 msgid "Ball Size"
 msgstr "Taille des balles"
@@ -2384,17 +2336,19 @@ msgstr "En boîte"
 #: hacks/config/boxed.xml.h:4
 msgid ""
 "Draws a box full of 3D bouncing balls that explode. Written by Sander van "
 #: hacks/config/boxed.xml.h:4
 msgid ""
 "Draws a box full of 3D bouncing balls that explode. Written by Sander van "
-"Grieken."
+"Grieken; 2002."
 msgstr ""
 "Dessine une boîte remplie de balles 3D qui explosent. Écrit par Sander van "
 msgstr ""
 "Dessine une boîte remplie de balles 3D qui explosent. Écrit par Sander van "
-"Grieken."
+"Grieken; 2002."
 
 #: hacks/config/boxed.xml.h:5
 msgid "Explosion Force"
 msgstr "Force des explosions"
 
 
 #: hacks/config/boxed.xml.h:5
 msgid "Explosion Force"
 msgstr "Force des explosions"
 
-#: hacks/config/boxed.xml.h:9 hacks/config/pipes.xml.h:9
-#: hacks/config/substrate.xml.h:12 hacks/config/wormhole.xml.h:4
+#: hacks/config/boxed.xml.h:9 hacks/config/glschool.xml.h:11
+#: hacks/config/julia.xml.h:8 hacks/config/mountain.xml.h:3
+#: hacks/config/pipes.xml.h:11 hacks/config/sproingies.xml.h:2
+#: hacks/config/substrate.xml.h:12 hacks/config/wormhole.xml.h:5
 msgid "Lots"
 msgstr "Beaucoup"
 
 msgid "Lots"
 msgstr "Beaucoup"
 
@@ -2442,7 +2396,7 @@ msgstr "Cercles seulement"
 
 #: hacks/config/boxfit.xml.h:7
 msgid "Color Gradient"
 
 #: hacks/config/boxfit.xml.h:7
 msgid "Color Gradient"
-msgstr "Dégradés de couleur"
+msgstr "Dégradé de couleur"
 
 #: hacks/config/boxfit.xml.h:9
 msgid "Grab Images"
 
 #: hacks/config/boxfit.xml.h:9
 msgid "Grab Images"
@@ -2458,10 +2412,14 @@ msgid ""
 "horizontal or vertical gradient, or according to the colors of the desktop "
 "or a loaded image file. The objects grow until they touch, then stop. When "
 "the screen is full, they shrink away and the process restarts. Written by "
 "horizontal or vertical gradient, or according to the colors of the desktop "
 "or a loaded image file. The objects grow until they touch, then stop. When "
 "the screen is full, they shrink away and the process restarts. Written by "
-"Jamie Zawinski."
+"Jamie Zawinski; 2005."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/boxfit.xml.h:13 hacks/config/xearth.xml.h:23
+#: hacks/config/boxfit.xml.h:12
+msgid "Peek at underlying images"
+msgstr "Coup d'oeil aux images en arrière-plan"
+
+#: hacks/config/boxfit.xml.h:14
 msgid "Spacing"
 msgstr "Espacement"
 
 msgid "Spacing"
 msgstr "Espacement"
 
@@ -2472,19 +2430,18 @@ msgstr "Entrelacement"
 #: hacks/config/braid.xml.h:2
 msgid ""
 "Draws random color-cycling inter-braided concentric circles. Written by John "
 #: hacks/config/braid.xml.h:2
 msgid ""
 "Draws random color-cycling inter-braided concentric circles. Written by John "
-"Neil."
+"Neil; 1997."
 msgstr ""
 "Dessine des cercles concentriques aléatoires entrelacés, avec des cycles de "
 msgstr ""
 "Dessine des cercles concentriques aléatoires entrelacés, avec des cycles de "
-"couleurs. Écrit par John Neil."
+"couleurs. Écrit par John Neil; 1997."
 
 #: hacks/config/braid.xml.h:3 hacks/config/bsod.xml.h:9
 
 #: hacks/config/braid.xml.h:3 hacks/config/bsod.xml.h:9
-#: 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/eruption.xml.h:3
-#: hacks/config/euler2d.xml.h:1 hacks/config/flame.xml.h:5
-#: hacks/config/galaxy.xml.h:2 hacks/config/glsnake.xml.h:5
-#: hacks/config/helix.xml.h:3 hacks/config/hopalong.xml.h:2
-#: hacks/config/imsmap.xml.h:6 hacks/config/klein.xml.h:1
+#: hacks/config/cynosure.xml.h:2 hacks/config/deco.xml.h:4
+#: hacks/config/drift.xml.h:3 hacks/config/epicycle.xml.h:3
+#: hacks/config/eruption.xml.h:2 hacks/config/euler2d.xml.h:1
+#: hacks/config/flame.xml.h:4 hacks/config/galaxy.xml.h:2
+#: hacks/config/glsnake.xml.h:5 hacks/config/helix.xml.h:3
+#: hacks/config/hopalong.xml.h:2 hacks/config/klein.xml.h:1
 #: hacks/config/laser.xml.h:2 hacks/config/menger.xml.h:2
 #: hacks/config/metaballs.xml.h:3 hacks/config/mismunch.xml.h:1
 #: hacks/config/moire.xml.h:3 hacks/config/molecule.xml.h:10
 #: hacks/config/laser.xml.h:2 hacks/config/menger.xml.h:2
 #: hacks/config/metaballs.xml.h:3 hacks/config/mismunch.xml.h:1
 #: hacks/config/moire.xml.h:3 hacks/config/molecule.xml.h:10
@@ -2494,8 +2451,8 @@ msgstr ""
 #: 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/substrate.xml.h:6
 #: 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/substrate.xml.h:6
-#: hacks/config/vidwhacker.xml.h:3 hacks/config/wander.xml.h:7
-#: hacks/config/xspirograph.xml.h:3
+#: hacks/config/superquadrics.xml.h:3 hacks/config/vidwhacker.xml.h:3
+#: hacks/config/wander.xml.h:7 hacks/config/xspirograph.xml.h:3
 msgid "Duration"
 msgstr "Durée"
 
 msgid "Duration"
 msgstr "Durée"
 
@@ -2539,13 +2496,13 @@ msgstr "BSOD"
 
 #: hacks/config/bsod.xml.h:8
 msgid ""
 
 #: hacks/config/bsod.xml.h:8
 msgid ""
-"BSOD stands for ``Blue Screen of Death.'' The finest in personal computer "
-"emulation, this hack simulates popular screen savers from a number of less "
-"robust operating systems. Written by Jamie Zawinski."
+"BSOD stands for \"Blue Screen of Death\". The finest in personal computer "
+"emulation, this program simulates popular screen savers from a number of "
+"less robust operating systems. Written by Jamie Zawinski; 1998."
 msgstr ""
 "BSOD signifie «Blue Screen of Death» (écran bleu de la mort). Fine fleur de "
 "l'émulation PC, ce hack simule des économiseurs d'écran de plusieurs "
 msgstr ""
 "BSOD signifie «Blue Screen of Death» (écran bleu de la mort). Fine fleur de "
 "l'émulation PC, ce hack simule des économiseurs d'écran de plusieurs "
-"systèmes d'exploitation moins puissants. Écrit par Jamie Zawinski."
+"systèmes d'exploitation moins puissants. Écrit par Jamie Zawinski; 1998."
 
 #: hacks/config/bsod.xml.h:10
 msgid "HPUX"
 
 #: hacks/config/bsod.xml.h:10
 msgid "HPUX"
@@ -2642,16 +2599,17 @@ msgstr "Bulles 3D"
 #: hacks/config/bubble3d.xml.h:3
 msgid ""
 "Draws a stream of rising, undulating 3D bubbles, rising toward the top of "
 #: hacks/config/bubble3d.xml.h:3
 msgid ""
 "Draws a stream of rising, undulating 3D bubbles, rising toward the top of "
-"the screen, with nice specular reflections. Written by Richard Jones."
+"the screen, with transparency and specular reflections. Written by Richard "
+"Jones; 1998."
 msgstr ""
 "Dessine un flux de bulles 3D ondulantes, qui montent vers le haut de "
 msgstr ""
 "Dessine un flux de bulles 3D ondulantes, qui montent vers le haut de "
-"l'écran, avec de belles réflexions spéculaires. Écrit par Richard Jones."
+"l'écran, avec de belles réflexions spéculaires. Écrit par Richard Jones; 1998."
 
 #: hacks/config/bubble3d.xml.h:8
 msgid "Transparent Bubbles"
 msgstr "Bulles transparentes"
 
 
 #: hacks/config/bubble3d.xml.h:8
 msgid "Transparent Bubbles"
 msgstr "Bulles transparentes"
 
-#: hacks/config/bubbles.xml.h:1 hacks/config/xfishtank.xml.h:2
+#: hacks/config/bubbles.xml.h:1
 msgid "Bubbles"
 msgstr "Bulles"
 
 msgid "Bubbles"
 msgstr "Bulles"
 
@@ -2676,8 +2634,8 @@ msgid "Don't hide bubbles when they pop"
 msgstr "Ne pas masquer les bulles lorsqu'elles éclatent"
 
 #: hacks/config/bubbles.xml.h:7
 msgstr "Ne pas masquer les bulles lorsqu'elles éclatent"
 
 #: hacks/config/bubbles.xml.h:7
-msgid "Draw circles instead of pixmap bubbles"
-msgstr "Tracer des cercles au lieu de bulles pixmap"
+msgid "Draw circles instead of bubble images"
+msgstr "Tracer des cercles au lieu des images de bulles"
 
 #: hacks/config/bubbles.xml.h:9
 msgid "Leave Trails"
 
 #: hacks/config/bubbles.xml.h:9
 msgid "Leave Trails"
@@ -2687,23 +2645,18 @@ msgstr "Laisser des traînées"
 msgid ""
 "This simulates the kind of bubble formation that happens when water boils:"
 "small bubbles appear, and as they get closer to each other, they combine to "
 msgid ""
 "This simulates the kind of bubble formation that happens when water boils:"
 "small bubbles appear, and as they get closer to each other, they combine to "
-"form larger bubbles, which eventually pop. Written by James Macnicol."
+"form larger bubbles, which eventually pop. Written by James Macnicol; 1996."
 msgstr ""
 "Simule le type de formation de bulles qui se produit lorsque de l'eau entre "
 "en ébullition: de petites bulles apparaissent et, lorsqu'elles se "
 "rapprochent, elles se combinent pour former de plus grandes bulles, qui "
 msgstr ""
 "Simule le type de formation de bulles qui se produit lorsque de l'eau entre "
 "en ébullition: de petites bulles apparaissent et, lorsqu'elles se "
 "rapprochent, elles se combinent pour former de plus grandes bulles, qui "
-"finissent par éclater. Écrit par James Macnicol."
+"finissent par éclater. Écrit par James Macnicol; 1996."
 
 #: hacks/config/bumps.xml.h:1
 msgid ""
 
 #: hacks/config/bumps.xml.h:1
 msgid ""
-"A bit like `Spotlight', except that instead of merely exposing part of your "
-"desktop, it creates a bump map from it. Basically, it 3D-izes a roaming "
-"section of your desktop, based on color intensity. Written by Shane Smit."
+"A spotlight roams across an embossed version of your desktop or other "
+"picture. Written by Shane Smit; 1999."
 msgstr ""
 msgstr ""
-"Un peu comme «Faisceau lumineux», à ceci près qu'au lieu d'exposer "
-"simplement une partie du bureau, il en crée un placage de relief. En fait, "
-"il met en 3 dimensions une section variable du bureau, en fonction de "
-"l'intensité des couleurs. Écrit par Shane Smit."
 
 #: hacks/config/bumps.xml.h:2
 msgid "Bumps"
 
 #: hacks/config/bumps.xml.h:2
 msgid "Bumps"
@@ -2713,17 +2666,13 @@ msgstr "Reliefs"
 msgid "Cage"
 msgstr "Cage"
 
 msgid "Cage"
 msgstr "Cage"
 
-#: hacks/config/cage.xml.h:7 hacks/config/cube21.xml.h:22
-msgid "Textured"
-msgstr "Texturée"
-
-#: hacks/config/cage.xml.h:8
+#: hacks/config/cage.xml.h:6
 msgid ""
 msgid ""
-"This draws Escher's ``Impossible Cage,'' a 3d analog of a moebius strip, and "
-"rotates it in three dimensions. Written by Marcelo Vianna."
+"This draws Escher's \"Impossible Cage\", a 3d analog of a moebius strip, and "
+"rotates it in three dimensions. Written by Marcelo Vianna; 1998."
 msgstr ""
 msgstr ""
-"Dessine la «Cage impossible» d'Escher, une analogie en 3D d'un ruban de "
-"Moebius, et la fait pivoter en 3 dimensions. Écrit par Marcelo Vianna."
+"Dessine la «cage impossible» d'Escher, une analogie en 3D d'un ruban de "
+"Moebius, et la fait pivoter en 3 dimensions. Écrit par Marcelo Vianna; 1998."
 
 #: hacks/config/carousel.xml.h:1 hacks/config/coral.xml.h:1
 #: hacks/config/deco.xml.h:1 hacks/config/helix.xml.h:1
 
 #: hacks/config/carousel.xml.h:1 hacks/config/coral.xml.h:1
 #: hacks/config/deco.xml.h:1 hacks/config/helix.xml.h:1
@@ -2750,14 +2699,9 @@ msgstr "Vitesse de trame"
 #: hacks/config/carousel.xml.h:8
 msgid ""
 "Loads several random images, and displays them flying in a circular "
 #: hacks/config/carousel.xml.h:8
 msgid ""
 "Loads several random images, and displays them flying in a circular "
-"formation. The circle changes speed and direction randomly, tilts on its "
-"axis, and the images move in and out. To tell it where to find the images to "
-"display, go to the \"Advanced\" tab on the Screensaver Preferences window. "
-"Select \"Choose Random Images\", and enter your image directory in the text "
-"field right below that. (Note: not the the \"Advanced\" button at the bottom "
-"of this window: the tab at the top of the *other* window.) This program "
-"requires a good video card capable of supporting large textures. Written by "
-"Jamie Zawinski."
+"formation. The formation changes speed and direction randomly, and images "
+"periodically drop out to be replaced by new ones. Written by Jamie Zawinski; "
+"2005."
 msgstr ""
 
 #: hacks/config/carousel.xml.h:10
 msgstr ""
 
 #: hacks/config/carousel.xml.h:10
@@ -2770,7 +2714,7 @@ msgstr "Nombre d'images :"
 
 #: hacks/config/carousel.xml.h:13 hacks/config/glslideshow.xml.h:20
 msgid "Show Image Titles"
 
 #: hacks/config/carousel.xml.h:13 hacks/config/glslideshow.xml.h:20
 msgid "Show Image Titles"
-msgstr "Montre le titre de l'image"
+msgstr "Montrer le titre de l'image"
 
 #: hacks/config/carousel.xml.h:15
 msgid "Tilt In/Out Only"
 
 #: hacks/config/carousel.xml.h:15
 msgid "Tilt In/Out Only"
@@ -2785,7 +2729,7 @@ msgid "Tilt Left/Right Only"
 msgstr "Tilt gauche/droite seulement"
 
 #: hacks/config/carousel.xml.h:18 hacks/config/glslideshow.xml.h:21
 msgstr "Tilt gauche/droite seulement"
 
 #: hacks/config/carousel.xml.h:18 hacks/config/glslideshow.xml.h:21
-#: hacks/config/mirrorblob.xml.h:21
+#: hacks/config/mirrorblob.xml.h:20
 msgid "Time until loading a new image:"
 msgstr "Durée avant chargement d'une nouvelle image :"
 
 msgid "Time until loading a new image:"
 msgstr "Durée avant chargement d'une nouvelle image :"
 
@@ -2806,24 +2750,24 @@ msgid "C Curve"
 msgstr "Courbe C"
 
 #: hacks/config/ccurve.xml.h:5
 msgstr "Courbe C"
 
 #: hacks/config/ccurve.xml.h:5
-#, fuzzy
 msgid "Change Image Every"
 msgid "Change Image Every"
-msgstr "Image ombragée"
+msgstr "Changer l'image toutes les"
 
 #: hacks/config/ccurve.xml.h:6 hacks/config/coral.xml.h:5
 #: hacks/config/imsmap.xml.h:5 hacks/config/kumppa.xml.h:1
 
 #: hacks/config/ccurve.xml.h:6 hacks/config/coral.xml.h:5
 #: hacks/config/imsmap.xml.h:5 hacks/config/kumppa.xml.h:1
-#: hacks/config/qix.xml.h:6 hacks/config/squiral.xml.h:2
-#: hacks/config/wander.xml.h:4 hacks/config/xmatrix.xml.h:2
+#: hacks/config/qix.xml.h:7 hacks/config/squiral.xml.h:2
+#: hacks/config/superquadrics.xml.h:2 hacks/config/wander.xml.h:4
+#: hacks/config/xmatrix.xml.h:2
 msgid "Density"
 msgstr "Densité"
 
 #: hacks/config/ccurve.xml.h:8
 msgid ""
 msgid "Density"
 msgstr "Densité"
 
 #: hacks/config/ccurve.xml.h:8
 msgid ""
-"Generates self-similar linear fractals, including the classic ``C Curve.'' "
-"Written by Rick Campbell."
+"Generates self-similar linear fractals, including the classic \"C Curve\". "
+"Written by Rick Campbell; 1999."
 msgstr ""
 "Génère des fractales linéaires auto-similaires, notamment la fameuse «courbe "
 msgstr ""
 "Génère des fractales linéaires auto-similaires, notamment la fameuse «courbe "
-"C». Écrit par Rick Campbell."
+"C». Écrit par Rick Campbell; 1999."
 
 #: hacks/config/celtic.xml.h:1
 msgid "Celtic"
 
 #: hacks/config/celtic.xml.h:1
 msgid "Celtic"
@@ -2833,26 +2777,27 @@ msgstr "Celtique"
 msgid "Draw Graph"
 msgstr "Dessiner des graphes"
 
 msgid "Draw Graph"
 msgstr "Dessiner des graphes"
 
-#: hacks/config/celtic.xml.h:5
+#: hacks/config/celtic.xml.h:5 hacks/config/slidescreen.xml.h:6
 msgid "Pause"
 msgstr "Pause"
 
 #: hacks/config/celtic.xml.h:6
 msgid ""
 msgid "Pause"
 msgstr "Pause"
 
 #: hacks/config/celtic.xml.h:6
 msgid ""
-"Repeatedly draws random Celtic cross-stitch patterns. By Max Froumentin."
+"Repeatedly draws random Celtic cross-stitch patterns. Written by Max "
+"Froumentin; 2005."
 msgstr ""
 msgstr ""
-"Dessine répétitivement des motifs de croix celtique. Par Max Froumentin."
+"Dessine répétitivement des motifs de croix celtique. Par Max Froumentin; 2005."
 
 #: hacks/config/circuit.xml.h:1
 
 #: hacks/config/circuit.xml.h:1
-msgid "Animates a number of 3D electronic components. Written by Ben Buxton."
-msgstr "Anime plusieurs composants électroniques 3D. Écrit par Ben Buxton."
+msgid ""
+"Animates a number of 3D electronic components. Written by Ben Buxton; 2001."
+msgstr "Anime plusieurs composants électroniques 3D. Écrit par Ben Buxton; 2001."
 
 #: hacks/config/circuit.xml.h:2
 msgid "Circuit"
 msgstr "Circuit"
 
 #: hacks/config/circuit.xml.h:3 hacks/config/gflux.xml.h:4
 
 #: hacks/config/circuit.xml.h:2
 msgid "Circuit"
 msgstr "Circuit"
 
 #: hacks/config/circuit.xml.h:3 hacks/config/gflux.xml.h:4
-#: hacks/config/pulsar.xml.h:2
 msgid "Directional Lighting"
 msgstr "Éclairage directionnel"
 
 msgid "Directional Lighting"
 msgstr "Éclairage directionnel"
 
@@ -2865,12 +2810,14 @@ msgid "Parts"
 msgstr "Composants"
 
 #: hacks/config/circuit.xml.h:7 hacks/config/flipscreen3d.xml.h:4
 msgstr "Composants"
 
 #: hacks/config/circuit.xml.h:7 hacks/config/flipscreen3d.xml.h:4
-#: hacks/config/gleidescope.xml.h:9 hacks/config/glplanet.xml.h:6
-#: hacks/config/ifs.xml.h:10
+#: hacks/config/gleidescope.xml.h:8 hacks/config/glplanet.xml.h:6
+#: hacks/config/ifs.xml.h:10 hacks/config/tangram.xml.h:2
+#: hacks/config/topblock.xml.h:14
 msgid "Rotate"
 msgstr "Rotation globale"
 
 #: hacks/config/circuit.xml.h:8 hacks/config/pinion.xml.h:10
 msgid "Rotate"
 msgstr "Rotation globale"
 
 #: hacks/config/circuit.xml.h:8 hacks/config/pinion.xml.h:10
+#: hacks/config/topblock.xml.h:15
 msgid "Rotation Speed"
 msgstr "Vitesse de rotation"
 
 msgid "Rotation Speed"
 msgstr "Vitesse de rotation"
 
@@ -2882,7 +2829,7 @@ msgid "Spin"
 msgstr "Rotation des objets"
 
 #: hacks/config/cloudlife.xml.h:1 hacks/config/demon.xml.h:2
 msgstr "Rotation des objets"
 
 #: hacks/config/cloudlife.xml.h:1 hacks/config/demon.xml.h:2
-#: hacks/config/petri.xml.h:1
+#: hacks/config/petri.xml.h:1 hacks/config/slidescreen.xml.h:1
 msgid "Cell Size"
 msgstr "Taille des cellules"
 
 msgid "Cell Size"
 msgstr "Taille des cellules"
 
@@ -2895,8 +2842,7 @@ msgid ""
 "Generates cloud-like formations based on a variant of Conway's Life. The "
 "difference is that cells have a maximum age, after which they count as 3 for "
 "populating the next generation. This makes long-lived formations explode "
 "Generates cloud-like formations based on a variant of Conway's Life. The "
 "difference is that cells have a maximum age, after which they count as 3 for "
 "populating the next generation. This makes long-lived formations explode "
-"instead of just sitting there burning a hole in your screen. Written by Don "
-"Marti."
+"instead of just sitting there. Written by Don Marti; 2003."
 msgstr ""
 
 #: hacks/config/cloudlife.xml.h:6
 msgstr ""
 
 #: hacks/config/cloudlife.xml.h:6
@@ -2905,35 +2851,35 @@ msgstr "Densité initiale"
 
 #: hacks/config/cloudlife.xml.h:9
 msgid "Max Age"
 
 #: hacks/config/cloudlife.xml.h:9
 msgid "Max Age"
-msgstr "Age max"
+msgstr "Age max."
 
 #: hacks/config/cloudlife.xml.h:10
 msgid "Old"
 
 #: hacks/config/cloudlife.xml.h:10
 msgid "Old"
-msgstr "vieux"
+msgstr "Vieux"
 
 #: hacks/config/cloudlife.xml.h:14
 msgid "Young"
 
 #: hacks/config/cloudlife.xml.h:14
 msgid "Young"
-msgstr "jeune"
+msgstr "Jeune"
 
 #: hacks/config/compass.xml.h:1
 msgid "Compass"
 msgstr "Boussole"
 
 #: hacks/config/compass.xml.h:2 hacks/config/deluxe.xml.h:3
 
 #: hacks/config/compass.xml.h:1
 msgid "Compass"
 msgstr "Boussole"
 
 #: hacks/config/compass.xml.h:2 hacks/config/deluxe.xml.h:3
-#: hacks/config/fontglide.xml.h:3 hacks/config/fuzzyflakes.xml.h:5
-#: hacks/config/interference.xml.h:6 hacks/config/kumppa.xml.h:2
-#: hacks/config/nerverot.xml.h:6 hacks/config/piecewise.xml.h:3
-#: hacks/config/pipes.xml.h:4
+#: hacks/config/flow.xml.h:2 hacks/config/fontglide.xml.h:3
+#: hacks/config/fuzzyflakes.xml.h:5 hacks/config/interference.xml.h:6
+#: hacks/config/kumppa.xml.h:2 hacks/config/nerverot.xml.h:6
+#: hacks/config/piecewise.xml.h:3
 msgid "Double Buffer"
 msgstr "Double tampon"
 
 #: hacks/config/compass.xml.h:6
 msgid ""
 "This draws a compass, with all elements spinning about randomly, for that "
 msgid "Double Buffer"
 msgstr "Double tampon"
 
 #: hacks/config/compass.xml.h:6
 msgid ""
 "This draws a compass, with all elements spinning about randomly, for that "
-"``lost and nauseous'' feeling. Written by Jamie Zawinski."
+"\"lost and nauseous\" feeling. Written by Jamie Zawinski; 1999."
 msgstr ""
 "Dessine une boussole, dont tous les éléments tournent de manière aléatoire, "
 msgstr ""
 "Dessine une boussole, dont tous les éléments tournent de manière aléatoire, "
-"pour obtenir ce sentiment de «mal de mer». Écrit par Jamie Zawinski."
+"pour obtenir cette sensation de «mal de mer». Écrit par Jamie Zawinski; 1999."
 
 #: hacks/config/coral.xml.h:2 hacks/config/deco.xml.h:2
 #: hacks/config/glslideshow.xml.h:1 hacks/config/helix.xml.h:2
 
 #: hacks/config/coral.xml.h:2 hacks/config/deco.xml.h:2
 #: hacks/config/glslideshow.xml.h:1 hacks/config/helix.xml.h:2
@@ -2951,26 +2897,32 @@ msgstr "Corail"
 #: hacks/config/gflux.xml.h:3 hacks/config/glblur.xml.h:2
 #: hacks/config/glmatrix.xml.h:3 hacks/config/imsmap.xml.h:4
 #: hacks/config/lavalite.xml.h:6 hacks/config/pyro.xml.h:2
 #: hacks/config/gflux.xml.h:3 hacks/config/glblur.xml.h:2
 #: hacks/config/glmatrix.xml.h:3 hacks/config/imsmap.xml.h:4
 #: hacks/config/lavalite.xml.h:6 hacks/config/pyro.xml.h:2
-#: hacks/config/qix.xml.h:5 hacks/config/squiral.xml.h:1
-#: hacks/config/xearth.xml.h:4
+#: hacks/config/qix.xml.h:6 hacks/config/squiral.xml.h:1
 msgid "Dense"
 msgstr "Dense"
 
 msgid "Dense"
 msgstr "Dense"
 
+#: hacks/config/coral.xml.h:8 hacks/config/imsmap.xml.h:9
+msgid "Linger"
+msgstr "Persistance"
+
 #: hacks/config/coral.xml.h:10 hacks/config/squiral.xml.h:13
 msgid "Seeds"
 msgstr "Germes"
 
 #: hacks/config/coral.xml.h:11
 msgid ""
 #: hacks/config/coral.xml.h:10 hacks/config/squiral.xml.h:13
 msgid "Seeds"
 msgstr "Germes"
 
 #: hacks/config/coral.xml.h:11
 msgid ""
-"Simulates coral growth, albeit somewhat slowly. Written by Frederick Roeber."
+"Simulates coral growth, albeit somewhat slowly. Written by Frederick Roeber; "
+"1997."
 msgstr ""
 msgstr ""
+"Simule la croissance du corail, bien que un peu lentement. Écrit par "
+"Frederick Roeber; 1997."
 
 #: hacks/config/coral.xml.h:13 hacks/config/fireworkx.xml.h:10
 #: hacks/config/gflux.xml.h:13 hacks/config/glblur.xml.h:15
 
 #: hacks/config/coral.xml.h:13 hacks/config/fireworkx.xml.h:10
 #: hacks/config/gflux.xml.h:13 hacks/config/glblur.xml.h:15
-#: hacks/config/glmatrix.xml.h:19 hacks/config/imsmap.xml.h:13
+#: hacks/config/glmatrix.xml.h:16 hacks/config/imsmap.xml.h:15
 #: hacks/config/lavalite.xml.h:29 hacks/config/pyro.xml.h:14
 #: hacks/config/lavalite.xml.h:29 hacks/config/pyro.xml.h:14
-#: hacks/config/qix.xml.h:21 hacks/config/squiral.xml.h:15
-#: hacks/config/xearth.xml.h:24 hacks/config/xmatrix.xml.h:17
+#: hacks/config/qix.xml.h:22 hacks/config/squiral.xml.h:15
+#: hacks/config/xmatrix.xml.h:18
 msgid "Sparse"
 msgstr "Faible"
 
 msgid "Sparse"
 msgstr "Faible"
 
@@ -2980,87 +2932,83 @@ msgstr "Cosmos"
 
 #: hacks/config/cosmos.xml.h:2
 msgid ""
 
 #: hacks/config/cosmos.xml.h:2
 msgid ""
-"Draws fireworks and zooming, fading flares. By Tom Campbell. You can find it "
-"at &lt;http://www.cosmosx.org/&gt;"
+"Draws fireworks and zooming, fading flares. You can find it at &lt;http://"
+"www.cosmosx.org/&gt; Written by Tom Campbell."
 msgstr ""
 msgstr ""
+"Dessine des feux d'artifice ainsi que des fusées éclairantes. "
+"Vous pouvez le trouver sur <http://www.cosmosx.org/>"
+". Écrit par Tom Campbell."
 
 #: hacks/config/crackberg.xml.h:1
 msgid "Confused"
 
 #: hacks/config/crackberg.xml.h:1
 msgid "Confused"
-msgstr "Confus"
+msgstr "Embrouillé"
 
 #: hacks/config/crackberg.xml.h:2
 msgid "Crackberg"
 msgstr "Crackberg"
 
 #: hacks/config/crackberg.xml.h:3
 
 #: hacks/config/crackberg.xml.h:2
 msgid "Crackberg"
 msgstr "Crackberg"
 
 #: hacks/config/crackberg.xml.h:3
-msgid "Display FPS"
-msgstr "Affichage images par seconde (FPS)"
-
-#: hacks/config/crackberg.xml.h:4
 msgid "Eagle Nest"
 msgstr "Nid d'aigle"
 
 msgid "Eagle Nest"
 msgstr "Nid d'aigle"
 
-#: hacks/config/crackberg.xml.h:5
+#: hacks/config/crackberg.xml.h:4
 msgid "Flat Shading"
 msgid "Flat Shading"
-msgstr "Éclairage plat"
+msgstr "Ombrages en aplat"
 
 
-#: hacks/config/crackberg.xml.h:6
+#: hacks/config/crackberg.xml.h:5
 msgid ""
 "Flies through height maps, optionally animating the creation and destruction "
 msgid ""
 "Flies through height maps, optionally animating the creation and destruction "
-"of generated tiles; tiles `grow' into place."
+"of generated tiles; tiles `grow' into place. Written by Matus Telgarsky; "
+"2005."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:7
+#: hacks/config/crackberg.xml.h:6 hacks/config/glhanoi.xml.h:4
 msgid "Frame Delay"
 msgstr "Délai entre trames"
 
 msgid "Frame Delay"
 msgstr "Délai entre trames"
 
-#: hacks/config/crackberg.xml.h:8
-msgid "Growing"
-msgstr "Grandissant"
-
-#: hacks/config/crackberg.xml.h:9
+#: hacks/config/crackberg.xml.h:7
 msgid "Ice"
 msgstr "Glace"
 
 msgid "Ice"
 msgstr "Glace"
 
-#: hacks/config/crackberg.xml.h:10
+#: hacks/config/crackberg.xml.h:8
 msgid "Immediate"
 msgstr "Immédiat"
 
 msgid "Immediate"
 msgstr "Immédiat"
 
-#: hacks/config/crackberg.xml.h:11 hacks/config/glslideshow.xml.h:14
+#: hacks/config/crackberg.xml.h:9 hacks/config/glslideshow.xml.h:14
 msgid "Letterbox"
 msgstr "Boîte aux lettres"
 
 msgid "Letterbox"
 msgstr "Boîte aux lettres"
 
-#: hacks/config/crackberg.xml.h:14
+#: hacks/config/crackberg.xml.h:12
 msgid "Mouse Hole"
 msgstr "Trou de souris"
 
 msgid "Mouse Hole"
 msgstr "Trou de souris"
 
-#: hacks/config/crackberg.xml.h:15
+#: hacks/config/crackberg.xml.h:13
 msgid "Plain"
 msgstr "Solide"
 
 msgid "Plain"
 msgstr "Solide"
 
-#: hacks/config/crackberg.xml.h:16 hacks/config/flurry.xml.h:8
-#: hacks/config/fontglide.xml.h:12 hacks/config/jigglypuff.xml.h:13
-#: hacks/config/sballs.xml.h:10 hacks/config/whirlygig.xml.h:12
+#: hacks/config/crackberg.xml.h:14 hacks/config/flurry.xml.h:8
+#: hacks/config/gears.xml.h:5 hacks/config/sballs.xml.h:9
+#: hacks/config/starfish.xml.h:8 hacks/config/whirlygig.xml.h:12
 msgid "Random"
 msgstr "Aléatoire"
 
 msgid "Random"
 msgstr "Aléatoire"
 
-#: hacks/config/crackberg.xml.h:18
+#: hacks/config/crackberg.xml.h:17
 msgid "Subdivisions"
 msgstr "Sub-divisions"
 
 msgid "Subdivisions"
 msgstr "Sub-divisions"
 
-#: hacks/config/crackberg.xml.h:19
+#: hacks/config/crackberg.xml.h:18
 msgid "Swampy"
 msgstr "Marécageux"
 
 msgid "Swampy"
 msgstr "Marécageux"
 
-#: hacks/config/crackberg.xml.h:20
+#: hacks/config/crackberg.xml.h:19
 msgid "Visibility"
 msgstr "Visibilité"
 
 msgid "Visibility"
 msgstr "Visibilité"
 
-#: hacks/config/crackberg.xml.h:21
+#: hacks/config/crackberg.xml.h:20
 msgid "Vomit"
 msgstr "Vomitif"
 
 msgid "Vomit"
 msgstr "Vomitif"
 
-#: hacks/config/crackberg.xml.h:22 hacks/config/flurry.xml.h:11
+#: hacks/config/crackberg.xml.h:21 hacks/config/flurry.xml.h:11
 msgid "Water"
 msgstr "Eau"
 
 msgid "Water"
 msgstr "Eau"
 
@@ -3071,11 +3019,12 @@ msgstr "Critique"
 #: hacks/config/critical.xml.h:2
 msgid ""
 "Draws a system of self-organizing lines. It starts out as random squiggles, "
 #: hacks/config/critical.xml.h:2
 msgid ""
 "Draws a system of self-organizing lines. It starts out as random squiggles, "
-"but after a few iterations, order begins to appear. Written by Martin Pool."
+"but after a few iterations, order begins to appear. Written by Martin Pool; "
+"1999."
 msgstr ""
 "Dessine un système de lignes auto-organisées. Elles commencent sous la forme "
 "de gribouillis aléatoires, mais, après quelques itérations, l'ordre commence "
 msgstr ""
 "Dessine un système de lignes auto-organisées. Elles commencent sous la forme "
 "de gribouillis aléatoires, mais, après quelques itérations, l'ordre commence "
-"à apparaître. Écrit par Martin Pool."
+"à apparaître. Écrit par Martin Pool; 1999."
 
 #: hacks/config/crystal.xml.h:1
 msgid "Center on Screen"
 
 #: hacks/config/crystal.xml.h:1
 msgid "Center on Screen"
@@ -3084,16 +3033,14 @@ msgstr "Centré sur l'écran"
 #: hacks/config/crystal.xml.h:2 hacks/config/deluxe.xml.h:1
 #: hacks/config/fadeplot.xml.h:1 hacks/config/flow.xml.h:1
 #: hacks/config/galaxy.xml.h:1 hacks/config/glforestfire.xml.h:1
 #: hacks/config/crystal.xml.h:2 hacks/config/deluxe.xml.h:1
 #: hacks/config/fadeplot.xml.h:1 hacks/config/flow.xml.h:1
 #: 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/grav.xml.h:1 hacks/config/julia.xml.h:2
 #: hacks/config/laser.xml.h:1 hacks/config/lisa.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/mountain.xml.h:1 hacks/config/piecewise.xml.h:2
-#: hacks/config/qix.xml.h:4 hacks/config/rocks.xml.h:2
-#: hacks/config/rotor.xml.h:2 hacks/config/rubik.xml.h:1
+#: hacks/config/lissie.xml.h:1 hacks/config/piecewise.xml.h:2
+#: hacks/config/qix.xml.h:5 hacks/config/rocks.xml.h:2
+#: hacks/config/rotor.xml.h:1 hacks/config/rubik.xml.h:1
 #: hacks/config/shadebobs.xml.h:1 hacks/config/sierpinski.xml.h:1
 #: hacks/config/slip.xml.h:1 hacks/config/spiral.xml.h:1
 #: hacks/config/shadebobs.xml.h:1 hacks/config/sierpinski.xml.h:1
 #: hacks/config/slip.xml.h:1 hacks/config/spiral.xml.h:1
-#: hacks/config/sproingies.xml.h:1 hacks/config/superquadrics.xml.h:1
-#: hacks/config/swirl.xml.h:1 hacks/config/worm.xml.h:2
+#: hacks/config/swirl.xml.h:1 hacks/config/worm.xml.h:1
 msgid "Count"
 msgstr "Nombre"
 
 msgid "Count"
 msgstr "Nombre"
 
@@ -3106,7 +3053,6 @@ msgid "Draw Cell"
 msgstr "Dessiner une cellule"
 
 #: hacks/config/crystal.xml.h:5 hacks/config/spheremonics.xml.h:3
 msgstr "Dessiner une cellule"
 
 #: hacks/config/crystal.xml.h:5 hacks/config/spheremonics.xml.h:3
-#: hacks/config/xearth.xml.h:6
 msgid "Draw Grid"
 msgstr "Dessiner une grille"
 
 msgid "Draw Grid"
 msgstr "Dessiner une grille"
 
@@ -3117,10 +3063,10 @@ msgstr "Symétries horizontales"
 #: hacks/config/crystal.xml.h:9
 msgid ""
 "Moving polygons, similar to a kaleidescope (more like a kaleidescope than "
 #: hacks/config/crystal.xml.h:9
 msgid ""
 "Moving polygons, similar to a kaleidescope (more like a kaleidescope than "
-"the hack called `kaleid,' actually.) This one by Jouk Jansen."
+"the one called `kaleid,' actually). Written by Jouk Jansen; 1998."
 msgstr ""
 "Polygones animés, semblables à un kaléidoscope (plus semblables à un "
 msgstr ""
 "Polygones animés, semblables à un kaléidoscope (plus semblables à un "
-"kaléïdoscope que le hack «kaleid», en fait.) Par Jouk Jansen."
+"kaléïdoscope que le hack «kaleid», en fait). Par Jouk Jansen; 1998."
 
 #: hacks/config/crystal.xml.h:14
 msgid "Vertical Symmetries"
 
 #: hacks/config/crystal.xml.h:14
 msgid "Vertical Symmetries"
@@ -3129,12 +3075,14 @@ msgstr "Symétries verticales"
 #: hacks/config/cube21.xml.h:1
 msgid ""
 "Animates a Rubik-like puzzle known as Cube 21 or Square-1. The rotations are "
 #: hacks/config/cube21.xml.h:1
 msgid ""
 "Animates a Rubik-like puzzle known as Cube 21 or Square-1. The rotations are "
-"chosen randomly. Requires OpenGL. Written by Vasek Potocek."
+"chosen randomly. Written by Vasek Potocek; 2005."
 msgstr ""
 msgstr ""
+"Anime un puzzle style Rubik connu sous les noms de Cube 21 ou Square-1. Les "
+"rotations sont aléatoires. Écrit par Vasek Potocek; 2005."
 
 #: hacks/config/cube21.xml.h:2
 msgid "Classic Edition"
 
 #: hacks/config/cube21.xml.h:2
 msgid "Classic Edition"
-msgstr "Lavalite classique"
+msgstr "Edition classique"
 
 #: hacks/config/cube21.xml.h:3
 msgid "Cube 21"
 
 #: hacks/config/cube21.xml.h:3
 msgid "Cube 21"
@@ -3162,7 +3110,7 @@ msgstr "Rotation"
 
 #: hacks/config/cube21.xml.h:14
 msgid "Silver Edition"
 
 #: hacks/config/cube21.xml.h:14
 msgid "Silver Edition"
-msgstr "Edition Argent"
+msgstr "Edition argent"
 
 #: hacks/config/cube21.xml.h:15
 msgid "Six random colors"
 
 #: hacks/config/cube21.xml.h:15
 msgid "Six random colors"
@@ -3170,7 +3118,7 @@ msgstr "Six couleurs aléatoires"
 
 #: hacks/config/cube21.xml.h:19
 msgid "Spinning"
 
 #: hacks/config/cube21.xml.h:19
 msgid "Spinning"
-msgstr "Rotation"
+msgstr "Tournoiement"
 
 #: hacks/config/cube21.xml.h:20
 msgid "Start as cube"
 
 #: hacks/config/cube21.xml.h:20
 msgid "Start as cube"
@@ -3184,15 +3132,22 @@ msgstr "Démarrage avec une forme aléatoire"
 msgid "Two random colors"
 msgstr "Deux couleurs aléatoires"
 
 msgid "Two random colors"
 msgstr "Deux couleurs aléatoires"
 
-#: hacks/config/cube21.xml.h:25
-msgid "Wander on screen"
-msgstr "Déplacement dans l'écran"
+#: hacks/config/cube21.xml.h:24 hacks/config/cubenetic.xml.h:26
+#: hacks/config/cubestorm.xml.h:13 hacks/config/dangerball.xml.h:10
+#: hacks/config/engine.xml.h:20 hacks/config/glblur.xml.h:18
+#: hacks/config/glforestfire.xml.h:16 hacks/config/glknots.xml.h:22
+#: hacks/config/glplanet.xml.h:13 hacks/config/gltext.xml.h:19
+#: hacks/config/lavalite.xml.h:31 hacks/config/menger.xml.h:19
+#: hacks/config/molecule.xml.h:25 hacks/config/polyhedra.xml.h:165
+#: hacks/config/spheremonics.xml.h:24 hacks/config/wander.xml.h:15
+msgid "Wander"
+msgstr "Déplacement"
 
 
-#: hacks/config/cube21.xml.h:26
+#: hacks/config/cube21.xml.h:25
 msgid "Wandering"
 msgstr "Déplacement"
 
 msgid "Wandering"
 msgstr "Déplacement"
 
-#: hacks/config/cube21.xml.h:27
+#: hacks/config/cube21.xml.h:26
 msgid "White"
 msgstr "Blanc"
 
 msgid "White"
 msgstr "Blanc"
 
@@ -3200,105 +3155,81 @@ msgstr "Blanc"
 msgid "Cubenetic"
 msgstr "Rectangles de couleur"
 
 msgid "Cubenetic"
 msgstr "Rectangles de couleur"
 
-#: hacks/config/cubenetic.xml.h:3
-msgid "Display Solid Colors"
-msgstr "Afficher des couleurs unies"
-
-#: hacks/config/cubenetic.xml.h:4
-msgid "Display Surface Patterns"
-msgstr "Afficher les modèles de surface"
-
-#: hacks/config/cubenetic.xml.h:5
-msgid "Display Wireframe"
-msgstr "Fil de fer"
-
-#: hacks/config/cubenetic.xml.h:6 hacks/config/glblur.xml.h:3
+#: hacks/config/cubenetic.xml.h:3 hacks/config/glblur.xml.h:3
 #: hacks/config/glknots.xml.h:2 hacks/config/gltext.xml.h:3
 #: hacks/config/lavalite.xml.h:7 hacks/config/menger.xml.h:1
 #: hacks/config/molecule.xml.h:4 hacks/config/spheremonics.xml.h:1
 #: hacks/config/glknots.xml.h:2 hacks/config/gltext.xml.h:3
 #: hacks/config/lavalite.xml.h:7 hacks/config/menger.xml.h:1
 #: hacks/config/molecule.xml.h:4 hacks/config/spheremonics.xml.h:1
-#: hacks/config/tangram.xml.h:1
 msgid "Don't Rotate"
 msgstr "Ne pas pivoter"
 
 msgid "Don't Rotate"
 msgstr "Ne pas pivoter"
 
-#: hacks/config/cubenetic.xml.h:7
+#: hacks/config/cubenetic.xml.h:4
 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 "
 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."
+"Jamie Zawinski; 2002."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:14 hacks/config/glblur.xml.h:6
+#: hacks/config/cubenetic.xml.h:11 hacks/config/glblur.xml.h:6
 #: hacks/config/glknots.xml.h:8 hacks/config/gltext.xml.h:7
 #: hacks/config/lavalite.xml.h:19 hacks/config/menger.xml.h:7
 #: hacks/config/molecule.xml.h:15 hacks/config/spheremonics.xml.h:10
 msgid "Rotate around X and Y axes"
 msgstr "Rotation autour des axes X et Y"
 
 #: hacks/config/glknots.xml.h:8 hacks/config/gltext.xml.h:7
 #: hacks/config/lavalite.xml.h:19 hacks/config/menger.xml.h:7
 #: hacks/config/molecule.xml.h:15 hacks/config/spheremonics.xml.h:10
 msgid "Rotate around X and Y axes"
 msgstr "Rotation autour des axes X et Y"
 
-#: hacks/config/cubenetic.xml.h:15 hacks/config/glblur.xml.h:7
+#: hacks/config/cubenetic.xml.h:12 hacks/config/glblur.xml.h:7
 #: hacks/config/glknots.xml.h:9 hacks/config/gltext.xml.h:8
 #: hacks/config/lavalite.xml.h:20 hacks/config/menger.xml.h:8
 #: hacks/config/molecule.xml.h:16 hacks/config/spheremonics.xml.h:11
 msgid "Rotate around X and Z axes"
 msgstr "Rotation autour des axes X et Z"
 
 #: hacks/config/glknots.xml.h:9 hacks/config/gltext.xml.h:8
 #: hacks/config/lavalite.xml.h:20 hacks/config/menger.xml.h:8
 #: hacks/config/molecule.xml.h:16 hacks/config/spheremonics.xml.h:11
 msgid "Rotate around X and Z axes"
 msgstr "Rotation autour des axes X et Z"
 
-#: hacks/config/cubenetic.xml.h:16 hacks/config/glblur.xml.h:8
+#: hacks/config/cubenetic.xml.h:13 hacks/config/glblur.xml.h:8
 #: hacks/config/glknots.xml.h:10 hacks/config/gltext.xml.h:9
 #: hacks/config/lavalite.xml.h:21 hacks/config/menger.xml.h:9
 #: hacks/config/molecule.xml.h:17 hacks/config/spheremonics.xml.h:12
 msgid "Rotate around X axis"
 msgstr "Rotation autour de l'axe X"
 
 #: hacks/config/glknots.xml.h:10 hacks/config/gltext.xml.h:9
 #: hacks/config/lavalite.xml.h:21 hacks/config/menger.xml.h:9
 #: hacks/config/molecule.xml.h:17 hacks/config/spheremonics.xml.h:12
 msgid "Rotate around X axis"
 msgstr "Rotation autour de l'axe X"
 
-#: hacks/config/cubenetic.xml.h:17 hacks/config/glblur.xml.h:9
+#: hacks/config/cubenetic.xml.h:14 hacks/config/glblur.xml.h:9
 #: hacks/config/glknots.xml.h:11 hacks/config/gltext.xml.h:10
 #: hacks/config/lavalite.xml.h:22 hacks/config/menger.xml.h:10
 #: hacks/config/molecule.xml.h:18 hacks/config/spheremonics.xml.h:13
 msgid "Rotate around Y and Z axes"
 msgstr "Rotation autour des axes Y et Z"
 
 #: hacks/config/glknots.xml.h:11 hacks/config/gltext.xml.h:10
 #: hacks/config/lavalite.xml.h:22 hacks/config/menger.xml.h:10
 #: hacks/config/molecule.xml.h:18 hacks/config/spheremonics.xml.h:13
 msgid "Rotate around Y and Z axes"
 msgstr "Rotation autour des axes Y et Z"
 
-#: hacks/config/cubenetic.xml.h:18 hacks/config/glblur.xml.h:10
+#: hacks/config/cubenetic.xml.h:15 hacks/config/glblur.xml.h:10
 #: hacks/config/glknots.xml.h:12 hacks/config/gltext.xml.h:11
 #: hacks/config/lavalite.xml.h:23 hacks/config/menger.xml.h:11
 #: hacks/config/molecule.xml.h:19 hacks/config/spheremonics.xml.h:14
 msgid "Rotate around Y axis"
 msgstr "Rotation autour de l'axe Y"
 
 #: hacks/config/glknots.xml.h:12 hacks/config/gltext.xml.h:11
 #: hacks/config/lavalite.xml.h:23 hacks/config/menger.xml.h:11
 #: hacks/config/molecule.xml.h:19 hacks/config/spheremonics.xml.h:14
 msgid "Rotate around Y axis"
 msgstr "Rotation autour de l'axe Y"
 
-#: hacks/config/cubenetic.xml.h:19 hacks/config/glblur.xml.h:11
+#: hacks/config/cubenetic.xml.h:16 hacks/config/glblur.xml.h:11
 #: hacks/config/glknots.xml.h:13 hacks/config/gltext.xml.h:12
 #: hacks/config/lavalite.xml.h:24 hacks/config/menger.xml.h:12
 #: hacks/config/molecule.xml.h:20 hacks/config/spheremonics.xml.h:15
 msgid "Rotate around Z axis"
 msgstr "Rotation autour de l'axe Z"
 
 #: hacks/config/glknots.xml.h:13 hacks/config/gltext.xml.h:12
 #: hacks/config/lavalite.xml.h:24 hacks/config/menger.xml.h:12
 #: hacks/config/molecule.xml.h:20 hacks/config/spheremonics.xml.h:15
 msgid "Rotate around Z axis"
 msgstr "Rotation autour de l'axe Z"
 
-#: hacks/config/cubenetic.xml.h:20 hacks/config/glblur.xml.h:12
+#: hacks/config/cubenetic.xml.h:17 hacks/config/glblur.xml.h:12
 #: hacks/config/glknots.xml.h:14 hacks/config/gltext.xml.h:13
 #: hacks/config/lavalite.xml.h:25 hacks/config/menger.xml.h:13
 #: hacks/config/molecule.xml.h:21 hacks/config/spheremonics.xml.h:16
 msgid "Rotate around all three axes"
 msgstr "Rotation autour des trois axes"
 
 #: hacks/config/glknots.xml.h:14 hacks/config/gltext.xml.h:13
 #: hacks/config/lavalite.xml.h:25 hacks/config/menger.xml.h:13
 #: hacks/config/molecule.xml.h:21 hacks/config/spheremonics.xml.h:16
 msgid "Rotate around all three axes"
 msgstr "Rotation autour des trois axes"
 
-#: hacks/config/cubenetic.xml.h:25
+#: hacks/config/cubenetic.xml.h:22
 msgid "Surface Pattern Complexity"
 msgstr "Complexité des modèles de surface"
 
 msgid "Surface Pattern Complexity"
 msgstr "Complexité des modèles de surface"
 
-#: hacks/config/cubenetic.xml.h:26
+#: hacks/config/cubenetic.xml.h:23
 msgid "Surface Pattern Overlap"
 msgstr "Recouvrement des modèles de surface"
 
 msgid "Surface Pattern Overlap"
 msgstr "Recouvrement des modèles de surface"
 
-#: hacks/config/cubenetic.xml.h:27
+#: hacks/config/cubenetic.xml.h:24
 msgid "Surface Pattern Speed"
 msgstr "Vitesse de changement des modèles de surface"
 
 msgid "Surface Pattern Speed"
 msgstr "Vitesse de changement des modèles de surface"
 
-#: hacks/config/cubenetic.xml.h:28 hacks/config/cubestorm.xml.h:13
-#: hacks/config/dangerball.xml.h:10 hacks/config/engine.xml.h:20
-#: hacks/config/glblur.xml.h:18 hacks/config/glforestfire.xml.h:19
-#: hacks/config/glknots.xml.h:22 hacks/config/glplanet.xml.h:14
-#: hacks/config/gltext.xml.h:20 hacks/config/lavalite.xml.h:31
-#: hacks/config/menger.xml.h:20 hacks/config/molecule.xml.h:26
-#: hacks/config/polyhedra.xml.h:165 hacks/config/spheremonics.xml.h:25
-#: hacks/config/wander.xml.h:15
-msgid "Wander"
-msgstr "Déplacement"
-
 #: hacks/config/cubestorm.xml.h:2
 msgid "CubeStorm"
 msgstr "Tempête de cubes"
 #: hacks/config/cubestorm.xml.h:2
 msgid "CubeStorm"
 msgstr "Tempête de cubes"
@@ -3306,7 +3237,7 @@ msgstr "Tempête de cubes"
 #: hacks/config/cubestorm.xml.h:3
 msgid ""
 "Draws a series of rotating 3D boxes that intersect each other and eventually "
 #: hacks/config/cubestorm.xml.h:3
 msgid ""
 "Draws a series of rotating 3D boxes that intersect each other and eventually "
-"fill space. Written by Jamie Zawinski."
+"fill space. Written by Jamie Zawinski; 2003."
 msgstr ""
 
 #: hacks/config/cubestorm.xml.h:6
 msgstr ""
 
 #: hacks/config/cubestorm.xml.h:6
@@ -3318,21 +3249,15 @@ msgid "Strut Thickness"
 msgstr "Épaisseur traverse"
 
 #: hacks/config/cynosure.xml.h:1
 msgstr "Épaisseur traverse"
 
 #: hacks/config/cynosure.xml.h:1
-msgid ""
-"A hack similar to `greynetic', but less frenetic. The first implementation "
-"was by Stephen Linhart; then Ozymandias G. Desiderata wrote a Java applet "
-"clone. That clone was discovered by Jamie Zawinski, and ported to C for "
-"inclusion here."
-msgstr ""
-"Un hack similaire à «greynetic», en moins frénétique. La première mise en "
-"oeuvre était par Stephen Linhart; ensuite, Ozymandias G. Desiderata a écrit "
-"un clone de l'applet Java. Il a été découvert par Jamie Zawinski et porté "
-"sur C pour être inclus ici."
-
-#: hacks/config/cynosure.xml.h:2
 msgid "Cynosure"
 msgstr "Cynosure"
 
 msgid "Cynosure"
 msgstr "Cynosure"
 
+#: hacks/config/cynosure.xml.h:7
+msgid ""
+"Random dropshadowed rectangles pop onto the screen in lockstep. Written by "
+"Ozymandias G. Desiderata, Jamie Zawinski, and Stephen Linhart; 1998."
+msgstr ""
+
 #: hacks/config/dangerball.xml.h:1
 msgid "DangerBall"
 msgstr "Balle dangereuse"
 #: hacks/config/dangerball.xml.h:1
 msgid "DangerBall"
 msgstr "Balle dangereuse"
@@ -3340,10 +3265,10 @@ msgstr "Balle dangereuse"
 #: hacks/config/dangerball.xml.h:2
 msgid ""
 "Draws a ball that periodically extrudes many random spikes. Ouch! Written by "
 #: hacks/config/dangerball.xml.h:2
 msgid ""
 "Draws a ball that periodically extrudes many random spikes. Ouch! Written by "
-"Jamie Zawinski."
+"Jamie Zawinski; 2001."
 msgstr ""
 "Dessine une balle qui se hérisse régulièrement de nombreux picots "
 msgstr ""
 "Dessine une balle qui se hérisse régulièrement de nombreux picots "
-"aléatoires. Ouille ! Écrit par Jamie Zawinski."
+"aléatoires. Ouille ! Écrit par Jamie Zawinski; 2001."
 
 #: hacks/config/dangerball.xml.h:7
 msgid "Spike Count"
 
 #: hacks/config/dangerball.xml.h:7
 msgid "Spike Count"
@@ -3423,13 +3348,13 @@ msgid ""
 "before, but no screensaver would really be complete without it. It works "
 "best if there's something colorful visible. Warning, if the effect continues "
 "after the screen saver is off, seek medical attention. Written by David "
 "before, but no screensaver would really be complete without it. It works "
 "best if there's something colorful visible. Warning, if the effect continues "
 "after the screen saver is off, seek medical attention. Written by David "
-"Wald, Vivek Khera, Jamie Zawinski, and Vince Levey."
+"Wald, Vivek Khera, Jamie Zawinski, and Vince Levey; 1993."
 msgstr ""
 "Fait fondre une image. Vous avez certainement déjà vu cet effet, mais aucun "
 "programme d'économiseurs d'écran ne pourrait s'en passer. Il fonctionne "
 "particulièrement bien si l'image est colorée. Attention, si l'effet se "
 "poursuit après désactivation de l'économiseur, cherchez de l'aide. Écrit par "
 msgstr ""
 "Fait fondre une image. Vous avez certainement déjà vu cet effet, mais aucun "
 "programme d'économiseurs d'écran ne pourrait s'en passer. Il fonctionne "
 "particulièrement bien si l'image est colorée. Attention, si l'effet se "
 "poursuit après désactivation de l'économiseur, cherchez de l'aide. Écrit par "
-"David Wald et Vivek Khera."
+"David Wald, Vivek Khera, Jamie Zawinski, et Vince Levey; 1993."
 
 #: hacks/config/deco.xml.h:3
 msgid "Deco"
 
 #: hacks/config/deco.xml.h:3
 msgid "Deco"
@@ -3446,18 +3371,16 @@ msgstr "Taille min."
 
 #: hacks/config/deco.xml.h:9
 msgid ""
 
 #: hacks/config/deco.xml.h:9
 msgid ""
-"This one subdivides and colors rectangles randomly. It looks kind of like "
-"Brady-Bunch-era rec-room wall paneling. (Raven says: ``this screensaver is "
-"ugly enough to peel paint.'') Written by Jamie Zawinski, inspired by Java "
-"code by Michael Bayne."
+"Subdivides and colors rectangles randomly. It looks kind of like Brady-Bunch-"
+"era rec-room wall paneling. Written by Jamie Zawinski and Michael Bayne; "
+"1997."
 msgstr ""
 "Subdivise et colore des rectangles de manière aléatoire. Ca ressemble à une "
 msgstr ""
 "Subdivise et colore des rectangles de manière aléatoire. Ca ressemble à une "
-"sorte de papier peint seventies. (Raven a dit : «Cet économiseur d'écran est "
-"tellement moche qu'il fait craqueler la peinture.») Écrit par Jamie "
-"Zawinski, inspiré par un code Java de Michael Bayne."
+"sorte de papier peint seventies. " 
+"Écrit par Jamie Zawinski et Michael Bayne; 1997."
 
 #: hacks/config/deco.xml.h:11 hacks/config/rd-bomb.xml.h:23
 
 #: hacks/config/deco.xml.h:11 hacks/config/rd-bomb.xml.h:23
-#: hacks/config/whirlygig.xml.h:20 hacks/config/xearth.xml.h:33
+#: hacks/config/rdbomb.xml.h:23 hacks/config/whirlygig.xml.h:20
 #: hacks/config/zoom.xml.h:10
 msgid "x"
 msgstr "x"
 #: hacks/config/zoom.xml.h:10
 msgid "x"
 msgstr "x"
@@ -3466,17 +3389,11 @@ msgstr "x"
 msgid "Deluxe"
 msgstr "Deluxe"
 
 msgid "Deluxe"
 msgstr "Deluxe"
 
-#: hacks/config/deluxe.xml.h:12
+#: hacks/config/deluxe.xml.h:4
 msgid ""
 msgid ""
-"This draws a pulsing sequence of stars, circles, and lines. It would look "
-"better if it was faster, but as far as I can tell, there is no way to make "
-"this be both: fast, and flicker-free. Yet another reason X sucks. Written by "
-"Jamie Zawinski."
+"Draws a pulsing sequence of transparent stars, circles, and lines. Written "
+"by Jamie Zawinski; 1999."
 msgstr ""
 msgstr ""
-"Dessine une séquence pulsatile d'étoiles, de cercles et de lignes. Il serait "
-"plus beau s'il était plus rapide, mais à ma connaissance, il est impossible "
-"de le rendre rapide sans scintillement. Encore un mauvais point pour X. "
-"Écrit par Jamie Zawinski."
 
 #: hacks/config/deluxe.xml.h:13
 msgid "Transparency"
 
 #: hacks/config/deluxe.xml.h:13
 msgid "Transparency"
@@ -3485,10 +3402,10 @@ msgstr "Transparence"
 #: hacks/config/demon.xml.h:1
 msgid ""
 "A cellular automaton that starts with a random field, and organizes it into "
 #: hacks/config/demon.xml.h:1
 msgid ""
 "A cellular automaton that starts with a random field, and organizes it into "
-"stripes and spirals. Written by David Bagley."
+"stripes and spirals. Written by David Bagley; 1999."
 msgstr ""
 "Automate cellulaire qui commence par un champ aléatoire et s'organise en "
 msgstr ""
 "Automate cellulaire qui commence par un champ aléatoire et s'organise en "
-"bandes et spirales. Écrit par David Bagley."
+"bandes et spirales. Écrit par David Bagley; 1999."
 
 #: hacks/config/demon.xml.h:3
 msgid "Demon"
 
 #: hacks/config/demon.xml.h:3
 msgid "Demon"
@@ -3500,15 +3417,15 @@ msgstr "États"
 
 #: hacks/config/discrete.xml.h:1
 msgid "Discrete"
 
 #: hacks/config/discrete.xml.h:1
 msgid "Discrete"
-msgstr "Discret"
+msgstr "Discrète"
 
 #: hacks/config/discrete.xml.h:5
 msgid ""
 
 #: hacks/config/discrete.xml.h:5
 msgid ""
-"More ``discrete map'' systems, including new variants of Hopalong and Julia, "
-"and a few others. Written by Tim Auckland."
+"More \"discrete map\" systems, including new variants of Hopalong and Julia, "
+"and a few others. Written by Tim Auckland; 1998."
 msgstr ""
 "Autres systèmes de «cartes discrètes», comprenant de nouvelles variantes de "
 msgstr ""
 "Autres systèmes de «cartes discrètes», comprenant de nouvelles variantes de "
-"Hopalong et Julia, ainsi que quelques autres. Écrit par Tim Auckland."
+"Hopalong et Julia, ainsi que quelques autres. Écrit par Tim Auckland; 1998."
 
 #: hacks/config/distort.xml.h:1
 msgid "Black Hole"
 
 #: hacks/config/distort.xml.h:1
 msgid "Black Hole"
@@ -3522,70 +3439,62 @@ msgstr "Rebond"
 msgid "Distort"
 msgstr "Distortion"
 
 msgid "Distort"
 msgstr "Distortion"
 
-#: hacks/config/distort.xml.h:6
+#: hacks/config/distort.xml.h:5
+msgid ""
+"Grabs an image of the screen, and then lets a transparent lens wander around "
+"the screen, magnifying whatever is underneath. Written by Jonas Munsin; 1998."
+msgstr ""
+"Capture une image de l'écran et laisse une lentille transparente s'y "
+"promener en agrandissant ce qu'elle réfléchit. Écrit par Jonas Munsin; 1998."
+
+#: hacks/config/distort.xml.h:7
 msgid "Lens Count"
 msgstr "Nombre de lentilles"
 
 msgid "Lens Count"
 msgstr "Nombre de lentilles"
 
-#: hacks/config/distort.xml.h:7
+#: hacks/config/distort.xml.h:8
 msgid "Lens Size"
 msgstr "Taille des lentilles"
 
 msgid "Lens Size"
 msgstr "Taille des lentilles"
 
-#: hacks/config/distort.xml.h:8
+#: hacks/config/distort.xml.h:9
 msgid "Magnify"
 msgstr "Agrandir"
 
 #: hacks/config/distort.xml.h:10
 msgid "Magnify"
 msgstr "Agrandir"
 
 #: hacks/config/distort.xml.h:10
+msgid "Normal"
+msgstr "Normal"
+
+#: hacks/config/distort.xml.h:11
 msgid "Reflect"
 msgstr "Réfléchir"
 
 msgid "Reflect"
 msgstr "Réfléchir"
 
-#: hacks/config/distort.xml.h:14
-msgid "Swamp Thing"
-msgstr "Chose des marais"
-
 #: hacks/config/distort.xml.h:15
 #: hacks/config/distort.xml.h:15
-msgid ""
-"This hack grabs an image of the screen, and then lets a transparent lens "
-"wander around the screen, magnifying whatever is underneath. Written by "
-"Jonas Munsin."
-msgstr ""
-"Ce hack capture une image de l'écran et laisse une lentille transparente s'y "
-"promener en agrandissant ce qu'elle réfléchit. Écrit par Jonas Munsin."
-
-#: hacks/config/distort.xml.h:16 hacks/config/moire.xml.h:12
-#: hacks/config/rd-bomb.xml.h:21 hacks/config/ripples.xml.h:16
-#: hacks/config/rotzoomer.xml.h:10 hacks/config/swirl.xml.h:10
-#: hacks/config/twang.xml.h:15 hacks/config/xflame.xml.h:7
-msgid "Use Shared Memory"
-msgstr "Utiliser une mémoire partagée"
+msgid "Swamp Thing"
+msgstr "Marécageux"
 
 
-#: hacks/config/distort.xml.h:17
+#: hacks/config/distort.xml.h:16
 msgid "Vortex"
 msgstr "Vortex"
 
 msgid "Vortex"
 msgstr "Vortex"
 
+#: hacks/config/dnalogo.xml.h:1
+msgid "DNA Logo"
+msgstr "Logo DNA"
+
+#: hacks/config/dnalogo.xml.h:2
+msgid ""
+"DNA Lounge 375 Eleventh Street San Francisco, CA 94107 http://www.dnalounge."
+"com/ Written by Jamie Zawinski; 2001."
+msgstr ""
+"DNA Lounge 375 Eleventh Street San Francisco, CA 94107 http://www.dnalounge."
+"com/. Écrit par Jamie Zawinski; 2001."
+
 #: hacks/config/drift.xml.h:1
 msgid "Drift"
 msgstr "Dérive"
 
 #: hacks/config/drift.xml.h:1
 msgid "Drift"
 msgstr "Dérive"
 
-#: hacks/config/drift.xml.h:4
-msgid "Fractal Growth"
-msgstr "Croissance fractale"
-
-#: hacks/config/drift.xml.h:5
-msgid "High Dimensional Sphere"
-msgstr "Sphère dimensionnelle"
-
-#: hacks/config/drift.xml.h:6
+#: hacks/config/drift.xml.h:2
 msgid ""
 msgid ""
-"How could one possibly describe this except as ``drifting recursive fractal "
-"cosmic flames?'' Another fine hack from the Scott Draves collection of fine "
-"hacks."
-msgstr ""
-"Comment décrire ceci sinon comme des «flammes cosmiques fractales récursives "
-"à la dérive ?» Un nouveau chouette hack de la collection de Scott Draves."
-
-#: hacks/config/drift.xml.h:7
-msgid "Lissojous Figures"
-msgstr "Figures Lissojous"
+"Drifting recursive fractal cosmic flames. Written by Scott Draves; 1997."
+msgstr "Un autre générateur fractal itératif. Écrit par Scott Draves; 1997."
 
 #: hacks/config/electricsheep.xml.h:1
 msgid "1 Gbyte cache"
 
 #: hacks/config/electricsheep.xml.h:1
 msgid "1 Gbyte cache"
@@ -3604,20 +3513,19 @@ msgid "300 Mbyte cache"
 msgstr "300 Moctets de cache"
 
 #: hacks/config/electricsheep.xml.h:5
 msgstr "300 Moctets de cache"
 
 #: hacks/config/electricsheep.xml.h:5
-msgid "ElectricSheep"
-msgstr "Mouton Electrique"
-
-#: hacks/config/electricsheep.xml.h:6
 msgid ""
 msgid ""
-"ElectricSheep is an xscreensaver module that displays mpeg video of an "
-"animated fractal flame. In the background, it contributes render cycles to "
-"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, always-on connection to the "
-"Internet. By Scott Draves. You can find it at &lt;http://www.electricsheep."
-"org/&gt;."
+"Displays mpeg video of an animated fractal flame. In the background, it "
+"contributes render cycles to 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, always-on connection to the Internet. You can find it at &lt;"
+"http://www.electricsheep.org/&gt;. Written by By Scott Draves."
 msgstr ""
 
 msgstr ""
 
+#: hacks/config/electricsheep.xml.h:6
+msgid "ElectricSheep"
+msgstr "Mouton Electrique"
+
 #: hacks/config/electricsheep.xml.h:8
 msgid "Nickname"
 msgstr "Pseudo"
 #: hacks/config/electricsheep.xml.h:8
 msgid "Nickname"
 msgstr "Pseudo"
@@ -3642,7 +3550,7 @@ msgstr "URL"
 msgid "Unlimited"
 msgstr "Illimité"
 
 msgid "Unlimited"
 msgstr "Illimité"
 
-#: hacks/config/electricsheep.xml.h:14 hacks/config/gleidescope.xml.h:13
+#: hacks/config/electricsheep.xml.h:14 hacks/config/gleidescope.xml.h:12
 #: hacks/config/hyperball.xml.h:16 hacks/config/hypercube.xml.h:16
 #: hacks/config/zoom.xml.h:8
 msgid "Zoom"
 #: hacks/config/hyperball.xml.h:16 hacks/config/hypercube.xml.h:16
 #: hacks/config/zoom.xml.h:8
 msgid "Zoom"
@@ -3651,12 +3559,16 @@ msgstr "Zoom"
 #: hacks/config/endgame.xml.h:1
 msgid ""
 "Black slips out of three mating nets, but the fourth one holds him tight! A "
 #: hacks/config/endgame.xml.h:1
 msgid ""
 "Black slips out of three mating nets, but the fourth one holds him tight! A "
-"brilliant composition! Written by Blair Tennessy."
+"brilliant composition! Written by Blair Tennessy; 2002."
 msgstr ""
 
 #: hacks/config/endgame.xml.h:2
 msgid "Endgame"
 msgstr ""
 
 #: hacks/config/endgame.xml.h:2
 msgid "Endgame"
-msgstr "Fin de jeux"
+msgstr "Fin de partie"
+
+#: hacks/config/endgame.xml.h:4
+msgid "Low Resolution Chess Pieces"
+msgstr "Pièces en basse résolution"
 
 #: hacks/config/engine.xml.h:1
 msgid "Audi Quattro (5 cylinders)"
 
 #: hacks/config/engine.xml.h:1
 msgid "Audi Quattro (5 cylinders)"
@@ -3681,10 +3593,10 @@ msgstr "Dodge Viper (10 cylindres en V)"
 #: hacks/config/engine.xml.h:6
 msgid ""
 "Draws a simple model of an engine that floats around the screen. Written by "
 #: hacks/config/engine.xml.h:6
 msgid ""
 "Draws a simple model of an engine that floats around the screen. Written by "
-"Ben Buxton and Ed Beroset."
+"Ben Buxton and Ed Beroset; 2001."
 msgstr ""
 "Dessine un modèle simplifié de moteur qui flotte sur l'écran. Écrit par Ben "
 msgstr ""
 "Dessine un modèle simplifié de moteur qui flotte sur l'écran. Écrit par Ben "
-"Buxton et Ed Beroset."
+"Buxton et Ed Beroset; 2001."
 
 #: hacks/config/engine.xml.h:7
 msgid "Engine"
 
 #: hacks/config/engine.xml.h:7
 msgid "Engine"
@@ -3739,27 +3651,27 @@ msgid ""
 "This program draws the path traced out by a point on the edge of a circle. "
 "That circle rotates around a point on the rim of another circle, and so on, "
 "several times. These were the basis for the pre-heliocentric model of "
 "This program draws the path traced out by a point on the edge of a circle. "
 "That circle rotates around a point on the rim of another circle, and so on, "
 "several times. These were the basis for the pre-heliocentric model of "
-"planetary motion. Written by James Youngman."
+"planetary motion. Written by James Youngman; 1998."
 msgstr ""
 "Ce programme dessine le chemin tracé par un point sur le bord d'un cercle. "
 "Ce cercle pivote autour d'un point sur le pourtour d'un autre cercle, et "
 "ainsi de suite, plusieurs fois. Il s'agit de la base du modèle pré-"
 msgstr ""
 "Ce programme dessine le chemin tracé par un point sur le bord d'un cercle. "
 "Ce cercle pivote autour d'un point sur le pourtour d'un autre cercle, et "
 "ainsi de suite, plusieurs fois. Il s'agit de la base du modèle pré-"
-"héliocentrique de révolution planétaire. Écrit par James Youngman."
+"héliocentrique de révolution planétaire. Écrit par James Youngman; 1998."
 
 #: hacks/config/eruption.xml.h:1
 
 #: hacks/config/eruption.xml.h:1
-msgid "An exposive version of XFlame. By W.P. van Paassen."
-msgstr "Une version explosive de XFishTank. Par W.P. van Paassen."
-
-#: hacks/config/eruption.xml.h:2
 msgid "Cooling factor"
 msgstr "Facteur de refroidissement"
 
 msgid "Cooling factor"
 msgstr "Facteur de refroidissement"
 
-#: hacks/config/eruption.xml.h:4
+#: hacks/config/eruption.xml.h:3
 msgid "Eruption"
 msgstr "Éruption"
 
 msgid "Eruption"
 msgstr "Éruption"
 
+#: hacks/config/eruption.xml.h:4
+msgid "Exploding fireworks. Written by W.P. van Paassen; 2003."
+msgstr "Feux d'artifices. Écrit par W.P. van Paassen; 2003."
+
 #: hacks/config/eruption.xml.h:7 hacks/config/fluidballs.xml.h:9
 #: hacks/config/eruption.xml.h:7 hacks/config/fluidballs.xml.h:9
-#: hacks/config/qix.xml.h:9 hacks/config/speedmine.xml.h:4
+#: hacks/config/qix.xml.h:10 hacks/config/speedmine.xml.h:4
 msgid "Gravity"
 msgstr "Gravité"
 
 msgid "Gravity"
 msgstr "Gravité"
 
@@ -3806,20 +3718,20 @@ msgstr "Puissance"
 #: hacks/config/euler2d.xml.h:13
 msgid ""
 "Simulates two dimensional Incompressible Inviscid Fluid Flow. Written by "
 #: hacks/config/euler2d.xml.h:13
 msgid ""
 "Simulates two dimensional Incompressible Inviscid Fluid Flow. Written by "
-"Stephen Montgomery-Smith."
+"Stephen Montgomery-Smith; 2002."
 msgstr ""
 "Simule un flux fluide non-visqueux incompressible bidimensionnel. Écrit par "
 msgstr ""
 "Simule un flux fluide non-visqueux incompressible bidimensionnel. Écrit par "
-"Stephen Montgomery-Smith."
+"Stephen Montgomery-Smith; 2002."
 
 #: 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 "
-"inside out. Created by David Konerding from the samples that come with the "
-"GL Extrusion library by Linas Vepstas."
+"inside out. Written by Linas Vepstas, David Konerding, and Jamie Zawinski; "
+"1999."
 msgstr ""
 "Dessine diverses formes extrudées en rotation qui se tournent, s'allongent "
 msgstr ""
 "Dessine diverses formes extrudées en rotation qui se tournent, s'allongent "
-"et se retournent. Créé par David Konerding à partir des exemples fournis "
-"avec la bibliothèque GL Extrusion de Linas Vepstas."
+"et se retournent. Écrit par Linas Vepstas, David Konerding et Jamie Zawinski; "
+"1999."
 
 #: hacks/config/extrusion.xml.h:2
 msgid "Extrusion"
 
 #: hacks/config/extrusion.xml.h:2
 msgid "Extrusion"
@@ -3841,7 +3753,8 @@ msgstr "Hélice 4"
 msgid "Join Offset"
 msgstr "Décalage de jointure"
 
 msgid "Join Offset"
 msgstr "Décalage de jointure"
 
-#: hacks/config/extrusion.xml.h:8 hacks/config/polytopes.xml.h:16
+#: hacks/config/extrusion.xml.h:8 hacks/config/morph3d.xml.h:8
+#: hacks/config/polytopes.xml.h:16
 msgid "Random Object"
 msgstr "Objet aléatoire"
 
 msgid "Random Object"
 msgstr "Objet aléatoire"
 
@@ -3849,42 +3762,38 @@ msgstr "Objet aléatoire"
 msgid "Screw"
 msgstr "Vis"
 
 msgid "Screw"
 msgstr "Vis"
 
-#: hacks/config/extrusion.xml.h:14
+#: hacks/config/extrusion.xml.h:13
 msgid "Taper"
 msgstr "Pic"
 
 msgid "Taper"
 msgstr "Pic"
 
-#: hacks/config/extrusion.xml.h:15
-msgid "Texture Image"
-msgstr "Image de texture"
-
-#: hacks/config/extrusion.xml.h:16
+#: hacks/config/extrusion.xml.h:14
 msgid "Twistoid"
 msgid "Twistoid"
-msgstr "Twistoïd"
+msgstr "Twistoïde"
 
 
-#: hacks/config/extrusion.xml.h:17 hacks/config/glplanet.xml.h:12
-#: hacks/config/pulsar.xml.h:19
+#: hacks/config/extrusion.xml.h:15 hacks/config/glplanet.xml.h:11
 msgid "Use Flat Coloring"
 msgstr "Utiliser les couleurs en aplat"
 
 msgid "Use Flat Coloring"
 msgstr "Utiliser les couleurs en aplat"
 
-#: hacks/config/extrusion.xml.h:18 hacks/config/glplanet.xml.h:13
+#: hacks/config/extrusion.xml.h:16 hacks/config/glplanet.xml.h:12
 msgid "Use Lighting"
 msgstr "Utiliser l'éclairage"
 
 #: hacks/config/fadeplot.xml.h:2
 msgid ""
 "Draws what looks like a waving ribbon following a sinusoidal path. Written "
 msgid "Use Lighting"
 msgstr "Utiliser l'éclairage"
 
 #: hacks/config/fadeplot.xml.h:2
 msgid ""
 "Draws what looks like a waving ribbon following a sinusoidal path. Written "
-"by Bas van Gaalen and Charles Vidal."
+"by Bas van Gaalen and Charles Vidal; 1997."
 msgstr ""
 "Dessine une sorte de ruban ondulant suivant un chemin sinusoïdal. Écrit par "
 msgstr ""
 "Dessine une sorte de ruban ondulant suivant un chemin sinusoïdal. Écrit par "
-"Bas van Gaalen et Charles Vidal."
+"Bas van Gaalen et Charles Vidal; 1997."
 
 #: hacks/config/fadeplot.xml.h:3
 msgid "FadePlot"
 msgstr "FadePlot"
 
 #: hacks/config/fiberlamp.xml.h:1
 
 #: hacks/config/fadeplot.xml.h:3
 msgid "FadePlot"
 msgstr "FadePlot"
 
 #: hacks/config/fiberlamp.xml.h:1
-msgid "Draws a groovy rotating fiber optic lamp. Written by Tim Auckland."
-msgstr "Dessine une lampe à fibre optique en rotation. Écrit par Tim Auckland."
+msgid ""
+"Draws a groovy rotating fiber optic lamp. Written by Tim Auckland; 2005."
+msgstr "Dessine une lampe à fibre optique en rotation. Écrit par Tim Auckland; 2005."
 
 #: hacks/config/fiberlamp.xml.h:3
 msgid "Fiberlamp"
 
 #: hacks/config/fiberlamp.xml.h:3
 msgid "Fiberlamp"
@@ -3905,10 +3814,9 @@ msgstr "10 fois"
 #: hacks/config/fireflies.xml.h:2
 msgid ""
 "A bunch of fireflies chase a few baits around the screen, leaving colorful "
 #: hacks/config/fireflies.xml.h:2
 msgid ""
 "A bunch of fireflies chase a few baits around the screen, leaving colorful "
-"tails which get blown around by the wind. Written by Matt Perry. This "
-"program is not included with the XScreenSaver package, but if you don't have "
-"it already, you can find it at &lt;http://somewhere.fscked.org/fireflies/"
-"&gt;."
+"tails which get blown around by the wind. This program is not included with "
+"the XScreenSaver package, but if you don't have it already, you can find it "
+"at &lt;http://somewhere.fscked.org/fireflies/&gt;. Written by Matt Perry."
 msgstr ""
 
 #: hacks/config/fireflies.xml.h:3
 msgstr ""
 
 #: hacks/config/fireflies.xml.h:3
@@ -4028,7 +3936,6 @@ msgid "Split a swarm"
 msgstr "Dédoubler un essaim"
 
 #: hacks/config/fireflies.xml.h:36 hacks/config/fluidballs.xml.h:21
 msgstr "Dédoubler un essaim"
 
 #: hacks/config/fireflies.xml.h:36 hacks/config/fluidballs.xml.h:21
-#: hacks/config/glforestfire.xml.h:16
 msgid "Still"
 msgstr "Tranquille"
 
 msgid "Still"
 msgstr "Tranquille"
 
@@ -4068,28 +3975,25 @@ msgstr "Le vent reprend"
 msgid "Activity"
 msgstr "Activité"
 
 msgid "Activity"
 msgstr "Activité"
 
-#: hacks/config/fireworkx.xml.h:4
-msgid "Fireworkx"
-msgstr "Feux d'artifice"
+#: hacks/config/fireworkx.xml.h:3
+msgid "Exploding fireworks. Written by Rony B Chandran; 2004."
+msgstr "Feux d'artifices. Écrit par Rony B Chandran; 2004."
 
 #: hacks/config/fireworkx.xml.h:5
 
 #: hacks/config/fireworkx.xml.h:5
-msgid "Light Flash"
-msgstr "Eclair de lumière"
+msgid "Fireworkx"
+msgstr "Feux d'artifice X"
 
 #: hacks/config/fireworkx.xml.h:6
 
 #: hacks/config/fireworkx.xml.h:6
-msgid ""
-"Pyrotechnics simulation eye-candy, MMX optimized. Turn off Light for speed. "
-"Clicks on the preview window Explodes..! Written by Rony B Chandran. http://"
-"www.ronybc.8k.com"
-msgstr ""
+msgid "Light Flash"
+msgstr "Eclair de lumière"
 
 #: hacks/config/fireworkx.xml.h:7
 msgid "Self Glowing Smoke!"
 msgstr "Fumée luminescente"
 
 #: hacks/config/fireworkx.xml.h:8
 
 #: hacks/config/fireworkx.xml.h:7
 msgid "Self Glowing Smoke!"
 msgstr "Fumée luminescente"
 
 #: hacks/config/fireworkx.xml.h:8
-msgid "Shoot The Shells up"
-msgstr "Destruction des boucliers"
+msgid "Shoot the Shells Up"
+msgstr "Lancement des fusées"
 
 #: hacks/config/flag.xml.h:1
 msgid "Bitmap for Flag"
 
 #: hacks/config/flag.xml.h:1
 msgid "Bitmap for Flag"
@@ -4107,15 +4011,13 @@ msgstr "Texte du drapeau"
 msgid ""
 "This draws a waving colored flag, that undulates its way around the screen. "
 "The trick is the flag can contain arbitrary text and images. By default, it "
 msgid ""
 "This draws a waving colored flag, that undulates its way around the screen. "
 "The trick is the flag can contain arbitrary text and images. By default, it "
-"displays either the current system name and OS type, or a picture of "
-"``Bob,'' but you can replace the text or the image with a command-line "
-"option. Written by Charles Vidal and Jamie Zawinski."
+"displays either the current system name and OS type, or a picture of \"Bob"
+"\". Written by Charles Vidal and Jamie Zawinski; 1997."
 msgstr ""
 "Dessine un drapeau coloré qui ondule sur l'écran. Il peut contenir un texte "
 "et des images arbitraires. Par défaut, il affiche le nom système et le type "
 msgstr ""
 "Dessine un drapeau coloré qui ondule sur l'écran. Il peut contenir un texte "
 "et des images arbitraires. Par défaut, il affiche le nom système et le type "
-"de système d'exploitation en cours ou une photo de «Bob», mais vous pouvez "
-"remplacer le texte ou l'image à l'aide d'une option de ligne de commande. "
-"Écrit par Charles Vidal et Jamie Zawinski."
+"de système d'exploitation en cours ou une photo de «Bob». "
+"Écrit par Charles Vidal et Jamie Zawinski; 1997."
 
 #: hacks/config/flame.xml.h:1 hacks/config/jigsaw.xml.h:1
 #: hacks/config/maze.xml.h:1 hacks/config/wander.xml.h:1
 
 #: hacks/config/flame.xml.h:1 hacks/config/jigsaw.xml.h:1
 #: hacks/config/maze.xml.h:1 hacks/config/wander.xml.h:1
@@ -4128,35 +4030,33 @@ msgstr "0 seconde"
 msgid "10 Seconds"
 msgstr "10 secondes"
 
 msgid "10 Seconds"
 msgstr "10 secondes"
 
-#: hacks/config/flame.xml.h:3
-msgid "Another iterative fractal generator. Written by Scott Draves."
-msgstr "Un autre générateur fractal itératif. Écrit par Scott Draves."
-
-#: hacks/config/flame.xml.h:4 hacks/config/jigglypuff.xml.h:4
+#: hacks/config/flame.xml.h:3 hacks/config/jigglypuff.xml.h:4
 msgid "Complexity"
 msgstr "Complexité"
 
 msgid "Complexity"
 msgstr "Complexité"
 
-#: hacks/config/flame.xml.h:8
+#: hacks/config/flame.xml.h:7
 msgid "Flame"
 msgstr "Flamme"
 
 msgid "Flame"
 msgstr "Flamme"
 
+#: hacks/config/flame.xml.h:9
+msgid "Iterative fractals. Written by Scott Draves; 1993."
+msgstr "Un autre générateur fractal itératif. Écrit par Scott Draves; 1993."
+
 #: hacks/config/flame.xml.h:13
 msgid "Number of Fractals"
 msgstr "Nombre de fractales"
 
 #: hacks/config/flame.xml.h:13
 msgid "Number of Fractals"
 msgstr "Nombre de fractales"
 
-#: hacks/config/flipflop.xml.h:2
-msgid "FlipFlop"
-msgstr "FlipFlop"
-
-#: hacks/config/flipflop.xml.h:3
+#: hacks/config/flipflop.xml.h:1
 msgid ""
 msgid ""
-"Flipflop draws a grid of 3D colored tiles that change positions with each "
-"other. Written by Kevin Ogden."
+"Draws a grid of 3D colored tiles that change positions with each other. "
+"Written by Kevin Ogden; 2003."
 msgstr ""
 msgstr ""
+"FlipFlop dessine une grille de carreaux colorés en 3D qui changent de "
+"position respective. Écrit par Kevin Ogden; 2003."
 
 
-#: hacks/config/flipflop.xml.h:6
-msgid "Solid Tiles"
-msgstr "Tuiles pleines"
+#: hacks/config/flipflop.xml.h:3
+msgid "FlipFlop"
+msgstr "FlipFlop"
 
 #: hacks/config/flipscreen3d.xml.h:2
 msgid "Flipscreen3d"
 
 #: hacks/config/flipscreen3d.xml.h:2
 msgid "Flipscreen3d"
@@ -4165,7 +4065,8 @@ msgstr "Écran retourné 3D"
 #: hacks/config/flipscreen3d.xml.h:3
 msgid ""
 "Grabs an image of the desktop, turns it into a GL texture map, and spins it "
 #: 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."
+"around and deforms it in various ways. Written by Ben Buxton and Jamie "
+"Zawinski; 2001."
 msgstr ""
 
 #: hacks/config/fliptext.xml.h:1 hacks/config/starwars.xml.h:3
 msgstr ""
 
 #: hacks/config/fliptext.xml.h:1 hacks/config/starwars.xml.h:3
@@ -4175,10 +4076,10 @@ msgstr "Texte centré"
 #: hacks/config/fliptext.xml.h:2
 msgid ""
 "Draws successive pages of text. The lines flip in and out in a soothing 3D "
 #: hacks/config/fliptext.xml.h:2
 msgid ""
 "Draws successive pages of text. The lines flip in and out in a soothing 3D "
-"pattern. The text can be the output of a program or the contents of a file "
-"or URL, as configured on the \"Advanced\" tab of the main Screensaver "
-"Preferences window. Written by Jamie Zawinski."
+"pattern. Written by Jamie Zawinski; 2005."
 msgstr ""
 msgstr ""
+"Affiche quelques lignes de texte qui tournoient dans une police 3D unie. "
+"Écrit par Jamie Zawinski; 2005."
 
 #: hacks/config/fliptext.xml.h:4
 msgid "FlipText"
 
 #: hacks/config/fliptext.xml.h:4
 msgid "FlipText"
@@ -4200,54 +4101,50 @@ msgstr "Taille de police"
 msgid "Random Text Alignment"
 msgstr "Alignement aléatoire du texte"
 
 msgid "Random Text Alignment"
 msgstr "Alignement aléatoire du texte"
 
-#: hacks/config/fliptext.xml.h:15 hacks/config/starwars.xml.h:15
+#: hacks/config/fliptext.xml.h:15
 msgid "Text Columns"
 msgstr "Colonnes de texte"
 
 msgid "Text Columns"
 msgstr "Colonnes de texte"
 
-#: hacks/config/fliptext.xml.h:16 hacks/config/starwars.xml.h:16
+#: hacks/config/fliptext.xml.h:16 hacks/config/starwars.xml.h:15
 msgid "Text Lines"
 msgstr "Lignes de texte"
 
 #: hacks/config/flow.xml.h:3
 msgid "Text Lines"
 msgstr "Lignes de texte"
 
 #: hacks/config/flow.xml.h:3
+msgid "Draw bounding box"
+msgstr "Dessiner le cadre englobant"
+
+#: hacks/config/flow.xml.h:5
 msgid "Flow"
 msgstr "Flux"
 
 msgid "Flow"
 msgstr "Flux"
 
-#: hacks/config/flow.xml.h:5
+#: hacks/config/flow.xml.h:7
 msgid "Length of trails"
 msgstr "Taille des traînées"
 
 msgid "Length of trails"
 msgstr "Taille des traînées"
 
-#: hacks/config/flow.xml.h:13
-msgid ""
-"Strange attractors formed of flows in a 3D differential equation phase "
-"space. Written by Tim Auckland."
-msgstr ""
-"Attracteurs étranges formés de flux dans un espace 3D d'équation de phase. "
-"Écrit par Tim Auckland."
-
-#: hacks/config/flow.xml.h:16
-msgid "turn on/off bounding box."
-msgstr "Boîte englobante."
-
-#: hacks/config/flow.xml.h:17
-msgid "turn on/off double buffering."
-msgstr "Double tampon."
+#: hacks/config/flow.xml.h:11
+msgid "Periodic attractors"
+msgstr "Attracteurs périodiques"
 
 
-#: hacks/config/flow.xml.h:18
-msgid "turn on/off periodic attractors."
-msgstr "Attracteurs périodiques."
-
-#: hacks/config/flow.xml.h:19
-msgid "turn on/off ride in the flow."
+#: hacks/config/flow.xml.h:12
+msgid "Ride in the flow"
 msgstr "Circulation dans le flux."
 
 msgstr "Circulation dans le flux."
 
-#: hacks/config/flow.xml.h:20
-msgid "turn on/off rotating around attractor."
+#: hacks/config/flow.xml.h:13
+msgid "Rotating around attractor"
 msgstr "Tourner autour de l'attracteur"
 
 msgstr "Tourner autour de l'attracteur"
 
-#: hacks/config/flow.xml.h:21
-msgid "turn on/off search for new attractors."
+#: hacks/config/flow.xml.h:14
+msgid "Search for new attractors"
 msgstr "Rechercher de nouveaux attracteurs"
 
 msgstr "Rechercher de nouveaux attracteurs"
 
+#: hacks/config/flow.xml.h:19
+msgid ""
+"Strange attractors formed of flows in a 3D differential equation phase "
+"space. Written by Tim Auckland; 1998."
+msgstr ""
+"Attracteurs étranges formés de flux dans un espace 3D d'équation de phase. "
+"Écrit par Tim Auckland.; 1998"
+
 #: hacks/config/fluidballs.xml.h:1
 msgid "      Freefall"
 msgstr "Chute libre"
 #: hacks/config/fluidballs.xml.h:1
 msgid "      Freefall"
 msgstr "Chute libre"
@@ -4273,7 +4170,8 @@ 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 "
 "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.) By Peter Birtles and Jamie Zawinski."
+"keep the settled balls in motion.) Written by Peter Birtles and Jamie "
+"Zawinski; 2002."
 msgstr ""
 
 #: hacks/config/fluidballs.xml.h:15
 msgstr ""
 
 #: hacks/config/fluidballs.xml.h:15
@@ -4318,34 +4216,34 @@ msgstr "RVB"
 
 #: hacks/config/flurry.xml.h:10
 msgid ""
 
 #: hacks/config/flurry.xml.h:10
 msgid ""
-"This port of the OSX screensaver of the same name draws a colourful star"
-"(fish)like flurry of particles. xscreensaver port by Tobias Sargeant &lt;"
-"tobias.sargeant@bigpond.com&gt; Original Mac version by Calum Robinson &lt;"
-"calumr@mac.com&gt; http://homepage.mac.com/calumr"
+"This X11 port of the OSX screensaver of the same name draws a colourful star"
+"(fish)like flurry of particles. Original Mac version: http://homepage.mac."
+"com/calumr Written by Calum Robinson and Tobias Sargeant; 2002."
 msgstr ""
 
 #: hacks/config/flyingtoasters.xml.h:1
 msgid ""
 "A fleet of 3d space-age jet-powered flying toasters (and toast!) Inspired by "
 msgstr ""
 
 #: hacks/config/flyingtoasters.xml.h:1
 msgid ""
 "A fleet of 3d space-age jet-powered flying toasters (and toast!) Inspired by "
-"the ancient Berkeley Systems After Dark flying toasters. By Jamie Zawinski "
-"and Baconmonkey."
+"the ancient Berkeley Systems After Dark flying toasters. Written by Jamie "
+"Zawinski and Baconmonkey; 2003."
 msgstr ""
 
 #: hacks/config/flyingtoasters.xml.h:2
 msgid "Air Speed"
 msgstr "Vitesse de l'air"
 
 msgstr ""
 
 #: hacks/config/flyingtoasters.xml.h:2
 msgid "Air Speed"
 msgstr "Vitesse de l'air"
 
-#: hacks/config/flyingtoasters.xml.h:4
-msgid "Chrome Toasters"
-msgstr "Grille-pains chromés"
+#: hacks/config/flyingtoasters.xml.h:4 hacks/config/jigglypuff.xml.h:2
+msgid "Chrome"
+msgstr "Chrome"
 
 #: hacks/config/flyingtoasters.xml.h:6
 
 #: hacks/config/flyingtoasters.xml.h:6
-msgid "Flying Toasters"
-msgstr "Grille-pains volant"
+msgid "FlyingToasters"
+msgstr "Grille-pain volant"
 
 
-#: hacks/config/flyingtoasters.xml.h:7 hacks/config/glslideshow.xml.h:17
-#: hacks/config/jigglypuff.xml.h:12 hacks/config/juggle.xml.h:5
-#: hacks/config/mirrorblob.xml.h:15 hacks/config/pipes.xml.h:10
+#: hacks/config/flyingtoasters.xml.h:7 hacks/config/glschool.xml.h:12
+#: hacks/config/glslideshow.xml.h:17 hacks/config/jigglypuff.xml.h:12
+#: hacks/config/juggle.xml.h:11 hacks/config/mirrorblob.xml.h:15
+#: hacks/config/pipes.xml.h:12
 msgid "None"
 msgstr "Aucun"
 
 msgid "None"
 msgstr "Aucun"
 
@@ -4355,13 +4253,9 @@ msgstr "Nombre de tranches"
 
 #: hacks/config/flyingtoasters.xml.h:9
 msgid "Number of Toasters"
 
 #: hacks/config/flyingtoasters.xml.h:9
 msgid "Number of Toasters"
-msgstr "Nombre de grille-pains"
+msgstr "Nombre de grille-pain"
 
 #: hacks/config/flyingtoasters.xml.h:12
 
 #: hacks/config/flyingtoasters.xml.h:12
-msgid "Solid Colors"
-msgstr "Couleurs uniformes"
-
-#: hacks/config/flyingtoasters.xml.h:13
 msgid "Swarm"
 msgstr "Essaim"
 
 msgid "Swarm"
 msgstr "Essaim"
 
@@ -4389,11 +4283,13 @@ msgstr "Pages de texte"
 msgid ""
 "Puts text on the screen using large characters that glide in from the edges, "
 "assemble, then disperse. Alternately, it can simply scroll whole sentences "
 msgid ""
 "Puts text on the screen using large characters that glide in from the edges, "
 "assemble, then disperse. Alternately, it can simply scroll whole sentences "
-"from right to left. The text can be the output of a program or the contents "
-"of a file or URL, as configured on the \"Advanced\" tab of the main "
-"Screensaver Preferences window. Written Jamie Zawinski."
+"from right to left. Written by Jamie Zawinski; 2003."
 msgstr ""
 
 msgstr ""
 
+#: hacks/config/fontglide.xml.h:12
+msgid "Random display style"
+msgstr "Style d'affichage aléatoire"
+
 #: hacks/config/fontglide.xml.h:14
 msgid "Text Linger"
 msgstr "Rémanence du texte"
 #: hacks/config/fontglide.xml.h:14
 msgid "Text Linger"
 msgstr "Rémanence du texte"
@@ -4406,13 +4302,10 @@ msgstr "Traînées de vapeur"
 msgid "Forest"
 msgstr "Forêt"
 
 msgid "Forest"
 msgstr "Forêt"
 
-#: hacks/config/forest.xml.h:7
-msgid ""
-"This draws fractal trees. Written by Peter Baumung. Everybody loves "
-"fractals, right?"
+#: hacks/config/forest.xml.h:3
+msgid "Fractal trees. Written by Peter Baumung; 1997."
 msgstr ""
 msgstr ""
-"Dessine des arbres fractals. Écrit par Peter Baumung. Tout le monde aime les "
-"fractales, n'est-ce pas ?"
+"Dessine des arbres fractals. Écrit par Peter Baumung; 1997"
 
 #: hacks/config/fuzzyflakes.xml.h:2
 msgid "Border Thickness"
 
 #: hacks/config/fuzzyflakes.xml.h:2
 msgid "Border Thickness"
@@ -4423,8 +4316,10 @@ msgid "Delay"
 msgstr "Délai"
 
 #: hacks/config/fuzzyflakes.xml.h:6
 msgstr "Délai"
 
 #: hacks/config/fuzzyflakes.xml.h:6
-msgid "Falling colored snowflake/flower shapes. Written by Barry Dmytro."
+msgid "Falling colored snowflake/flower shapes. Written by Barry Dmytro; 2004."
 msgstr ""
 msgstr ""
+"Formes colorées (flocons de neige/fleurs) qui tombent. Écrit par Barry "
+"Dmytro; 2004."
 
 #: hacks/config/fuzzyflakes.xml.h:9
 msgid "FuzzyFlakes"
 
 #: hacks/config/fuzzyflakes.xml.h:9
 msgid "FuzzyFlakes"
@@ -4446,15 +4341,15 @@ msgstr "Galaxie"
 msgid "Rotate Viewpoint"
 msgstr "Rotation du point de vue"
 
 msgid "Rotate Viewpoint"
 msgstr "Rotation du point de vue"
 
-#: hacks/config/galaxy.xml.h:13
+#: hacks/config/galaxy.xml.h:12
 msgid ""
 "This draws spinning galaxies, which then collide and scatter their stars to "
 msgid ""
 "This draws spinning galaxies, which then collide and scatter their stars to "
-"the, uh, four winds or something. Originally an Amiga program by Uli "
-"Siegmund."
+"the, uh, four winds or something. Written by Uli Siegmund, Harald Backert, "
+"and Hubert Feyrer; 1997."
 msgstr ""
 "Dessine des galaxies tournoyantes, qui entrent en collision et dispersent "
 msgstr ""
 "Dessine des galaxies tournoyantes, qui entrent en collision et dispersent "
-"leurs étoiles aux quatre vents (en quelque sorte). Initialement un programme "
-"Amiga d'Uli Siegmund."
+"leurs étoiles aux quatre vents (en quelque sorte). "
+"Écrit par Uli Siegmund, Harald Backert et Hubert Feyrer; 1997."
 
 #: hacks/config/gears.xml.h:3
 msgid "Gears"
 
 #: hacks/config/gears.xml.h:3
 msgid "Gears"
@@ -4464,18 +4359,19 @@ msgstr "Engrenages"
 msgid "Planetary Gear System"
 msgstr "Train d'engrenages planétaires"
 
 msgid "Planetary Gear System"
 msgstr "Train d'engrenages planétaires"
 
-#: hacks/config/gears.xml.h:5 hacks/config/goop.xml.h:9
+#: hacks/config/gears.xml.h:6 hacks/config/goop.xml.h:9
 msgid "Rotational Speed"
 msgstr "Vitesse de rotation"
 
 #: hacks/config/gears.xml.h:9
 msgid ""
 "This draws sets of turning, interlocking gears, rotating in three "
 msgid "Rotational Speed"
 msgstr "Vitesse de rotation"
 
 #: 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."
+"dimensions. Written by Brian Paul, Jamie Zawinski. Danny Sung, and Ed "
+"Mackey; 1997."
 msgstr ""
 msgstr ""
-"Dessine des engrenages qui s'emboîtent et pivotent en trois dimensions. Un "
-"autre hack GL de Danny Sung, Brian Paul, Ed Mackey et Jamie Zawinski."
+"Dessine des engrenages qui s'emboîtent et pivotent en trois dimensions. "
+"Écrit by Brian Paul, Jamie Zawinski. Danny Sung et Ed "
+"Mackey; 1997."
 
 #: hacks/config/gears.xml.h:10
 msgid "Three Gear System"
 
 #: hacks/config/gears.xml.h:10
 msgid "Three Gear System"
@@ -4487,11 +4383,11 @@ msgstr "Échiquier"
 
 #: hacks/config/gflux.xml.h:5
 msgid ""
 
 #: hacks/config/gflux.xml.h:5
 msgid ""
-"Draws a rippling waves on a rotating wireframe grid, using GL. Written by "
-"Josiah Pease."
+"Draws a rippling waves on a rotating wireframe grid. Written by Josiah "
+"Pease; 2000."
 msgstr ""
 msgstr ""
-"Dessine des vagues ondulantes sur une grille en rotation en utilisant GL. "
-"Écrit par Josiah Pease."
+"Dessine des vagues ondulantes sur une grille en rotation. "
+"Écrit par Josiah Pease; 2000."
 
 #: hacks/config/gflux.xml.h:7
 msgid "Flat Lighting"
 
 #: hacks/config/gflux.xml.h:7
 msgid "Flat Lighting"
@@ -4503,17 +4399,17 @@ msgstr "GFlux"
 
 #: hacks/config/gflux.xml.h:9
 msgid "Mesh Density"
 
 #: hacks/config/gflux.xml.h:9
 msgid "Mesh Density"
-msgstr "Densité de maille"
+msgstr "Densité du treillis"
 
 #: hacks/config/gflux.xml.h:10
 
 #: hacks/config/gflux.xml.h:10
-msgid "Screen Image"
-msgstr "Image écran"
+msgid "Picture"
+msgstr "Image"
 
 #: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:21
 msgid "Wave Speed"
 msgstr "Vitesse des vagues"
 
 
 #: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:21
 msgid "Wave Speed"
 msgstr "Vitesse des vagues"
 
-#: hacks/config/gflux.xml.h:15 hacks/config/glmatrix.xml.h:20
+#: hacks/config/gflux.xml.h:15 hacks/config/glmatrix.xml.h:18
 msgid "Waves"
 msgstr "Vagues"
 
 msgid "Waves"
 msgstr "Vagues"
 
@@ -4537,7 +4433,7 @@ msgid ""
 "increasingly-enlarged and increasingly-transparent versions of that texture "
 "onto the frame buffer. As such, it's quite graphics intensive: don't bother "
 "trying to run this if you don't have hardware-accelerated OpenGL texture "
 "increasingly-enlarged and increasingly-transparent versions of that texture "
 "onto the frame buffer. As such, it's quite graphics intensive: don't bother "
 "trying to run this if you don't have hardware-accelerated OpenGL texture "
-"support. It will hurt your machine bad."
+"support. It will hurt your machine bad. Written by Jamie Zawinski; 2002."
 msgstr ""
 
 #: hacks/config/gleidescope.xml.h:2 hacks/config/glslideshow.xml.h:6
 msgstr ""
 
 #: hacks/config/gleidescope.xml.h:2 hacks/config/glslideshow.xml.h:6
@@ -4547,9 +4443,11 @@ msgstr "5 minutes"
 
 #: hacks/config/gleidescope.xml.h:3
 msgid ""
 
 #: hacks/config/gleidescope.xml.h:3
 msgid ""
-"An OpenGL kaleidescope that operates on your desktop image, or on image "
-"files loaded from disk. Written by andrew dean."
+"A kaleidescope that operates on your desktop image, or on image files loaded "
+"from disk. Written by Andrew Dean; 2003."
 msgstr ""
 msgstr ""
+"Un kaléïdoscope qui utilise une image de votre bureau, ou un fichier "
+"image chargé depuis le disque. Écrit par Andrew Dean; 2003."
 
 #: hacks/config/gleidescope.xml.h:4
 msgid "Gleidescope"
 
 #: hacks/config/gleidescope.xml.h:4
 msgid "Gleidescope"
@@ -4559,15 +4457,11 @@ msgstr "Kaleïdoscope GL"
 msgid "Image Duration"
 msgstr "Durée de l'image"
 
 msgid "Image Duration"
 msgstr "Durée de l'image"
 
-#: hacks/config/gleidescope.xml.h:6
-msgid "Image file"
-msgstr "Fichier image"
-
-#: hacks/config/gleidescope.xml.h:8
+#: hacks/config/gleidescope.xml.h:7
 msgid "Move"
 msgstr "Déplacement"
 
 msgid "Move"
 msgstr "Déplacement"
 
-#: hacks/config/gleidescope.xml.h:11
+#: hacks/config/gleidescope.xml.h:10
 msgid "Size of tube"
 msgstr "Taille du tube"
 
 msgid "Size of tube"
 msgstr "Taille du tube"
 
@@ -4578,16 +4472,14 @@ msgstr "Désert"
 #: hacks/config/glforestfire.xml.h:3
 msgid ""
 "Draws an animation of sprinkling fire-like 3D triangles in a landscape "
 #: 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@users.sourceforge."
-"net&gt;."
+"filled with trees. Written by Eric Lassauge; 2002."
 msgstr ""
 "Dessine une animation d'un pseudo-feu avec des triangles 3D dans un paysage "
 msgstr ""
 "Dessine une animation d'un pseudo-feu avec des triangles 3D dans un paysage "
-"arboré. Nécessite OpenGL et une machine avec un support matériel puissant "
-"pour les textures. Écrit par Eric Lassauge &lt;lassauge@users.sourceforge."
-"net&gt;."
+"arboré. Écrit par Eric Lassauge <lassauge@users.sourceforge."
+"net>; 2002."
 
 
-#: hacks/config/glforestfire.xml.h:5 hacks/config/glmatrix.xml.h:9
+#: hacks/config/glforestfire.xml.h:5 hacks/config/glmatrix.xml.h:6
+#: hacks/config/glschool.xml.h:8
 msgid "Fog"
 msgstr "Brouillard"
 
 msgid "Fog"
 msgstr "Brouillard"
 
@@ -4600,20 +4492,20 @@ msgid "Huge Fire"
 msgstr "Grand incendie"
 
 #: hacks/config/glforestfire.xml.h:9
 msgstr "Grand incendie"
 
 #: hacks/config/glforestfire.xml.h:9
-msgid "No shadow"
-msgstr "Pas d'ombre"
-
-#: hacks/config/glforestfire.xml.h:11
 msgid "Number of trees"
 msgstr "Nombre d'arbres"
 
 msgid "Number of trees"
 msgstr "Nombre d'arbres"
 
-#: hacks/config/glforestfire.xml.h:12
+#: hacks/config/glforestfire.xml.h:10
 msgid "Rain"
 msgstr "Pluie"
 
 msgid "Rain"
 msgstr "Pluie"
 
-#: hacks/config/glforestfire.xml.h:17
-msgid "Track mouse"
-msgstr "Suivre la souris"
+#: hacks/config/glforestfire.xml.h:11
+msgid "Shadows"
+msgstr "Ombres"
+
+#: hacks/config/glforestfire.xml.h:15
+msgid "Textures"
+msgstr "Textures"
 
 #: hacks/config/glhanoi.xml.h:1
 msgid "Enable fog"
 
 #: hacks/config/glhanoi.xml.h:1
 msgid "Enable fog"
@@ -4623,10 +4515,6 @@ msgstr "Activer le brouillard"
 msgid "Enable lighting"
 msgstr "Activer l'éclairage"
 
 msgid "Enable lighting"
 msgstr "Activer l'éclairage"
 
-#: hacks/config/glhanoi.xml.h:4
-msgid "Frame Delay (us)"
-msgstr "Délai entre trames (us)"
-
 #: hacks/config/glhanoi.xml.h:5
 msgid "GLHanoi"
 msgstr "GL Hanoï"
 #: hacks/config/glhanoi.xml.h:5
 msgid "GLHanoi"
 msgstr "GL Hanoï"
@@ -4639,8 +4527,11 @@ msgstr "Nombre de disques"
 msgid ""
 "Solves the Towers of Hanoi puzzle. Move N disks from one pole to another, "
 "one disk at a time, with no disk ever resting on a disk smaller than itself. "
 msgid ""
 "Solves the Towers of Hanoi puzzle. Move N disks from one pole to another, "
 "one disk at a time, with no disk ever resting on a disk smaller than itself. "
-"Written by Dave Atkinson."
+"Written by Dave Atkinson; 2005."
 msgstr ""
 msgstr ""
+"Résolution du problème des Tours de Hanoï. Déplace N disques d'un poteau à "
+"l'autre, un disque à la fois, sans avoir un disque posé sur un autre de "
+"taille inférieure. Écrit par Dave Atkinson; 2005."
 
 #: hacks/config/glknots.xml.h:4
 msgid "GLKnots"
 
 #: hacks/config/glknots.xml.h:4
 msgid "GLKnots"
@@ -4649,8 +4540,8 @@ msgstr "Noeuds GL"
 #: hacks/config/glknots.xml.h:5
 msgid ""
 "Generates some twisting 3d knot patterns. Spins 'em around. Written by Jamie "
 #: hacks/config/glknots.xml.h:5
 msgid ""
 "Generates some twisting 3d knot patterns. Spins 'em around. Written by Jamie "
-"Zawinski."
-msgstr "Génère de nombreux motifs 3D en spirale. Écrit par Jamie Zawinski."
+"Zawinski; 2003."
+msgstr "Génère de nombreux motifs 3D en spirale. Écrit par Jamie Zawinski; 2003."
 
 #: hacks/config/glknots.xml.h:7 hacks/config/lavalite.xml.h:17
 #: hacks/config/spheremonics.xml.h:9
 
 #: hacks/config/glknots.xml.h:7 hacks/config/lavalite.xml.h:17
 #: hacks/config/spheremonics.xml.h:9
@@ -4671,64 +4562,57 @@ msgid "Binary Encoding"
 msgstr "Encodage binaire"
 
 #: hacks/config/glmatrix.xml.h:4
 msgstr "Encodage binaire"
 
 #: hacks/config/glmatrix.xml.h:4
-msgid "Draw Glyphs"
-msgstr "Dessiner des glyphes"
-
-#: hacks/config/glmatrix.xml.h:5
-msgid "Draw Outlines"
-msgstr "Dessiner en fil de fer"
-
-#: hacks/config/glmatrix.xml.h:6
-msgid "Draw Solid Boxes"
-msgstr "Dessiner sans texture"
-
-#: hacks/config/glmatrix.xml.h:7
 msgid ""
 "Draws 3D dropping characters similar to what is seen in the title sequence "
 "of \"The Matrix\". See also \"xmatrix\" for a 2D rendering of the similar "
 "effect that appeared on the computer monitors actually *in* the movie. "
 msgid ""
 "Draws 3D dropping characters similar to what is seen in the title sequence "
 "of \"The Matrix\". See also \"xmatrix\" for a 2D rendering of the similar "
 "effect that appeared on the computer monitors actually *in* the movie. "
-"Written by Jamie Zawinski."
+"Written by Jamie Zawinski; 2003."
 msgstr ""
 msgstr ""
+"Dessine des caractères 3D qui tombent de façon similaire à ce que l'on voit "
+"dans la séquence de titre de «Matrix». Voir également «xmatrix» pour un "
+"rendu 2D du même effet qui apparaît sur les moniteurs *dans* le film. Écrit "
+"par Jamie Zawinski; 2003."
 
 
-#: hacks/config/glmatrix.xml.h:10
+#: hacks/config/glmatrix.xml.h:7
 msgid "GLMatrix"
 msgstr "GLMatrix"
 
 msgid "GLMatrix"
 msgstr "GLMatrix"
 
-#: hacks/config/glmatrix.xml.h:11 hacks/config/xmatrix.xml.h:7
+#: hacks/config/glmatrix.xml.h:8 hacks/config/xmatrix.xml.h:7
 msgid "Genetic Encoding"
 msgstr "Encodage génétique"
 
 msgid "Genetic Encoding"
 msgstr "Encodage génétique"
 
-#: hacks/config/glmatrix.xml.h:12
+#: hacks/config/glmatrix.xml.h:9
 msgid "Glyph Density"
 msgstr "Densité des glyphes"
 
 msgid "Glyph Density"
 msgstr "Densité des glyphes"
 
-#: hacks/config/glmatrix.xml.h:13
+#: hacks/config/glmatrix.xml.h:10
 msgid "Glyph Speed"
 msgstr "Vitesse des glyphes"
 
 msgid "Glyph Speed"
 msgstr "Vitesse des glyphes"
 
-#: hacks/config/glmatrix.xml.h:14 hacks/config/xmatrix.xml.h:8
+#: hacks/config/glmatrix.xml.h:11 hacks/config/xmatrix.xml.h:8
 msgid "Hexadecimal Encoding"
 msgstr "Encodage hexadécimal"
 
 msgid "Hexadecimal Encoding"
 msgstr "Encodage hexadécimal"
 
-#: hacks/config/glmatrix.xml.h:15 hacks/config/xmatrix.xml.h:11
+#: hacks/config/glmatrix.xml.h:12 hacks/config/xmatrix.xml.h:11
 msgid "Matrix Encoding"
 msgstr "Encodage Matrix"
 
 msgid "Matrix Encoding"
 msgstr "Encodage Matrix"
 
-#: hacks/config/glmatrix.xml.h:16
+#: hacks/config/glmatrix.xml.h:13
 msgid "Panning"
 msgstr "Panoramique"
 
 #: hacks/config/glplanet.xml.h:1
 msgid ""
 msgid "Panning"
 msgstr "Panoramique"
 
 #: hacks/config/glplanet.xml.h:1
 msgid ""
-"Draws a planet bouncing around in space. Written by David Konerding. The "
-"built-in image is a map of the earth (extracted from `xearth'), but you can "
-"wrap any texture around the sphere, e.g., the planetary textures that come "
-"with `ssystem'."
+"Draws a planet bouncing around in space. The built-in image is a map of the "
+"earth (extracted from `xearth'), but you can wrap any texture around the "
+"sphere, e.g., the planetary textures that come with `ssystem'. Written by "
+"David Konerding; 1998."
 msgstr ""
 msgstr ""
-"Dessine une planète qui rebondit dans l'espace. Écrit par David Konerding. "
+"Dessine une planète qui rebondit dans l'espace. "
 "L'image intégrée est un planisphère (extrait de «xearth»), mais vous pouvez "
 "entourer la sphère d'une texture quelconque, p. ex., les textures "
 "planétaires fournies avec «ssystem»."
 "L'image intégrée est un planisphère (extrait de «xearth»), mais vous pouvez "
 "entourer la sphère d'une texture quelconque, p. ex., les textures "
 "planétaires fournies avec «ssystem»."
+"Écrit par David Konerding. 1998"
 
 #: hacks/config/glplanet.xml.h:3
 msgid "GLPlanet"
 
 #: hacks/config/glplanet.xml.h:3
 msgid "GLPlanet"
@@ -4742,8 +4626,49 @@ msgstr "Fichier image"
 msgid "Roll"
 msgstr "Pivote"
 
 msgid "Roll"
 msgstr "Pivote"
 
+#: hacks/config/glschool.xml.h:1
+msgid "Avoidance"
+msgstr "Evitement"
+
+#: hacks/config/glschool.xml.h:2
+msgid "Centering"
+msgstr "Centrage"
+
+#: hacks/config/glschool.xml.h:3 hacks/config/molecule.xml.h:7
+#: hacks/config/spheremonics.xml.h:2
+msgid "Draw Bounding Box"
+msgstr "Dessiner le cadre englobant"
+
+#: hacks/config/glschool.xml.h:4
+msgid "Draw Goal"
+msgstr "Dessiner des cibles"
+
+#: hacks/config/glschool.xml.h:7
+msgid "Fish Count"
+msgstr "Nombre de poissons"
+
+#: hacks/config/glschool.xml.h:9
+msgid "Goal Following"
+msgstr "Suivi de la cible"
+
+#: hacks/config/glschool.xml.h:16
+msgid ""
+"Uses Craig Reynolds' Boids algorithm to simulate a school of fish. Looks "
+"best with more fish, so raise the number of fish until the frame rate "
+"declines to 25-30 fps. Written by David C. Lambert; 2006."
+msgstr ""
+
+#: hacks/config/glschool.xml.h:17
+msgid "Velocity Matching"
+msgstr "Couplage de vitesse"
+
+#: hacks/config/glschool.xml.h:19
+msgid "glschool"
+msgstr "GLschool"
+
 #: hacks/config/glslideshow.xml.h:4 hacks/config/rd-bomb.xml.h:5
 #: hacks/config/glslideshow.xml.h:4 hacks/config/rd-bomb.xml.h:5
-#: hacks/config/substrate.xml.h:4 hacks/config/xplanet.xml.h:4
+#: hacks/config/rdbomb.xml.h:5 hacks/config/substrate.xml.h:4
+#: hacks/config/xplanet.xml.h:4
 #, no-c-format
 msgid "100%"
 msgstr "100%"
 #, no-c-format
 msgid "100%"
 msgstr "100%"
@@ -4764,11 +4689,11 @@ msgstr "Montre au moins ce % de l'image :"
 
 #: hacks/config/glslideshow.xml.h:10 hacks/config/mirrorblob.xml.h:6
 msgid "Crossfade Duration:"
 
 #: hacks/config/glslideshow.xml.h:10 hacks/config/mirrorblob.xml.h:6
 msgid "Crossfade Duration:"
-msgstr "Durée du fondu-enchaîné :"
+msgstr "Durée du fondu-enchaîné"
 
 #: hacks/config/glslideshow.xml.h:11
 msgid "Frame Rate:"
 
 #: hacks/config/glslideshow.xml.h:11
 msgid "Frame Rate:"
-msgstr "Trames par seconde :"
+msgstr "Trames par seconde"
 
 #: hacks/config/glslideshow.xml.h:12
 msgid "GLSlideshow"
 
 #: hacks/config/glslideshow.xml.h:12
 msgid "GLSlideshow"
@@ -4777,13 +4702,8 @@ msgstr "Diaporama GL"
 #: hacks/config/glslideshow.xml.h:15
 msgid ""
 "Loads a random sequence of images and smoothly scans and zooms around in "
 #: hacks/config/glslideshow.xml.h:15
 msgid ""
 "Loads a random sequence of images and smoothly scans and zooms around in "
-"each, fading from pan to pan. To tell it where to find the images to "
-"display, go to the \"Advanced\" tab on the Screensaver Preferences window. "
-"Select \"Choose Random Images\", and enter your image directory in the text "
-"field right below that. (Note: not the the \"Advanced\" button at the bottom "
-"of this window: the tab at the top of the *other* window.) This program "
-"requires a good video card capable of supporting large textures. Written by "
-"Jamie Zawinski and Mike Oliphant."
+"each, fading from pan to pan. Written by Jamie Zawinski and Mike Oliphant; "
+"2003."
 msgstr ""
 
 #: hacks/config/glslideshow.xml.h:18
 msgstr ""
 
 #: hacks/config/glslideshow.xml.h:18
@@ -4801,10 +4721,10 @@ msgstr "Vitesse angulaire"
 #: hacks/config/glsnake.xml.h:4
 msgid ""
 "Draws a simulation of the Rubik's Snake puzzle. Written by Jamie Wilkinson, "
 #: hacks/config/glsnake.xml.h:4
 msgid ""
 "Draws a simulation of the Rubik's Snake puzzle. Written by Jamie Wilkinson, "
-"Andrew Bennetts, and Peter Aylett."
+"Andrew Bennetts, and Peter Aylett; 2002."
 msgstr ""
 "Dessine une simulation du serpent Rubik. Écrit par Jamie Wilkinson, Andrew "
 msgstr ""
 "Dessine une simulation du serpent Rubik. Écrit par Jamie Wilkinson, Andrew "
-"Bennetts et Peter Aylett."
+"Bennetts et Peter Aylett; 2002."
 
 #: hacks/config/glsnake.xml.h:7
 msgid "GlSnake"
 
 #: hacks/config/glsnake.xml.h:7
 msgid "GlSnake"
@@ -4812,39 +4732,39 @@ msgstr "Serpent GL"
 
 #: hacks/config/glsnake.xml.h:8
 msgid "Loose"
 
 #: hacks/config/glsnake.xml.h:8
 msgid "Loose"
-msgstr "Étendu"
+msgstr "Eloigné"
 
 #: hacks/config/glsnake.xml.h:9
 msgid "Packing"
 
 #: hacks/config/glsnake.xml.h:9
 msgid "Packing"
-msgstr "Emballage"
+msgstr "Noeuds"
 
 #: hacks/config/glsnake.xml.h:11
 msgid "Show Titles"
 
 #: hacks/config/glsnake.xml.h:11
 msgid "Show Titles"
-msgstr "Montre les titres"
+msgstr "Montrer les titres"
 
 
-#: hacks/config/glsnake.xml.h:14
+#: hacks/config/glsnake.xml.h:13
 msgid "Tight"
 msgstr "Serré"
 
 msgid "Tight"
 msgstr "Serré"
 
-#: hacks/config/glsnake.xml.h:16
+#: hacks/config/glsnake.xml.h:15
 msgid "Y Angular Velocity"
 msgstr "Vitesse angulaire en Y"
 
 msgid "Y Angular Velocity"
 msgstr "Vitesse angulaire en Y"
 
-#: hacks/config/glsnake.xml.h:17
+#: hacks/config/glsnake.xml.h:16
 msgid "Z Angular Velocity"
 msgstr "Vitesse angulaire en Z"
 
 #: hacks/config/gltext.xml.h:1
 msgid "Always face front"
 msgid "Z Angular Velocity"
 msgstr "Vitesse angulaire en Z"
 
 #: hacks/config/gltext.xml.h:1
 msgid "Always face front"
-msgstr "Toujours regarder l'avant"
+msgstr "Toujours voir la face avant"
 
 #: hacks/config/gltext.xml.h:2
 msgid ""
 "Displays a few lines of text spinning around in a solid 3D font. Written by "
 
 #: hacks/config/gltext.xml.h:2
 msgid ""
 "Displays a few lines of text spinning around in a solid 3D font. Written by "
-"Jamie Zawinski."
+"Jamie Zawinski; 2001."
 msgstr ""
 "Affiche quelques lignes de texte qui tournoient dans une police 3D unie. "
 msgstr ""
 "Affiche quelques lignes de texte qui tournoient dans une police 3D unie. "
-"Écrit par Jamie Zawinski."
+"Écrit par Jamie Zawinski; 2001."
 
 #: hacks/config/gltext.xml.h:5
 msgid "GLText"
 
 #: hacks/config/gltext.xml.h:5
 msgid "GLText"
@@ -4854,11 +4774,11 @@ msgstr "Texte GL"
 msgid "Program"
 msgstr "Programme"
 
 msgid "Program"
 msgstr "Programme"
 
-#: hacks/config/gltext.xml.h:18
+#: hacks/config/gltext.xml.h:17
 msgid "Spin all the way around"
 msgstr "Rotation"
 
 msgid "Spin all the way around"
 msgstr "Rotation"
 
-#: hacks/config/gltext.xml.h:19 hacks/config/noseguy.xml.h:5
+#: hacks/config/gltext.xml.h:18
 msgid "Text"
 msgstr "Texte"
 
 msgid "Text"
 msgstr "Texte"
 
@@ -4868,8 +4788,8 @@ msgstr "Go"
 
 #: hacks/config/goban.xml.h:2
 msgid ""
 
 #: 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 &lt;http://www.draves.org/goban/&gt;."
+"Replays historical games of go (aka wei-chi and baduk) on the screen. You "
+"can find it at &lt;http://www.draves.org/goban/&gt;. Written by Scott Draves."
 msgstr ""
 
 #: hacks/config/goop.xml.h:1
 msgstr ""
 
 #: hacks/config/goop.xml.h:1
@@ -4908,16 +4828,16 @@ msgid ""
 "over another, their colors merge. I got the idea for this from a cool mouse "
 "pad I have, which achieves the same kind of effect in real life by having "
 "several layers plastic with colored oil between them. Written by Jamie "
 "over another, their colors merge. I got the idea for this from a cool mouse "
 "pad I have, which achieves the same kind of effect in real life by having "
 "several layers plastic with colored oil between them. Written by Jamie "
-"Zawinski."
+"Zawinski; 1997."
 msgstr ""
 "Dessine un ensemble de taches transparentes, animées, semblables à des "
 "amibes. Les taches changent de forme en se déplaçant sur l'écran et sont "
 "translucides,  ce qui permet de voir les taches d'arrière-plan à travers "
 "celles d'avant-plan. Lorsqu'une tache passe au-dessus d'une autre, leurs "
 msgstr ""
 "Dessine un ensemble de taches transparentes, animées, semblables à des "
 "amibes. Les taches changent de forme en se déplaçant sur l'écran et sont "
 "translucides,  ce qui permet de voir les taches d'arrière-plan à travers "
 "celles d'avant-plan. Lorsqu'une tache passe au-dessus d'une autre, leurs "
-"couleurs fusionnent. Écrit par Jamie Zawinski. C'est un super tapis de "
+"couleurs fusionnent. C'est un super tapis de "
 "souris qui m'en a donné l'idée. Il obtient le même type d'effet en étant "
 "composé de plusieurs couches de plastique séparées par  de l'huile colorée. "
 "souris qui m'en a donné l'idée. Il obtient le même type d'effet en étant "
 "composé de plusieurs couches de plastique séparées par  de l'huile colorée. "
-"Écrit par Jamie Zawinski."
+"Écrit par Jamie Zawinski; 1997."
 
 #: hacks/config/goop.xml.h:15
 msgid "Transparent Blobs"
 
 #: hacks/config/goop.xml.h:15
 msgid "Transparent Blobs"
@@ -4942,30 +4862,28 @@ msgstr "Désintégration orbitale"
 #: hacks/config/grav.xml.h:10
 msgid ""
 "This program draws a simple orbital simulation. If you turn on trails, it "
 #: hacks/config/grav.xml.h:10
 msgid ""
 "This program draws a simple orbital simulation. If you turn on trails, it "
-"looks kind of like a cloud-chamber photograph. Written by Greg Bowering."
+"looks kind of like a cloud-chamber photograph. Written by Greg Bowering; "
+"1997."
 msgstr ""
 "Ce programme crée une simple simulation orbitale. Si vous activez les "
 msgstr ""
 "Ce programme crée une simple simulation orbitale. Si vous activez les "
-"traînées, il ressemble à une sorte de photographie de chambre à brouillard. "
-"Écrit par Greg Bowering."
+"traînées, il ressemble à une sorte de photographie de chambre à nuages. "
+"Écrit par Greg Bowering; 1997."
 
 
-#: hacks/config/greynetic.xml.h:2
-msgid "Greynetic"
-msgstr "Rectangles de couleur"
-
-#: hacks/config/greynetic.xml.h:5
+#: hacks/config/greynetic.xml.h:1
 msgid ""
 msgid ""
-"This draws random colored and stippled rectangles. Written by Jamie Zawinski."
+"Draws random colored, stippled and transparent rectangles. Written by Jamie "
+"Zawinski; 1992."
 msgstr ""
 msgstr ""
-"Dessine des rectangles colorés et pointillés de manière aléatoire. Écrit par "
-"Jamie Zawinski."
-
-#: hacks/config/halftone.xml.h:1
-msgid "Delay (Large = low cpu load)"
-msgstr "Délai (élévé = peu de charge processeur)"
+"Dessine des rectangles colorés, en pointillés et transparents de manière aléatoire. Écrit par "
+"Jamie Zawinski; 1992."
+
+#: hacks/config/greynetic.xml.h:3
+msgid "Greynetic"
+msgstr "Rectangles de couleur"
 
 #: hacks/config/halftone.xml.h:2
 msgid "Dot fill factor"
 
 #: hacks/config/halftone.xml.h:2
 msgid "Dot fill factor"
-msgstr "Facteur du remplissage par point"
+msgstr "Facteur de remplissage par point"
 
 #: hacks/config/halftone.xml.h:3
 msgid "Dot size"
 
 #: hacks/config/halftone.xml.h:3
 msgid "Dot size"
@@ -4975,73 +4893,73 @@ msgstr "Taille des points"
 msgid ""
 "Draws the gravity force in each point on the screen seen through a halftone "
 "dot pattern. The gravity force is calculated from a set of moving mass "
 msgid ""
 "Draws the gravity force in each point on the screen seen through a halftone "
 "dot pattern. The gravity force is calculated from a set of moving mass "
-"points. View it from a distance for best effect. Written by Peter Jaric &lt;"
-"peter@jaric.org&gt;."
+"points. View it from a distance for best effect. Written by Peter Jaric"
+"2002."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/halftone.xml.h:5
+#: hacks/config/halftone.xml.h:6
 msgid "Gravity points"
 msgstr "Gravité des points"
 
 msgid "Gravity points"
 msgstr "Gravité des points"
 
-#: hacks/config/halftone.xml.h:6
+#: hacks/config/halftone.xml.h:7
 msgid "Halftone"
 msgstr "Demi-teintes"
 
 msgid "Halftone"
 msgstr "Demi-teintes"
 
-#: hacks/config/halftone.xml.h:10
+#: hacks/config/halftone.xml.h:11
 msgid "Maximum mass"
 msgid "Maximum mass"
-msgstr "Masse max"
+msgstr "Masse max."
 
 
-#: hacks/config/halftone.xml.h:11
+#: hacks/config/halftone.xml.h:12
 msgid "Maximum speed"
 msgid "Maximum speed"
-msgstr "Vitesse max"
+msgstr "Vitesse max."
 
 
-#: hacks/config/halftone.xml.h:12
+#: hacks/config/halftone.xml.h:13
 msgid "Minimum mass"
 msgid "Minimum mass"
-msgstr "Masse min"
+msgstr "Masse min."
 
 
-#: hacks/config/halftone.xml.h:13
+#: hacks/config/halftone.xml.h:14
 msgid "Minimum speed"
 msgid "Minimum speed"
-msgstr "Vitesse min"
+msgstr "Vitesse min."
 
 #: hacks/config/halo.xml.h:1
 msgid "Animate Circles"
 msgstr "Cercles animés"
 
 
 #: hacks/config/halo.xml.h:1
 msgid "Animate Circles"
 msgstr "Cercles animés"
 
-#: hacks/config/halo.xml.h:3
+#: hacks/config/halo.xml.h:2
+msgid ""
+"Draws trippy psychedelic circular patterns that hurt to look at. Written by "
+"Jamie Zawinski; 1993."
+msgstr ""
+"Dessine des motifs circulaires psychédéliques qui font mal aux yeux. "
+"Écrit par Jamie Zawinski; 1993."
+
+#: hacks/config/halo.xml.h:4
 msgid "Halo"
 msgstr "Halo"
 
 msgid "Halo"
 msgstr "Halo"
 
-#: hacks/config/halo.xml.h:5
+#: hacks/config/halo.xml.h:6
 msgid "Number of Circles"
 msgstr "Nombre de cercles"
 
 msgid "Number of Circles"
 msgstr "Nombre de cercles"
 
-#: hacks/config/halo.xml.h:7
+#: hacks/config/halo.xml.h:8
 msgid "Ramp Mode"
 msgstr "Mode rampe"
 
 msgid "Ramp Mode"
 msgstr "Mode rampe"
 
-#: hacks/config/halo.xml.h:9
+#: hacks/config/halo.xml.h:9 hacks/config/imsmap.xml.h:12
+msgid "Random Mode"
+msgstr "Mode aléatoire"
+
+#: hacks/config/halo.xml.h:10
 msgid "Seuss Mode"
 msgstr "Mode Seuss"
 
 msgid "Seuss Mode"
 msgstr "Mode Seuss"
 
-#: hacks/config/halo.xml.h:12
-msgid ""
-"This draws trippy psychedelic circular patterns that hurt to look at. It can "
-"also animate the control-points, but that takes a lot of CPU and bandwidth. "
-"Written by Jamie Zawinski."
-msgstr ""
-"Dessine des motifs circulaires psychédéliques qui font mal aux yeux. Il peut "
-"aussi animer les points de contrôle, mais cette option utilise beaucoup de "
-"ressources processeur et de bande passante. Écrit par Jamie Zawinski."
-
 #: hacks/config/helix.xml.h:4
 msgid "Helix"
 msgstr "Hélix"
 
 #: hacks/config/helix.xml.h:5
 #: hacks/config/helix.xml.h:4
 msgid "Helix"
 msgstr "Hélix"
 
 #: hacks/config/helix.xml.h:5
-msgid ""
-"This repeatedly generates spirally string-art-ish patterns. Written by Jamie "
-"Zawinski."
-msgstr "Génère de nombreux motifs en spirale. Écrit par Jamie Zawinski."
+msgid "Spirally string-art-ish patterns. Written by Jamie Zawinski; 1992."
+msgstr "Génère de nombreux motifs en spirale. Écrit par Jamie Zawinski; 1992."
 
 #: hacks/config/hopalong.xml.h:3
 msgid "EJK1"
 
 #: hacks/config/hopalong.xml.h:3
 msgid "EJK1"
@@ -5090,11 +5008,11 @@ msgstr "Sinus"
 #: hacks/config/hopalong.xml.h:24
 msgid ""
 "This draws lacy fractal patterns, based on iteration in the imaginary plane, "
 #: hacks/config/hopalong.xml.h:24
 msgid ""
 "This draws lacy fractal patterns, based on iteration in the imaginary plane, "
-"from a 1986 Scientific American article. Mostly written by Patrick Naughton."
+"from a 1986 Scientific American article. Written by Patrick Naughton; 1992."
 msgstr ""
 "Dessine des motifs fractals dentelés, basés sur une itération sur le plan "
 msgstr ""
 "Dessine des motifs fractals dentelés, basés sur une itération sur le plan "
-"imaginaire, d'un article scientifique américain de 1986. Principalement "
-"écrit par Patrick Naughton."
+"imaginaire, d'un article scientifique américain de 1986. Écrit "
+"par Patrick Naughton; 1992."
 
 #: hacks/config/hyperball.xml.h:4
 msgid "Hyperball"
 
 #: hacks/config/hyperball.xml.h:4
 msgid "Hyperball"
@@ -5104,13 +5022,13 @@ msgstr "Hyperballe"
 msgid ""
 "Hyperball is to hypercube as dodecahedron is to cube: this displays a 2D "
 "projection of the sequence of 3D objects which are the projections of the 4D "
 msgid ""
 "Hyperball is to hypercube as dodecahedron is to cube: this displays a 2D "
 "projection of the sequence of 3D objects which are the projections of the 4D "
-"analog to the dodecahedron. Technically, it is a \"120 cell polytope.\" "
-"Written by Joe Keane. See also the \"polytopes\" hack for a more general "
-"version of this using OpenGL."
+"analog to the dodecahedron. Technically, it is a \"120 cell polytope\". See "
+"also \"polytopes\" for a more general version of this using OpenGL. Written "
+"by Joe Keane; 2000."
 msgstr ""
 "L'hyperballe est à l'hypercube ce que le dodécaèdre est au cube : il affiche "
 "une projection en 2D de la séquence d'objets 3D qui sont les projections de "
 msgstr ""
 "L'hyperballe est à l'hypercube ce que le dodécaèdre est au cube : il affiche "
 "une projection en 2D de la séquence d'objets 3D qui sont les projections de "
-"l'analogie 4D du dodécaèdre. Écrit par Joe Keane."
+"l'analogie 4D du dodécaèdre. Écrit par Joe Keane; 2002."
 
 #: hacks/config/hyperball.xml.h:10 hacks/config/hypercube.xml.h:10
 msgid "XW Rotation"
 
 #: hacks/config/hyperball.xml.h:10 hacks/config/hypercube.xml.h:10
 msgid "XW Rotation"
@@ -5148,9 +5066,8 @@ msgid ""
 "touching four others; a hypercube is composed of eight cubes, each touching "
 "six others. To make it easier to visualize the rotation, it uses a different "
 "color for the edges of each face. Don't think about it too long, or your "
 "touching four others; a hypercube is composed of eight cubes, each touching "
 "six others. To make it easier to visualize the rotation, it uses a different "
 "color for the edges of each face. Don't think about it too long, or your "
-"brain will melt. Written by Joe Keane, Fritz Mueller, and Jamie Zawinski. "
-"See also the \"polytopes\" hack for a more general version of this using "
-"OpenGL."
+"brain will melt. See also \"polytopes\" for a more general version of this "
+"using OpenGL. Written by Joe Keane, Fritz Mueller, and Jamie Zawinski; 1992."
 msgstr ""
 "Affiche des projections 2D de la séquence d'objets 3D qui sont les "
 "projections de l'analogie 4D du cube : un carré est composé de quatre "
 msgstr ""
 "Affiche des projections 2D de la séquence d'objets 3D qui sont les "
 "projections de l'analogie 4D du cube : un carré est composé de quatre "
@@ -5159,7 +5076,7 @@ msgstr ""
 "huit cubes,  chacun touchant les six autres. Pour visualiser la rotation "
 "plus facilement, il utilise une couleur différente pour les bords de chaque "
 "face. N'y réfléchissez pas trop longtemps, votre cerveau pourrait fondre. "
 "huit cubes,  chacun touchant les six autres. Pour visualiser la rotation "
 "plus facilement, il utilise une couleur différente pour les bords de chaque "
 "face. N'y réfléchissez pas trop longtemps, votre cerveau pourrait fondre. "
-"Écrit par Joe Keane, Fritz Mueller et Jamie Zawinski."
+"Écrit par Joe Keane, Fritz Mueller et Jamie Zawinski; 1992."
 
 #: hacks/config/hypertorus.xml.h:1 hacks/config/polytopes.xml.h:1
 msgid "-4.0"
 
 #: hacks/config/hypertorus.xml.h:1 hacks/config/polytopes.xml.h:1
 msgid "-4.0"
@@ -5170,17 +5087,17 @@ msgid "4.0"
 msgstr "4.0"
 
 #: hacks/config/hypertorus.xml.h:3
 msgstr "4.0"
 
 #: hacks/config/hypertorus.xml.h:3
-msgid "4D Hypertorus"
-msgstr "Hypertore 4D"
-
-#: hacks/config/hypertorus.xml.h:4
 msgid "Color Wheel"
 msgstr "Roue des couleurs"
 
 msgid "Color Wheel"
 msgstr "Roue des couleurs"
 
-#: hacks/config/hypertorus.xml.h:5 hacks/config/polytopes.xml.h:10
+#: hacks/config/hypertorus.xml.h:4 hacks/config/polytopes.xml.h:10
 msgid "Display Speed"
 msgstr "Vitesse d'affichage"
 
 msgid "Display Speed"
 msgstr "Vitesse d'affichage"
 
+#: hacks/config/hypertorus.xml.h:6
+msgid "Hypertorus"
+msgstr "Hypertore 4D"
+
 #: hacks/config/hypertorus.xml.h:7 hacks/config/polytopes.xml.h:12
 msgid "Orthographic 3d"
 msgstr "Projection orthographique 3D"
 #: hacks/config/hypertorus.xml.h:7 hacks/config/polytopes.xml.h:12
 msgid "Orthographic 3d"
 msgstr "Projection orthographique 3D"
@@ -5225,17 +5142,16 @@ msgstr "Spirales transparentes (8 spirale)"
 msgid "Solid Object"
 msgstr "Objets solides"
 
 msgid "Solid Object"
 msgstr "Objets solides"
 
-#: hacks/config/hypertorus.xml.h:20 hacks/config/mirrorblob.xml.h:19
-#: hacks/config/polytopes.xml.h:21 hacks/config/pulsar.xml.h:16
+#: hacks/config/hypertorus.xml.h:20 hacks/config/polytopes.xml.h:21
 msgid "Solid Surface"
 msgstr "Surface solide"
 
 #: hacks/config/hypertorus.xml.h:21
 msgid ""
 "This program shows a rotating Clifford Torus: a torus lying on the \"surface"
 msgid "Solid Surface"
 msgstr "Surface solide"
 
 #: hacks/config/hypertorus.xml.h:21
 msgid ""
 "This program shows a rotating Clifford Torus: a torus lying on the \"surface"
-"\" of a 4D hypersphere. Written by Carsten Steger, inspired by Thomas "
-"Banchoff's book \"Beyond the Third Dimension: Geometry, Computer Graphics, "
-"and Higher Dimensions\", Scientific American Library, 1990."
+"\" of a 4D hypersphere. Inspired by Thomas Banchoff's book \"Beyond the "
+"Third Dimension: Geometry, Computer Graphics, and Higher Dimensions\", "
+"Scientific American Library, 1990. Written by Carsten Steger; 2003."
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:22 hacks/config/polytopes.xml.h:23
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:22 hacks/config/polytopes.xml.h:23
@@ -5279,47 +5195,33 @@ msgid "2"
 msgstr "2"
 
 #: hacks/config/ifs.xml.h:2
 msgstr "2"
 
 #: hacks/config/ifs.xml.h:2
-msgid "Blend"
-msgstr "Fondu"
-
-#: hacks/config/ifs.xml.h:3
 msgid "Detail"
 msgstr "Détail"
 
 #: hacks/config/ifs.xml.h:5
 msgid "Detail"
 msgstr "Détail"
 
 #: hacks/config/ifs.xml.h:5
-msgid "Function"
-msgstr "Fonction"
-
-#: hacks/config/ifs.xml.h:6
-msgid "Functions"
-msgstr "Fonctions"
-
-#: hacks/config/ifs.xml.h:7
 msgid "IFS"
 msgstr "IFS"
 
 msgid "IFS"
 msgstr "IFS"
 
-#: hacks/config/ifs.xml.h:9
+#: hacks/config/ifs.xml.h:8
 msgid "Number of Colours"
 msgstr "Nombre de couleurs"
 
 msgid "Number of Colours"
 msgstr "Nombre de couleurs"
 
-#: hacks/config/ifs.xml.h:11 hacks/config/phosphor.xml.h:6
+#: hacks/config/ifs.xml.h:9
+msgid "Number of Functions"
+msgstr "Nombre de fonctions"
+
+#: hacks/config/ifs.xml.h:11
 msgid "Scale"
 msgstr "Échelle"
 
 msgid "Scale"
 msgstr "Échelle"
 
-#: hacks/config/ifs.xml.h:12
-msgid "Single"
-msgstr "Simple"
-
-#: hacks/config/ifs.xml.h:15
+#: hacks/config/ifs.xml.h:14
 msgid ""
 "This one draws spinning, colliding iterated-function-system images. Note "
 msgid ""
 "This one draws spinning, colliding iterated-function-system images. Note "
-"that the \"quality\" parameter is exponential. Number of points drawn is "
-"functions^detail. The number of colours is only used in Blend mode to "
-"provide a palette to create the base colours. These are then blended "
-"together in a non-colourmap friendly fashion. Written by Chris Le Sueur."
+"that the \"Detail\" parameter is exponential. Number of points drawn is "
+"functions^detail. Written by Chris Le Sueur and Robby Griffin; 1997."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/ifs.xml.h:16
+#: hacks/config/ifs.xml.h:15
 msgid "Translate"
 msgstr "Translation"
 
 msgid "Translate"
 msgstr "Translation"
 
@@ -5335,22 +5237,17 @@ msgstr "Dégradés de teinte"
 msgid "IMSmap"
 msgstr "IMSmap"
 
 msgid "IMSmap"
 msgstr "IMSmap"
 
-#: hacks/config/imsmap.xml.h:12
+#: hacks/config/imsmap.xml.h:13
 msgid "Saturation Gradients"
 msgstr "Dégradés de saturation"
 
 msgid "Saturation Gradients"
 msgstr "Dégradés de saturation"
 
-#: hacks/config/imsmap.xml.h:14
+#: hacks/config/imsmap.xml.h:17
 msgid ""
 msgid ""
-"This generates random cloud-like patterns. It looks quite different in "
-"monochrome and color. The basic idea is to take four points on the edge of "
-"the image, and assign each a random ``elevation''. Then find the point "
-"between them, and give it a value which is the average of the other four, "
-"plus some small random offset. Then coloration is done based on elevation. "
-"The color selection is done by binding the elevation to either hue, "
-"saturation, or brightness, and assigning random values to the others. The "
-"``brightness'' mode tends to yield cloudlike patterns, and the others tend "
-"to generate images that look like heat-maps or CAT-scans. Written by Juergen "
-"Nickelsen and Jamie Zawinski."
+"This generates random cloud-like patterns. The idea is to take four points "
+"on the edge of the image, and assign each a random \"elevation\". Then find "
+"the point between them, and give it a value which is the average of the "
+"other four, plus some small random offset. Coloration is done based on "
+"elevation. Written by Juergen Nickelsen and Jamie Zawinski; 1992."
 msgstr ""
 "Génère des motifs nuageux aléatoires. Son apparence en mode monochrome et "
 "couleur est assez différente. L'idée de base consiste à prendre quatre "
 msgstr ""
 "Génère des motifs nuageux aléatoires. Son apparence en mode monochrome et "
 "couleur est assez différente. L'idée de base consiste à prendre quatre "
@@ -5360,30 +5257,27 @@ msgstr ""
 "La coloration s'effectue alors en fonction de l'élévation. La sélection de "
 "couleur est basée sur l'association de l'élévation à la teinte, la "
 "saturation ou la luminosité, des valeurs aléatoires étant attribuées aux "
 "La coloration s'effectue alors en fonction de l'élévation. La sélection de "
 "couleur est basée sur l'association de l'élévation à la teinte, la "
 "saturation ou la luminosité, des valeurs aléatoires étant attribuées aux "
-"autres paramètres. Le mode ''luminosité'' tend à produire des motifs nuageux "
-"et les autres, à générer des images qui ressemblent à des cartes thermiques "
-"ou des tomodensitogrammes. Écrit par Juergen Nickelsen et Jamie Zawinski."
+"autres paramètres. "
+"Écrit par Juergen Nickelsen et Jamie Zawinski; 1992."
+
+#: hacks/config/interaggregate.xml.h:1
+msgid ""
+"A surface is filled with a hundred medium to small sized circles. Each "
+"circle has a different size and direction, but moves at the same slow rate. "
+"Displays the instantaneous intersections of the circles as well as the "
+"aggregate intersections of the circles. Though actually it doesn't look like "
+"circles at all! Written by Casey Reas, William Ngan, Robert Hodgin, and "
+"Jamie Zawinski; 2004."
+msgstr ""
 
 
-#: hacks/config/interaggregate.xml.h:2
+#: hacks/config/interaggregate.xml.h:3
 msgid "Interaggregate"
 msgstr "InterAggregate"
 
 msgid "Interaggregate"
 msgstr "InterAggregate"
 
-#: hacks/config/interaggregate.xml.h:3 hacks/config/intermomentary.xml.h:3
+#: hacks/config/interaggregate.xml.h:4 hacks/config/intermomentary.xml.h:6
 msgid "Number of Discs"
 msgstr "Nombre de disques"
 
 msgid "Number of Discs"
 msgstr "Nombre de disques"
 
-#: hacks/config/interaggregate.xml.h:6
-msgid ""
-"The Intersection Aggregate is a fun visualization defining the relationships "
-"between objects with Casey Reas, William Ngan, and Robert Hodgin. "
-"Commissioned for display at the Whitney Museum of American Art. A surface "
-"filled with 100 medium to small sized circles. Each circle has a different "
-"size and direction, but moves at the same slow rate. Display: A. The "
-"instantaneous intersections of the circles. B. The aggregate intersections "
-"of the circles. Ported to XScreensaver from the art project \"InterAggregate"
-"\" at http://www.complexification.net"
-msgstr ""
-
 #: hacks/config/interference.xml.h:1 hacks/config/rotzoomer.xml.h:1
 msgid "0"
 msgstr "0°"
 #: hacks/config/interference.xml.h:1 hacks/config/rotzoomer.xml.h:1
 msgid "0"
 msgstr "0°"
@@ -5396,16 +5290,11 @@ msgstr "360°"
 msgid "Anim Speed"
 msgstr "Vitesse d'animation"
 
 msgid "Anim Speed"
 msgstr "Vitesse d'animation"
 
-#: hacks/config/interference.xml.h:4
+#: hacks/config/interference.xml.h:5
 msgid ""
 msgid ""
-"Another color-field hack, this one works by computing decaying sinusoidal "
-"waves, and allowing them to interfere with each other as their origins move. "
-"Written by Hannu Mallat."
+"Color field based on computing decaying sinusoidal waves. Written by Hannu "
+"Mallat; 1998."
 msgstr ""
 msgstr ""
-"Un autre hack basé sur des champs de couleur, qui fonctionne en calculant "
-"des vagues sinusoïdales qui se désintègrent et en leur permettant "
-"d'interagir à mesure du déplacement de leurs origines. Écrit par Hannu "
-"Mallat."
 
 #: hacks/config/interference.xml.h:9
 msgid "Hue"
 
 #: hacks/config/interference.xml.h:9
 msgid "Hue"
@@ -5415,8 +5304,8 @@ msgstr "Teinte"
 msgid "Interference"
 msgstr "Interférences"
 
 msgid "Interference"
 msgstr "Interférences"
 
-#: hacks/config/interference.xml.h:13 hacks/config/t3d.xml.h:9
-#: hacks/config/xearth.xml.h:11 hacks/config/zoom.xml.h:5
+#: hacks/config/interference.xml.h:13 hacks/config/t3d.xml.h:10
+#: hacks/config/zoom.xml.h:5
 msgid "Magnification"
 msgstr "Agrandissement"
 
 msgid "Magnification"
 msgstr "Agrandissement"
 
@@ -5428,25 +5317,30 @@ msgstr "Nombre de vagues"
 msgid "Wave Size"
 msgstr "Taille des vagues"
 
 msgid "Wave Size"
 msgstr "Taille des vagues"
 
+#: hacks/config/intermomentary.xml.h:1
+msgid "400"
+msgstr "400"
+
 #: hacks/config/intermomentary.xml.h:2
 #: hacks/config/intermomentary.xml.h:2
-msgid "Intermomentary"
-msgstr "InterMomentary"
+msgid "50"
+msgstr "50"
 
 
-#: hacks/config/intermomentary.xml.h:6
+#: hacks/config/intermomentary.xml.h:3
 msgid ""
 msgid ""
-"The Intersection Momentary is a fun visualization defining the relationships "
-"between objects with Casey Reas, William Ngan, and Robert Hodgin. "
-"Commissioned for display at the Whitney Museum of American Art. A surface "
-"filled with 100 medium to small sized circles. Each circle has a different "
-"size and direction, but moves at the same slow rate. Display: A. The "
-"instantaneous intersections of the circles. B. The aggregate intersections "
-"of the circles. Ported to XScreensaver from the art project \"InterMomentary"
-"\" at http://www.complexification.net"
+"A surface is filled with a hundred medium to small sized circles. Each "
+"circle has a different size and direction, but moves at the same slow rate. "
+"Displays the instantaneous intersections of the circles as well as the "
+"aggregate intersections of the circles. The circles begin with a radius of 1 "
+"pixel and slowly increase to some arbitrary size. Circles are drawn with "
+"small moving points along the perimeter. The intersections are rendered as "
+"glowing orbs. Glowing orbs are rendered only when a perimeter point moves "
+"past the intersection point. Written by Casey Reas, William Ngan, Robert "
+"Hodgin, and Jamie Zawinski; 2004."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:2
-msgid "Chrome"
-msgstr "Chrome"
+#: hacks/config/intermomentary.xml.h:5
+msgid "Intermomentary"
+msgstr "InterMomentary"
 
 #: hacks/config/jigglypuff.xml.h:3
 msgid "Clown barf"
 
 #: hacks/config/jigglypuff.xml.h:3
 msgid "Clown barf"
@@ -5468,6 +5362,10 @@ msgstr "Atténuation inertielle"
 msgid "JigglyPuff"
 msgstr "JigglyPuff"
 
 msgid "JigglyPuff"
 msgstr "JigglyPuff"
 
+#: hacks/config/jigglypuff.xml.h:13
+msgid "Randomize Almost Everything"
+msgstr "Tout aléatoire"
+
 #: hacks/config/jigglypuff.xml.h:14
 msgid "Rotation speed"
 msgstr "Vitesse de rotation"
 #: hacks/config/jigglypuff.xml.h:14
 msgid "Rotation speed"
 msgstr "Vitesse de rotation"
@@ -5488,25 +5386,20 @@ msgstr "Niveau de frayeur"
 msgid "Spoooooky"
 msgstr "Chair de poulesque (!)"
 
 msgid "Spoooooky"
 msgstr "Chair de poulesque (!)"
 
-#: hacks/config/jigglypuff.xml.h:21 hacks/config/polyhedra.xml.h:148
-#: hacks/config/sballs.xml.h:16
+#: hacks/config/jigglypuff.xml.h:21 hacks/config/morph3d.xml.h:12
+#: hacks/config/polyhedra.xml.h:148 hacks/config/sballs.xml.h:15
 msgid "Tetrahedron"
 msgstr "Tétraèdre"
 
 #: hacks/config/jigglypuff.xml.h:22
 msgid ""
 msgid "Tetrahedron"
 msgstr "Tétraèdre"
 
 #: hacks/config/jigglypuff.xml.h:22
 msgid ""
-"This little gem does bad things with quasi-spherical objects. The gist of it "
-"is that you have what is, structurally, a tetrahedron with tesselated faces. "
-"the vertices on these faces have forces on them in the form of one "
-"proportional to their distance from the surface of a sphere, and one which "
-"is proportional to how far they differ from some ideal distance from their "
-"neighbors. They also have inertia. The forces and distance are parameters "
-"and there are also a couple of visual parameters. The resulting effect can "
-"range from a shape that does nothing, to a frenetic polygon storm. Somewhere "
-"in between there it usually manifests as a blob that jiggles in a kind of "
-"disturbing manner. woo. It doesn't matter, however. You should just pick "
-"'random'. It overrides all the other options, except for fps, delay and "
-"complexity. By Keith Macleod"
+"This does bad things with quasi-spherical objects. You have a tetrahedron "
+"with tesselated faces. The vertices on these faces have forces on them: one "
+"proportional to the distance from the surface of a sphere; and one "
+"proportional to the distance from the neighbors. They also have inertia. The "
+"resulting effect can range from a shape that does nothing, to a frenetic "
+"polygon storm. Somewhere in between there it usually manifests as a blob "
+"that jiggles in a kind of disturbing manner. Written by Keith Macleod; 2003."
 msgstr ""
 
 #: hacks/config/jigglypuff.xml.h:23
 msgstr ""
 
 #: hacks/config/jigglypuff.xml.h:23
@@ -5519,19 +5412,19 @@ msgstr "Force vertex-vertex"
 
 #: hacks/config/jigglypuff.xml.h:26
 msgid "collapse"
 
 #: hacks/config/jigglypuff.xml.h:26
 msgid "collapse"
-msgstr "effondrement"
+msgstr "Effondrement"
 
 #: hacks/config/jigglypuff.xml.h:27
 msgid "expand"
 
 #: hacks/config/jigglypuff.xml.h:27
 msgid "expand"
-msgstr "expansion"
+msgstr "Expansion"
 
 #: hacks/config/jigglypuff.xml.h:28
 msgid "none"
 
 #: hacks/config/jigglypuff.xml.h:28
 msgid "none"
-msgstr "aucune"
+msgstr "Aucune"
 
 #: hacks/config/jigglypuff.xml.h:29
 msgid "strong"
 
 #: hacks/config/jigglypuff.xml.h:29
 msgid "strong"
-msgstr "forte"
+msgstr "Forte"
 
 #: hacks/config/jigsaw.xml.h:4
 msgid "Jigsaw"
 
 #: hacks/config/jigsaw.xml.h:4
 msgid "Jigsaw"
@@ -5548,63 +5441,61 @@ msgid ""
 "external video signal instead of letting it grab the screen image (actually, "
 "I guess this is generally true...) When it is grabbing a video image, it is "
 "sometimes pretty hard to guess what the image is going to look like once the "
 "external video signal instead of letting it grab the screen image (actually, "
 "I guess this is generally true...) When it is grabbing a video image, it is "
 "sometimes pretty hard to guess what the image is going to look like once the "
-"puzzle is solved. Written by Jamie Zawinski."
+"puzzle is solved. Written by Jamie Zawinski; 1998."
 msgstr ""
 "Capture l'écran, le découpe en pièces de puzzle, qu'il mélange, puis remet "
 "en ordre. Fonctionne particulièrement bien lorsque l'image capturée provient "
 "d'un signal vidéo externe et non de l'écran (en fait, je crois que c'est "
 "généralement le cas... ). Lorsqu'il capture une image vidéo, il est parfois "
 "assez difficile de deviner l'apparence de l'image  une fois le puzzle "
 msgstr ""
 "Capture l'écran, le découpe en pièces de puzzle, qu'il mélange, puis remet "
 "en ordre. Fonctionne particulièrement bien lorsque l'image capturée provient "
 "d'un signal vidéo externe et non de l'écran (en fait, je crois que c'est "
 "généralement le cas... ). Lorsqu'il capture une image vidéo, il est parfois "
 "assez difficile de deviner l'apparence de l'image  une fois le puzzle "
-"résolu. Écrit par Jamie Zawinski."
+"résolu. Écrit par Jamie Zawinski; 1998."
 
 
-#: hacks/config/juggle.xml.h:1
-msgid "Draws a juggling stick-man. Written by Tim Auckland."
-msgstr "Dessine un bonhomme jongleur. Écrit par Tim Auckland."
+#: hacks/config/juggle.xml.h:2
+msgid "Bowling Balls"
+msgstr "Balles de bowling"
 
 #: hacks/config/juggle.xml.h:3
 
 #: hacks/config/juggle.xml.h:3
-msgid "Juggle"
-msgstr "Jonglage"
+msgid "Clubs"
+msgstr "Massues"
+
+#: hacks/config/juggle.xml.h:4
+msgid ""
+"Draws a juggling stick-man. See also \"Juggle3D\". Written by Tim Auckland; "
+"2002."
+msgstr "Dessine un bonhomme jongleur. Écrit par Tim Auckland; 2002."
 
 #: hacks/config/juggle.xml.h:6
 
 #: hacks/config/juggle.xml.h:6
-msgid "Performance Length"
-msgstr "Longueur de la performance"
+msgid "Flaming Torches"
+msgstr "Torches enflammées"
+
+#: hacks/config/juggle.xml.h:7
+msgid "Juggle"
+msgstr "Jongler"
+
+#: hacks/config/juggle.xml.h:8
+msgid "Juggle This Pattern"
+msgstr "Jongler avec ce motif"
 
 
-#: hacks/config/juggle.xml.h:11
-msgid "Use Pattern "
-msgstr "Utiliser un pattern"
+#: hacks/config/juggle.xml.h:9
+msgid "Knives"
+msgstr "Couteaux"
 
 #: hacks/config/juggle.xml.h:12
 
 #: hacks/config/juggle.xml.h:12
-msgid "turn on/off Balls."
-msgstr "Balles oui/non."
+msgid "Performance Length"
+msgstr "Durée de la performance"
 
 #: hacks/config/juggle.xml.h:13
 
 #: hacks/config/juggle.xml.h:13
-msgid "turn on/off Bowling Balls."
-msgstr "Balles de bowling oui/non."
+msgid "Print Cambridge Juggling Pattern Descriptions"
+msgstr "Afficher les descriptions du motif de jonglerie"
 
 #: hacks/config/juggle.xml.h:14
 
 #: hacks/config/juggle.xml.h:14
-msgid "turn on/off Clubs."
-msgstr "Massues oui/non."
-
-#: hacks/config/juggle.xml.h:15
-msgid "turn on/off Flaming Torches."
-msgstr "Torches enflammées oui/non."
-
-#: hacks/config/juggle.xml.h:16
-msgid "turn on/off Knives."
-msgstr "Couteaux oui/non."
-
-#: hacks/config/juggle.xml.h:17
-msgid "turn on/off Rings."
-msgstr "Anneaux oui/non."
-
-#: hacks/config/juggle.xml.h:18
-msgid "turn on/off pattern descriptions."
-msgstr "Description des patterns oui/non."
+msgid "Rings"
+msgstr "Anneaux"
 
 #: hacks/config/juggler3d.xml.h:1
 msgid ""
 "3D simulation of a juggler performing with balls, clubs and rings. Written "
 
 #: hacks/config/juggler3d.xml.h:1
 msgid ""
 "3D simulation of a juggler performing with balls, clubs and rings. Written "
-"by Brian Apps and partially based on his Win32 Juggle Saver program."
+"by Brian Apps; 2005."
 msgstr ""
 
 #: hacks/config/juggler3d.xml.h:3
 msgstr ""
 
 #: hacks/config/juggler3d.xml.h:3
@@ -5621,7 +5512,7 @@ msgstr "Jonglage 3D"
 
 #: hacks/config/juggler3d.xml.h:6
 msgid "Juggling Speed"
 
 #: hacks/config/juggler3d.xml.h:6
 msgid "Juggling Speed"
-msgstr "Vitesse de jonglage"
+msgstr "Vitesse de jonglerie"
 
 #: hacks/config/juggler3d.xml.h:7
 msgid "Max Height"
 
 #: hacks/config/juggler3d.xml.h:7
 msgid "Max Height"
@@ -5639,56 +5530,47 @@ msgstr "Hauteur min."
 msgid "Min Objects"
 msgstr "Objets min."
 
 msgid "Min Objects"
 msgstr "Objets min."
 
-#: hacks/config/julia.xml.h:3 hacks/config/rorschach.xml.h:4
+#: hacks/config/julia.xml.h:1
+msgid ""
+"Animates the Julia set (a close relative of the Mandelbrot set). The small "
+"moving dot indicates the control point from which the rest of the image was "
+"generated. Written by Sean McCullough; 1997."
+msgstr ""
+
+#: hacks/config/julia.xml.h:5 hacks/config/rorschach.xml.h:4
 msgid "Iterations"
 msgstr "Itération"
 
 msgid "Iterations"
 msgstr "Itération"
 
-#: hacks/config/julia.xml.h:4
+#: hacks/config/julia.xml.h:6
 msgid "Julia"
 msgstr "Julia"
 
 msgid "Julia"
 msgstr "Julia"
 
-#: hacks/config/julia.xml.h:11
-msgid ""
-"This one draws spinning, animating (are you detecting a pattern here yet?) "
-"explorations of the Julia set. You've probably seen static images of this "
-"fractal form before, but it's a lot of fun to watch in motion as well. One "
-"interesting thing is that there is a small swinging dot passing in front of "
-"the image, which indicates the control point from which the rest of the "
-"image was generated. Written by Sean McCullough."
-msgstr ""
-"Dessine des explorations tournoyantes et animées (distinguez-vous déjà un "
-"motif ?) de la courbe de Julia. Vous avez probablement déjà vu des images "
-"statiques de cette forme fractale, mais c'est aussi très sympa en forme "
-"animée. L'élément intéressant est un petit point animé qui passe devant "
-"l'image et qui indique le point de contrôle à partir duquel le reste de "
-"l'image a été généré. Écrit par Sean McCullough."
-
 #: hacks/config/kaleidescope.xml.h:1
 #: hacks/config/kaleidescope.xml.h:1
+msgid "3"
+msgstr "3"
+
+#: hacks/config/kaleidescope.xml.h:2
+msgid "32"
+msgstr "32"
+
+#: hacks/config/kaleidescope.xml.h:3
 msgid ""
 msgid ""
-"Another clone of an ancient meme, consisting largely of frenetic rotational "
-"motion of colored lines. This one is by Ron Tapia. The motion is nice, but I "
-"think it needs more solids, or perhaps just brighter colors. More variations "
-"in the rotational speed might help, too."
+"A simple kaleidescope. See also \"gleidescope\". Written by Ron Tapia; 1997."
 msgstr ""
 msgstr ""
-"Un autre clone d'un ancien même, principalement constitué de mouvements "
-"rotatifs frénétiques de lignes colorées. Par Ron Tapia. Les mouvements sont "
-"bien, mais je pense qu'il devrait comporter plus de couleurs unies ou "
-"simplement des couleurs plus vives. Davantage de variations de la vitesse de "
-"rotation seraient aussi appréciables."
 
 
-#: hacks/config/kaleidescope.xml.h:4
+#: hacks/config/kaleidescope.xml.h:6
 msgid "Kaleidescope"
 msgstr "Kaleïdoscope"
 
 msgid "Kaleidescope"
 msgstr "Kaleïdoscope"
 
-#: hacks/config/kaleidescope.xml.h:6 hacks/config/qix.xml.h:18
+#: hacks/config/kaleidescope.xml.h:8 hacks/config/qix.xml.h:19
 msgid "Segments"
 msgstr "Segments"
 
 msgid "Segments"
 msgstr "Segments"
 
-#: hacks/config/kaleidescope.xml.h:9
+#: hacks/config/kaleidescope.xml.h:11
 msgid "Symmetry"
 msgstr "Symétrie"
 
 msgid "Symmetry"
 msgstr "Symétrie"
 
-#: hacks/config/kaleidescope.xml.h:10
+#: hacks/config/kaleidescope.xml.h:12
 msgid "Trails"
 msgstr "Traînées"
 
 msgid "Trails"
 msgstr "Traînées"
 
@@ -5699,7 +5581,7 @@ msgstr "Bouteille de Klein"
 #: hacks/config/klein.xml.h:10
 msgid ""
 "This draws a visualization of a Klein bottle or some other interesting "
 #: hacks/config/klein.xml.h:10
 msgid ""
 "This draws a visualization of a Klein bottle or some other interesting "
-"parametric surfaces. Written by Andrey Mirtchovski."
+"parametric surfaces. Written by Andrey Mirtchovski; 2003."
 msgstr ""
 
 #: hacks/config/klein.xml.h:11
 msgstr ""
 
 #: hacks/config/klein.xml.h:11
@@ -5721,25 +5603,24 @@ msgstr "Aléatoire"
 #: hacks/config/kumppa.xml.h:10
 msgid ""
 "Spiraling, spinning, and very, very fast splashes of color rush toward the "
 #: hacks/config/kumppa.xml.h:10
 msgid ""
 "Spiraling, spinning, and very, very fast splashes of color rush toward the "
-"screen. Written by Teemu Suutari."
+"screen. Written by Teemu Suutari; 1998."
 msgstr ""
 "Des taches de couleur très, très rapides foncent vers l'écran en tournoyant "
 msgstr ""
 "Des taches de couleur très, très rapides foncent vers l'écran en tournoyant "
-"et en formant des spirales. Écrit par Teemu Suutari."
+"et en formant des spirales. Écrit par Teemu Suutari; 1998."
 
 #: hacks/config/lament.xml.h:1
 msgid ""
 
 #: hacks/config/lament.xml.h:1
 msgid ""
-"Animates a simulation of Lemarchand's Box, repeatedly solving itself. "
-"Requires OpenGL, and a machine with fast hardware support for texture maps. "
-"Warning: occasionally opens doors. Written by Jamie Zawinski."
+"Animates a simulation of Lemarchand's Box, the Lament Configuration, "
+"repeatedly solving itself. Warning: occasionally opens doors. Written by "
+"Jamie Zawinski; 1998."
 msgstr ""
 "Anime une simulation du cube de Lemarchand, qui se résout sans cesse. "
 msgstr ""
 "Anime une simulation du cube de Lemarchand, qui se résout sans cesse. "
-"Nécessite OpenGL et une machine avec prise en charge matérielle rapide des "
-"mappes de texture. Attention : risque d'ouvrir des portes. Écrit par Jamie "
-"Zawinski."
+"Attention : risque d'ouvrir des portes. Écrit par Jamie "
+"Zawinski; 1998."
 
 #: hacks/config/lament.xml.h:3
 msgid "Lament"
 
 #: hacks/config/lament.xml.h:3
 msgid "Lament"
-msgstr "Lamentations"
+msgstr "Lamentation"
 
 #: hacks/config/laser.xml.h:4
 msgid "Laser"
 
 #: hacks/config/laser.xml.h:4
 msgid "Laser"
@@ -5747,11 +5628,11 @@ msgstr "Laser"
 
 #: hacks/config/laser.xml.h:7
 msgid ""
 
 #: hacks/config/laser.xml.h:7
 msgid ""
-"Moving radiating lines, that look vaguely like scanning laser beams. Written "
-"by Pascal Pensa. (Frankie say: relax.)"
+"Moving radiating lines, that look vaguely like scanning laser beams. "
+"(Frankie say: relax.) Written by Pascal Pensa; 1997."
 msgstr ""
 "Lignes de radiation animées, qui ressemblent vaguement à des faisceaux "
 msgstr ""
 "Lignes de radiation animées, qui ressemblent vaguement à des faisceaux "
-"laser . Écrit par Pascal Pensa. (Frankie a dit : relax.)"
+"laser. (Frankie a dit : relax.). Écrit par Pascal Pensa; 1997."
 
 #: hacks/config/lavalite.xml.h:2 hacks/config/xmountains.xml.h:2
 msgid "10"
 
 #: hacks/config/lavalite.xml.h:2 hacks/config/xmountains.xml.h:2
 msgid "10"
@@ -5769,22 +5650,22 @@ msgstr "Lavalite conique"
 msgid ""
 "Draws a 3D Simulation a Lava Lite(r): odd-shaped blobs of a mysterious "
 "substance are heated, slowly rise to the top of the bottle, and then drop "
 msgid ""
 "Draws a 3D Simulation a Lava Lite(r): odd-shaped blobs of a mysterious "
 "substance are heated, slowly rise to the top of the bottle, and then drop "
-"back down as they cool. This program requires OpenGL and a fairly fast "
-"machine (both CPU and 3D performance.) Written by Jamie Zawinski. \"LAVA LITE"
-"(r) and the configuration of the LAVA(r) brand motion lamp are registered "
-"trademarks of Haggerty Enterprises, Inc. The configuration of the globe and "
-"base of the motion lamp are registered trademarks of Haggerty Enterprises, "
-"Inc. in the U.S.A. and in other countries around the world.\""
+"back down as they cool. This program requires a fairly fast machine (both "
+"CPU and 3D performance.) \"LAVA LITE(r) and the configuration of the LAVA(r) "
+"brand motion lamp are registered trademarks of Haggerty Enterprises, Inc. "
+"The configuration of the globe and base of the motion lamp are registered "
+"trademarks of Haggerty Enterprises, Inc. in the U.S.A. and in other "
+"countries around the world.\" Written by Jamie Zawinski; 2002."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/lavalite.xml.h:9
-msgid "Faceted"
-msgstr "A facettes"
-
-#: hacks/config/lavalite.xml.h:11
+#: hacks/config/lavalite.xml.h:10
 msgid "Giant Lavalite"
 msgstr "Lavalite géante"
 
 msgid "Giant Lavalite"
 msgstr "Lavalite géante"
 
+#: hacks/config/lavalite.xml.h:12
+msgid "Impatient"
+msgstr ""
+
 #: hacks/config/lavalite.xml.h:13
 msgid "LavaLite"
 msgstr "LavaLite"
 #: hacks/config/lavalite.xml.h:13
 msgid "LavaLite"
 msgstr "LavaLite"
@@ -5801,47 +5682,37 @@ msgstr "Style de lampe aléatoire"
 msgid "Rocket Lavalite"
 msgstr "Lavalite roquette"
 
 msgid "Rocket Lavalite"
 msgstr "Lavalite roquette"
 
-#: hacks/config/lightning.xml.h:2
+#: hacks/config/lightning.xml.h:1
+msgid "Crackling fractal lightning bolts. Written by Keith Romberg; 1997."
+msgstr ""
+
+#: hacks/config/lightning.xml.h:3
 msgid "Lightning"
 msgstr "Éclairs"
 
 msgid "Lightning"
 msgstr "Éclairs"
 
-#: hacks/config/lightning.xml.h:7
-msgid ""
-"This one draws crackling fractal lightning bolts. It's simple, direct, and "
-"to the point. If only it had sound... Written by Keith Romberg."
-msgstr ""
-"Dessine des éclairs fractals. C'est simple, direct et sans fioritures. Si "
-"seulement il avait du son... Écrit par Keith Romberg."
-
 #: hacks/config/lisa.xml.h:4
 msgid "Lisa"
 msgstr "Lisa"
 
 #: hacks/config/lisa.xml.h:4
 msgid "Lisa"
 msgstr "Lisa"
 
-#: hacks/config/lisa.xml.h:10
+#: hacks/config/lisa.xml.h:5
+msgid "Lisajous loops. Written by Caleb Cullen; 1997."
+msgstr ""
+
+#: hacks/config/lisa.xml.h:11
 msgid "Steps"
 msgstr "Étapes"
 
 msgid "Steps"
 msgstr "Étapes"
 
-#: hacks/config/lisa.xml.h:11
-msgid ""
-"This draws Lisajous loops, by Caleb Cullen. Remember that device they had "
-"the Phantom Zone prisoners in during their trial in Superman? I think that "
-"was one of these."
-msgstr ""
-"Trace des boucles de Lissajous, par Caleb Cullen. Vous vous souvenez de "
-"l'appareil des prisonniers de la zone fantôme pendant leur procès dans "
-"Superman ? Je crois que c'était quelque chose comme ça."
+#: hacks/config/lissie.xml.h:4
+msgid "Lissie"
+msgstr "Lissajous"
 
 
-#: hacks/config/lissie.xml.h:1
+#: hacks/config/lissie.xml.h:11
 msgid ""
 msgid ""
-"Another Lissajous figure. This one draws the progress of circular shapes "
-"along a path. Written by Alexander Jolk."
+"This one draws the progress of circular shapes along a path. Written by "
+"Alexander Jolk; 1997."
 msgstr ""
 msgstr ""
-"Une autre figure de Lissajous. Elle trace la progression de formes "
-"circulaires le long d'un chemin. Écrit par Alexander Jolk."
-
-#: hacks/config/lissie.xml.h:5
-msgid "Lissie"
-msgstr "Lissajous"
+"Trace la progression de formes "
+"circulaires le long d'un chemin. Écrit par Alexander Jolk; 1997."
 
 #: hacks/config/lmorph.xml.h:1
 msgid "Closed Figures"
 
 #: hacks/config/lmorph.xml.h:1
 msgid "Closed Figures"
@@ -5878,28 +5749,28 @@ msgstr "Figures ouvertes et fermées"
 #: hacks/config/lmorph.xml.h:15
 msgid ""
 "This generates random spline-ish line drawings and morphs between them. "
 #: hacks/config/lmorph.xml.h:15
 msgid ""
 "This generates random spline-ish line drawings and morphs between them. "
-"Written by Sverre H. Huseby and Glenn T. Lines."
+"Written by Sverre H. Huseby and Glenn T. Lines; 1995."
 msgstr ""
 "Génère des dessins en trait aléatoires et crée des morphings. Écrit par "
 msgstr ""
 "Génère des dessins en trait aléatoires et crée des morphings. Écrit par "
-"Sverre H. Huseby et Glenn T. Lines."
-
-#: hacks/config/loop.xml.h:3
-msgid "Loop"
-msgstr "Boucles"
+"Sverre H. Huseby et Glenn T. Lines; 1995."
 
 
-#: hacks/config/loop.xml.h:10
+#: hacks/config/loop.xml.h:2
 msgid ""
 msgid ""
-"This one produces loop-shaped colonies that spawn, age, and eventually die. "
-"Written by David Bagley."
+"Generates loop-shaped colonies that spawn, age, and eventually die. Written "
+"by David Bagley; 1999."
 msgstr ""
 "Produit des colonies en forme de boucles qui se reproduisent, vieillissent "
 msgstr ""
 "Produit des colonies en forme de boucles qui se reproduisent, vieillissent "
-"et meurent. Écrit par David Bagley."
+"et meurent. Écrit par David Bagley; 1999."
+
+#: hacks/config/loop.xml.h:4
+msgid "Loop"
+msgstr "Boucles"
 
 #: hacks/config/maze.xml.h:3
 msgid "Backtracking Generator"
 msgstr "Générateur de retour en arrière"
 
 
 #: hacks/config/maze.xml.h:3
 msgid "Backtracking Generator"
 msgstr "Générateur de retour en arrière"
 
-#: hacks/config/maze.xml.h:5 hacks/config/slidescreen.xml.h:3
+#: hacks/config/maze.xml.h:5
 msgid "Grid Size"
 msgstr "Taille de la grille"
 
 msgid "Grid Size"
 msgstr "Taille de la grille"
 
@@ -5941,14 +5812,10 @@ msgstr "Vitesse de résolution"
 
 #: hacks/config/maze.xml.h:16
 msgid ""
 
 #: hacks/config/maze.xml.h:16
 msgid ""
-"This is the ancient X maze demo, modified to work with xscreensaver. It "
-"generates a random maze, then solves it with visual feedback. Originally by "
-"Jim Randell; modified by a cast of thousands."
+"This generates random mazes (with various different algorithms), and then "
+"solves them. Backtracking and look-ahead paths are displayed in different "
+"colors. Written by Jim Randell and many others; 1992."
 msgstr ""
 msgstr ""
-"Il s'agit de l'ancienne démo du labyrinthe X, modifiée pour fonctionner avec "
-"xscreensaver. Elle génère un labyrinthe aléatoire, puis le résout avec un "
-"feedback visuel. Initialement par Jim Randell; modifié par des milliers de "
-"gens."
 
 #: hacks/config/memscroller.xml.h:1
 msgid "Draw Green"
 
 #: hacks/config/memscroller.xml.h:1
 msgid "Draw Green"
@@ -5973,22 +5840,22 @@ msgstr "MemScroller"
 #: hacks/config/memscroller.xml.h:9
 msgid ""
 "This draws a dump of its own process memory scrolling across the screen in "
 #: hacks/config/memscroller.xml.h:9
 msgid ""
 "This draws a dump of its own process memory scrolling across the screen in "
-"three windows at three different rates. Written by Jamie Zawinski."
+"three windows at three different rates. Written by Jamie Zawinski; 2004."
 msgstr ""
 
 #: hacks/config/menger.xml.h:6
 msgid "Menger"
 msgstr "Menger"
 
 msgstr ""
 
 #: hacks/config/menger.xml.h:6
 msgid "Menger"
 msgstr "Menger"
 
-#: hacks/config/menger.xml.h:19
+#: hacks/config/menger.xml.h:18
 msgid ""
 "This draws the three-dimensional variant of the recursive Menger Gasket, a "
 "cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
 msgid ""
 "This draws the three-dimensional variant of the recursive Menger Gasket, a "
 "cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
-"by Jamie Zawinski."
+"by Jamie Zawinski; 2001."
 msgstr ""
 "Dessine une variante tridimensionnelle du tamis récursif de Menger, un objet "
 "fractal cubique analogue au tétraèdre de Sierpinski. Écrit par Jamie "
 msgstr ""
 "Dessine une variante tridimensionnelle du tamis récursif de Menger, un objet "
 "fractal cubique analogue au tétraèdre de Sierpinski. Écrit par Jamie "
-"Zawinski."
+"Zawinski; 2001."
 
 #: hacks/config/metaballs.xml.h:1
 msgid "Big"
 
 #: hacks/config/metaballs.xml.h:1
 msgid "Big"
@@ -5997,7 +5864,7 @@ msgstr "Élevé"
 #: hacks/config/metaballs.xml.h:2
 msgid ""
 "Draws two dimensional metaballs: overlapping and merging balls with fuzzy "
 #: hacks/config/metaballs.xml.h:2
 msgid ""
 "Draws two dimensional metaballs: overlapping and merging balls with fuzzy "
-"edges. By W.P. van Paassen."
+"edges. Written by W.P. van Paassen; 2003."
 msgstr ""
 
 #: hacks/config/metaballs.xml.h:7
 msgstr ""
 
 #: hacks/config/metaballs.xml.h:7
@@ -6018,7 +5885,7 @@ msgstr "Nombre de méta-balles"
 
 #: hacks/config/mirrorblob.xml.h:4
 msgid "Blobby"
 
 #: hacks/config/mirrorblob.xml.h:4
 msgid "Blobby"
-msgstr "Patés"
+msgstr "Goutte"
 
 #: hacks/config/mirrorblob.xml.h:5 hacks/config/nerverot.xml.h:2
 msgid "Calm"
 
 #: hacks/config/mirrorblob.xml.h:5 hacks/config/nerverot.xml.h:2
 msgid "Calm"
@@ -6026,8 +5893,8 @@ msgstr "Calme"
 
 #: hacks/config/mirrorblob.xml.h:7
 msgid ""
 
 #: hacks/config/mirrorblob.xml.h:7
 msgid ""
-"Draws a wobbly blob that distorts the image behind it. Requires OpenGL "
-"hardware acceleration for nice animation. Written by Jon Dowdall."
+"Draws a wobbly blob that distorts the image behind it. Written by Jon "
+"Dowdall; 2003."
 msgstr ""
 
 #: hacks/config/mirrorblob.xml.h:8
 msgstr ""
 
 #: hacks/config/mirrorblob.xml.h:8
@@ -6052,21 +5919,21 @@ msgstr "Bizarre"
 
 #: hacks/config/mirrorblob.xml.h:14
 msgid "MirrorBlob"
 
 #: hacks/config/mirrorblob.xml.h:14
 msgid "MirrorBlob"
-msgstr "Tâches miroir"
+msgstr "Gouttes miroir"
 
 #: hacks/config/mirrorblob.xml.h:16
 msgid "Offset Texture Coordinates"
 msgstr "Offset des coordonnées de la texture"
 
 
 #: hacks/config/mirrorblob.xml.h:16
 msgid "Offset Texture Coordinates"
 msgstr "Offset des coordonnées de la texture"
 
-#: hacks/config/mirrorblob.xml.h:22
+#: hacks/config/mirrorblob.xml.h:21
 msgid "Very Freaky"
 msgstr "Délirant"
 
 msgid "Very Freaky"
 msgstr "Délirant"
 
-#: hacks/config/mirrorblob.xml.h:24
+#: hacks/config/mirrorblob.xml.h:23
 msgid "X Resolution"
 msgstr "Résolution X"
 
 msgid "X Resolution"
 msgstr "Résolution X"
 
-#: hacks/config/mirrorblob.xml.h:25
+#: hacks/config/mirrorblob.xml.h:24
 msgid "Y Resolution"
 msgstr "Résolution Y"
 
 msgid "Y Resolution"
 msgstr "Résolution Y"
 
@@ -6077,93 +5944,79 @@ msgstr "MisMunch"
 #: hacks/config/mismunch.xml.h:6
 msgid ""
 "Munching errors! This is a creatively broken misimplementation of the "
 #: hacks/config/mismunch.xml.h:6
 msgid ""
 "Munching errors! This is a creatively broken misimplementation of the "
-"classic munching squares graphics hack. Written by Steven Hazel."
+"classic munching squares graphics hack. Written by Steven Hazel; 2004."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/mismunch.xml.h:7
+#: hacks/config/mismunch.xml.h:7 hacks/config/mountain.xml.h:7
+#: hacks/config/pipes.xml.h:14 hacks/config/shadebobs.xml.h:7
+#: hacks/config/sproingies.xml.h:3
 msgid "One"
 msgid "One"
-msgstr "Un"
+msgstr "Un(e)"
 
 #: hacks/config/mismunch.xml.h:9
 msgid "Simultaneous Squares"
 msgstr "Carrés simultannés"
 
 
 #: hacks/config/mismunch.xml.h:9
 msgid "Simultaneous Squares"
 msgstr "Carrés simultannés"
 
+#: hacks/config/mismunch.xml.h:11 hacks/config/munch.xml.h:8
+#: hacks/config/webcollage.xml.h:8
+msgid "Solid"
+msgstr "Plein"
+
 #: hacks/config/mismunch.xml.h:13 hacks/config/munch.xml.h:10
 #: hacks/config/qix.xml.h:26
 msgid "XOR"
 msgstr "XOR"
 
 #: hacks/config/moebius.xml.h:1
 #: hacks/config/mismunch.xml.h:13 hacks/config/munch.xml.h:10
 #: hacks/config/qix.xml.h:26
 msgid "XOR"
 msgstr "XOR"
 
 #: hacks/config/moebius.xml.h:1
-msgid ""
-"Another M. C. Escher hack by Marcelo Vianna, this one draws ``Moebius Strip "
-"II,'' a GL image of ants walking along the surface of a moebius strip."
-msgstr ""
-"Un autre hack de M. C. Escher par Marcelo Vianna. Trace le «ruban de Moebius "
-"II», une image GL de fourmis marchant sur la surface d'un ruban de Moebius."
-
-#: hacks/config/moebius.xml.h:2
 msgid "Draw Ants"
 msgstr "Dessiner des fournis"
 
 msgid "Draw Ants"
 msgstr "Dessiner des fournis"
 
-#: hacks/config/moebius.xml.h:4
-msgid "Mesh Floor"
-msgstr "Sol grillagé"
-
-#: hacks/config/moebius.xml.h:5
+#: hacks/config/moebius.xml.h:3
 msgid "Moebius"
 msgstr "Moebius"
 
 msgid "Moebius"
 msgstr "Moebius"
 
-#: hacks/config/moebius.xml.h:8
+#: hacks/config/moebius.xml.h:6
 msgid "Solid Floor"
 msgstr "Sol uniforme"
 
 msgid "Solid Floor"
 msgstr "Sol uniforme"
 
-#: hacks/config/moebius.xml.h:9 hacks/config/qix.xml.h:20
-msgid "Solid Objects"
-msgstr "Objets solides"
+#: hacks/config/moebius.xml.h:8
+msgid ""
+"This animates a 3D rendition M.C. Escher's \"Moebius Strip II\", an image of "
+"ants walking along the surface of a moebius strip. Written by Marcelo F. "
+"Vianna; 1997."
+msgstr ""
 
 #: hacks/config/moire.xml.h:6
 msgid "Moire"
 
 #: hacks/config/moire.xml.h:6
 msgid "Moire"
-msgstr "Moirage"
+msgstr "Moiré"
 
 #: hacks/config/moire.xml.h:8 hacks/config/rorschach.xml.h:6
 msgid "Offset"
 msgstr "Décalage"
 
 
 #: hacks/config/moire.xml.h:8 hacks/config/rorschach.xml.h:6
 msgid "Offset"
 msgstr "Décalage"
 
-#: hacks/config/moire.xml.h:10
-msgid ""
-"This one draws cool circular interference patterns. Most of the circles you "
-"see aren't explicitly rendered, but show up as a result of interactions "
-"between the other pixels that were drawn. Written by Jamie Zawinski, "
-"inspired by Java code by Michael Bayne. As he pointed out, the beauty of "
-"this one is that the heart of the display algorithm can be expressed with "
-"just a pair of loops and a handful of arithmetic, giving it a high ``display "
-"hack metric''."
-msgstr ""
-"Trace de jolis motifs d'interférences circulaires. La plupart des cercles "
-"affichés ne sont pas rendus de manière explicite, mais s'affichent comme "
-"résultat d'interactions entre les autres pixels dessinés. Écrit par Jamie "
-"Zawinski, sur la base d'un code Java de Michael Bayne. Comme il l'a "
-"souligné, la beauté de ce hackréside dans le fait que le coeur de "
-"l'algorithme d'affichage peut être exprimé avec quelques boucles et "
-"opérations arithmétiques, ce qui lui assure une grande valeur esthétique."
-
-#: 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 ""
-"Un autre exemple de l'amusement qu'offrent les motifs d'interférences "
-"moirés; ce hack génère des champs de cercles ou ovales concentriques et "
-"associe les plans par différentes opérations. Les plans se déplacent "
-"indépendamment, ce qui entraîne un 'jaillissement' des lignes "
-"d'interférence. Écrit par Jamie Zawinski."
+#: hacks/config/moire.xml.h:11 hacks/config/rd-bomb.xml.h:21
+#: hacks/config/rdbomb.xml.h:21 hacks/config/ripples.xml.h:16
+#: hacks/config/rotzoomer.xml.h:10 hacks/config/swirl.xml.h:10
+#: hacks/config/twang.xml.h:17
+msgid "Use Shared Memory"
+msgstr "Utiliser une mémoire partagée"
+
+#: hacks/config/moire.xml.h:12
+msgid ""
+"When the lines on the screen Make more lines in between, That's a moire'! "
+"Written by Jamie Zawinski and Michael Bayne; 1997."
+msgstr ""
+
+#: hacks/config/moire2.xml.h:2
+msgid ""
+"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; 1998."
+msgstr ""
 
 #: hacks/config/moire2.xml.h:4
 msgid "Moire2"
 
 #: hacks/config/moire2.xml.h:4
 msgid "Moire2"
-msgstr "Moirage2"
+msgstr "Moiré2"
 
 #: hacks/config/molecule.xml.h:3
 msgid "Describe Molecule"
 
 #: hacks/config/molecule.xml.h:3
 msgid "Describe Molecule"
@@ -6171,15 +6024,11 @@ msgstr "Décrire la molécule"
 
 #: hacks/config/molecule.xml.h:5
 msgid "Draw Atomic Bonds"
 
 #: hacks/config/molecule.xml.h:5
 msgid "Draw Atomic Bonds"
-msgstr "Dessiner des liaisons atomiques"
+msgstr "Dessiner les liaisons atomiques"
 
 #: hacks/config/molecule.xml.h:6
 msgid "Draw Atomic Nuclei"
 
 #: hacks/config/molecule.xml.h:6
 msgid "Draw Atomic Nuclei"
-msgstr "Dessiner des liaisons atomiques"
-
-#: hacks/config/molecule.xml.h:7 hacks/config/spheremonics.xml.h:2
-msgid "Draw Bounding Box"
-msgstr "Dessiner le cadre englobant"
+msgstr "Dessiner les noyaux atomiques"
 
 #: hacks/config/molecule.xml.h:8
 msgid "Draw Electron Shells"
 
 #: hacks/config/molecule.xml.h:8
 msgid "Draw Electron Shells"
@@ -6189,11 +6038,11 @@ msgstr "Dessiner les électrons"
 msgid ""
 "Draws several different representations of molecules. Some common molecules "
 "are built in, and it can also read PDB (Protein Data Base) files as input. "
 msgid ""
 "Draws several different representations of molecules. Some common molecules "
 "are built in, and it can also read PDB (Protein Data Base) files as input. "
-"Written by Jamie Zawinski."
+"Written by Jamie Zawinski; 2001."
 msgstr ""
 "Dessine différentes représentations de molécules. Certaines molécules "
 "courantes sont intégrées et le programme peut lire des fichiers PDB (banque "
 msgstr ""
 "Dessine différentes représentations de molécules. Certaines molécules "
 "courantes sont intégrées et le programme peut lire des fichiers PDB (banque "
-"protéique). Écrit par Jamie Zawinski."
+"protéique). Écrit par Jamie Zawinski; 2001."
 
 #: hacks/config/molecule.xml.h:12
 msgid "Label Atoms"
 
 #: hacks/config/molecule.xml.h:12
 msgid "Label Atoms"
@@ -6207,42 +6056,65 @@ msgstr "Molécule"
 msgid "PDB File or Directory"
 msgstr "Fichier PDB ou répertoire"
 
 msgid "PDB File or Directory"
 msgstr "Fichier PDB ou répertoire"
 
-#: hacks/config/morph3d.xml.h:1
-msgid ""
-"Another 3d shape-changing GL hack, by Marcelo Vianna. It has the same shiny-"
-"plastic feel as Superquadrics, as many computer-generated objects do..."
-msgstr ""
-"Un autre hack GL 3D à forme changeante, par Marcelo Vianna. Il a le même "
-"aspect plastique luisantque Superquadriques, comme beaucoup d'objets générés "
-"par ordinateur... "
+#: hacks/config/morph3d.xml.h:1 hacks/config/polyhedra.xml.h:4
+#: hacks/config/sballs.xml.h:1
+msgid "Cube"
+msgstr "Cube"
 
 
-#: hacks/config/morph3d.xml.h:4
+#: hacks/config/morph3d.xml.h:2 hacks/config/polyhedra.xml.h:15
+#: hacks/config/sballs.xml.h:2
+msgid "Dodecahedron"
+msgstr "Dodécaèdre"
+
+#: hacks/config/morph3d.xml.h:4 hacks/config/polyhedra.xml.h:71
+#: hacks/config/sballs.xml.h:5
+msgid "Icosahedron"
+msgstr "Icosaèdre"
+
+#: hacks/config/morph3d.xml.h:5
 msgid "Morph3D"
 msgstr "Morph3D"
 
 msgid "Morph3D"
 msgstr "Morph3D"
 
-#: hacks/config/mountain.xml.h:3
+#: hacks/config/morph3d.xml.h:6 hacks/config/polyhedra.xml.h:85
+#: hacks/config/sballs.xml.h:6
+msgid "Octahedron"
+msgstr "Octaèdre"
+
+#: hacks/config/morph3d.xml.h:7
+msgid ""
+"Platonic solids that turn inside out and get spikey. Written by Marcelo "
+"Vianna; 1997."
+msgstr ""
+
+#: hacks/config/mountain.xml.h:2
 msgid ""
 "Generates random 3d plots that look vaguely mountainous. Written by Pascal "
 msgid ""
 "Generates random 3d plots that look vaguely mountainous. Written by Pascal "
-"Pensa."
+"Pensa; 1997."
 msgstr ""
 "Génère des graphiques 3D aléatoires d'apparence vaguement montagneuse. Écrit "
 msgstr ""
 "Génère des graphiques 3D aléatoires d'apparence vaguement montagneuse. Écrit "
-"par Pascal Pensa."
+"par Pascal Pensa; 1997."
 
 #: hacks/config/mountain.xml.h:5
 msgid "Mountain"
 msgstr "Montagnes"
 
 
 #: hacks/config/mountain.xml.h:5
 msgid "Mountain"
 msgstr "Montagnes"
 
+#: hacks/config/mountain.xml.h:8
+msgid "Peaks"
+msgstr "Sommets"
+
 #: hacks/config/munch.xml.h:1
 msgid ""
 "DATAI 2 ADDB 1,2 ROTC 2,-22 XOR 1,2 JRST .-4 As reported by HAKMEM, in 1962, "
 "Jackson Wright wrote the above PDP-1 code. That code still lives on in this "
 #: hacks/config/munch.xml.h:1
 msgid ""
 "DATAI 2 ADDB 1,2 ROTC 2,-22 XOR 1,2 JRST .-4 As reported by HAKMEM, in 1962, "
 "Jackson Wright wrote the above PDP-1 code. That code still lives on in this "
-"screenhack, some 35 years later. The number of lines of enclosing code has "
-"increased substantially, however. This version is by Tim Showalter."
+"program, some 44 years later. The number of lines of enclosing code has "
+"increased substantially, however. Written by Jackson Wright and Tim "
+"Showalter; 1997."
 msgstr ""
 "DATAI 2 ADDB 1,2 ROTC 2,-22 XOR 1,2 JRST .-4 Comme signalé par HAKMEM, en "
 "1962, Jackson Wright a écrit le code PDP-1 ci-dessus. Ce code est toujours "
 msgstr ""
 "DATAI 2 ADDB 1,2 ROTC 2,-22 XOR 1,2 JRST .-4 Comme signalé par HAKMEM, en "
 "1962, Jackson Wright a écrit le code PDP-1 ci-dessus. Ce code est toujours "
-"présent dans ce hack, quelque 35 ans plus tard. Le nombre de lignes de code "
-"a toutefois considérablement augmenté. Cette version est de Tim Showalter."
+"présent dans ce hack, quelque 44 ans plus tard. Le nombre de lignes de code "
+"a toutefois considérablement augmenté. Écrit par Jackson Wright et Tim "
+"Showalter; 1997."
 
 #: hacks/config/munch.xml.h:5
 msgid "Munch"
 
 #: hacks/config/munch.xml.h:5
 msgid "Munch"
@@ -6260,17 +6132,20 @@ msgstr "Changement"
 msgid "Colors"
 msgstr "Couleurs"
 
 msgid "Colors"
 msgstr "Couleurs"
 
+# NOTE: intraduisible :-> "maximum  radius  of blot nervousness, as a fraction of the
+# radius of the  blot"
 #: hacks/config/nerverot.xml.h:5
 msgid "Crunchiness"
 #: hacks/config/nerverot.xml.h:5
 msgid "Crunchiness"
-msgstr "Croquant"
+msgstr ""
 
 #: hacks/config/nerverot.xml.h:7
 msgid ""
 "Draws different shapes composed of nervously vibrating squiggles, as if seen "
 
 #: hacks/config/nerverot.xml.h:7
 msgid ""
 "Draws different shapes composed of nervously vibrating squiggles, as if seen "
-"through a camera operated by a monkey on crack. By Dan Bornstein."
+"through a camera operated by a monkey on crack. Written by Dan Bornstein; "
+"2000."
 msgstr ""
 "Trace différentes formes composées de gribouillis vibrants et nerveux, comme "
 msgstr ""
 "Trace différentes formes composées de gribouillis vibrants et nerveux, comme "
-"s'ils étaient filmés par un singe sous amphétamines. Par Dan Bornstein."
+"s'ils étaient filmés par un singe sous amphétamines. Écrit par Dan Bornstein; 200."
 
 #: hacks/config/nerverot.xml.h:10
 msgid "Frequent"
 
 #: hacks/config/nerverot.xml.h:10
 msgid "Frequent"
@@ -6293,7 +6168,8 @@ msgid "Spastic"
 msgstr "Spasmodique"
 
 #: hacks/config/noof.xml.h:1
 msgstr "Spasmodique"
 
 #: hacks/config/noof.xml.h:1
-msgid "Draws some rotatey patterns, using OpenGL. Written by Mark Kilgard."
+msgid ""
+"Draws some rotatey patterns, using OpenGL. Written by Bill Torzewski; 2004."
 msgstr ""
 
 #: hacks/config/noof.xml.h:3
 msgstr ""
 
 #: hacks/config/noof.xml.h:3
@@ -6302,36 +6178,16 @@ msgstr "Noof"
 
 #: hacks/config/noseguy.xml.h:1
 msgid ""
 
 #: hacks/config/noseguy.xml.h:1
 msgid ""
-"A little man with a big nose wanders around your screen saying things. The "
-"things which he says are the output of a program or the contents of a file "
-"or URL, as configured on the \"Advanced\" tab of the main Screensaver "
-"Preferences window. By Dan Heller and Jamie Zawinski."
+"A little man with a big nose wanders around your screen saying things. "
+"Written by Dan Heller and Jamie Zawinski; 1992."
 msgstr ""
 "Un petit bonhomme avec un gros nez se promène sur l'écran en disant des "
 msgstr ""
 "Un petit bonhomme avec un gros nez se promène sur l'écran en disant des "
-"choses. Ce qu'il dit peut provenir d'un fichier, d'un programme externe ou "
-"d'une URL, selon ce qui est configuré dans l'onglet \"Avancé\" de la fenêtre "
-"des préférences de XscreenSaver. Par Dan Heller et Jamie Zawinski."
+"choses. Écrit par Dan Heller et Jamie Zawinski; 1992."
 
 #: hacks/config/noseguy.xml.h:2
 
 #: hacks/config/noseguy.xml.h:2
-msgid "Get Text from File"
-msgstr "Extraire le texte du fichier"
-
-#: hacks/config/noseguy.xml.h:3
-msgid "Get Text from Program"
-msgstr "Extraire le texte du programme"
-
-#: hacks/config/noseguy.xml.h:4
 msgid "Noseguy"
 msgstr "Nez"
 
 msgid "Noseguy"
 msgstr "Nez"
 
-#: hacks/config/noseguy.xml.h:6
-msgid "Text File"
-msgstr "Fichier texte"
-
-#: hacks/config/noseguy.xml.h:8
-msgid "Use Text Below"
-msgstr "Utiliser le texte ci-dessous"
-
 #: hacks/config/pacman.xml.h:2
 msgid "Pacman"
 msgstr "Pacman"
 #: hacks/config/pacman.xml.h:2
 msgid "Pacman"
 msgstr "Pacman"
@@ -6343,24 +6199,24 @@ msgstr "Taille du joueur"
 #: hacks/config/pacman.xml.h:4
 msgid ""
 "Simulates a game of Pac-Man on a randomly-created level. Written by Edwin de "
 #: hacks/config/pacman.xml.h:4
 msgid ""
 "Simulates a game of Pac-Man on a randomly-created level. Written by Edwin de "
-"Jong."
+"Jong; 2004."
 msgstr ""
 msgstr ""
+"Simule un jeu de Pac-Man pour un niveau créé de façon aléatoire. Écrit par "
+"Edwin De Jong; 2004."
 
 #: hacks/config/pedal.xml.h:7
 msgid "Pedal"
 msgstr "Pédale"
 
 #: hacks/config/pedal.xml.h:8
 
 #: hacks/config/pedal.xml.h:7
 msgid "Pedal"
 msgstr "Pédale"
 
 #: hacks/config/pedal.xml.h:8
+# TODO
 msgid ""
 "This is sort of a combination spirograph/string-art. It generates a large, "
 msgid ""
 "This is sort of a combination spirograph/string-art. It generates a large, "
-"complex polygon, and lets the X server do the bulk of the work by giving it "
-"an even/odd winding rule. Written by Dale Moore, based on some ancient PDP-"
-"11 code."
+"complex polygon, and renders it by filling using an even/odd winding rule. "
+"Written by Dale Moore; 1995."
 msgstr ""
 msgstr ""
-"Sorte de combinaison de spirographe/art pauvre. Génère un grand polygone "
-"complexe et laisse le serveur X faire le plus gros du travail en lui donnant "
-"une règle WIND_EVEN_ODD. Écrit par Dale Moore, basé sur un ancien code PDP-"
-"11."
+"Sorte de combinaison de spirographe/art des clous et des fils. "
+"Écrit par Dale Moore; 1995."
 
 #: hacks/config/penetrate.xml.h:1
 msgid "Always play well"
 
 #: hacks/config/penetrate.xml.h:1
 msgid "Always play well"
@@ -6374,17 +6230,17 @@ msgstr "Explosions"
 msgid "Penetrate"
 msgstr "Pénétrer"
 
 msgid "Penetrate"
 msgstr "Pénétrer"
 
-#: hacks/config/penetrate.xml.h:7
-msgid "Start badly, but learn"
-msgstr "Mal commencer, mais apprendre"
-
-#: hacks/config/penetrate.xml.h:8
+#: hacks/config/penetrate.xml.h:6
 msgid ""
 msgid ""
-"This hack simulates the classic arcade game Missile Command. Written by Adam "
-"Miller."
+"Simulates the classic arcade game Missile Command. Written by Adam Miller; "
+"1999."
 msgstr ""
 "Ce hack simule le jeu d'arcade classique Missile Command. Écrit par Adam "
 msgstr ""
 "Ce hack simule le jeu d'arcade classique Missile Command. Écrit par Adam "
-"Miller."
+"Miller; 1999."
+
+#: hacks/config/penetrate.xml.h:8
+msgid "Start badly, but learn"
+msgstr "Mal commencer, mais apprendre"
 
 #: hacks/config/penrose.xml.h:1
 msgid "Draw Ammann Lines"
 
 #: hacks/config/penrose.xml.h:1
 msgid "Draw Ammann Lines"
@@ -6393,19 +6249,20 @@ msgstr "Tracer des lignes d'Ammann"
 #: hacks/config/penrose.xml.h:2
 msgid ""
 "Draws quasiperiodic tilings; think of the implications on modern formica "
 #: hacks/config/penrose.xml.h:2
 msgid ""
 "Draws quasiperiodic tilings; think of the implications on modern formica "
-"technology. Written by Timo Korvola. In April 1997, Sir Roger Penrose, a "
-"British math professor who has worked with Stephen Hawking on such topics as "
-"relativity, black holes, and whether time has a beginning, filed a copyright-"
-"infringement lawsuit against the Kimberly-Clark Corporation, which Penrose "
-"said copied a pattern he created (a pattern demonstrating that ``a "
-"nonrepeating pattern could exist in nature'') for its Kleenex quilted toilet "
-"paper. Penrose said he doesn't like litigation but, ``When it comes to the "
-"population of Great Britain being invited by a multinational to wipe their "
-"bottoms on what appears to be the work of a Knight of the Realm, then a last "
-"stand must be taken.'' As reported by News of the Weird #491, 4-jul-1997."
+"technology. In April 1997, Sir Roger Penrose, a British math professor who "
+"has worked with Stephen Hawking on such topics as relativity, black holes, "
+"and whether time has a beginning, filed a copyright-infringement lawsuit "
+"against the Kimberly-Clark Corporation, which Penrose said copied a pattern "
+"he created (a pattern demonstrating that \"a nonrepeating pattern could "
+"exist in nature\") for its Kleenex quilted toilet paper. Penrose said he "
+"doesn't like litigation but, \"When it comes to the population of Great "
+"Britain being invited by a multinational to wipe their bottoms on what "
+"appears to be the work of a Knight of the Realm, then a last stand must be "
+"taken.\" As reported by News of the Weird #491, 4-jul-1997. Written by Timo "
+"Korvola; 1997."
 msgstr ""
 "Dessine des carreaux quasi-périodiques; pensez aux implications pour la "
 msgstr ""
 "Dessine des carreaux quasi-périodiques; pensez aux implications pour la "
-"technologie moderne du formica. Écrit par Timo Korvola. En avril 1997, Sir "
+"technologie moderne du formica. En avril 1997, Sir "
 "Roger Penrose, un professeur de math britannique qui a travaillé avec "
 "Stephen Hawking sur des sujets tels que la relativité, les trous noirs et "
 "l'existence d'un début du temps, a intenté un procès en violation de "
 "Roger Penrose, un professeur de math britannique qui a travaillé avec "
 "Stephen Hawking sur des sujets tels que la relativité, les trous noirs et "
 "l'existence d'un début du temps, a intenté un procès en violation de "
@@ -6415,12 +6272,18 @@ msgstr ""
 "carreaux. Penrose a déclaré qu'il n'aimait pas les litiges, mais que ''Si la "
 "population de Grande-Bretagne est invitée par une multinationale à s'essuyer "
 "les fesses sur ce qui semble être l'oeuvre d'un Chevalier du Royaume, des "
 "carreaux. Penrose a déclaré qu'il n'aimait pas les litiges, mais que ''Si la "
 "population de Grande-Bretagne est invitée par une multinationale à s'essuyer "
 "les fesses sur ce qui semble être l'oeuvre d'un Chevalier du Royaume, des "
-"mesures s'imposent.'' Rapporté par News of the Weird n°491, 4-jul-1997."
+"mesures s'imposent.'' Rapporté par News of the Weird n°491, 4-jul-1997. "
+"Écrit par Timo Korvola; 1997."
 
 
-#: hacks/config/penrose.xml.h:6
+#: hacks/config/penrose.xml.h:7
 msgid "Penrose"
 msgstr "Penrose"
 
 msgid "Penrose"
 msgstr "Penrose"
 
+#: hacks/config/penrose.xml.h:11 hacks/config/rd-bomb.xml.h:19
+#: hacks/config/rdbomb.xml.h:19 hacks/config/twang.xml.h:14
+msgid "Tile Size"
+msgstr "Taille des mosaïques"
+
 #: hacks/config/petri.xml.h:2
 msgid "Colony Shape"
 msgstr "Forme de la colonie"
 #: hacks/config/petri.xml.h:2
 msgid "Colony Shape"
 msgstr "Forme de la colonie"
@@ -6438,27 +6301,27 @@ msgid "Fertility"
 msgstr "Fertilité"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Fertilité"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr "Durée de vie maximum"
 
 #: hacks/config/petri.xml.h:13
 msgstr "Durée de vie maximum"
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr "Taux de mortalité maximum"
 
 #: hacks/config/petri.xml.h:14
 msgstr "Taux de mortalité maximum"
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr "Taux de croissance maximum"
 
 #: hacks/config/petri.xml.h:15
 msgstr "Taux de croissance maximum"
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr "Durée de vie minimum"
 
 #: hacks/config/petri.xml.h:16
 msgstr "Durée de vie minimum"
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr "Taux de mortalité minimum"
 
 #: hacks/config/petri.xml.h:17
 msgstr "Taux de mortalité minimum"
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr "Taux de croissance minimum"
 
 #: hacks/config/petri.xml.h:18
 msgstr "Taux de croissance minimum"
 
 #: hacks/config/petri.xml.h:18
@@ -6489,53 +6352,59 @@ msgstr "Carré"
 msgid ""
 "This simulates colonies of mold growing in a petri dish. Growing colored "
 "circles overlap and leave spiral interference in their wake. Written by Dan "
 msgid ""
 "This simulates colonies of mold growing in a petri dish. Growing colored "
 "circles overlap and leave spiral interference in their wake. Written by Dan "
-"Bornstein."
+"Bornstein; 1999."
 msgstr ""
 "Simule des colonies de moisissures qui poussent dans une boîte de Petri. Des "
 "cercles colorés grandissent, se chevauchent et laissent des interférences en "
 msgstr ""
 "Simule des colonies de moisissures qui poussent dans une boîte de Petri. Des "
 "cercles colorés grandissent, se chevauchent et laissent des interférences en "
-"spirale à leur suite. Écrit par Dan Bornstein."
+"spirale à leur suite. Écrit par Dan Bornstein; 1999."
 
 #: hacks/config/phosphor.xml.h:1
 msgid ""
 "Draws a simulation of an old terminal, with large pixels and long-sustain "
 
 #: hacks/config/phosphor.xml.h:1
 msgid ""
 "Draws a simulation of an old terminal, with large pixels and long-sustain "
-"phosphor. This program is also a fully-functional VT100 emulator! The text "
-"can be the output of a program or the contents of a file or URL, as "
-"configured on the \"Advanced\" tab of the main Screensaver Preferences "
-"window. Written by Jamie Zawinski."
+"phosphor. This program is also a fully-functional VT100 emulator! Written by "
+"Jamie Zawinski; 1999."
 msgstr ""
 msgstr ""
+"Dessine une simulation d'un vieux terminal, avec de grands pixels et du "
+"phosphore de longue durée. Ce programme est également un émulateur de "
+"terminal VT100 fonctionnel ! " 
+"Écrit par Jamie Zawinski; 1999."
 
 
-#: hacks/config/phosphor.xml.h:2
-msgid "Dump pipe"
-msgstr "Pipe simple"
+#: hacks/config/phosphor.xml.h:4
+msgid "Font Scale"
+msgstr "Échelle de la police"
 
 #: hacks/config/phosphor.xml.h:5
 msgid "Phosphor"
 msgstr "Phosphore"
 
 
 #: hacks/config/phosphor.xml.h:5
 msgid "Phosphor"
 msgstr "Phosphore"
 
-#: hacks/config/phosphor.xml.h:10
-msgid "Use PTY"
-msgstr "Utilise PTY"
+#: hacks/config/phosphor.xml.h:8
+msgid "Terminal Emulation"
+msgstr "Emulation de terminal"
+
+#: hacks/config/phosphor.xml.h:9
+msgid "Text Only"
+msgstr "Texte seulement"
 
 #: hacks/config/piecewise.xml.h:1
 msgid "Color shifting speed"
 msgstr "Vitesse du changement de couleur"
 
 
 #: hacks/config/piecewise.xml.h:1
 msgid "Color shifting speed"
 msgstr "Vitesse du changement de couleur"
 
-#: hacks/config/piecewise.xml.h:6
+#: hacks/config/piecewise.xml.h:8
 msgid "Maximum radius"
 msgid "Maximum radius"
-msgstr "Rayon max"
+msgstr "Rayon max."
 
 
-#: hacks/config/piecewise.xml.h:7
+#: hacks/config/piecewise.xml.h:9
 msgid "Minimum radius"
 msgid "Minimum radius"
-msgstr "Rayon min"
+msgstr "Rayon min."
 
 
-#: hacks/config/piecewise.xml.h:8
+#: hacks/config/piecewise.xml.h:10
 msgid "Piecewise"
 msgstr "Piecewise"
 
 msgid "Piecewise"
 msgstr "Piecewise"
 
-#: hacks/config/piecewise.xml.h:12
+#: hacks/config/piecewise.xml.h:14
 msgid ""
 "This draws a bunch of moving circles which switch from visibility to "
 msgid ""
 "This draws a bunch of moving circles which switch from visibility to "
-"invisibility at intersection points. Written by Geoffrey Irving."
+"invisibility at intersection points. Written by Geoffrey Irving; 2003."
 msgstr ""
 
 #: hacks/config/pinion.xml.h:1
 msgstr ""
 
 #: hacks/config/pinion.xml.h:1
@@ -6549,10 +6418,10 @@ msgstr "2000"
 #: hacks/config/pinion.xml.h:4
 msgid ""
 "Draws an interconnected set of gears moving across the screen. Written by "
 #: hacks/config/pinion.xml.h:4
 msgid ""
 "Draws an interconnected set of gears moving across the screen. Written by "
-"Jamie Zawinski."
+"Jamie Zawinski; 2004."
 msgstr ""
 "Dessine des engrenages interconnectés se déplacant dans l'écran. Écrit par "
 msgstr ""
 "Dessine des engrenages interconnectés se déplacant dans l'écran. Écrit par "
-"Jamie Zawinski."
+"Jamie Zawinski; 2004."
 
 #: hacks/config/pinion.xml.h:6
 msgid "Gear Size"
 
 #: hacks/config/pinion.xml.h:6
 msgid "Gear Size"
@@ -6571,53 +6440,51 @@ msgid "Scrolling Speed"
 msgstr "Vitesse de défilement"
 
 #: hacks/config/pipes.xml.h:1
 msgstr "Vitesse de défilement"
 
 #: hacks/config/pipes.xml.h:1
+msgid "A Hundred"
+msgstr "Une centaine"
+
+#: hacks/config/pipes.xml.h:2
+msgid ""
+"A growing plumbing system, with bolts and valves. Written by Marcelo Vianna; "
+"1997."
+msgstr ""
+
+#: hacks/config/pipes.xml.h:3
 msgid "Allow Tight Turns"
 msgstr "Autoriser des virages serrés"
 
 msgid "Allow Tight Turns"
 msgstr "Autoriser des virages serrés"
 
-#: hacks/config/pipes.xml.h:2
+#: hacks/config/pipes.xml.h:4
 msgid "Ball Joints"
 msgstr "Raccords à boule"
 
 msgid "Ball Joints"
 msgstr "Raccords à boule"
 
-#: hacks/config/pipes.xml.h:3
+#: hacks/config/pipes.xml.h:5
+msgid "Bolted Fittings"
+msgstr "Raccords boulonnés"
+
+#: hacks/config/pipes.xml.h:6
 msgid "Curved Pipes"
 msgstr "Canalisations courbées"
 
 msgid "Curved Pipes"
 msgstr "Canalisations courbées"
 
-#: hacks/config/pipes.xml.h:6
+#: hacks/config/pipes.xml.h:8
 msgid "Fisheye Lens"
 msgstr "Grand angle"
 
 msgid "Fisheye Lens"
 msgstr "Grand angle"
 
-#: hacks/config/pipes.xml.h:7
+#: hacks/config/pipes.xml.h:9
 msgid "Gadgetry"
 msgstr "Gadgets"
 
 msgid "Gadgetry"
 msgstr "Gadgets"
 
-#: 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 ""
-"Si vous avez déjà croisé la route d'une machine Windows NT, vous avez "
-"certainement déjà vu ce hack GL. Cette version est de Marcelo Vianna."
-
-#: hacks/config/pipes.xml.h:11
-msgid "Number of Pipe Systems"
-msgstr "Nombre de systèmes de canalisation"
+#: hacks/config/pipes.xml.h:13
+msgid "Number of Pipes"
+msgstr "Nombre de canalisations"
 
 
-#: hacks/config/pipes.xml.h:12
-msgid "Pipe Fittings"
-msgstr "Raccords de canalisation"
+#: hacks/config/pipes.xml.h:15
+msgid "Pipe Length"
+msgstr "Longueur des canalisations"
 
 
-#: hacks/config/pipes.xml.h:13
+#: hacks/config/pipes.xml.h:16
 msgid "Pipes"
 msgstr "Canalisations"
 
 msgid "Pipes"
 msgstr "Canalisations"
 
-#: hacks/config/pipes.xml.h:17
-msgid "System Length"
-msgstr "Longueur du système"
-
-#: hacks/config/polyhedra.xml.h:4 hacks/config/sballs.xml.h:1
-msgid "Cube"
-msgstr "Cube"
-
 #: hacks/config/polyhedra.xml.h:5
 msgid "Cubitruncated Cuboctahedron"
 msgstr ""
 #: hacks/config/polyhedra.xml.h:5
 msgid "Cubitruncated Cuboctahedron"
 msgstr ""
@@ -6655,17 +6522,13 @@ msgid ""
 "Displays different 3D solids and some information about each. A new solid is "
 "chosen every few seconds. There are 75 uniform polyhedra, plus 5 infinite "
 "sets of prisms and antiprisms; including their duals brings the total to "
 "Displays different 3D solids and some information about each. A new solid is "
 "chosen every few seconds. There are 75 uniform polyhedra, plus 5 infinite "
 "sets of prisms and antiprisms; including their duals brings the total to "
-"160. Written by Dr. Zvi Har'El and Jamie Zawinski."
+"160. Written by Dr. Zvi Har'El and Jamie Zawinski; 2004."
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:14
 msgid "Ditrigonal Dodecadodecahedron"
 msgstr ""
 
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:14
 msgid "Ditrigonal Dodecadodecahedron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:15 hacks/config/sballs.xml.h:2
-msgid "Dodecahedron"
-msgstr "Dodécaèdre"
-
 #: hacks/config/polyhedra.xml.h:18
 msgid "Great Cubicuboctahedron"
 msgstr ""
 #: hacks/config/polyhedra.xml.h:18
 msgid "Great Cubicuboctahedron"
 msgstr ""
@@ -6878,10 +6741,6 @@ msgstr ""
 msgid "Hexahemioctacron"
 msgstr ""
 
 msgid "Hexahemioctacron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:71 hacks/config/sballs.xml.h:5
-msgid "Icosahedron"
-msgstr "Icosaèdre"
-
 #: hacks/config/polyhedra.xml.h:72
 msgid "Icosidodecadodecahedron"
 msgstr ""
 #: hacks/config/polyhedra.xml.h:72
 msgid "Icosidodecadodecahedron"
 msgstr ""
@@ -6930,10 +6789,6 @@ msgstr ""
 msgid "Medial Triambic Icosahedron"
 msgstr ""
 
 msgid "Medial Triambic Icosahedron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:85 hacks/config/sballs.xml.h:7
-msgid "Octahedron"
-msgstr "Octaèdre"
-
 #: hacks/config/polyhedra.xml.h:86
 msgid "Octahemioctacron"
 msgstr ""
 #: hacks/config/polyhedra.xml.h:86
 msgid "Octahemioctacron"
 msgstr ""
@@ -7245,10 +7100,10 @@ msgstr "Polyominos"
 #: hacks/config/polyominoes.xml.h:8
 msgid ""
 "Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
 #: hacks/config/polyominoes.xml.h:8
 msgid ""
 "Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
-"puzzle pieces. Written by Stephen Montgomery-Smith."
+"puzzle pieces. Written by Stephen Montgomery-Smith; 2002."
 msgstr ""
 "Tente sans cesse de remplir entièrement un rectangle à l'aide de pièces de "
 msgstr ""
 "Tente sans cesse de remplir entièrement un rectangle à l'aide de pièces de "
-"puzzle de formes irrégulières. Écrit par Stephen Montgomery-Smith."
+"puzzle de formes irrégulières. Écrit par Stephen Montgomery-Smith; 2002."
 
 #: hacks/config/polytopes.xml.h:2
 msgid "120-Cell"
 
 #: hacks/config/polytopes.xml.h:2
 msgid "120-Cell"
@@ -7289,21 +7144,25 @@ msgstr "Couleur unique"
 #: hacks/config/polytopes.xml.h:22
 msgid ""
 "This program shows one of the six regular 4D polytopes rotating in 4D. "
 #: hacks/config/polytopes.xml.h:22
 msgid ""
 "This program shows one of the six regular 4D polytopes rotating in 4D. "
-"Written by Carsten Steger, inspired by H.S.M Coxeter's book \"Regular "
-"Polytopes\", 3rd Edition, Dover Publications, Inc., 1973, and Thomas "
-"Banchoff's book \"Beyond the Third Dimension: Geometry, Computer Graphics, "
-"and Higher Dimensions\", Scientific American Library, 1990."
+"Inspired by H.S.M Coxeter's book \"Regular Polytopes\", 3rd Edition, Dover "
+"Publications, Inc., 1973, and Thomas Banchoff's book \"Beyond the Third "
+"Dimension: Geometry, Computer Graphics, and Higher Dimensions\", Scientific "
+"American Library, 1990. Written by Carsten Steger; 2003."
 msgstr ""
 
 #: hacks/config/pong.xml.h:2
 msgstr ""
 
 #: hacks/config/pong.xml.h:2
+msgid "Game Speed"
+msgstr "Vitesse du jeu"
+
+#: hacks/config/pong.xml.h:3
 msgid "Pong"
 msgstr "Pong"
 
 msgid "Pong"
 msgstr "Pong"
 
-#: hacks/config/pong.xml.h:6
+#: hacks/config/pong.xml.h:5
 msgid ""
 "The pong program simulates an ancient Pong home video game, as well as "
 "various artifacts from displaying it on a color TV set. Written by Jeremy "
 msgid ""
 "The pong program simulates an ancient Pong home video game, as well as "
 "various artifacts from displaying it on a color TV set. Written by Jeremy "
-"English and Trevor Blackwell."
+"English and Trevor Blackwell; 2003."
 msgstr ""
 
 #: hacks/config/popsquares.xml.h:2
 msgstr ""
 
 #: hacks/config/popsquares.xml.h:2
@@ -7320,7 +7179,8 @@ msgstr "Sub-division"
 
 #: hacks/config/popsquares.xml.h:9
 msgid ""
 
 #: hacks/config/popsquares.xml.h:9
 msgid ""
-"This draws a pop-art-ish looking grid of pulsing colors. By Levi Burton."
+"This draws a pop-art-ish looking grid of pulsing colors. Written by Levi "
+"Burton; 2003."
 msgstr ""
 
 #: hacks/config/popsquares.xml.h:10
 msgstr ""
 
 #: hacks/config/popsquares.xml.h:10
@@ -7339,67 +7199,61 @@ msgstr "Dessiner des yeux"
 msgid "Providence"
 msgstr "Providence"
 
 msgid "Providence"
 msgstr "Providence"
 
-#: hacks/config/providence.xml.h:8
+#: hacks/config/providence.xml.h:7
 msgid ""
 "The providence code displays an eye, shrouded in glory, set upon the base of "
 msgid ""
 "The providence code displays an eye, shrouded in glory, set upon the base of "
-"a pyramid. Written by Blair Tennessy."
+"a pyramid. Written by Blair Tennessy; 2004."
 msgstr ""
 
 #: hacks/config/pulsar.xml.h:1
 msgid "Anti-alias Lines"
 msgstr "Lignes anti-aliasées"
 
 msgstr ""
 
 #: hacks/config/pulsar.xml.h:1
 msgid "Anti-alias Lines"
 msgstr "Lignes anti-aliasées"
 
-#: hacks/config/pulsar.xml.h:3
+#: hacks/config/pulsar.xml.h:2
 msgid ""
 "Draws some intersecting planes, making use of alpha blending, fog, textures, "
 msgid ""
 "Draws some intersecting planes, making use of alpha blending, fog, textures, "
-"and mipmaps, plus a ``frames per second'' meter so that you can tell how "
-"fast your graphics card is... Requires OpenGL. Written by David Konerding."
+"and mipmaps. Written by David Konerding; 1999."
 msgstr ""
 "Dessine des plans en intersection en utilisant le mélange de valeurs alpha, "
 msgstr ""
 "Dessine des plans en intersection en utilisant le mélange de valeurs alpha, "
-"le brouillard, des textures, et des mipmaps, plus une mesure ''images par "
-"seconde'' pour que vous puissiez calculer la rapidité de votre carte "
-"graphique... Nécessite OpenGL. Écrit par David Konerding."
+"le brouillard, des textures, et des mipmaps. "
+"Écrit par David Konerding; 1999."
 
 
-#: hacks/config/pulsar.xml.h:4
+#: hacks/config/pulsar.xml.h:3
 msgid "Enable Blending"
 msgstr "Activer le mélange"
 
 msgid "Enable Blending"
 msgstr "Activer le mélange"
 
-#: hacks/config/pulsar.xml.h:5
+#: hacks/config/pulsar.xml.h:4
 msgid "Enable Depth Buffer"
 msgstr "Activer le tampon de profondeur"
 
 msgid "Enable Depth Buffer"
 msgstr "Activer le tampon de profondeur"
 
-#: hacks/config/pulsar.xml.h:6
+#: hacks/config/pulsar.xml.h:5
 msgid "Enable Fog"
 msgstr "Activer le brouillard"
 
 msgid "Enable Fog"
 msgstr "Activer le brouillard"
 
-#: hacks/config/pulsar.xml.h:7
+#: hacks/config/pulsar.xml.h:6
 msgid "Enable Lighting"
 msgstr "Activer l'éclairage"
 
 msgid "Enable Lighting"
 msgstr "Activer l'éclairage"
 
-#: hacks/config/pulsar.xml.h:8
+#: hacks/config/pulsar.xml.h:7
 msgid "Enable Texture Filtering"
 msgstr "Activer le filtrage de texture"
 
 msgid "Enable Texture Filtering"
 msgstr "Activer le filtrage de texture"
 
-#: hacks/config/pulsar.xml.h:9
+#: hacks/config/pulsar.xml.h:8
 msgid "Enable Texture Mipmaps"
 msgstr "Activer les mipmaps de texture"
 
 msgid "Enable Texture Mipmaps"
 msgstr "Activer les mipmaps de texture"
 
-#: hacks/config/pulsar.xml.h:10
+#: hacks/config/pulsar.xml.h:9
 msgid "Enable Texturing"
 msgstr "Activer les textures"
 
 msgid "Enable Texturing"
 msgstr "Activer les textures"
 
-#: hacks/config/pulsar.xml.h:12
+#: hacks/config/pulsar.xml.h:11
 msgid "Pulsar"
 msgstr "Pulsar"
 
 msgid "Pulsar"
 msgstr "Pulsar"
 
-#: hacks/config/pulsar.xml.h:13
+#: hacks/config/pulsar.xml.h:12
 msgid "Quad Count"
 msgstr "Nombre de quads"
 
 msgid "Quad Count"
 msgstr "Nombre de quads"
 
-#: hacks/config/pulsar.xml.h:18
-msgid "Texture PPM File"
-msgstr "Fichier PPM de texture"
-
 #: hacks/config/pyro.xml.h:3
 msgid "Explosive Yield"
 msgstr "Production d'explosions"
 #: hacks/config/pyro.xml.h:3
 msgid "Explosive Yield"
 msgstr "Production d'explosions"
@@ -7418,59 +7272,64 @@ msgstr "Pyro"
 
 #: hacks/config/pyro.xml.h:11
 msgid ""
 
 #: hacks/config/pyro.xml.h:11
 msgid ""
-"Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski."
+"Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski; "
+"1992."
 msgstr ""
 msgstr ""
-"Pyro dessine des feux d'artifices en explosion. Bla bla. Écrit par Jamie "
-"Zawinski."
+"Pyro dessine des feux d'artifices. Bla bla bla. Écrit par Jamie "
+"Zawinski; 1992."
 
 #: hacks/config/qix.xml.h:1
 msgid "Additive Colors"
 msgstr "Couleurs additives"
 
 
 #: hacks/config/qix.xml.h:1
 msgid "Additive Colors"
 msgstr "Couleurs additives"
 
-#: hacks/config/qix.xml.h:3
+#: hacks/config/qix.xml.h:2
+msgid ""
+"Bounces a series of line segments around the screen, and uses variations on "
+"this basic motion pattern to produce all sorts of different presentations: "
+"line segments, filled polygons, and overlapping translucent areas. Written "
+"by Jamie Zawinski; 1992."
+msgstr ""
+"Fait rebondir une série de "
+"segments de lignes sur l'écran et utilise des variations de ce modèle de "
+"mouvement de base pour produire toutes sortes de présentations différentes : "
+"segments de ligne, polygones pleins, zones translucides superposées. Écrit "
+"par Jamie Zawinski; 1992."
+
+#: hacks/config/qix.xml.h:4
 msgid "Corners"
 msgstr "Coins"
 
 msgid "Corners"
 msgstr "Coins"
 
-#: hacks/config/qix.xml.h:11
+#: hacks/config/qix.xml.h:12
 msgid "Line Segments"
 msgstr "Segments de ligne"
 
 msgid "Line Segments"
 msgstr "Segments de ligne"
 
-#: hacks/config/qix.xml.h:12
+#: hacks/config/qix.xml.h:13
 msgid "Linear Motion"
 msgstr "Mouvement linéaire"
 
 msgid "Linear Motion"
 msgstr "Mouvement linéaire"
 
-#: hacks/config/qix.xml.h:15
+#: hacks/config/qix.xml.h:16
 msgid "Max Size"
 msgstr "Taille max."
 
 msgid "Max Size"
 msgstr "Taille max."
 
-#: hacks/config/qix.xml.h:16
+#: hacks/config/qix.xml.h:17
 msgid "Qix"
 msgstr "Qix"
 
 msgid "Qix"
 msgstr "Qix"
 
-#: hacks/config/qix.xml.h:17
+#: hacks/config/qix.xml.h:18
 msgid "Random Motion"
 msgstr "Mouvement aléatoire"
 
 msgid "Random Motion"
 msgstr "Mouvement aléatoire"
 
-#: hacks/config/qix.xml.h:23
-msgid "Subtractive Colors"
-msgstr "Couleurs soustractives"
+#: hacks/config/qix.xml.h:21
+msgid "Solid Objects"
+msgstr "Objets solides"
 
 #: hacks/config/qix.xml.h:24
 
 #: hacks/config/qix.xml.h:24
-msgid ""
-"This is the swiss army chainsaw of qix programs. It bounces a series of line "
-"segments around the screen, and uses variations on this basic motion pattern "
-"to produce all sorts of different presentations: line segments, filled "
-"polygons, overlapping translucent areas... Written by Jamie Zawinski."
-msgstr ""
-"La tronçonneuse suisse des programmes qix. Fait rebondir une série de "
-"segments de lignes sur l'écran et utilise des variations de ce modèle de "
-"mouvement de base pour produire toutes sortes de présentations différentes : "
-"segments de ligne, polygones pleins, zones translucides superposées... Écrit "
-"par Jamie Zawinski."
+msgid "Subtractive Colors"
+msgstr "Couleurs soustractives"
 
 #: hacks/config/qix.xml.h:25
 msgid "Transparent"
 
 #: hacks/config/qix.xml.h:25
 msgid "Transparent"
-msgstr "Transparent"
+msgstr "Transparence des"
 
 #: hacks/config/queens.xml.h:2
 msgid "Queens"
 
 #: hacks/config/queens.xml.h:2
 msgid "Queens"
@@ -7480,53 +7339,50 @@ msgstr "Reines"
 msgid ""
 "Solves the N-Queens problem (where, in this program, N is between 5 and 10 "
 "queens.) The problem is: how may one place N queens on an NxN chessboard "
 msgid ""
 "Solves the N-Queens problem (where, in this program, N is between 5 and 10 "
 "queens.) The problem is: how may one place N queens on an NxN chessboard "
-"such that no queen can attack a sister? Written by Blair Tennessy."
+"such that no queen can attack a sister? Written by Blair Tennessy; 2002."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:1
+#: hacks/config/rd-bomb.xml.h:1 hacks/config/rdbomb.xml.h:1
 msgid "/"
 msgstr "/"
 
 msgid "/"
 msgstr "/"
 
-#: hacks/config/rd-bomb.xml.h:3
+#: hacks/config/rd-bomb.xml.h:3 hacks/config/rdbomb.xml.h:3
 #, no-c-format
 msgid "1%"
 msgstr "1%"
 
 #, no-c-format
 msgid "1%"
 msgstr "1%"
 
-#: hacks/config/rd-bomb.xml.h:7
+#: hacks/config/rd-bomb.xml.h:7 hacks/config/rdbomb.xml.h:7
 msgid ""
 msgid ""
-"Another variation of the `Bomb' program by Scott Draves. This draws a grid "
-"of growing square-like shapes that, once they overtake each other, react in "
-"unpredictable ways. ``RD'' stands for reaction-diffusion."
+"Draws a grid of growing square-like shapes that, once they overtake each "
+"other, react in unpredictable ways. \"RD\" stands for reaction-diffusion. "
+"Written by Scott Draves."
 msgstr ""
 msgstr ""
-"Une autre variation du programme «Bomb» de Scott Draves. Dessine une grille "
+"Dessine une grille "
 "de formes carrées croissantes qui, une fois qu'elles se rejoignent, "
 "de formes carrées croissantes qui, une fois qu'elles se rejoignent, "
-"réagissent de façon imprévisible. 'RD' signifie réaction-diffusion."
+"réagissent de façon imprévisible. 'RD' signifie réaction-diffusion. "
+"Écrit par Scott Draves."
 
 
-#: hacks/config/rd-bomb.xml.h:8
+#: hacks/config/rd-bomb.xml.h:8 hacks/config/rdbomb.xml.h:8
 msgid "Epoch"
 msgstr "Époque"
 
 msgid "Epoch"
 msgstr "Époque"
 
-#: hacks/config/rd-bomb.xml.h:10
+#: hacks/config/rd-bomb.xml.h:10 hacks/config/rdbomb.xml.h:10
 msgid "Fill Screen"
 msgstr "Remplir l'écran"
 
 msgid "Fill Screen"
 msgstr "Remplir l'écran"
 
-#: hacks/config/rd-bomb.xml.h:14
+#: hacks/config/rd-bomb.xml.h:14 hacks/config/rdbomb.xml.h:14
 msgid "RD-Bomb"
 msgstr "Bombe RD"
 
 msgid "RD-Bomb"
 msgstr "Bombe RD"
 
-#: hacks/config/rd-bomb.xml.h:15
+#: hacks/config/rd-bomb.xml.h:15 hacks/config/rdbomb.xml.h:15
 msgid "Reaction/Difusion"
 msgstr "Réaction/Diffusion"
 
 msgid "Reaction/Difusion"
 msgstr "Réaction/Diffusion"
 
-#: hacks/config/rd-bomb.xml.h:16
+#: hacks/config/rd-bomb.xml.h:16 hacks/config/rdbomb.xml.h:16
 msgid "Seed Radius"
 msgstr "Rayon du germe"
 
 msgid "Seed Radius"
 msgstr "Rayon du germe"
 
-#: hacks/config/rd-bomb.xml.h:19 hacks/config/twang.xml.h:12
-msgid "Tile Size"
-msgstr "Taille des mosaïques"
-
-#: hacks/config/rd-bomb.xml.h:22
+#: hacks/config/rd-bomb.xml.h:22 hacks/config/rdbomb.xml.h:22
 msgid "Wander Speed"
 msgstr "Vitesse de déplacement"
 
 msgid "Wander Speed"
 msgstr "Vitesse de déplacement"
 
@@ -7578,11 +7434,11 @@ msgstr "Tempète"
 msgid ""
 "This draws rippling interference patterns like splashing water. With the -"
 "water option, it manipulates your desktop image to look like something is "
 msgid ""
 "This draws rippling interference patterns like splashing water. With the -"
 "water option, it manipulates your desktop image to look like something is "
-"dripping into it. Written by Tom Hammersley."
+"dripping into it. Written by Tom Hammersley; 1999."
 msgstr ""
 "Dessine des motifs d'interférences ondulants qui ressemblent à des "
 "éclaboussures d'eau. Avec l'option '-water', manipule votre image bureau "
 msgstr ""
 "Dessine des motifs d'interférences ondulants qui ressemblent à des "
 "éclaboussures d'eau. Avec l'option '-water', manipule votre image bureau "
-"pour que quelque chose ait l'air de l'éclabousser. Écrit par Tom Hammersley."
+"pour que quelque chose semble l'éclabousser. Écrit par Tom Hammersley; 1999."
 
 #: hacks/config/rocks.xml.h:7
 msgid "Rocks"
 
 #: hacks/config/rocks.xml.h:7
 msgid "Rocks"
@@ -7595,12 +7451,10 @@ msgstr "Orientation"
 #: hacks/config/rocks.xml.h:11
 msgid ""
 "This draws an animation of flight through an asteroid field, with changes in "
 #: hacks/config/rocks.xml.h:11
 msgid ""
 "This draws an animation of flight through an asteroid field, with changes in "
-"rotation and direction. It can also display 3D separations for red/blue "
-"glasses! Mostly written by Jamie Zawinski."
+"rotation and direction. Written by Jamie Zawinski; 1992."
 msgstr ""
 "Dessine une animation de vol dans un champ d'astéroïdes, dont la  rotation "
 msgstr ""
 "Dessine une animation de vol dans un champ d'astéroïdes, dont la  rotation "
-"et la direction changent. Peut également afficher des séparations 3D pour "
-"les verres rouges/bleus ! Principalement écrit par Jamie Zawinski."
+"et la direction changent. Écrit par Jamie Zawinski; 1992."
 
 #: hacks/config/rocks.xml.h:13
 msgid "Velocity"
 
 #: hacks/config/rocks.xml.h:13
 msgid "Velocity"
@@ -7612,17 +7466,15 @@ msgstr "Rorschach"
 
 #: hacks/config/rorschach.xml.h:9
 msgid ""
 
 #: hacks/config/rorschach.xml.h:9
 msgid ""
-"This generates random inkblot patterns. The algorithm is deceptively simple "
-"for how well it works; it merely walks a dot around the screen randomly, and "
-"then reflects the image horizontally, vertically, or both. Any deep-seated "
-"neurotic tendencies which this program reveals are your own problem. Written "
-"by Jamie Zawinski."
+"This generates random inkblot patterns via a reflected random walk. Any deep-"
+"seated neurotic tendencies which this program reveals are your own problem. "
+"Written by Jamie Zawinski; 1992."
 msgstr ""
 msgstr ""
-"Génère des motifs de taches d'encre aléatoires. L'algorithme est "
-"incroyablement simple pour un si bon fonctionnement; il déplace simplement "
+"Génère des motifs de taches d'encre aléatoires "
+"en déplacant simplement "
 "un point sur l'écran au hasard et reflète l'image horizontalement et/ou "
 "verticalement. Vous êtes responsable de toutes les tendances névrotiques "
 "un point sur l'écran au hasard et reflète l'image horizontalement et/ou "
 "verticalement. Vous êtes responsable de toutes les tendances névrotiques "
-"enfouies que ce programme pourrait révéler. Écrit par Jamie Zawinski."
+"enfouies que ce programme pourrait révéler. Écrit par Jamie Zawinski; 1992."
 
 #: hacks/config/rorschach.xml.h:10
 msgid "With X Symmetry"
 
 #: hacks/config/rorschach.xml.h:10
 msgid "With X Symmetry"
@@ -7632,10 +7484,10 @@ msgstr "Avec symétrie X"
 msgid "With Y Symmetry"
 msgstr "Avec symétrie Y"
 
 msgid "With Y Symmetry"
 msgstr "Avec symétrie Y"
 
-#: hacks/config/rotor.xml.h:1
+#: hacks/config/rotor.xml.h:2
 msgid ""
 msgid ""
-"Another ancient xlock demo, this one by Tom Lawrence. It draws a line "
-"segment moving along a complex spiraling curve."
+"Draws a line segment moving along a complex spiraling curve. Written by Tom "
+"Lawrence; 1997."
 msgstr ""
 
 #: hacks/config/rotor.xml.h:4 hacks/config/wander.xml.h:9
 msgstr ""
 
 #: hacks/config/rotor.xml.h:4 hacks/config/wander.xml.h:9
@@ -7647,9 +7499,8 @@ msgid "Rotor"
 msgstr "Rotor"
 
 #: hacks/config/rotzoomer.xml.h:2
 msgstr "Rotor"
 
 #: hacks/config/rotzoomer.xml.h:2
-#, fuzzy
 msgid "60"
 msgid "60"
-msgstr "360°"
+msgstr "60°"
 
 #: hacks/config/rotzoomer.xml.h:3
 msgid "Animate"
 
 #: hacks/config/rotzoomer.xml.h:3
 msgid "Animate"
@@ -7658,10 +7509,10 @@ msgstr "Animer"
 #: hacks/config/rotzoomer.xml.h:4
 msgid ""
 "Creates a collage of rotated and scaled portions of the screen. Written by "
 #: hacks/config/rotzoomer.xml.h:4
 msgid ""
 "Creates a collage of rotated and scaled portions of the screen. Written by "
-"Claudio Matsuoka."
+"Claudio Matsuoka; 2001."
 msgstr ""
 "Crée un collage de portions pivotées et mises à l'échelle de l'écran. Écrit "
 msgstr ""
 "Crée un collage de portions pivotées et mises à l'échelle de l'écran. Écrit "
-"par Claudio Matsuoka."
+"par Claudio Matsuoka; 2001."
 
 #: hacks/config/rotzoomer.xml.h:6
 msgid "Rectangle Count"
 
 #: hacks/config/rotzoomer.xml.h:6
 msgid "Rectangle Count"
@@ -7686,56 +7537,54 @@ msgstr "Rectangles mobiles"
 #: hacks/config/rubik.xml.h:2
 msgid ""
 "Draws a Rubik's Cube that rotates in three dimensions and repeatedly "
 #: hacks/config/rubik.xml.h:2
 msgid ""
 "Draws a Rubik's Cube that rotates in three dimensions and repeatedly "
-"shuffles and solves itself. Another fine GL hack by Marcelo Vianna."
+"shuffles and solves itself. Written by Marcelo Vianna; 1997."
 msgstr ""
 msgstr ""
-"Dessine un Rubik's Cube qui pivote en trois dimensions et  se mélange et se "
-"résout sans cesse. Un autre beau hack GL de Marcelo Vianna."
+"Dessine un Rubik's Cube qui pivote en trois dimensions, se mélange et se "
+"résout sans cesse. Écrit par Marcelo Vianna; 1997."
 
 
-#: hacks/config/rubik.xml.h:5
+#: hacks/config/rubik.xml.h:4
+msgid "Hide Shuffling"
+msgstr "Cacher le mélange"
+
+#: hacks/config/rubik.xml.h:6
 msgid "Rubik"
 msgstr "Rubik"
 
 msgid "Rubik"
 msgstr "Rubik"
 
-#: hacks/config/rubik.xml.h:7
-msgid "Show Shuffling"
-msgstr "Afficher le mélange"
-
 #: hacks/config/sballs.xml.h:3
 msgid ""
 #: 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@users.sourceforge.net&gt;."
+"Draws an animation of textured balls spinning like crazy. Written by Eric "
+"Lassauge; 2002."
 msgstr ""
 msgstr ""
-"Dessine une animation de balles texturées qui tournent comme des folles en "
-"GL. Nécessite OpenGL et une machine avec un support matériel puissant pour "
-"les textures. Écrit par Eric Lassauge &lt;lassauge@users.sourceforge.net&gt;."
+"Dessine une animation de balles texturées qui tournent comme des folles. "
+"Écrit par Eric Lassauge <lassauge@users.sourceforge.net>; 2002."
 
 
-#: hacks/config/sballs.xml.h:8
+#: hacks/config/sballs.xml.h:7
 msgid "Plane"
 msgstr "Plan"
 
 msgid "Plane"
 msgstr "Plan"
 
-#: hacks/config/sballs.xml.h:9
+#: hacks/config/sballs.xml.h:8
 msgid "Pyramid"
 msgstr "Pyramide"
 
 msgid "Pyramid"
 msgstr "Pyramide"
 
-#: hacks/config/sballs.xml.h:11
+#: hacks/config/sballs.xml.h:10
 msgid "Sballs"
 msgstr "Sballs"
 
 msgid "Sballs"
 msgstr "Sballs"
 
-#: hacks/config/sballs.xml.h:15
+#: hacks/config/sballs.xml.h:14
 msgid "Star"
 msgstr "Étoile"
 
 msgid "Star"
 msgstr "Étoile"
 
-#: hacks/config/shadebobs.xml.h:7
+#: hacks/config/shadebobs.xml.h:8
 msgid "ShadeBobs"
 msgstr "ShadeBobs"
 
 msgid "ShadeBobs"
 msgstr "ShadeBobs"
 
-#: hacks/config/shadebobs.xml.h:11
+#: hacks/config/shadebobs.xml.h:12
 msgid ""
 "This draws smoothly-shaded oscillating oval patterns, that look something "
 msgid ""
 "This draws smoothly-shaded oscillating oval patterns, that look something "
-"like vapor trails or neon tubes. Written by Shane Smit."
+"like vapor trails or neon tubes. Written by Shane Smit; 1999."
 msgstr ""
 "Dessine des formes ovoïdes oscillantes et d'aspect lisse, qui ressemblent un "
 msgstr ""
 "Dessine des formes ovoïdes oscillantes et d'aspect lisse, qui ressemblent un "
-"peu à des traînées de vapeur ou des tubes au néon. Écrit par Shane Smit."
+"peu à des traînées de vapeur ou des tubes au néon. Écrit par Shane Smit; 1999."
 
 #: hacks/config/sierpinski.xml.h:6
 msgid "Sierpinski"
 
 #: hacks/config/sierpinski.xml.h:6
 msgid "Sierpinski"
@@ -7744,48 +7593,47 @@ msgstr "Sierpinski"
 #: hacks/config/sierpinski.xml.h:10
 msgid ""
 "This draws the two-dimensional variant of the recursive Sierpinski triangle "
 #: hacks/config/sierpinski.xml.h:10
 msgid ""
 "This draws the two-dimensional variant of the recursive Sierpinski triangle "
-"fractal. Written by Desmond Daignault."
+"fractal. Written by Desmond Daignault; 1997."
 msgstr ""
 "Dessine la variante bidimensionnelle de la fractale triangulaire récursive "
 msgstr ""
 "Dessine la variante bidimensionnelle de la fractale triangulaire récursive "
-"de Sierpinski. Écrit par Desmond Daignault."
+"de Sierpinski. Écrit par Desmond Daignault; 1997."
 
 #: hacks/config/sierpinski3d.xml.h:7
 msgid "Sierpinski3D"
 msgstr "Sierpinski3D"
 
 
 #: hacks/config/sierpinski3d.xml.h:7
 msgid "Sierpinski3D"
 msgstr "Sierpinski3D"
 
-#: hacks/config/sierpinski3d.xml.h:11
+#: hacks/config/sierpinski3d.xml.h:10
 msgid ""
 "This draws the three-dimensional variant of the recursive Sierpinski "
 msgid ""
 "This draws the three-dimensional variant of the recursive Sierpinski "
-"triangle fractal, using GL. Written by Tim Robinson and Jamie Zawinski."
+"triangle fractal, using GL. Written by Tim Robinson and Jamie Zawinski; 1999."
 msgstr ""
 "Dessine la variante tridimensionnelle de la fractale triangulaire récursive "
 msgstr ""
 "Dessine la variante tridimensionnelle de la fractale triangulaire récursive "
-"de Sierpinski, à l'aide de GL. Écrit par Tim Robinson et Jamie Zawinski."
+"de Sierpinski, à l'aide de GL. Écrit par Tim Robinson et Jamie Zawinski; 1999."
 
 
-#: hacks/config/slidescreen.xml.h:1 hacks/config/twang.xml.h:1
-#: hacks/config/zoom.xml.h:1
-msgid "Border Width"
-msgstr "Largeur de la bordure"
+#: hacks/config/slidescreen.xml.h:3
+msgid "Gutter Size"
+msgstr "Taille du blanc de fond"
 
 
-#: hacks/config/slidescreen.xml.h:4
+#: hacks/config/slidescreen.xml.h:8
 msgid "Slide Speed"
 msgstr "Vitesse de glissement"
 
 msgid "Slide Speed"
 msgstr "Vitesse de glissement"
 
-#: hacks/config/slidescreen.xml.h:5
+#: hacks/config/slidescreen.xml.h:9
 msgid "SlideScreen"
 msgstr "Glissement d'écran"
 
 msgid "SlideScreen"
 msgstr "Glissement d'écran"
 
-#: hacks/config/slidescreen.xml.h:8
+#: hacks/config/slidescreen.xml.h:13
 msgid ""
 "This takes an image, divides it into a grid, and then randomly shuffles the "
 msgid ""
 "This takes an image, divides it into a grid, and then randomly shuffles the "
-"squares around as if it was one of those annoying ``16-puzzle'' games, where "
+"squares around as if it was one of those annoying \"16-puzzle\" games, where "
 "there is a grid of squares, one of which is missing. I hate trying to solve "
 "those puzzles, but watching one permute itself is more amusing. Written by "
 "there is a grid of squares, one of which is missing. I hate trying to solve "
 "those puzzles, but watching one permute itself is more amusing. Written by "
-"Jamie Zawinski."
+"Jamie Zawinski; 1994."
 msgstr ""
 "Prend une image, la divise pour former une grille et mélange au hasard les "
 "carrés comme l'un de ces jeux ennuyeux comprenant une grille de carrés dont "
 "l'un est manquant. Je déteste essayer de résoudre ces puzzles, mais c'est "
 msgstr ""
 "Prend une image, la divise pour former une grille et mélange au hasard les "
 "carrés comme l'un de ces jeux ennuyeux comprenant une grille de carrés dont "
 "l'un est manquant. Je déteste essayer de résoudre ces puzzles, mais c'est "
-"plus amusant d'en voir un se résoudre lui-même. Écrit par Jamie Zawinski."
+"plus amusant d'en voir un se résoudre lui-même. Écrit par Jamie Zawinski; 1994."
 
 #: hacks/config/slip.xml.h:6
 msgid "Slip"
 
 #: hacks/config/slip.xml.h:6
 msgid "Slip"
@@ -7797,21 +7645,17 @@ msgid ""
 "a jet engine and spews them out the other side. To avoid turning the image "
 "completely to mush, every now and then it will and then it interjects some "
 "splashes of color into the scene, or go into a spin cycle, or stretch the "
 "a jet engine and spews them out the other side. To avoid turning the image "
 "completely to mush, every now and then it will and then it interjects some "
 "splashes of color into the scene, or go into a spin cycle, or stretch the "
-"image like taffy, or (this is my addition) grab an image of your current "
-"desktop to chew on. Originally written by Scott Draves; whacked on by Jamie "
-"Zawinski."
+"image like taffy. Written by Scott Draves and Jamie Zawinski; 1997."
 msgstr ""
 "Ce programme affiche des éléments aléatoires à l'écran, puis les aspire dans "
 "un réacteur et les fait ressortir. Pour ne pas réduire complètement l'image "
 "en bouillie, il injectera de temps en temps des taches de couleur dans la "
 msgstr ""
 "Ce programme affiche des éléments aléatoires à l'écran, puis les aspire dans "
 "un réacteur et les fait ressortir. Pour ne pas réduire complètement l'image "
 "en bouillie, il injectera de temps en temps des taches de couleur dans la "
-"scène, entamera un cycle d'essorage, étendra l'image comme un caramel ou (ma "
-"touche personnelle) capturera l'image de votre bureau actuel pour la "
-"retourner. Initialement écrit par Scott Draves ; bouleversé par Jamie "
-"Zawinski."
+"scène, entamera un cycle d'essorage, étendra l'image comme un caramel. "
+"Écrit par Scott Draves et Jamie Zawinski; 1997."
 
 #: hacks/config/sonar.xml.h:1
 
 #: hacks/config/sonar.xml.h:1
-msgid "Ping known hosts"
-msgstr "Ping des machines connues"
+msgid "Ping known SSH hosts"
+msgstr "Ping des machines SSH connues"
 
 #: hacks/config/sonar.xml.h:2
 msgid "Ping mode..."
 
 #: hacks/config/sonar.xml.h:2
 msgid "Ping mode..."
@@ -7851,7 +7695,7 @@ msgstr "Résolution des noms d'hôte"
 
 #: hacks/config/sonar.xml.h:11
 msgid "Show Ping Times"
 
 #: hacks/config/sonar.xml.h:11
 msgid "Show Ping Times"
-msgstr "Montre les durées des ping"
+msgstr "Montrer les durées des ping"
 
 #: hacks/config/sonar.xml.h:12
 msgid "Simulation Team Members"
 
 #: hacks/config/sonar.xml.h:12
 msgid "Simulation Team Members"
@@ -7871,17 +7715,13 @@ msgstr "Nom de l'équipe B"
 
 #: hacks/config/sonar.xml.h:16
 msgid ""
 
 #: hacks/config/sonar.xml.h:16
 msgid ""
-"This program draws a simulation of a sonar screen. By default, it displays a "
-"random assortment of ``bogies'' on the screen, but if installed as \"setuid "
-"root\", it can ping (pun intended) your local network, and actually plot the "
-"proximity of the other hosts on your network to you. Written by Stephen "
-"Martin and Jamie Zawinski."
+"This program draws a sonar screen that pings (get it?) the hosts on your "
+"local network, and plots their distance (response time) from you. The three "
+"rings represent ping times of approximately 2.5, 70 and 2,000 milliseconds "
+"respectively. Alternately, it can run a simulation that doesn't involve "
+"hosts. (If pinging doesn't work, you may need to make the executable be "
+"setuid.) Written by Stephen Martin and Jamie Zawinski; 1998."
 msgstr ""
 msgstr ""
-"Ce programme dessine une simulation d'un écran de sonar. Par défaut, il "
-"affiche un assortiment aléatoire de 'trucs' à l'écran, mais, s'il est "
-"installé \"setuid root\", il peut effectuer un ping sur votre réseau local "
-"et calculer  la proximité des autres hôtes du réseau par rapport à vous."
-"Écrit par Stephen Martin et Jamie Zawinski."
 
 #: hacks/config/sonar.xml.h:17
 msgid "vs."
 
 #: hacks/config/sonar.xml.h:17
 msgid "vs."
@@ -7900,46 +7740,44 @@ msgid "Max Velocity"
 msgstr "Vélocité max."
 
 #: hacks/config/speedmine.xml.h:8
 msgstr "Vélocité max."
 
 #: hacks/config/speedmine.xml.h:8
-msgid "Mine Shaft"
-msgstr "Puits de mine"
-
-#: hacks/config/speedmine.xml.h:9
 msgid "Present Bonuses"
 msgstr "Bonus présents"
 
 msgid "Present Bonuses"
 msgstr "Bonus présents"
 
-#: hacks/config/speedmine.xml.h:10
+#: hacks/config/speedmine.xml.h:9
 msgid "Rocky Walls"
 msgstr "Parois rocheuses"
 
 msgid "Rocky Walls"
 msgstr "Parois rocheuses"
 
-#: hacks/config/speedmine.xml.h:12
+#: hacks/config/speedmine.xml.h:11
 msgid ""
 "Simulates speeding down a rocky mineshaft, or a funky dancing worm. Written "
 msgid ""
 "Simulates speeding down a rocky mineshaft, or a funky dancing worm. Written "
-"by Conrad Parker."
+"by Conrad Parker; 2001."
 msgstr ""
 "Simule la descente dans un puits de mine rocheux ou affiche un ver funky "
 msgstr ""
 "Simule la descente dans un puits de mine rocheux ou affiche un ver funky "
-"dansant. Écrit par Conrad Parker."
+"dansant. Écrit par Conrad Parker; 2001."
 
 
-#: hacks/config/speedmine.xml.h:16
+#: hacks/config/speedmine.xml.h:14
 msgid "SpeedMine"
 msgstr "SpeedMine"
 
 msgid "SpeedMine"
 msgstr "SpeedMine"
 
-#: hacks/config/speedmine.xml.h:17
+#: hacks/config/speedmine.xml.h:15
 msgid "Thrust"
 msgstr "Poussée"
 
 msgid "Thrust"
 msgstr "Poussée"
 
-#: hacks/config/speedmine.xml.h:19 hacks/config/worm.xml.h:10
+#: hacks/config/speedmine.xml.h:16
+msgid "Tunnel"
+msgstr "Tunnel GL"
+
+#: hacks/config/speedmine.xml.h:18 hacks/config/worm.xml.h:10
 msgid "Worm"
 msgstr "Ver"
 
 #: hacks/config/sphere.xml.h:1
 msgid ""
 msgid "Worm"
 msgstr "Ver"
 
 #: 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."
+"Draws shaded spheres in multiple colors. Written by Tom Duff and Jamie "
+"Zawinski; 1982, 1997."
 msgstr ""
 msgstr ""
-"Un autre hack classique d'une époque lointaine. Il dessine des sphères "
-"ombrées en plusieurs couleurs. Son arbre généalogique remonte à Tom Duff en "
-"1982."
+"Dessine des sphères ombrées en plusieurs couleurs. "
+"Écrit par Tom Duff et Jamie Zawinski; 1982, 1997."
 
 #: hacks/config/sphereeversion.xml.h:1
 msgid "SphereEversion"
 
 #: hacks/config/sphereeversion.xml.h:1
 msgid "SphereEversion"
@@ -7950,39 +7788,36 @@ msgid ""
 "SphereEversion draws an animation of a sphere being turned inside out. A "
 "sphere can be turned inside out, without any tears, sharp creases or "
 "discontinuities, if the surface of the sphere is allowed to intersect "
 "SphereEversion draws an animation of a sphere being turned inside out. A "
 "sphere can be turned inside out, without any tears, sharp creases or "
 "discontinuities, if the surface of the sphere is allowed to intersect "
-"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 &lt;http://www.dgp.utoronto.ca/~mjmcguff/eversion/&gt;."
+"itself. This program animates what is known as the Thurston Eversion. This "
+"program is not included with the XScreenSaver package, but if you don't have "
+"it already, you can find it at &lt;http://www.dgp.utoronto.ca/~mjmcguff/"
+"eversion/&gt;. Written by Nathaniel Thurston and Michael McGuffin; 2001."
 msgstr ""
 
 #: hacks/config/spheremonics.xml.h:20
 msgid "Smoothed Lines"
 msgstr "Lignes lissées"
 
 msgstr ""
 
 #: hacks/config/spheremonics.xml.h:20
 msgid "Smoothed Lines"
 msgstr "Lignes lissées"
 
-#: hacks/config/spheremonics.xml.h:23
+#: hacks/config/spheremonics.xml.h:22
 msgid "Spheremonics"
 msgstr "Sphèremonics"
 
 msgid "Spheremonics"
 msgstr "Sphèremonics"
 
-#: hacks/config/spheremonics.xml.h:24
+#: hacks/config/spheremonics.xml.h:23
 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 "
 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."
+"angular momentum operators. Written by Paul Bourke and Jamie Zawinski; 2002."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/spiral.xml.h:2 hacks/config/superquadrics.xml.h:2
+#: hacks/config/spiral.xml.h:2
 msgid "Cycles"
 msgstr "Fréquence des cycles"
 
 #: hacks/config/spiral.xml.h:7
 msgid "Cycles"
 msgstr "Fréquence des cycles"
 
 #: hacks/config/spiral.xml.h:7
-msgid ""
-"Moving circular patterns, by Peter Schmitzberger. Moving circular patterns "
-"means moire; interference patterns, of course."
+msgid "Moving circular moire patterns. Written by Peter Schmitzberger; 1997."
 msgstr ""
 msgstr ""
-"Motifs circulaires mobiles, par Peter Schmitzberger. Les motifs circulaires "
-"mobiles sont synonymes de moiré ; des motifs d'interférences, évidemment."
+"Motifs de moiré circulaires mobiles. Écrit par Peter Schmitzberger; 1997."
 
 #: hacks/config/spiral.xml.h:11
 msgid "Spiral"
 
 #: hacks/config/spiral.xml.h:11
 msgid "Spiral"
@@ -7991,20 +7826,25 @@ msgstr "Spirale"
 #: hacks/config/spotlight.xml.h:1
 msgid ""
 "Draws a spotlight scanning across a black screen, illuminating the "
 #: hacks/config/spotlight.xml.h:1
 msgid ""
 "Draws a spotlight scanning across a black screen, illuminating the "
-"underlying desktop when it passes. Written by Rick Schultz."
+"underlying desktop (or a picture) when it passes. Written by Rick Schultz "
+"and Jamie Zawinski; 1999."
 msgstr ""
 "Trace un faisceau lumineux qui parcourt un écran noir et illumine le bureau "
 msgstr ""
 "Trace un faisceau lumineux qui parcourt un écran noir et illumine le bureau "
-"sous-jacent. Écrit par Rick Schultz."
+"sous-jacent. Écrit par Rick Schultz et Jamie Zawinski; 1999."
 
 
-#: hacks/config/spotlight.xml.h:6
+#: hacks/config/spotlight.xml.h:7
 msgid "Spotlight"
 msgstr "Faisceau lumineux"
 
 msgid "Spotlight"
 msgstr "Faisceau lumineux"
 
-#: hacks/config/sproingies.xml.h:3
-msgid "Q-Bert meets Marble Madness! Written by Ed Mackey."
-msgstr "La rencontre de Q-Bert et de Marble Madness ! Écrit par Ed Mackey."
+#: hacks/config/spotlight.xml.h:8
+msgid "Spotlight Size"
+msgstr "Taille du faisceau lumineux"
+
+#: hacks/config/sproingies.xml.h:4
+msgid "Q-Bert meets Marble Madness! Written by Ed Mackey; 1997."
+msgstr "La rencontre de Q-Bert et de Marble Madness ! Écrit par Ed Mackey; 1997."
 
 
-#: hacks/config/sproingies.xml.h:9
+#: hacks/config/sproingies.xml.h:8
 msgid "Sproingies"
 msgstr "Sproingies"
 
 msgid "Sproingies"
 msgstr "Sproingies"
 
@@ -8012,11 +7852,11 @@ msgstr "Sproingies"
 msgid ""
 "Draws a set of interacting, square-spiral-producing automata. The spirals "
 "grow outward until they hit something, then they go around it. Written by "
 msgid ""
 "Draws a set of interacting, square-spiral-producing automata. The spirals "
 "grow outward until they hit something, then they go around it. Written by "
-"Jeff Epler."
+"Jeff Epler; 1999."
 msgstr ""
 "Dessine un ensemble d'automates qui interagissent et produisent des spirales "
 "carrées. Les spirales grandissent jusqu'à ce qu'elles heurtent un obstacle, "
 msgstr ""
 "Dessine un ensemble d'automates qui interagissent et produisent des spirales "
 "carrées. Les spirales grandissent jusqu'à ce qu'elles heurtent un obstacle, "
-"qu'elles contournent. Écrit par Jeff Epler."
+"qu'elles contournent. Écrit par Jeff Epler; 1999."
 
 #: hacks/config/squiral.xml.h:5
 msgid "Handedness"
 
 #: hacks/config/squiral.xml.h:5
 msgid "Handedness"
@@ -8026,7 +7866,7 @@ msgstr "Sens de rotation"
 msgid "Left"
 msgstr "Gauche"
 
 msgid "Left"
 msgstr "Gauche"
 
-#: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:8
+#: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:9
 msgid "Randomness"
 msgstr "Caractère aléatoire"
 
 msgid "Randomness"
 msgstr "Caractère aléatoire"
 
@@ -8038,37 +7878,15 @@ msgstr "Droite"
 msgid "Squiral"
 msgstr "Spirale carrées"
 
 msgid "Squiral"
 msgstr "Spirale carrées"
 
-#: hacks/config/ssystem.xml.h:1
-msgid "SSystem"
-msgstr "SSystem"
-
-#: hacks/config/ssystem.xml.h:2
-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 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 Celestia, found at &lt;http://www.shatters."
-"net/celestia/&gt;. Sadly, Celestia does not work with xscreensaver at all. "
-"You are encouraged to nag the authors into adding xscreensaver support!"
+#: hacks/config/stairs.xml.h:1
+msgid "Escher's infinite staircase. Written by Marcelo Vianna; 1998."
 msgstr ""
 msgstr ""
+"«L'escalier infini» d'Escher. Écrit par Marcelo Vianna; 1998."
 
 #: hacks/config/stairs.xml.h:6
 msgid "Stairs"
 msgstr "Escaliers"
 
 
 #: hacks/config/stairs.xml.h:6
 msgid "Stairs"
 msgstr "Escaliers"
 
-#: hacks/config/stairs.xml.h:8
-msgid ""
-"by Marcelo Vianna's third Escher GL hack, this one draws an ``infinite'' "
-"staircase."
-msgstr ""
-"Le troisième hack GL de Marcelo Vianna d'après Escher, cette fois "
-"«l'escalier infini»."
-
 #: hacks/config/starfish.xml.h:1
 msgid "Color Gradients"
 msgstr "Dégradés de couleur"
 #: hacks/config/starfish.xml.h:1
 msgid "Color Gradients"
 msgstr "Dégradés de couleur"
@@ -8077,21 +7895,21 @@ msgstr "Dégradés de couleur"
 msgid "Pulsating Blob"
 msgstr "Tache pulsatile"
 
 msgid "Pulsating Blob"
 msgstr "Tache pulsatile"
 
-#: hacks/config/starfish.xml.h:10
+#: hacks/config/starfish.xml.h:11
 msgid "Starfish"
 msgstr "Étoile de mer"
 
 msgid "Starfish"
 msgstr "Étoile de mer"
 
-#: hacks/config/starfish.xml.h:13
+#: hacks/config/starfish.xml.h:14
 msgid ""
 "This generates a sequence of undulating, throbbing, star-like patterns which "
 "pulsate, rotate, and turn inside out. Another display mode uses these shapes "
 "to lay down a field of colors, which are then cycled. The motion is very "
 msgid ""
 "This generates a sequence of undulating, throbbing, star-like patterns which "
 "pulsate, rotate, and turn inside out. Another display mode uses these shapes "
 "to lay down a field of colors, which are then cycled. The motion is very "
-"organic. Written by Jamie Zawinski."
+"organic. Written by Jamie Zawinski; 1997."
 msgstr ""
 "Génère une séquence de motifs ondulants en forme d'étoiles qui pulsent, "
 "pivotent et se retournent. Un autre mode d'affichage utilise ces formes pour "
 "créer un champ de couleurs, qui présente des cycles. Le mouvement est très "
 msgstr ""
 "Génère une séquence de motifs ondulants en forme d'étoiles qui pulsent, "
 "pivotent et se retournent. Un autre mode d'affichage utilise ces formes pour "
 "créer un champ de couleurs, qui présente des cycles. Le mouvement est très "
-"organique. Écrit par Jamie Zawinski."
+"organique. Écrit par Jamie Zawinski; 1997."
 
 #: hacks/config/starwars.xml.h:2
 msgid "Anti-aliased Lines"
 
 #: hacks/config/starwars.xml.h:2
 msgid "Anti-aliased Lines"
@@ -8100,10 +7918,8 @@ msgstr "Lignes anti-aliassées"
 #: hacks/config/starwars.xml.h:4
 msgid ""
 "Draws a stream of text slowly scrolling into the distance at an angle, over "
 #: hacks/config/starwars.xml.h:4
 msgid ""
 "Draws a stream of text slowly scrolling into the distance at an angle, over "
-"a star field, like at the beginning of the movie of the same name. The text "
-"can be the output of a program or the contents of a file or URL, as "
-"configured on the \"Advanced\" tab of the main Screensaver Preferences "
-"window. Written by Jamie Zawinski and Claudio Matauoka."
+"a star field, like at the beginning of the movie of the same name. Written "
+"by Jamie Zawinski and Claudio Matauoka; 2001."
 msgstr ""
 
 #: hacks/config/starwars.xml.h:5
 msgstr ""
 
 #: hacks/config/starwars.xml.h:5
@@ -8122,27 +7938,31 @@ msgstr "Vitesse de rotation des étoiles"
 msgid "StarWars"
 msgstr "StarWars"
 
 msgid "StarWars"
 msgstr "StarWars"
 
-#: hacks/config/starwars.xml.h:18
+#: hacks/config/starwars.xml.h:17
 msgid "Texture-Mapped Font"
 msgstr "Police de caractère texturée"
 
 msgid "Texture-Mapped Font"
 msgstr "Police de caractère texturée"
 
-#: hacks/config/starwars.xml.h:19
+#: hacks/config/starwars.xml.h:18
 msgid "Thick Lines"
 msgstr "Lignes épaisses"
 
 msgid "Thick Lines"
 msgstr "Lignes épaisses"
 
-#: hacks/config/starwars.xml.h:20
+#: hacks/config/starwars.xml.h:19
 msgid "Wrap Long Lines"
 msgstr "Retour à la ligne"
 
 msgid "Wrap Long Lines"
 msgstr "Retour à la ligne"
 
+#: hacks/config/starwars.xml.h:20
+msgid "or, Text Columns"
+msgstr "ou, colonnes de texte"
+
 #: hacks/config/stonerview.xml.h:1
 msgid ""
 "Chains of colorful squares dance around each other in complex spiral "
 #: hacks/config/stonerview.xml.h:1
 msgid ""
 "Chains of colorful squares dance around each other in complex spiral "
-"patterns. Written by Andrew Plotkin, based on SGI's `electropaint' "
-"screensaver."
+"patterns. Inspired by SGI's `electropaint' screensaver. Written by Andrew "
+"Plotkin; 2001."
 msgstr ""
 "Des chaînes de carrés colorés dansent les unes autour des autres  en formant "
 msgstr ""
 "Des chaînes de carrés colorés dansent les unes autour des autres  en formant "
-"des spirales complexes. Écrit par Andrew Plotkin, basé sur l'économiseur "
-"d'écran «electropaint» de SGI."
+"des spirales complexes. Basé sur l'économiseur d'écran «electropaint» de SGI. "
+"Écrit par Andrew Plotkin; 2001."
 
 #: hacks/config/stonerview.xml.h:3
 msgid "StonerView"
 
 #: hacks/config/stonerview.xml.h:3
 msgid "StonerView"
@@ -8155,12 +7975,12 @@ msgstr "Étrange"
 #: hacks/config/strange.xml.h:7
 msgid ""
 "This draws strange attractors: it's a colorful, unpredictably-animating "
 #: hacks/config/strange.xml.h:7
 msgid ""
 "This draws strange attractors: it's a colorful, unpredictably-animating "
-"field of dots that swoops and twists around. The motion is very nice. "
-"Written by Massimino Pascal."
+"field of dots that swoops and twists around. Written by Massimino Pascal; "
+"1997."
 msgstr ""
 "Dessine d'étranges attracteurs : ils ressemblent à des champs de points "
 msgstr ""
 "Dessine d'étranges attracteurs : ils ressemblent à des champs de points "
-"colorés qui tournent et se tortillent de manière imprévisible. Le mouvement "
-"est très beau. Écrit par Massimino Pascal."
+"colorés qui tournent et se tortillent de manière imprévisible. "
+"Écrit par Massimino Pascal; 1997."
 
 #: hacks/config/substrate.xml.h:2 hacks/config/xplanet.xml.h:2
 #, no-c-format
 
 #: hacks/config/substrate.xml.h:2 hacks/config/xplanet.xml.h:2
 #, no-c-format
@@ -8178,8 +7998,8 @@ msgstr "Craquements initaux"
 #: hacks/config/substrate.xml.h:10
 msgid ""
 "Lines like crystals grow on a computational substrate. A simple "
 #: hacks/config/substrate.xml.h:10
 msgid ""
 "Lines like crystals grow on a computational substrate. A simple "
-"perpendicular growth rule creates intricate city-like structures. By J. "
-"Tarbell and Mike Kershaw."
+"perpendicular growth rule creates intricate city-like structures. Written by "
+"J. Tarbell and Mike Kershaw; 2004."
 msgstr ""
 
 #: hacks/config/substrate.xml.h:13
 msgstr ""
 
 #: hacks/config/substrate.xml.h:13
@@ -8194,31 +8014,22 @@ msgstr "Substrat"
 msgid "Wireframe only"
 msgstr "Fil de fer"
 
 msgid "Wireframe only"
 msgstr "Fil de fer"
 
-#: hacks/config/superquadrics.xml.h:3
-msgid ""
-"Ed Mackey reports that he wrote the first version of this program in BASIC "
-"on a Commodore 64 in 1987, as a 320x200 black and white wireframe. Now it is "
-"GL and has specular reflections."
+#: hacks/config/superquadrics.xml.h:8
+msgid "Morphing 3D shapes. Written by Ed Mackey; 1987, 1997."
 msgstr ""
 msgstr ""
-"Ed Mackey déclare avoir écrit la première version de ce programme en langage "
-"BASIC sur un Commodore 64 en 1987, sous la forme d'un maillage graphique "
-"320x200 noir et blanc. Il est désormais en GL et présente des réflexions "
-"spéculaires."
 
 
-#: hacks/config/superquadrics.xml.h:11
+#: hacks/config/superquadrics.xml.h:12
+msgid "Spin Speed"
+msgstr "Vitesse de rotation"
+
+#: hacks/config/superquadrics.xml.h:13
 msgid "Superquadrics"
 msgstr "Superquadriques"
 
 msgid "Superquadrics"
 msgstr "Superquadriques"
 
-#: hacks/config/swirl.xml.h:4
-msgid ""
-"More flowing, swirly patterns. This version is by M. Dobie and R. Taylor, "
-"but you might have seen a Mac program similar to this called FlowFazer. "
-"There is also a cool Java applet of a similar concept."
+#: hacks/config/swirl.xml.h:3
+msgid "Flowing, swirly patterns. Written by M. Dobie and R. Taylor; 1997."
 msgstr ""
 msgstr ""
-"Autre motifs fluides et tourbillonnants. Cette version est de M. Dobie et R. "
-"Taylor, mais vous avez peut-être déjà vu un programme Mac similaire appelé "
-"FlowFazer. Il existe aussi une chouette applet Java avec un concept "
-"apparenté."
+"Motifs fluides et tourbillonnants. Écrit par M. Dobie et R. Taylor; 1997."
 
 #: hacks/config/swirl.xml.h:8
 msgid "Swirl"
 
 #: hacks/config/swirl.xml.h:8
 msgid "Swirl"
@@ -8244,26 +8055,26 @@ msgstr "Plus grand"
 msgid "Cycle Seconds"
 msgstr "Cycle des secondes"
 
 msgid "Cycle Seconds"
 msgstr "Cycle des secondes"
 
-#: hacks/config/t3d.xml.h:10
+#: hacks/config/t3d.xml.h:6
+msgid ""
+"Draws a working analog clock composed of floating, throbbing bubbles. "
+"Written by Bernd Paysan; 1999."
+msgstr ""
+"Dessine une horloge analogique composée de bulles flottantes et pulsatiles. "
+"Écrit par Bernd Paysan; 1999."
+
+#: hacks/config/t3d.xml.h:11
 msgid "Minute Tick Marks"
 msgstr "Marque toutes les minutes"
 
 msgid "Minute Tick Marks"
 msgstr "Marque toutes les minutes"
 
-#: hacks/config/t3d.xml.h:12
+#: hacks/config/t3d.xml.h:13
 msgid "Smaller"
 msgstr "Plus petit"
 
 msgid "Smaller"
 msgstr "Plus petit"
 
-#: hacks/config/t3d.xml.h:14
+#: hacks/config/t3d.xml.h:15
 msgid "T3D"
 msgstr "T3D"
 
 msgid "T3D"
 msgstr "T3D"
 
-#: hacks/config/t3d.xml.h:15
-msgid ""
-"This draws a working analog clock composed of floating, throbbing bubbles. "
-"Written by Bernd Paysan."
-msgstr ""
-"Dessine une horloge analogique composée de bulles flottantes et pulsatiles. "
-"Écrit par Bernd Paysan."
-
 #: hacks/config/t3d.xml.h:16
 msgid "Turn Side-to-Side"
 msgstr "Retourner"
 #: hacks/config/t3d.xml.h:16
 msgid "Turn Side-to-Side"
 msgstr "Retourner"
@@ -8272,9 +8083,8 @@ msgstr "Retourner"
 msgid "Wobbliness"
 msgstr "Oscillation"
 
 msgid "Wobbliness"
 msgstr "Oscillation"
 
-#: hacks/config/tangram.xml.h:3
-msgid ""
-"Lets you watch the computer solve Tangram puzzles Written by Jeremy English."
+#: hacks/config/tangram.xml.h:4
+msgid "Solves tangram puzzles. Written by Jeremy English; 2005."
 msgstr ""
 
 #: hacks/config/tangram.xml.h:6
 msgstr ""
 
 #: hacks/config/tangram.xml.h:6
@@ -8299,11 +8109,11 @@ msgstr "Rotation caméra en Z"
 
 #: hacks/config/thornbird.xml.h:1
 msgid ""
 
 #: hacks/config/thornbird.xml.h:1
 msgid ""
-"Displays a view of the ``Bird in a Thornbush'' fractal. Written by Tim "
-"Auckland."
+"Displays a view of the \"Bird in a Thornbush\" fractal. Written by Tim "
+"Auckland; 2002."
 msgstr ""
 "Affiche la fractale de l'«oiseau dans un buisson épineux». Écrit par Tim "
 msgstr ""
 "Affiche la fractale de l'«oiseau dans un buisson épineux». Écrit par Tim "
-"Auckland."
+"Auckland; 2002."
 
 #: hacks/config/thornbird.xml.h:6
 msgid "Points"
 
 #: hacks/config/thornbird.xml.h:6
 msgid "Points"
@@ -8328,7 +8138,7 @@ msgstr "Dessiner le logo"
 #: hacks/config/timetunnel.xml.h:5
 msgid ""
 "Draws an animation similar to the opening and closing effects on the Dr. Who "
 #: hacks/config/timetunnel.xml.h:5
 msgid ""
 "Draws an animation similar to the opening and closing effects on the Dr. Who "
-"television show. Written by Sean P. Brennan."
+"TV show. Written by Sean P. Brennan; 2005."
 msgstr ""
 
 #: hacks/config/timetunnel.xml.h:7
 msgstr ""
 
 #: hacks/config/timetunnel.xml.h:7
@@ -8343,13 +8153,63 @@ msgstr "Durée de la séquence initiale"
 msgid "Timetunnel"
 msgstr "Tunnel du temps"
 
 msgid "Timetunnel"
 msgstr "Tunnel du temps"
 
+#: hacks/config/topblock.xml.h:1
+msgid "Blob mode"
+msgstr "Mode des taches"
+
+#: hacks/config/topblock.xml.h:2
+msgid "Carpet"
+msgstr "Tapis"
+
+#: hacks/config/topblock.xml.h:3
+msgid "Carpet Size"
+msgstr "Taille des tapis"
+
+#: hacks/config/topblock.xml.h:4
+msgid ""
+"Creates a 3D world with dropping blocks that build up and up. Written by "
+"rednuht; 2006."
+msgstr ""
+
+#: hacks/config/topblock.xml.h:5
+msgid "Different Colors"
+msgstr "Couleurs différentes"
+
+#: hacks/config/topblock.xml.h:6
+msgid "Drop Speed"
+msgstr "Vitesse de descente"
+
+#: hacks/config/topblock.xml.h:8
+msgid "Follow"
+msgstr "Suivre"
+
+#: hacks/config/topblock.xml.h:12
+msgid "Nipples"
+msgstr "Tétines"
+
+#: hacks/config/topblock.xml.h:13
+msgid "Polygon Count"
+msgstr "Nombre de polygones"
+
+#: hacks/config/topblock.xml.h:19
+msgid "Spawn Likelyhood"
+msgstr "Similarité de reproduction"
+
+#: hacks/config/topblock.xml.h:21
+msgid "Tunnel mode"
+msgstr "Mode tunnel"
+
+#: hacks/config/topblock.xml.h:23
+msgid "topBlock"
+msgstr "topBloc"
+
 #: hacks/config/triangle.xml.h:2
 msgid ""
 "Generates random mountain ranges using iterative subdivision of triangles. "
 #: hacks/config/triangle.xml.h:2
 msgid ""
 "Generates random mountain ranges using iterative subdivision of triangles. "
-"Written by Tobias Gloth."
+"Written by Tobias Gloth; 1997."
 msgstr ""
 "Génère des chaînes de montagne aléatoires en utilisant la subdivision "
 msgstr ""
 "Génère des chaînes de montagne aléatoires en utilisant la subdivision "
-"itérative de triangles. Écrit par Tobias Gloth."
+"itérative de triangles. Écrit par Tobias Gloth; 1997."
 
 #: hacks/config/triangle.xml.h:7
 msgid "Triangle"
 
 #: hacks/config/triangle.xml.h:7
 msgid "Triangle"
@@ -8357,42 +8217,47 @@ msgstr "Triangle"
 
 #: hacks/config/truchet.xml.h:4
 msgid ""
 
 #: hacks/config/truchet.xml.h:4
 msgid ""
-"This draws line- and arc-based Truchet patterns that tile the screen. "
-"Written by Adrian Likins."
+"This draws line- and arc-based truchet patterns that tile the screen. "
+"Written by Adrian Likins; 1998."
 msgstr ""
 "Dessine des motifs de Truchet basés sur des lignes et des arcs, qui "
 msgstr ""
 "Dessine des motifs de Truchet basés sur des lignes et des arcs, qui "
-"recouvrent l'écran. Écrit par Adrian Likins."
+"recouvrent l'écran. Écrit par Adrian Likins; 1998."
 
 #: hacks/config/truchet.xml.h:5
 msgid "Truchet"
 msgstr "Truchet"
 
 
 #: hacks/config/truchet.xml.h:5
 msgid "Truchet"
 msgstr "Truchet"
 
+#: hacks/config/twang.xml.h:1 hacks/config/zoom.xml.h:1
+msgid "Border Width"
+msgstr "Largeur de la bordure"
+
 #: hacks/config/twang.xml.h:2
 msgid ""
 #: hacks/config/twang.xml.h:2
 msgid ""
-"Divides the screen into a grid, and plucks them. Written by Dan Bornstein."
+"Divides the screen into a grid, and plucks them. Written by Dan Bornstein; "
+"2002."
 msgstr ""
 msgstr ""
-"Divise l'écran en petits rectangles, qui sont ensuite enlevés. Écrit par Dan "
-"Bornstein."
+"Divise l'écran en petits rectangles, qui sont ensuite secoués. Écrit par Dan "
+"Bornstein; 2002."
 
 #: hacks/config/twang.xml.h:6
 msgid "Jumpy"
 msgstr "Sautillant"
 
 
 #: hacks/config/twang.xml.h:6
 msgid "Jumpy"
 msgstr "Sautillant"
 
-#: hacks/config/twang.xml.h:11
+#: hacks/config/twang.xml.h:13
 msgid "Springiness"
 msgstr "Flexibilité"
 
 msgid "Springiness"
 msgstr "Flexibilité"
 
-#: hacks/config/twang.xml.h:13
+#: hacks/config/twang.xml.h:15
 msgid "Transference"
 msgstr "Migration"
 
 msgid "Transference"
 msgstr "Migration"
 
-#: hacks/config/twang.xml.h:14
+#: hacks/config/twang.xml.h:16
 msgid "Twang"
 msgstr "Twang"
 
 #: hacks/config/vermiculate.xml.h:1
 msgid "Twang"
 msgstr "Twang"
 
 #: hacks/config/vermiculate.xml.h:1
-msgid "Draws squiggly worm-like paths. Written by Tyler Pierce."
-msgstr "Trace des gribouillis vermiculés. Écrit par Tyler Pierce."
+msgid "Draws squiggly worm-like paths. Written by Tyler Pierce; 2001."
+msgstr "Trace des gribouillis vermiculés. Écrit par Tyler Pierce; 2001."
 
 #: hacks/config/vermiculate.xml.h:2
 msgid "Vermiculate"
 
 #: hacks/config/vermiculate.xml.h:2
 msgid "Vermiculate"
@@ -8408,33 +8273,32 @@ msgstr "Répertoire d'images"
 
 #: hacks/config/vidwhacker.xml.h:5
 msgid ""
 
 #: hacks/config/vidwhacker.xml.h:5
 msgid ""
-"This is actually just a shell script that grabs a frame of video from the "
-"system's video input, and then uses some PBM filters (chosen at random) to "
-"manipulate and recombine the video frame in various ways (edge detection, "
-"subtracting the image from a rotated version of itself, etc.) Then it "
-"displays that image for a few seconds, and does it again. This works really "
-"well if you just feed broadcast television into it."
+"This is a shell script that grabs a frame of video from the system's video "
+"input, and then uses some PBM filters (chosen at random) to manipulate and "
+"recombine the video frame in various ways (edge detection, subtracting the "
+"image from a rotated version of itself, etc.) Then it displays that image "
+"for a few seconds, and does it again. This works really well if you just "
+"feed broadcast television into it. Written by Jamie Zawinski; 1998."
 msgstr ""
 "Il s'agit d'un simple script shell qui capture une image depuis l'entrée "
 "vidéo du système et utilise des filtres PBM (choisis au hasard) pour  "
 "manipuler et reformer l'image vidéo de diverses manières (détection des "
 "contours, soustraction de l'image d'une version pivotée d'elle-même, etc.) "
 "Ensuite, il  affiche cette image pendant quelques secondes et recommence. Ce "
 msgstr ""
 "Il s'agit d'un simple script shell qui capture une image depuis l'entrée "
 "vidéo du système et utilise des filtres PBM (choisis au hasard) pour  "
 "manipuler et reformer l'image vidéo de diverses manières (détection des "
 "contours, soustraction de l'image d'une version pivotée d'elle-même, etc.) "
 "Ensuite, il  affiche cette image pendant quelques secondes et recommence. Ce "
-"programme fonctionne très bien si vous le reliez à un téléviseur."
+"programme fonctionne très bien si vous le reliez à un téléviseur. "
+"Écrit par Jamie Zawinski; 1998."
 
 #: hacks/config/vidwhacker.xml.h:6
 msgid "VidWhacker"
 msgstr "VidWhacker"
 
 
 #: hacks/config/vidwhacker.xml.h:6
 msgid "VidWhacker"
 msgstr "VidWhacker"
 
-#: hacks/config/vines.xml.h:6
+#: hacks/config/vines.xml.h:2
 msgid ""
 msgid ""
-"This one generates a continuous sequence of small, curvy geometric patterns. "
-"It scatters them around your screen until it fills up, then it clears the "
-"screen and starts over. Written by Tracy Camp and David Hansen."
+"Generates a continuous sequence of small, curvy geometric patterns. Written "
+"by Tracy Camp and David Hansen; 1997."
 msgstr ""
 msgstr ""
-"Génère une séquence continue de petits motifs géométriques et arrondis. Ils "
-"remplissent l'écran, puis s'effacent avant de recommencer l'opération. Écrit "
-"par Tracy Camp et David Hansen."
+"Génère une séquence continue de petits motifs géométriques et arrondis. Écrit "
+"par Tracy Camp et David Hansen; 1997."
 
 #: hacks/config/vines.xml.h:8
 msgid "Vines"
 
 #: hacks/config/vines.xml.h:8
 msgid "Vines"
@@ -8446,10 +8310,11 @@ msgstr "Dessiner des taches"
 
 #: hacks/config/wander.xml.h:6
 msgid ""
 
 #: hacks/config/wander.xml.h:6
 msgid ""
-"Draws a colorful random-walk, in various forms. Written by Rick Campbell."
+"Draws a colorful random-walk, in various forms. Written by Rick Campbell; "
+"1999."
 msgstr ""
 "Dessine une promenade aléatoire colorée, sous plusieurs formes. Écrit par "
 msgstr ""
 "Dessine une promenade aléatoire colorée, sous plusieurs formes. Écrit par "
-"Rick Campbell."
+"Rick Campbell; 1999."
 
 #: hacks/config/wander.xml.h:14
 msgid "Sustain"
 
 #: hacks/config/wander.xml.h:14
 msgid "Sustain"
@@ -8488,19 +8353,20 @@ msgid ""
 "This program makes collages out of random images pulled off of the World "
 "Wide Web. It finds these images by doing random web searches, and then "
 "extracting images from the returned pages. It can also be set up to filter "
 "This program makes collages out of random images pulled off of the World "
 "Wide Web. It finds these images by doing random web searches, and then "
 "extracting images from the returned pages. It can also be set up to filter "
-"the images through the `VidWhacker' program. WARNING: THE INTERNET SOMETIMES "
-"CONTAINS PORNOGRAPHY. The Internet being what it is, absolutely anything "
-"might show up in the collage including -- quite possibly -- pornography, or "
-"even nudity. Please act accordingly. Written by Jamie Zawinski."
+"the images through the \"VidWhacker\" program. WARNING: THE INTERNET "
+"SOMETIMES CONTAINS PORNOGRAPHY. The Internet being what it is, absolutely "
+"anything might show up in the collage including -- quite possibly -- "
+"pornography, or even nudity. Please act accordingly. Written by Jamie "
+"Zawinski; 1999."
 msgstr ""
 "Ce programme effectue des collages à partir d'images extraites au hasard "
 "depuis le World Wide Web. Il les trouve en faisant des recherches aléatoires "
 "sur le Web et en  extrayant les images des pages trouvées. Il peut également "
 msgstr ""
 "Ce programme effectue des collages à partir d'images extraites au hasard "
 "depuis le World Wide Web. Il les trouve en faisant des recherches aléatoires "
 "sur le Web et en  extrayant les images des pages trouvées. Il peut également "
-"être configuré pour filtrer les images via le programme 'VidWhacker' ci-"
-"dessus, pour obtenir des résultats stupéfiants. (Notez que la plupart des "
-"images trouvées sont en fait du texte et non des images proprement dites. "
-"Cela est dû au fait que la plupart des images du Web contiennent du texte, "
-"ce qui est assez désolant.) Écrit par Jamie Zawinski."
+"être configuré pour filtrer les images via le programme 'VidWhacker'"
+"ATTENTION : INTERNET CONTIENT DE LA PORNOGRAPHIE. L'internet étant ce "
+"qu'il est, tout peut apparaître dans le collage y-compris -- presque "
+"certainement -- de la pornographie ou de la nudité. Agissez en conséquence. " 
+"Écrit par Jamie Zawinski; 1999."
 
 #: hacks/config/webcollage.xml.h:10
 msgid "URL Timeout:     2 secs"
 
 #: hacks/config/webcollage.xml.h:10
 msgid "URL Timeout:     2 secs"
@@ -8514,12 +8380,12 @@ msgstr "Collage Web"
 msgid ""
 "Floating stars are acted upon by a mixture of simple 2D forcefields. The "
 "strength of each forcefield changes continuously, and it is also switched on "
 msgid ""
 "Floating stars are acted upon by a mixture of simple 2D forcefields. The "
 "strength of each forcefield changes continuously, and it is also switched on "
-"and off at random. By Paul 'Joey' Clark."
+"and off at random. Written by Paul 'Joey' Clark; 2001."
 msgstr ""
 "Des étoiles flottantes sont influencées par un mélange de simples champs de "
 "forces 2D. La puissance de chaque champ de forces change continuellement. "
 "Les champs sont également  activés et désactivés au hasard. Par Paul 'Joey' "
 msgstr ""
 "Des étoiles flottantes sont influencées par un mélange de simples champs de "
 "forces 2D. La puissance de chaque champ de forces change continuellement. "
 "Les champs sont également  activés et désactivés au hasard. Par Paul 'Joey' "
-"Clark."
+"Clark; 2001."
 
 #: hacks/config/whirlwindwarp.xml.h:7
 msgid "Trail Size"
 
 #: hacks/config/whirlwindwarp.xml.h:7
 msgid "Trail Size"
@@ -8538,9 +8404,10 @@ msgid "Circle"
 msgstr "Cercle"
 
 #: hacks/config/whirlygig.xml.h:3
 msgstr "Cercle"
 
 #: hacks/config/whirlygig.xml.h:3
-msgid "Draws zooming chains of sinusoidal spots. Written by Ashton Trey Belew."
+msgid ""
+"Draws zooming chains of sinusoidal spots. Written by Ashton Trey Belew; 2001."
 msgstr ""
 msgstr ""
-"Dessine des chaînes de taches sinusoïdales. Écrit par Ashton Trey Belew."
+"Dessine des chaînes de taches sinusoïdales. Écrit par Ashton Trey Belew; 2001."
 
 #: hacks/config/whirlygig.xml.h:4
 msgid "Explain modes"
 
 #: hacks/config/whirlygig.xml.h:4
 msgid "Explain modes"
@@ -8590,33 +8457,31 @@ msgstr "WhirlyGig"
 msgid "Wrap the screen"
 msgstr "Faire le tour de l'écran"
 
 msgid "Wrap the screen"
 msgstr "Faire le tour de l'écran"
 
-#: hacks/config/worm.xml.h:1
+#: hacks/config/worm.xml.h:2
 msgid ""
 msgid ""
-"An ancient xlock hack that draws multicolored worms that crawl around the "
-"screen. Written by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik "
-"Theiling."
+"Draws multicolored worms that crawl around the screen. Written by Brad "
+"Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling; 1991."
 msgstr ""
 msgstr ""
-"Ancien hack xlock qui dessine des vers multicolores rampant sur l'écran. "
-"Écrit par Brad Taylor, Dave Lemke, Boris Putanec et Henrik Theiling."
+"Dessine des vers multicolores rampant sur l'écran. "
+"Écrit par Brad Taylor, Dave Lemke, Boris Putanec et Henrik Theiling; 1991."
 
 
-#: hacks/config/wormhole.xml.h:6
+#: hacks/config/wormhole.xml.h:4
+msgid ""
+"Flying through a colored wormhole in space. Written by Jon Rafkind; 2004."
+msgstr ""
+
+#: hacks/config/wormhole.xml.h:7
 msgid "Star speed"
 msgstr "Vitesse des étoiles"
 
 msgid "Star speed"
 msgstr "Vitesse des étoiles"
 
-#: hacks/config/wormhole.xml.h:7
+#: hacks/config/wormhole.xml.h:8
 msgid "Stars Created"
 msgstr "Création des étoiles"
 
 msgid "Stars Created"
 msgstr "Création des étoiles"
 
-#: hacks/config/wormhole.xml.h:8
+#: hacks/config/wormhole.xml.h:9
 msgid "Wormhole"
 msgstr "Trou de Ver"
 
 msgid "Wormhole"
 msgstr "Trou de Ver"
 
-#: hacks/config/wormhole.xml.h:9
-msgid ""
-"Wormhole simulates flying through a colored wormhole in space. Written by "
-"Jon Rafkind."
-msgstr ""
-
 #: hacks/config/xanalogtv.xml.h:1
 msgid "XAnalogTV"
 msgstr "X TV analogique"
 #: hacks/config/xanalogtv.xml.h:1
 msgid "XAnalogTV"
 msgstr "X TV analogique"
@@ -8627,7 +8492,7 @@ msgid ""
 "patterns, with various picture artifacts like snow, bloom, distortion, "
 "ghosting, and hash noise. It also simulates the TV warming up. It will cycle "
 "through 12 channels, some with images you give it, and some with color bars "
 "patterns, with various picture artifacts like snow, bloom, distortion, "
 "ghosting, and hash noise. It also simulates the TV warming up. It will cycle "
 "through 12 channels, some with images you give it, and some with color bars "
-"or nothing but static. By Trevor Blackwell."
+"or nothing but static. Written by Trevor Blackwell; 2003."
 msgstr ""
 
 #: hacks/config/xaos.xml.h:1
 msgstr ""
 
 #: hacks/config/xaos.xml.h:1
@@ -8637,9 +8502,9 @@ msgstr "XaoS"
 #: hacks/config/xaos.xml.h:2
 msgid ""
 "XaoS generates fast fly-through animations of the Mandelbrot and other "
 #: hacks/config/xaos.xml.h:2
 msgid ""
 "XaoS generates fast fly-through animations of the Mandelbrot and other "
-"fractal sets. Written by Thomas Marsh and Jan Hubicka. This is not included "
-"with the XScreenSaver package, but if you don't have it already, you can "
-"find it at &lt;http://xaos.theory.org/&gt;."
+"fractal sets. This is not included with the XScreenSaver package, but if you "
+"don't have it already, you can find it at &lt;http://xaos.theory.org/&gt;. "
+"Written by Thomas Marsh and Jan Hubicka."
 msgstr ""
 
 #: hacks/config/xdaliclock.xml.h:1
 msgstr ""
 
 #: hacks/config/xdaliclock.xml.h:1
@@ -8670,7 +8535,7 @@ msgstr "Grande police"
 msgid "Medium Font"
 msgstr "Police moyenne"
 
 msgid "Medium Font"
 msgstr "Police moyenne"
 
-#: hacks/config/xdaliclock.xml.h:8 hacks/config/xmatrix.xml.h:16
+#: hacks/config/xdaliclock.xml.h:8 hacks/config/xmatrix.xml.h:17
 msgid "Small Font"
 msgstr "Petite police"
 
 msgid "Small Font"
 msgstr "Petite police"
 
@@ -8681,120 +8546,11 @@ msgstr "Horloge Dali"
 #: hacks/config/xdaliclock.xml.h:10
 msgid ""
 "XDaliClock draws a large digital clock, the numbers of which change by "
 #: hacks/config/xdaliclock.xml.h:10
 msgid ""
 "XDaliClock draws a large digital clock, the numbers of which change by "
-"``melting'' into their new shapes. Written by Jamie Zawinski. This is not "
-"included with the XScreenSaver package, but if you don't have it already, "
-"you can find it at &lt;http://www.jwz.org/xdaliclock/&gt;."
-msgstr ""
-
-#: hacks/config/xearth.xml.h:1
-msgid "Bright"
-msgstr "Lumineux"
-
-#: hacks/config/xearth.xml.h:2 hacks/config/xplanet.xml.h:7
-msgid "Date/Time Stamp"
-msgstr "Indicateur de date/heure"
-
-#: hacks/config/xearth.xml.h:3
-msgid "Day  Dim"
-msgstr "Jour  Dim"
-
-#: hacks/config/xearth.xml.h:5
-msgid "Display Stars"
-msgstr "Afficher les étoiles"
-
-#: hacks/config/xearth.xml.h:8
-msgid "Label Cities"
-msgstr "Indiquer les villes"
-
-#: hacks/config/xearth.xml.h:9 hacks/config/xplanet.xml.h:49
-msgid "Lower Left"
-msgstr "Inférieur gauche"
-
-#: hacks/config/xearth.xml.h:10 hacks/config/xplanet.xml.h:50
-msgid "Lower Right"
-msgstr "Inférieur droit"
-
-#: hacks/config/xearth.xml.h:13 hacks/config/xplanet.xml.h:51
-msgid "Mercator Projection"
-msgstr "Projection de Mercator"
-
-#: hacks/config/xearth.xml.h:14
-msgid "Night   Dim"
-msgstr "Nuit   Dim"
-
-#: hacks/config/xearth.xml.h:15
-msgid "No Stars"
-msgstr "Pas d'étoiles"
-
-#: hacks/config/xearth.xml.h:16
-msgid "North/South Rotation"
-msgstr "Rotation Nord/Sud"
-
-#: hacks/config/xearth.xml.h:18 hacks/config/xplanet.xml.h:53
-msgid "Orthographic Projection"
-msgstr "Projection orthographique"
-
-#: hacks/config/xearth.xml.h:19 hacks/config/xplanet.xml.h:56
-msgid "Real Time"
-msgstr "Temps réel"
-
-#: hacks/config/xearth.xml.h:20
-msgid "Shaded Image"
-msgstr "Image ombragée"
-
-#: hacks/config/xearth.xml.h:21
-msgid "Sharp"
-msgstr "Net"
-
-#: hacks/config/xearth.xml.h:26
-msgid "Terminator   Blurry"
-msgstr "Terminateur   Flou"
-
-#: hacks/config/xearth.xml.h:27 hacks/config/xplanet.xml.h:61
-msgid "Time Warp"
-msgstr "Alignement temporel"
-
-#: hacks/config/xearth.xml.h:29 hacks/config/xplanet.xml.h:62
-msgid "Upper Left"
-msgstr "Supérieur gauche"
-
-#: hacks/config/xearth.xml.h:30 hacks/config/xplanet.xml.h:63
-msgid "Upper Right"
-msgstr "Supérieur droit"
-
-#: hacks/config/xearth.xml.h:31
-msgid ""
-"XEarth draws an image of the Earth, as seen from your favorite vantage point "
-"in space, correctly shaded for the current position of the Sun. Written by "
-"Kirk Johnson. This is not included with the XScreenSaver package, but if you "
-"don't have it already, you can find it at &lt;http://www.cs.colorado.edu/"
-"~tuna/xearth/&gt;. There is also a similar (but more recent) program called "
-"xplanet to be found at &lt;http://xplanet.sourceforge.net/&gt;."
+"\"melting\" into their new shapes. This is not included with the "
+"XScreenSaver package, but if you don't have it already, you can find it at "
+"&lt;http://www.jwz.org/xdaliclock/&gt;. Written by Jamie Zawinski; 1991."
 msgstr ""
 
 msgstr ""
 
-#: hacks/config/xearth.xml.h:32
-msgid "Xearth"
-msgstr "Xearth"
-
-#: hacks/config/xfishtank.xml.h:5
-msgid "Fish"
-msgstr "Poissons"
-
-#: hacks/config/xfishtank.xml.h:6
-msgid "Fish Speed"
-msgstr "Vitesse des poissons"
-
-#: 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 &lt;http://metalab.unc.edu/pub/Linux/X11/"
-"demos/&gt;."
-msgstr ""
-
-#: hacks/config/xfishtank.xml.h:12
-msgid "XFishTank"
-msgstr "XFishTank"
-
 #: hacks/config/xflame.xml.h:1
 msgid "Bitmap File"
 msgstr "Fichier bitmap"
 #: hacks/config/xflame.xml.h:1
 msgid "Bitmap File"
 msgstr "Fichier bitmap"
@@ -8802,31 +8558,27 @@ msgstr "Fichier bitmap"
 #: hacks/config/xflame.xml.h:2
 msgid ""
 "Draws a simulation of pulsing fire. It can also take an arbitrary image and "
 #: hacks/config/xflame.xml.h:2
 msgid ""
 "Draws a simulation of pulsing fire. It can also take an arbitrary image and "
-"set it on fire too. Written by Carsten Haitzler, hacked on by many others."
+"set it on fire too. Written by Carsten Haitzler and many others; 1999."
 msgstr ""
 "Dessine une simulation de feu rougeoyant. Il peut également choisir une "
 "image arbitraire et lui mettre le feu. Écrit par Carsten Haitzler, avec de "
 msgstr ""
 "Dessine une simulation de feu rougeoyant. Il peut également choisir une "
 "image arbitraire et lui mettre le feu. Écrit par Carsten Haitzler, avec de "
-"nombreuses contributions."
+"nombreuses contributions; 1999."
 
 #: hacks/config/xflame.xml.h:3
 msgid "Enable Blooming"
 msgstr "Activer l'étendue"
 
 
 #: hacks/config/xflame.xml.h:3
 msgid "Enable Blooming"
 msgstr "Activer l'étendue"
 
-#: hacks/config/xflame.xml.h:8
+#: hacks/config/xflame.xml.h:7
 msgid "Xflame"
 msgstr "Xflame"
 
 #: hacks/config/xjack.xml.h:4
 msgid ""
 "This program behaves schizophrenically and makes a lot of typos. Written by "
 msgid "Xflame"
 msgstr "Xflame"
 
 #: hacks/config/xjack.xml.h:4
 msgid ""
 "This program behaves schizophrenically and makes a lot of typos. Written by "
-"Jamie Zawinski. If you haven't seen Stanley Kubrick's masterpiece, ``The "
-"Shining,'' you won't get it. Those who have describe this hack as "
-"``inspired.''"
+"Jamie Zawinski; 1997."
 msgstr ""
 "Ce programme a un comportement schizophrène et effectue de nombreuses "
 msgstr ""
 "Ce programme a un comportement schizophrène et effectue de nombreuses "
-"coquilles. Écrit par Jamie Zawinski. Si vous n'avez pas vu le chef-d'oeuvre "
-"de Stanley Kubrick, «Shining», vous n'y comprendrez rien. Ceux qui l'ont vu "
-"considèrent ce hack comme «inspiré»."
+"coquilles. Écrit par Jamie Zawinski; 1997."
 
 #: hacks/config/xjack.xml.h:5
 msgid "Xjack"
 
 #: hacks/config/xjack.xml.h:5
 msgid "Xjack"
@@ -8834,13 +8586,12 @@ msgstr "Xjack"
 
 #: hacks/config/xlyap.xml.h:1
 msgid ""
 
 #: hacks/config/xlyap.xml.h:1
 msgid ""
-"This generates pretty fractal pictures by doing funky math involving the "
-"``Lyapunov exponent.'' It has a cool interactive mode, too. Written by Ron "
-"Record."
+"This generates pretty fractal pictures via the Lyapunov exponent. Written by "
+"Ron Record; 1997."
 msgstr ""
 "Génère de jolies fractales en effectuant de géniales opérations de math "
 msgstr ""
 "Génère de jolies fractales en effectuant de géniales opérations de math "
-"utilisant ''l'exposant de Lyapunov''. Il possède aussi un mode interactif. "
-"Écrit par Ron Record."
+"utilisant «l'exposant de Lyapunov». "
+"Écrit par Ron Record; 1997."
 
 #: hacks/config/xlyap.xml.h:2
 msgid "Xlyap"
 
 #: hacks/config/xlyap.xml.h:2
 msgid "Xlyap"
@@ -8851,8 +8602,12 @@ msgid ""
 "Draws dropping characters similar to what is seen on the computer monitors "
 "in \"The Matrix\". See also \"glmatrix\" for a 3D rendering of the similar "
 "effect that appeared in the title sequence of the movie. Written by Jamie "
 "Draws dropping characters similar to what is seen on the computer monitors "
 "in \"The Matrix\". See also \"glmatrix\" for a 3D rendering of the similar "
 "effect that appeared in the title sequence of the movie. Written by Jamie "
-"Zawinski."
+"Zawinski; 1999."
 msgstr ""
 msgstr ""
+"Dessine des caractères qui tombent de façon similaire à ce que l'on voit sur "
+"les moniteurs dans «Matrix». Voir également «glmatrix» pour un rendu 3D du "
+"même effet qui apparaît dans la séquence de titre du film. Écrit par Jamie "
+"Zawinski; 1999."
 
 #: hacks/config/xmatrix.xml.h:4
 msgid "Expansion Algorithm"
 
 #: hacks/config/xmatrix.xml.h:4
 msgid "Expansion Algorithm"
@@ -8871,19 +8626,23 @@ msgid "Phone Number"
 msgstr "Numéro de téléphone"
 
 #: hacks/config/xmatrix.xml.h:13
 msgstr "Numéro de téléphone"
 
 #: hacks/config/xmatrix.xml.h:13
+msgid "Piped ASCII Text"
+msgstr "Texte ASCII issu d'un pipe"
+
+#: hacks/config/xmatrix.xml.h:14
 msgid "Run Trace Program"
 msgstr "Exécuter le programme de suivi"
 
 msgid "Run Trace Program"
 msgstr "Exécuter le programme de suivi"
 
-#: hacks/config/xmatrix.xml.h:14
+#: hacks/config/xmatrix.xml.h:15
 msgid "Slider Algorithm"
 msgstr "Algorithme de glissement"
 
 msgid "Slider Algorithm"
 msgstr "Algorithme de glissement"
 
-#: hacks/config/xmatrix.xml.h:19
+#: hacks/config/xmatrix.xml.h:20
 msgid "Synergistic Algorithm"
 msgstr "Algorithme synergique"
 
 msgid "Synergistic Algorithm"
 msgstr "Algorithme synergique"
 
-#: hacks/config/xmatrix.xml.h:20
-msgid "Xmatrix"
+#: hacks/config/xmatrix.xml.h:21
+msgid "XMatrix"
 msgstr "Xmatrix"
 
 #: hacks/config/xmountains.xml.h:1
 msgstr "Xmatrix"
 
 #: hacks/config/xmountains.xml.h:1
@@ -9009,10 +8768,10 @@ msgstr "Point de vue"
 #: hacks/config/xmountains.xml.h:35
 msgid ""
 "XMountains generates realistic-looking fractal terrains of snow-capped "
 #: hacks/config/xmountains.xml.h:35
 msgid ""
 "XMountains generates realistic-looking fractal terrains of snow-capped "
-"mountains near water, with either a top view or a side view. Written by "
-"Stephen Booth. This is not included with the XScreenSaver package, but if "
-"you don't have it already, you can find it at &lt;http://www.epcc.ed.ac.uk/"
-"~spb/xmountains/&gt;. (Make sure you have version 2.7 or newer!)"
+"mountains near water, with either a top view or a side view. This is not "
+"included with the XScreenSaver package, but if you don't have it already, "
+"you can find it at &lt;http://www.epcc.ed.ac.uk/~spb/xmountains/&gt;. (Make "
+"sure you have version 2.7 or newer!) Written by Stephen Booth."
 msgstr ""
 
 #: hacks/config/xmountains.xml.h:36
 msgstr ""
 
 #: hacks/config/xmountains.xml.h:36
@@ -9035,6 +8794,10 @@ msgstr "Projection des anciens"
 msgid "Azimuthal Projection"
 msgstr "Projection azimuthale"
 
 msgid "Azimuthal Projection"
 msgstr "Projection azimuthale"
 
+#: hacks/config/xplanet.xml.h:7
+msgid "Date/Time Stamp"
+msgstr "Indicateur de date/heure"
+
 #: hacks/config/xplanet.xml.h:9
 msgid "From Ariel"
 msgstr "Depuis Ariel"
 #: hacks/config/xplanet.xml.h:9
 msgid "From Ariel"
 msgstr "Depuis Ariel"
@@ -9195,14 +8958,34 @@ msgstr "Latitude"
 msgid "Longitude"
 msgstr "Longitude"
 
 msgid "Longitude"
 msgstr "Longitude"
 
+#: hacks/config/xplanet.xml.h:49
+msgid "Lower Left"
+msgstr "Inférieur gauche"
+
+#: hacks/config/xplanet.xml.h:50
+msgid "Lower Right"
+msgstr "Inférieur droit"
+
+#: hacks/config/xplanet.xml.h:51
+msgid "Mercator Projection"
+msgstr "Projection de Mercator"
+
 #: hacks/config/xplanet.xml.h:52
 msgid "Mollweide Projection"
 msgstr "Projection de Mollweide"
 
 #: hacks/config/xplanet.xml.h:52
 msgid "Mollweide Projection"
 msgstr "Projection de Mollweide"
 
+#: hacks/config/xplanet.xml.h:53
+msgid "Orthographic Projection"
+msgstr "Projection orthographique"
+
 #: hacks/config/xplanet.xml.h:54
 msgid "Peters Projection"
 msgstr "Projection de Peters"
 
 #: hacks/config/xplanet.xml.h:54
 msgid "Peters Projection"
 msgstr "Projection de Peters"
 
+#: hacks/config/xplanet.xml.h:56
+msgid "Real Time"
+msgstr "Temps réel"
+
 #: hacks/config/xplanet.xml.h:57
 msgid "Rectangular Projection"
 msgstr "Projection Rectangulaire"
 #: hacks/config/xplanet.xml.h:57
 msgid "Rectangular Projection"
 msgstr "Projection Rectangulaire"
@@ -9211,6 +8994,18 @@ msgstr "Projection Rectangulaire"
 msgid "Render as a Globe"
 msgstr "Génère un globe"
 
 msgid "Render as a Globe"
 msgstr "Génère un globe"
 
+#: hacks/config/xplanet.xml.h:61
+msgid "Time Warp"
+msgstr "Alignement temporel"
+
+#: hacks/config/xplanet.xml.h:62
+msgid "Upper Left"
+msgstr "Supérieur gauche"
+
+#: hacks/config/xplanet.xml.h:63
+msgid "Upper Right"
+msgstr "Supérieur droit"
+
 #: hacks/config/xplanet.xml.h:64
 msgid "View Ariel"
 msgstr "Voir Ariel"
 #: hacks/config/xplanet.xml.h:64
 msgid "View Ariel"
 msgstr "Voir Ariel"
@@ -9362,19 +9157,19 @@ msgstr "XPlanet"
 #: hacks/config/xplanet.xml.h:101
 msgid ""
 "Xplanet draws an image of the Earth, as seen from your favorite vantage "
 #: hacks/config/xplanet.xml.h:101
 msgid ""
 "Xplanet 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 Hari Nair. This is not included with the XScreenSaver package, "
-"but if you don't have it already, you can find it at &lt;http://xplanet."
-"sourceforge.net/&gt;."
+"point in space, correctly shaded for the current position of the Sun. This "
+"is not included with the XScreenSaver package, but if you don't have it "
+"already, you can find it at &lt;http://xplanet.sourceforge.net/&gt;. Written "
+"by Hari Nair; 2001."
 msgstr ""
 
 #: hacks/config/xrayswarm.xml.h:1
 msgid ""
 msgstr ""
 
 #: hacks/config/xrayswarm.xml.h:1
 msgid ""
-"Draws a few swarms of critters flying around the screen, with nicely faded "
-"color trails behind them. Written by Chris Leger."
+"Draws a few swarms of critters flying around the screen, with faded color "
+"trails behind them. Written by Chris Leger; 2000."
 msgstr ""
 "Dessine quelques nuées de bestioles qui volent sur l'écran, avec de jolies "
 msgstr ""
 "Dessine quelques nuées de bestioles qui volent sur l'écran, avec de jolies "
-"traînées dans des fondus de couleur. Écrit par Chris Leger."
+"traînées dans des fondus de couleur. Écrit par Chris Leger; 2000."
 
 #: hacks/config/xrayswarm.xml.h:5
 msgid "XRaySwarm"
 
 #: hacks/config/xrayswarm.xml.h:5
 msgid "XRaySwarm"
@@ -9382,9 +9177,12 @@ msgstr "XRaySwarm"
 
 #: hacks/config/xsnow.xml.h:1
 msgid ""
 
 #: hacks/config/xsnow.xml.h:1
 msgid ""
-"Draws falling snow and the occasional tiny Santa. By Rick Jansen. You can "
-"find it at &lt;http://www.euronet.nl/~rja/Xsnow/&gt;."
+"Draws falling snow and the occasional tiny Santa. You can find it at &lt;"
+"http://www.euronet.nl/~rja/Xsnow/&gt;. Written by Rick Jansen."
 msgstr ""
 msgstr ""
+"Dessine de la neige qui tombe et éventuellement le père Noël. "
+"Vous pouvez le trouver sur <http://www.euronet.nl/~rja/Xsnow/>. "
+"Écrit par Rick Jansen."
 
 #: hacks/config/xsnow.xml.h:2
 msgid "Xsnow"
 
 #: hacks/config/xsnow.xml.h:2
 msgid "Xsnow"
@@ -9392,11 +9190,11 @@ msgstr "Xsnow"
 
 #: hacks/config/xspirograph.xml.h:5
 msgid ""
 
 #: hacks/config/xspirograph.xml.h:5
 msgid ""
-"Simulates that pen-in-nested-plastic-gears toy from your childhood. By Rohit "
-"Singh."
+"Simulates that pen-in-nested-plastic-gears toy from your childhood. Written "
+"by Rohit Singh; 2000."
 msgstr ""
 "Simule le célèbre jouet de notre enfance, constitué d'un stylo logé dans un "
 msgstr ""
 "Simule le célèbre jouet de notre enfance, constitué d'un stylo logé dans un "
-"engrenage en plastique. Par Rohit Singh."
+"engrenage en plastique. Par Rohit Singh; 2000."
 
 #: hacks/config/xspirograph.xml.h:6
 msgid "XSpiroGraph"
 
 #: hacks/config/xspirograph.xml.h:6
 msgid "XSpiroGraph"
@@ -9425,10 +9223,11 @@ msgstr "XTeeVee"
 #: hacks/config/xteevee.xml.h:6
 msgid ""
 "XTeeVee simulates various television problems, including static, loss of "
 #: hacks/config/xteevee.xml.h:6
 msgid ""
 "XTeeVee simulates various television problems, including static, loss of "
-"vertical hold, and a test pattern. By Greg Knauss."
+"vertical hold, and a test pattern. See also \"xanalogtv\" for a much more "
+"accurate simulation. Written by Greg Knauss; 2000."
 msgstr ""
 "XTeeVee simule différents problèmes de télévision comme les parasites, la "
 msgstr ""
 "XTeeVee simule différents problèmes de télévision comme les parasites, la "
-"perte de stabilité verticale et la mire. Par Greg Knauss."
+"perte de stabilité verticale et la mire. Écrit par Greg Knauss; 2000."
 
 #: hacks/config/zoom.xml.h:3
 msgid "Lens Offset"
 
 #: hacks/config/zoom.xml.h:3
 msgid "Lens Offset"
@@ -9440,10 +9239,10 @@ msgstr "Lentilles"
 
 #: hacks/config/zoom.xml.h:9
 msgid ""
 
 #: hacks/config/zoom.xml.h:9
 msgid ""
-"Zooms in on a part of the screen and then moves around. With the -lenses "
-"option the result is like looking through many overlapping lenses rather "
-"than just a simple zoom. Written by James Macnicol."
+"Zooms in on a part of the screen and then moves around. With the \"Lenses\" "
+"option, the result is like looking through many overlapping lenses rather "
+"than just a simple zoom. Written by James Macnicol; 2001."
 msgstr ""
 msgstr ""
-"Zoome sur une partie de l'écran et se déplace. Avec l'option '-lenses', le "
+"Zoome sur une partie de l'écran et se déplace. Avec l'option «-lenses», le "
 "résultat ressemble à la superposition de lentilles plutôt qu'à un simple "
 "résultat ressemble à la superposition de lentilles plutôt qu'à un simple "
-"zoom. Écrit par James Macnicol."
+"zoom. Écrit par James Macnicol; 2001."
index 951a40f8257ea58ac0a78378bf7ed27f36d67600..7c57137e4114409e335dfb1acde1dddb085361fd 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -6642,27 +6642,27 @@ msgid "Fertility"
 msgstr "Termékenység"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Termékenység"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr "Maximális élettartam"
 
 #: hacks/config/petri.xml.h:13
 msgstr "Maximális élettartam"
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr "Maximális halálozási ráta"
 
 #: hacks/config/petri.xml.h:14
 msgstr "Maximális halálozási ráta"
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr "Maximális növekedési ráta"
 
 #: hacks/config/petri.xml.h:15
 msgstr "Maximális növekedési ráta"
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr "Minimális élettartam"
 
 #: hacks/config/petri.xml.h:16
 msgstr "Minimális élettartam"
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr "Minimális halálozási ráta"
 
 #: hacks/config/petri.xml.h:17
 msgstr "Minimális halálozási ráta"
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr "Minimális növekedési ráta"
 
 #: hacks/config/petri.xml.h:18
 msgstr "Minimális növekedési ráta"
 
 #: hacks/config/petri.xml.h:18
index c46291738bdbcc27830d22141add0d59521d0802..d0e7b910b2b00dbf9c2f80874bfa80d8483d9679 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -2196,7 +2196,7 @@ msgid "Bouboule"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -6089,27 +6089,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7143,7 +7143,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index e7ff301cbf8b4cbbe2b247ad2b14764427ddc345..e37b886e7d2f16b71af52a8103e000eace7ef159 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -4,11 +4,12 @@
 #
 msgid ""
 msgstr ""
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: xscreensaver 4.03\n"
+"Project-Id-Version: xscreensaver 5.00-6\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-02-13 12:26+0100\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-02-13 12:26+0100\n"
-"PO-Revision-Date: 2002-06-10 01:27+0900\n"
-"Last-Translator: Takeshi Aihana <aihana@gnome.gr.jp>\n"
+"PO-Revision-Date: 2006-06-28 00:51+0900\n"
+"Former-Translator: Takeshi Aihana <aihana@gnome.gr.jp>\n"
+"Last-Translator:  Mamoru Tasaka <mtasaka@ioa.s.u-tokyo.ac.jp>\n"
 "Language-Team: Japanese <translation@gnome.gr.jp>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Language-Team: Japanese <translation@gnome.gr.jp>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -114,12 +115,11 @@ msgstr "XScreenSaver のウェブサイトにジャンプします。"
 
 #: driver/demo-Gtk-widgets.c:348
 msgid "Cycle After"
 
 #: driver/demo-Gtk-widgets.c:348
 msgid "Cycle After"
-msgstr "繰り返す周期: "
+msgstr "モードの周期: "
 
 #: driver/demo-Gtk-widgets.c:370 driver/xscreensaver-demo.glade2.h:63
 msgid "Whether a password should be required to un-blank the screen."
 
 #: driver/demo-Gtk-widgets.c:370 driver/xscreensaver-demo.glade2.h:63
 msgid "Whether a password should be required to un-blank the screen."
-msgstr ""
-"画面をロックする周期です (画面ロックを解除する場合はパスワードが必要です)。"
+msgstr "画面をブランクした後、しばらくして自動的にロックしたい時は、これを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:372
 msgid "Lock Screen After"
 
 #: driver/demo-Gtk-widgets.c:372
 msgid "Lock Screen After"
@@ -139,7 +139,7 @@ msgstr "自動的に XScreenSaver を起動するまでの時間です。"
 #: driver/demo-Gtk-widgets.c:1032 driver/demo-Gtk-widgets.c:1044
 #: driver/xscreensaver-demo.glade2.h:106
 msgid "minutes"
 #: driver/demo-Gtk-widgets.c:1032 driver/demo-Gtk-widgets.c:1044
 #: driver/xscreensaver-demo.glade2.h:106
 msgid "minutes"
-msgstr "分"
+msgstr "分"
 
 #: driver/demo-Gtk-widgets.c:482 driver/demo-Gtk.c:3233
 msgid "Preview"
 
 #: driver/demo-Gtk-widgets.c:482 driver/demo-Gtk.c:3233
 msgid "Preview"
@@ -277,9 +277,7 @@ msgstr "カラーマップをインストールする"
 msgid ""
 "Whether the screen should slowly fade to black when the screen saver "
 "activates."
 msgid ""
 "Whether the screen should slowly fade to black when the screen saver "
 "activates."
-msgstr ""
-"スクリーンセーバーが有効になったら、スクリーンをゆっくりとフェードインするか"
-"どうかを選択して下さい。"
+msgstr "スクリーンセーバーを起動する時、スクリーンをゆっくりとフェードインするかどうかを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:867
 msgid "Fade To Black When Blanking"
 
 #: driver/demo-Gtk-widgets.c:867
 msgid "Fade To Black When Blanking"
@@ -289,9 +287,7 @@ msgstr "スクリーンセーバーをフェードインする"
 msgid ""
 "Whether the screen should slowly fade in from black when the screen saver "
 "deactivates."
 msgid ""
 "Whether the screen should slowly fade in from black when the screen saver "
 "deactivates."
-msgstr ""
-"スクリーンセーバーが無効になったら、スクリーンをゆっくりとフェードアウトする"
-"かどうかを選択して下さい。"
+msgstr "画面を再び明るくする時、スクリーンをゆっくりとフェードアウトするかどうかを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:884
 msgid "Fade From Black When Unblanking"
 
 #: driver/demo-Gtk-widgets.c:884
 msgid "Fade From Black When Unblanking"
@@ -303,7 +299,7 @@ msgstr "フェードする時間: "
 
 #: driver/demo-Gtk-widgets.c:928 driver/xscreensaver-demo.glade2.h:26
 msgid "How long it should take for the screen to fade in and out."
 
 #: driver/demo-Gtk-widgets.c:928 driver/xscreensaver-demo.glade2.h:26
 msgid "How long it should take for the screen to fade in and out."
-msgstr "スクリーンをフェードイン/アウトする間隔を指定して下さい。"
+msgstr "スクリーンをフェードイン/アウトする時間を指定して下さい。"
 
 #: driver/demo-Gtk-widgets.c:932 driver/xscreensaver-demo.glade2.h:111
 msgid "seconds"
 
 #: driver/demo-Gtk-widgets.c:932 driver/xscreensaver-demo.glade2.h:111
 msgid "seconds"
@@ -315,7 +311,7 @@ msgstr "モニタのパワーマネージメント"
 
 #: driver/demo-Gtk-widgets.c:986 driver/xscreensaver-demo.glade2.h:67
 msgid "Whether the monitor should be powered down after a while."
 
 #: driver/demo-Gtk-widgets.c:986 driver/xscreensaver-demo.glade2.h:67
 msgid "Whether the monitor should be powered down after a while."
-msgstr "モニタの電源を OFF にする場合に選択して下さい。"
+msgstr "モニタの電源管理を設定するかを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:988
 msgid "Power Management Enabled"
 
 #: driver/demo-Gtk-widgets.c:988
 msgid "Power Management Enabled"
@@ -349,33 +345,27 @@ msgstr "画像の操作"
 msgid ""
 "Whether the image-manipulating modes should be allowed to operate on an "
 "image of your desktop."
 msgid ""
 "Whether the image-manipulating modes should be allowed to operate on an "
 "image of your desktop."
-msgstr ""
-"画像の操作モード (お使いのデスクトップ上の画像に対する操作) を許可するかどう"
-"かを選択して下さい。"
+msgstr "画像を用いるセーバの時、デスクトップの画像を使うかどうかを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:1169
 msgid "Grab Desktop Images"
 
 #: driver/demo-Gtk-widgets.c:1169
 msgid "Grab Desktop Images"
-msgstr "デスクトップ画像を操作対象にする"
+msgstr "デスクトップの画像を用いる"
 
 #: driver/demo-Gtk-widgets.c:1184
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one)."
 
 #: driver/demo-Gtk-widgets.c:1184
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one)."
-msgstr ""
-"画像の操作モードで (可能ならば) システムのビデオ入力を対象にするかどうかを選"
-"択して下さい。"
+msgstr "画像の操作モードで (可能ならば) システムのビデオ入力を用いるかどうかを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:1186
 msgid "Grab Video Frames"
 
 #: driver/demo-Gtk-widgets.c:1186
 msgid "Grab Video Frames"
-msgstr "ビデオ入力を操作対象にする"
+msgstr "ビデオ入力を用いる"
 
 #: driver/demo-Gtk-widgets.c:1201 driver/xscreensaver-demo.glade2.h:66
 msgid ""
 "Whether the image-manipulating modes should operate on random images loaded "
 "from disk."
 
 #: driver/demo-Gtk-widgets.c:1201 driver/xscreensaver-demo.glade2.h:66
 msgid ""
 "Whether the image-manipulating modes should operate on random images loaded "
 "from disk."
-msgstr ""
-"画像の操作モードで、ローカルディスクにある画像をランダムに取得するかどうかを"
-"選択して下さい。"
+msgstr "画像の操作モードで、ローカルディスクにある画像をランダムに取得するかどうかを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:1203
 msgid "Choose Random Image:"
 
 #: driver/demo-Gtk-widgets.c:1203
 msgid "Choose Random Image:"
@@ -639,10 +629,10 @@ msgid ""
 msgstr ""
 "Error:\n"
 "\n"
 msgstr ""
 "Error:\n"
 "\n"
-"ディレクトリが存在しません: \"%s\"\n"
+"次のディレクトリが存在しません: \"%s\"\n"
 
 #: driver/demo-Gtk.c:2021 driver/demo-Gtk.c:2052
 
 #: driver/demo-Gtk.c:2021 driver/demo-Gtk.c:2052
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Error:\n"
 "\n"
 msgid ""
 "Error:\n"
 "\n"
@@ -650,7 +640,7 @@ msgid ""
 msgstr ""
 "Error:\n"
 "\n"
 msgstr ""
 "Error:\n"
 "\n"
-"ディレクトリが存在しません: \"%s\"\n"
+"次のファイルが存在しません: \"%s\"\n"
 
 #: driver/demo-Gtk.c:2877
 msgid "Descriptions not available: no XML support compiled in."
 
 #: driver/demo-Gtk.c:2877
 msgid "Descriptions not available: no XML support compiled in."
@@ -671,7 +661,7 @@ msgstr "スクリーンセーバーは無効です"
 #: driver/demo-Gtk.c:3243
 #, c-format
 msgid "%s: %.100s Settings"
 #: driver/demo-Gtk.c:3243
 #, c-format
 msgid "%s: %.100s Settings"
-msgstr ""
+msgstr "%s: %.100s の設定"
 
 #: driver/demo-Gtk.c:3407
 #, c-format
 
 #: driver/demo-Gtk.c:3407
 #, c-format
@@ -694,7 +684,7 @@ msgstr "無効です。"
 
 #: driver/demo-Gtk.c:3493
 msgid "Not"
 
 #: driver/demo-Gtk.c:3493
 msgid "Not"
-msgstr ""
+msgstr "インストールされていません"
 
 #: driver/demo-Gtk.c:3493
 msgid "Installed"
 
 #: driver/demo-Gtk.c:3493
 msgid "Installed"
@@ -785,9 +775,8 @@ msgid "%s: unknown option: %s\n"
 msgstr "%s: 不明なオプション: %s\n"
 
 #: driver/demo-Gtk.c:4865
 msgstr "%s: 不明なオプション: %s\n"
 
 #: driver/demo-Gtk.c:4865
-#, fuzzy
 msgid "Screensaver Preferences"
 msgid "Screensaver Preferences"
-msgstr "スクリーンセーバー"
+msgstr "XScreenSaverの設定"
 
 #: driver/screensaver-properties.desktop.in.h:1
 msgid "Change screensaver properties"
 
 #: driver/screensaver-properties.desktop.in.h:1
 msgid "Change screensaver properties"
@@ -802,122 +791,107 @@ msgid "*"
 msgstr ""
 
 #: driver/xscreensaver-demo.glade2.h:5
 msgstr ""
 
 #: driver/xscreensaver-demo.glade2.h:5
-#, fuzzy
 msgid "Choose _Random Image:"
 msgid "Choose _Random Image:"
-msgstr "画像をランダムに選択する:"
+msgstr "画像をランダムに選択する(_R):"
 
 #: driver/xscreensaver-demo.glade2.h:14
 
 #: driver/xscreensaver-demo.glade2.h:14
-#, fuzzy
 msgid "F_ade Duration"
 msgid "F_ade Duration"
-msgstr "フェードする時間: "
+msgstr "フェードする時間(_a): "
 
 #: driver/xscreensaver-demo.glade2.h:15
 
 #: driver/xscreensaver-demo.glade2.h:15
-#, fuzzy
 msgid "Fade from Black When _Unblanking"
 msgid "Fade from Black When _Unblanking"
-msgstr "スクリーンセーバーをフェードアウトする"
+msgstr "明るくする時フェードアウト(_U)"
 
 #: driver/xscreensaver-demo.glade2.h:16
 
 #: driver/xscreensaver-demo.glade2.h:16
-#, fuzzy
 msgid "Fade to Black when _Blanking"
 msgid "Fade to Black when _Blanking"
-msgstr "ã\82¹ã\82¯ã\83ªã\83¼ã\83³ã\82»ã\83¼ã\83\90ã\83¼ã\82\92ã\83\95ã\82§ã\83¼ã\83\89ã\82¤ã\83³ã\81\99ã\82\8b"
+msgstr "ã\83\96ã\83©ã\83³ã\82¯ã\81«ã\81\99ã\82\8bæ\99\82ã\81«ã\83\95ã\82§ã\83¼ã\83\89ã\82¤ã\83³(_B)"
 
 #: driver/xscreensaver-demo.glade2.h:17
 
 #: driver/xscreensaver-demo.glade2.h:17
-#, fuzzy
 msgid "Fading and Colormaps"
 msgid "Fading and Colormaps"
-msgstr "カラーマップ"
+msgstr "ã\83\95ã\82§ã\83¼ã\83\89ã\81¨ã\82«ã\83©ã\83¼ã\83\9eã\83\83ã\83\97"
 
 #: driver/xscreensaver-demo.glade2.h:19
 
 #: driver/xscreensaver-demo.glade2.h:19
-#, fuzzy
 msgid "Grab Desktop _Images"
 msgid "Grab Desktop _Images"
-msgstr "デスクトップ画像を操作対象にする"
+msgstr "デスクトップ画像を用いる(_I)"
 
 #: driver/xscreensaver-demo.glade2.h:20
 
 #: driver/xscreensaver-demo.glade2.h:20
-#, fuzzy
 msgid "Grab _Video Frames"
 msgid "Grab _Video Frames"
-msgstr "ビデオ入力を操作対象にする"
+msgstr "ビデオ入力を用いる(_V)"
 
 #: driver/xscreensaver-demo.glade2.h:23
 msgid "How long after the screen blanks until a password will be required."
 
 #: driver/xscreensaver-demo.glade2.h:23
 msgid "How long after the screen blanks until a password will be required."
-msgstr ""
+msgstr "画面がブランクになってからロックするまでの時間を指定して下さい。"
 
 #: driver/xscreensaver-demo.glade2.h:24
 
 #: driver/xscreensaver-demo.glade2.h:24
-#, fuzzy
 msgid "How long before the screen saver activates."
 msgid "How long before the screen saver activates."
-msgstr "ã\82¹ã\82¯ã\83ªã\83¼ã\83³ã\82\92ã\83\95ã\82§ã\83¼ã\83\89ã\82¤ã\83³/ã\82¢ã\82¦ã\83\88ã\81\99ã\82\8bé\96\93é\9a\94を指定して下さい。"
+msgstr "ã\82»ã\83¼ã\83\90ã\83¼ã\81\8cèµ·å\8b\95ã\81\99ã\82\8bã\81¾ã\81§ã\81®æ\99\82é\96\93を指定して下さい。"
 
 #: driver/xscreensaver-demo.glade2.h:25
 msgid ""
 "How long each display mode should run before choosing a new one (in Random "
 "mode.)"
 
 #: driver/xscreensaver-demo.glade2.h:25
 msgid ""
 "How long each display mode should run before choosing a new one (in Random "
 "mode.)"
-msgstr ""
+msgstr "ランダムなセーバーモードの時、次のセーバーに移るまでの時間を指定して下さい。"
 
 #: driver/xscreensaver-demo.glade2.h:27
 
 #: driver/xscreensaver-demo.glade2.h:27
-#, fuzzy
 msgid "How long until the monitor goes completely black."
 msgid "How long until the monitor goes completely black."
-msgstr "自動的に XScreenSaver を起動するまでの時間です。"
+msgstr "モニターがスタンドバイになるまでの時間を指定して下さい。"
 
 #: driver/xscreensaver-demo.glade2.h:31
 
 #: driver/xscreensaver-demo.glade2.h:31
-#, fuzzy
 msgid "Install _Colormap"
 msgid "Install _Colormap"
-msgstr "カラーマップをインストールする"
+msgstr "カラーマップをインストールする(_C)"
 
 #: driver/xscreensaver-demo.glade2.h:33
 msgid "Never blank the screen or power down the monitor."
 
 #: driver/xscreensaver-demo.glade2.h:33
 msgid "Never blank the screen or power down the monitor."
-msgstr ""
+msgstr "スクリーンを暗くしたり、モニターの電源を落としたりしません。"
 
 #: driver/xscreensaver-demo.glade2.h:34
 
 #: driver/xscreensaver-demo.glade2.h:34
-#, fuzzy
 msgid ""
 "No Preview\n"
 "Available"
 msgid ""
 "No Preview\n"
 "Available"
-msgstr "ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81¯"
+msgstr "ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\82\92å\88©ç\94¨ã\81§ã\81\8dã\81¾ã\81\9bã\82\93"
 
 #: driver/xscreensaver-demo.glade2.h:36
 msgid ""
 "Not\n"
 "Installed"
 
 #: driver/xscreensaver-demo.glade2.h:36
 msgid ""
 "Not\n"
 "Installed"
-msgstr ""
+msgstr "インストールされていません"
 
 #: driver/xscreensaver-demo.glade2.h:42
 
 #: driver/xscreensaver-demo.glade2.h:42
-#, fuzzy
 msgid "Stand_by After"
 msgid "Stand_by After"
-msgstr "スタンバイ: "
+msgstr "スタンバイまで(_b): "
 
 #: driver/xscreensaver-demo.glade2.h:45
 
 #: driver/xscreensaver-demo.glade2.h:45
-#, fuzzy
 msgid "Sus_pend After"
 msgid "Sus_pend After"
-msgstr "サスペンド: "
+msgstr "サスペンドまで(_p): "
 
 #: driver/xscreensaver-demo.glade2.h:46
 
 #: driver/xscreensaver-demo.glade2.h:46
-#, fuzzy
 msgid "Text Manipulation"
 msgid "Text Manipulation"
-msgstr "画像の操作"
+msgstr "表示するテキストの設定"
 
 #: driver/xscreensaver-demo.glade2.h:47
 
 #: driver/xscreensaver-demo.glade2.h:47
-#, fuzzy
 msgid "Text _file"
 msgid "Text _file"
-msgstr "ファイルを選択して下さい。"
+msgstr "ファイル(_f)"
 
 #: driver/xscreensaver-demo.glade2.h:48
 msgid ""
 "Text-displaying modes will display the contents of this URL (HTML or RSS)."
 
 #: driver/xscreensaver-demo.glade2.h:48
 msgid ""
 "Text-displaying modes will display the contents of this URL (HTML or RSS)."
-msgstr ""
+msgstr "(テキストを表示するセーバの時)次のURLの内容が表示されます。HTMLかRSSで書かれている必要があります。"
 
 #: driver/xscreensaver-demo.glade2.h:49
 msgid "Text-displaying modes will display the contents of this file."
 
 #: driver/xscreensaver-demo.glade2.h:49
 msgid "Text-displaying modes will display the contents of this file."
-msgstr ""
+msgstr "(テキストを表示するセーバの時は)次のテキストファイルの内容が表示されます。"
 
 #: driver/xscreensaver-demo.glade2.h:50
 msgid "Text-displaying modes will display the local host name, date, and time."
 
 #: driver/xscreensaver-demo.glade2.h:50
 msgid "Text-displaying modes will display the local host name, date, and time."
-msgstr ""
+msgstr "(テキストを表示するセーバの時は)ホスト名と、日時が表示されます。"
 
 #: driver/xscreensaver-demo.glade2.h:51
 msgid "Text-displaying modes will display the output of this program."
 
 #: driver/xscreensaver-demo.glade2.h:51
 msgid "Text-displaying modes will display the output of this program."
-msgstr ""
+msgstr "(テキストを表示するセーバの時は)次のプログラムの出力結果が表示されます。"
 
 #: driver/xscreensaver-demo.glade2.h:52
 msgid "Text-displaying modes will display the text typed here."
 
 #: driver/xscreensaver-demo.glade2.h:52
 msgid "Text-displaying modes will display the text typed here."
-msgstr ""
+msgstr "(テキストを表示するセーバの時は)次の文字列が出力されます。"
 
 #: driver/xscreensaver-demo.glade2.h:55
 msgid ""
 
 #: driver/xscreensaver-demo.glade2.h:55
 msgid ""
@@ -926,128 +900,112 @@ msgid ""
 "This probably means that the \"xscreensaver-extras\" and\n"
 "\"xscreensaver-gl-extras\" packages are not installed."
 msgstr ""
 "This probably means that the \"xscreensaver-extras\" and\n"
 "\"xscreensaver-gl-extras\" packages are not installed."
 msgstr ""
+"セーバーの数が少ない、若しくは全く無いようです。\n"
+"これは、恐らく\"xscreensaver-extras\"、あるいは\n"
+"\"xscreensaver-gl-extras\"のパッケージがインストールされていない\n"
+"ためだと思われます。"
 
 #: driver/xscreensaver-demo.glade2.h:59
 msgid "When idle or locked, blacken the screen only."
 
 #: driver/xscreensaver-demo.glade2.h:59
 msgid "When idle or locked, blacken the screen only."
-msgstr ""
+msgstr "セーバーが起動した時、ただ単にスクリーンを真っ暗にします。"
 
 #: driver/xscreensaver-demo.glade2.h:60
 msgid ""
 "When idle or locked, choose a random display mode from among the checked "
 "items in the list below."
 
 #: driver/xscreensaver-demo.glade2.h:60
 msgid ""
 "When idle or locked, choose a random display mode from among the checked "
 "items in the list below."
-msgstr ""
+msgstr "セーバーが起動した時、下のリストでチェックが入っているモードからランダムに選択して、(代る代る)モニターに表示します。"
 
 #: driver/xscreensaver-demo.glade2.h:61
 msgid ""
 "When idle or locked, choose a random display mode from among the checked "
 "items in the list below.  Run that same mode on each monitor."
 
 #: driver/xscreensaver-demo.glade2.h:61
 msgid ""
 "When idle or locked, choose a random display mode from among the checked "
 "items in the list below.  Run that same mode on each monitor."
-msgstr ""
+msgstr "セーバーが起動した時、下のリストでチェックが入っているモードからランダムに選択して、(代る代る)モニターに表示します。各モニターには同じモードが表示されます。"
 
 #: driver/xscreensaver-demo.glade2.h:62
 msgid "When idle or locked, run the display mode selected below."
 
 #: driver/xscreensaver-demo.glade2.h:62
 msgid "When idle or locked, run the display mode selected below."
-msgstr ""
+msgstr "セーバーが起動した時、下のリストで選択された(一つの)モードをモニターに表示します。"
 
 #: driver/xscreensaver-demo.glade2.h:65
 
 #: driver/xscreensaver-demo.glade2.h:65
-#, fuzzy
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one.)"
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one.)"
-msgstr ""
-"画像の操作モードで (可能ならば) システムのビデオ入力を対象にするかどうかを選"
-"択して下さい。"
+msgstr "画像の操作モードで (可能な時) ビデオ入力の画像を使うかどうかを選択して下さい。"
 
 #: driver/xscreensaver-demo.glade2.h:73
 
 #: driver/xscreensaver-demo.glade2.h:73
-#, fuzzy
 msgid "_Advanced"
 msgid "_Advanced"
-msgstr "オプション"
+msgstr "拡張オプション(_A)"
 
 #: driver/xscreensaver-demo.glade2.h:74
 
 #: driver/xscreensaver-demo.glade2.h:74
-#, fuzzy
 msgid "_Advanced >>"
 msgid "_Advanced >>"
-msgstr "拡張オプション >>"
+msgstr "拡張オプション(_A)>>"
 
 #: driver/xscreensaver-demo.glade2.h:75
 
 #: driver/xscreensaver-demo.glade2.h:75
-#, fuzzy
 msgid "_Blank After"
 msgid "_Blank After"
-msgstr "XScreenSaver の起動: "
+msgstr "ブランクになるまで(_B): "
 
 #: driver/xscreensaver-demo.glade2.h:77
 
 #: driver/xscreensaver-demo.glade2.h:77
-#, fuzzy
 msgid "_Blank Screen Only"
 msgid "_Blank Screen Only"
-msgstr "ブランク・スクリーンのみ"
+msgstr "ブランク・スクリーンのみ(_B)"
 
 #: driver/xscreensaver-demo.glade2.h:78
 
 #: driver/xscreensaver-demo.glade2.h:78
-#, fuzzy
 msgid "_Browse"
 msgid "_Browse"
-msgstr "参照"
+msgstr "参照(_B)"
 
 #: driver/xscreensaver-demo.glade2.h:79
 
 #: driver/xscreensaver-demo.glade2.h:79
-#, fuzzy
 msgid "_Command Line:"
 msgid "_Command Line:"
-msgstr "コマンドライン:"
+msgstr "コマンド(_C):"
 
 #: driver/xscreensaver-demo.glade2.h:80
 
 #: driver/xscreensaver-demo.glade2.h:80
-#, fuzzy
 msgid "_Cycle After"
 msgid "_Cycle After"
-msgstr "繰り返す周期: "
+msgstr "セーバーの周期(_C): "
 
 #: driver/xscreensaver-demo.glade2.h:81
 
 #: driver/xscreensaver-demo.glade2.h:81
-#, fuzzy
 msgid "_Disable Screen Saver"
 msgid "_Disable Screen Saver"
-msgstr "ã\82¹ã\82¯ã\83ªã\83¼ã\83³ã\82»ã\83¼ã\83\90ã\83¼ã\82\92ç\84¡å\8a¹ã\81«ã\81\99ã\82\8b"
+msgstr "ã\82»ã\83¼ã\83\90ã\83¼ã\82\92ç\84¡å\8a¹ã\81«ã\81\99ã\82\8b(_D)"
 
 #: driver/xscreensaver-demo.glade2.h:82
 
 #: driver/xscreensaver-demo.glade2.h:82
-#, fuzzy
 msgid "_Display Modes"
 msgstr "表示モード"
 
 #: driver/xscreensaver-demo.glade2.h:86
 msgid "_Host Name and Time"
 msgid "_Display Modes"
 msgstr "表示モード"
 
 #: driver/xscreensaver-demo.glade2.h:86
 msgid "_Host Name and Time"
-msgstr ""
+msgstr "ホスト名と日時(_H)"
 
 #: driver/xscreensaver-demo.glade2.h:88
 
 #: driver/xscreensaver-demo.glade2.h:88
-#, fuzzy
 msgid "_Lock Screen After  "
 msgid "_Lock Screen After  "
-msgstr "ç\94»é\9d¢ã\83­ã\83\83ã\82¯ã\81®èµ·å\8b\95: "
+msgstr "ç\94»é\9d¢ã\82\92ã\83­ã\83\83ã\82¯ã\81\99ã\82\8bã\81¾ã\81§(_L): "
 
 #: driver/xscreensaver-demo.glade2.h:90
 
 #: driver/xscreensaver-demo.glade2.h:90
-#, fuzzy
 msgid "_Mode:"
 msgid "_Mode:"
-msgstr "モード:"
+msgstr "モード(_M):"
 
 #: driver/xscreensaver-demo.glade2.h:91
 
 #: driver/xscreensaver-demo.glade2.h:91
-#, fuzzy
 msgid "_Off After"
 msgid "_Off After"
-msgstr "電源 OFF: "
+msgstr "電源OFFまで(_O): "
 
 #: driver/xscreensaver-demo.glade2.h:92
 
 #: driver/xscreensaver-demo.glade2.h:92
-#, fuzzy
 msgid "_Only One Screen Saver"
 msgid "_Only One Screen Saver"
-msgstr "ä¸\80ã\81¤ã\81®ã\82¹ã\82¯ã\83ªã\83¼ã\83³ã\82»ã\83¼ã\83\90ã\83¼ã\81®ã\81¿"
+msgstr "ä¸\80ã\81¤ã\81®ã\82»ã\83¼ã\83\90ã\83¼ã\81®ã\81¿(_O)"
 
 #: driver/xscreensaver-demo.glade2.h:93
 
 #: driver/xscreensaver-demo.glade2.h:93
-#, fuzzy
 msgid "_Power Management Enabled"
 msgid "_Power Management Enabled"
-msgstr "パワーマネージメントを有効にする"
+msgstr "電源管理を有効にする(_P)"
 
 #: driver/xscreensaver-demo.glade2.h:94
 
 #: driver/xscreensaver-demo.glade2.h:94
-#, fuzzy
 msgid "_Preview"
 msgid "_Preview"
-msgstr "プレビュー"
+msgstr "プレビュー(_P)"
 
 #: driver/xscreensaver-demo.glade2.h:95
 msgid "_Program"
 
 #: driver/xscreensaver-demo.glade2.h:95
 msgid "_Program"
-msgstr ""
+msgstr "プログラム(_P)"
 
 #: driver/xscreensaver-demo.glade2.h:96
 
 #: driver/xscreensaver-demo.glade2.h:96
-#, fuzzy
 msgid "_Quit"
 msgid "_Quit"
-msgstr "終了(_E)"
+msgstr "終了(_Q)"
 
 #: driver/xscreensaver-demo.glade2.h:97
 
 #: driver/xscreensaver-demo.glade2.h:97
-#, fuzzy
 msgid "_Random Screen Saver"
 msgid "_Random Screen Saver"
-msgstr "ã\83©ã\83³ã\83\80ã\83 ã\81ªã\82¹ã\82¯ã\83ªã\83¼ã\83³ã\82»ã\83¼ã\83\90ã\83¼"
+msgstr "ã\83©ã\83³ã\83\80ã\83 ã\81ªã\82»ã\83¼ã\83\90ã\82\92ç\94¨ã\81\84ã\82\8b(_R)"
 
 #: driver/xscreensaver-demo.glade2.h:99
 #, fuzzy
 
 #: driver/xscreensaver-demo.glade2.h:99
 #, fuzzy
@@ -1055,28 +1013,24 @@ msgid "_Same Random Savers"
 msgstr "ランダムなスクリーンセーバー"
 
 #: driver/xscreensaver-demo.glade2.h:100
 msgstr "ランダムなスクリーンセーバー"
 
 #: driver/xscreensaver-demo.glade2.h:100
-#, fuzzy
 msgid "_Settings..."
 msgid "_Settings..."
-msgstr "設定..."
+msgstr "設定(_S)"
 
 #: driver/xscreensaver-demo.glade2.h:101
 
 #: driver/xscreensaver-demo.glade2.h:101
-#, fuzzy
 msgid "_Standard <<"
 msgid "_Standard <<"
-msgstr "標準オプション <<"
+msgstr "標準オプション(_S)<<"
 
 #: driver/xscreensaver-demo.glade2.h:102
 
 #: driver/xscreensaver-demo.glade2.h:102
-#, fuzzy
 msgid "_Text"
 msgid "_Text"
-msgstr "æ\9c\80é\81©"
+msgstr "æ\96\87å­\97å\88\97(_T)"
 
 #: driver/xscreensaver-demo.glade2.h:103
 msgid "_URL"
 msgstr ""
 
 #: driver/xscreensaver-demo.glade2.h:104
 
 #: driver/xscreensaver-demo.glade2.h:103
 msgid "_URL"
 msgstr ""
 
 #: driver/xscreensaver-demo.glade2.h:104
-#, fuzzy
 msgid "_Visual:"
 msgid "_Visual:"
-msgstr "表示:"
+msgstr "ビジュアル(_V):"
 
 #: driver/xscreensaver-demo.glade2.h:105
 msgid "dialog1"
 
 #: driver/xscreensaver-demo.glade2.h:105
 msgid "dialog1"
@@ -2285,7 +2239,7 @@ msgid "Bouboule"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -6196,27 +6150,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7253,7 +7207,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index a69d076aaa7558928632e43db8cfb6cf06e6f263..216f7ed35de4a3f2bb1cb47559ee8539b540b8c2 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -6304,27 +6304,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7429,7 +7429,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index ad5039b5829f4c615c2df995ebd996a07d4fb4d9..43f85fc455a7c43f4fcab2ae07a7efd0103ca66e 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -2190,7 +2190,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Utfør rød/blå 3D-separasjon"
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Utfør rød/blå 3D-separasjon"
 
 #: hacks/config/bouboule.xml.h:7
@@ -6274,27 +6274,27 @@ msgid "Fertility"
 msgstr "Fruktbarhet"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Fruktbarhet"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7360,7 +7360,7 @@ msgid "RD-Bomb"
 msgstr "RD-bombe"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr "RD-bombe"
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index 3e95db635862482a9577f32b85885dc03c6ce1f0..a3b501a99a7bd45096734e2eef3aa70d703f7485 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -2323,7 +2323,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Gebruik rood/blauw 3D scheiding"
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Gebruik rood/blauw 3D scheiding"
 
 #: hacks/config/bouboule.xml.h:7
@@ -6439,27 +6439,27 @@ msgid "Fertility"
 msgstr "Vruchtbaarheid"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Vruchtbaarheid"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr "Maximale Levensduur"
 
 #: hacks/config/petri.xml.h:13
 msgstr "Maximale Levensduur"
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr "Maximum Doodssnelheid"
 
 #: hacks/config/petri.xml.h:14
 msgstr "Maximum Doodssnelheid"
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr "Maximum Groeisnelheid"
 
 #: hacks/config/petri.xml.h:15
 msgstr "Maximum Groeisnelheid"
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr "Minimum Levensverwachting"
 
 #: hacks/config/petri.xml.h:16
 msgstr "Minimum Levensverwachting"
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr "Minimum Snelheid van Doodgaan"
 
 #: hacks/config/petri.xml.h:17
 msgstr "Minimum Snelheid van Doodgaan"
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr "Minimum Groeisnelheid"
 
 #: hacks/config/petri.xml.h:18
 msgstr "Minimum Groeisnelheid"
 
 #: hacks/config/petri.xml.h:18
@@ -7565,7 +7565,7 @@ msgid "RD-Bomb"
 msgstr "Rd-Bom"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr "Rd-Bom"
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr "Reactie/Diffusie"
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr "Reactie/Diffusie"
 
 #: hacks/config/rd-bomb.xml.h:16
index ad5039b5829f4c615c2df995ebd996a07d4fb4d9..43f85fc455a7c43f4fcab2ae07a7efd0103ca66e 100644 (file)
--- a/po/no.po
+++ b/po/no.po
@@ -2190,7 +2190,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Utfør rød/blå 3D-separasjon"
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Utfør rød/blå 3D-separasjon"
 
 #: hacks/config/bouboule.xml.h:7
@@ -6274,27 +6274,27 @@ msgid "Fertility"
 msgstr "Fruktbarhet"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Fruktbarhet"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7360,7 +7360,7 @@ msgid "RD-Bomb"
 msgstr "RD-bombe"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr "RD-bombe"
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index 1549c4ae8484c581d135d8a4cde1db33d9154f58..f656d083856dee071a168d9782af86c11574becb 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -2242,7 +2242,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Separacja czerwonego i niebieskiego."
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Separacja czerwonego i niebieskiego."
 
 #: hacks/config/bouboule.xml.h:7
@@ -6373,27 +6373,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7447,7 +7447,7 @@ msgid "RD-Bomb"
 msgstr "RD-Bomb"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr "RD-Bomb"
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index c3e760b441e6c5ccc0d1fa0734fb4392a97e9823..64cd5fb4f61733a940ba3f640da9d29e9a92c8aa 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -2343,7 +2343,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Efectuar separações 3D Vermelho/Azul"
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Efectuar separações 3D Vermelho/Azul"
 
 #: hacks/config/bouboule.xml.h:7
@@ -6711,27 +6711,27 @@ msgid "Fertility"
 msgstr "Fertilidade"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Fertilidade"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr "Tempo Máximo Vida"
 
 #: hacks/config/petri.xml.h:13
 msgstr "Tempo Máximo Vida"
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr "Taxa Máxima de Mortalidade"
 
 #: hacks/config/petri.xml.h:14
 msgstr "Taxa Máxima de Mortalidade"
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr "Taxa Máxima de Crescimento"
 
 #: hacks/config/petri.xml.h:15
 msgstr "Taxa Máxima de Crescimento"
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr "Tempo Mínimo Vida"
 
 #: hacks/config/petri.xml.h:16
 msgstr "Tempo Mínimo Vida"
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr "Taxa Mínima de Mortalidade"
 
 #: hacks/config/petri.xml.h:17
 msgstr "Taxa Mínima de Mortalidade"
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr "Taxa Mínima de Crescimento"
 
 #: hacks/config/petri.xml.h:18
 msgstr "Taxa Mínima de Crescimento"
 
 #: hacks/config/petri.xml.h:18
@@ -7859,7 +7859,7 @@ msgid "RD-Bomb"
 msgstr "Bomba-RD"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr "Bomba-RD"
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr "Reacção/Difusão"
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr "Reacção/Difusão"
 
 #: hacks/config/rd-bomb.xml.h:16
index dcb52fb83cec61b72c7f0fa7d426220f736c5eac..15d310b2977bd0882a48e2f352e7d50cc7ad7790 100644 (file)
@@ -2145,7 +2145,7 @@ msgid "Bouboule"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -6034,27 +6034,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7088,7 +7088,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index c51f8d70baf72f6e4a6489de8da6530f4808add3..1720643dc7bf38424a8f7f9e23b6048d9793e4b7 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -2222,7 +2222,7 @@ msgid "Bouboule"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -6196,27 +6196,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
index 61eb7f6c4405389d589ac418f72898d96946dd12..7c71fb08565fa2e32ef0a197ca95f8043024c26d 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -2213,7 +2213,7 @@ msgid "Bouboule"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -6279,27 +6279,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7343,7 +7343,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index 547f0366b0058c5a5e25575fb06606da10b96086..996322d4089cd87e9d091a1ac5a1af908c0bada8 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -3,7 +3,7 @@
 # Martin Wahlen <mva@sbbs.se>, 1998, 1999.
 # Christian Rose <menthos@menthos.com>, 2000, 2001, 2002.
 #
 # Martin Wahlen <mva@sbbs.se>, 1998, 1999.
 # Christian Rose <menthos@menthos.com>, 2000, 2001, 2002.
 #
-# $Id: sv.po,v 1.13 2006/03/28 07:26:34 jwz Exp $
+# $Id: sv.po,v 1.14 2006/09/14 08:08:04 jwz Exp $
 #
 msgid ""
 msgstr ""
 #
 msgid ""
 msgstr ""
@@ -2270,7 +2270,7 @@ msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 #, fuzzy
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 #, fuzzy
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Använd röd/blå 3d-separation."
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Använd röd/blå 3d-separation."
 
 #: hacks/config/bouboule.xml.h:7
@@ -6591,27 +6591,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7683,7 +7683,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index 8fbac8d623de1192aee03f3e9d28ed41060f7ae4..a6d556c4906ca369063fe2adf7993859f9b59cd5 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -6335,27 +6335,27 @@ msgid "Fertility"
 msgstr "Màu mỡ"
 
 #: hacks/config/petri.xml.h:12
 msgstr "Màu mỡ"
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7427,7 +7427,7 @@ msgid "RD-Bomb"
 msgstr "RD-Bomb"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr "RD-Bomb"
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index a884524372179f536ec75f0b7cea4486d19be851..6baee28194cb3d0b9817a9e555c27bd53519ee62 100644 (file)
--- a/po/wa.po
+++ b/po/wa.po
@@ -2174,7 +2174,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr "Separåcion rodje/bleu pol 3D"
 
 #: hacks/config/bouboule.xml.h:7
 msgstr "Separåcion rodje/bleu pol 3D"
 
 #: hacks/config/bouboule.xml.h:7
@@ -6201,27 +6201,27 @@ msgid "Fertility"
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
 msgstr ""
 
 #: hacks/config/petri.xml.h:12
-msgid "Maxium Lifespan"
+msgid "Maximum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
 msgstr ""
 
 #: hacks/config/petri.xml.h:13
-msgid "Maxium Rate of Death"
+msgid "Maximum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maxium Rate of Growth"
+msgid "Maximum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minium Lifespan"
+msgid "Minimum Lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minium Rate of Death"
+msgid "Minimum Rate of Death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minium Rate of Growth"
+msgid "Minimum Rate of Growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
@@ -7265,7 +7265,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index 56d5e5da8756c53fc09d25573e1096c9c791bdd5..55051c85f737d9e3bfa5492f5c8ce47c19b81d73 100644 (file)
@@ -7551,7 +7551,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index 1303e2dec75edba1aac95f78c58a97b3a3b7860d..ef3507fc12d5995a8437cfb2a87486035de947e3 100644 (file)
@@ -2233,7 +2233,7 @@ msgid "Bouboule"
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D seperation"
+msgid "Do Red/Blue 3D separation"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:7
@@ -7453,7 +7453,7 @@ msgid "RD-Bomb"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Difusion"
+msgid "Reaction/Diffusion"
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
 msgstr ""
 
 #: hacks/config/rd-bomb.xml.h:16
index feefd69d7d2db06355536ff9ced2fea7680e3d1c..4e7a9d40ca1184d50a60818d1722b9e2a1385e5c 100644 (file)
@@ -451,7 +451,7 @@ random_squares (eraser_state *st)
     {
       st->cols = 10 + random() % 30;
       size = st->width / st->cols;
     {
       st->cols = 10 + random() % 30;
       size = st->width / st->cols;
-      rows = (st->height / size) + 1;
+      rows = (size ? (st->height / size) : 0) + 1;
       st->nlines = st->cols * rows;
       st->lines = (int *) calloc (st->nlines, sizeof(*st->lines));
 
       st->nlines = st->cols * rows;
       st->lines = (int *) calloc (st->nlines, sizeof(*st->lines));
 
@@ -469,7 +469,7 @@ random_squares (eraser_state *st)
     }
 
   size = st->width / st->cols;
     }
 
   size = st->width / st->cols;
-  rows = (st->height / size) + 1;
+  rows = (size ? (st->height / size) : 0) + 1;
 
   for (i = st->nlines * st->prev_ratio;
        i < st->nlines * st->ratio;
 
   for (i = st->nlines * st->prev_ratio;
        i < st->nlines * st->ratio;
index 0f8a2bdfcdda43448c7a565024e16185449d84f8..ddc6f5dd8366c155269d4f233d1f2ff5b9576002 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
 static const char screensaver_id[] =
-       "@(#)xscreensaver 5.00 (23-May-2006), by Jamie Zawinski (jwz@jwz.org)";
+       "@(#)xscreensaver 5.01 (18-Sep-2006), by Jamie Zawinski (jwz@jwz.org)";
index e6fcbc519316d7514337bfb5120d2e8adf33c1f7..5b6a47cecec6e070da8b3488c8b2b082b6823329 100644 (file)
@@ -1,5 +1,5 @@
 %define        name xscreensaver
 %define        name xscreensaver
-%define        version 5.00
+%define        version 5.01
 
 Summary:       X screen saver and locker
 Name:          %{name}
 
 Summary:       X screen saver and locker
 Name:          %{name}