http://svn.poeml.de/viewvc/ppc/src-unpacked/xscreensaver/xscreensaver-4.12.tar.bz2...
authorZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:43:11 +0000 (00:43 -0500)
committerZygo Blaxell <zblaxell@faye.furryterror.org>
Fri, 8 Feb 2013 17:54:04 +0000 (12:54 -0500)
-rw-r--r-- 1 zblaxell zblaxell 2888853 Mar  1 22:01 xscreensaver-4.12.tar.bz2?view=co
d515a35765428b26097e20ac46f1d373510ee9c2  xscreensaver-4.12.tar.bz2?view=co

114 files changed:
README
README.debugging
configure
configure.in
driver/XScreenSaver.ad.in
driver/XScreenSaver_ad.h
driver/demo-Gtk-conf.c
driver/demo-Gtk-widgets.c
driver/demo-Gtk.c
driver/demo-Xm.c
driver/passwd-pam.c
driver/xscreensaver-command.c
driver/xscreensaver-command.man
driver/xscreensaver-demo.man
driver/xscreensaver-getimage-file
driver/xscreensaver-getimage-file.man
driver/xscreensaver-getimage-video.man
driver/xscreensaver-getimage.c
driver/xscreensaver-getimage.man
driver/xscreensaver.c
driver/xscreensaver.h
driver/xscreensaver.man
hacks/barcode.c
hacks/bsod.c
hacks/bubbles.man
hacks/bumps.c
hacks/config/README
hacks/config/antspotlight.xml [new file with mode: 0644]
hacks/config/bouboule.xml
hacks/config/bsod.xml
hacks/config/engine.xml
hacks/config/fireflies.xml [new file with mode: 0644]
hacks/config/flipflop.xml [new file with mode: 0644]
hacks/config/hyperball.xml
hacks/config/hypercube.xml
hacks/config/polytopes.xml [new file with mode: 0644]
hacks/config/shadebobs.xml
hacks/config/spotlight.xml
hacks/epicycle.c
hacks/eruption.c
hacks/glx/Makefile.in
hacks/glx/ants.h [new file with mode: 0644]
hacks/glx/antspotlight.c [new file with mode: 0644]
hacks/glx/antspotlight.man [new file with mode: 0644]
hacks/glx/atlantis.c
hacks/glx/blocktube.c
hacks/glx/boxed.c
hacks/glx/boxed.h
hacks/glx/cage.c
hacks/glx/circuit.c
hacks/glx/cubenetic.c
hacks/glx/extrusion.c
hacks/glx/flipflop.c [new file with mode: 0644]
hacks/glx/flipflop.man [new file with mode: 0644]
hacks/glx/flipscreen3d.c
hacks/glx/flurry-smoke.c
hacks/glx/flurry-spark.c
hacks/glx/flurry-star.c
hacks/glx/flurry-texture.c
hacks/glx/flurry.h
hacks/glx/font-ximage.c
hacks/glx/gflux.c
hacks/glx/glknots.c
hacks/glx/glmatrix.c
hacks/glx/glplanet.c
hacks/glx/glslideshow.c
hacks/glx/glslideshow.man
hacks/glx/grab-ximage.c
hacks/glx/jigglypuff.c
hacks/glx/klein.c
hacks/glx/lament.c
hacks/glx/moebius.c
hacks/glx/molecule.c
hacks/glx/polytopes.c [new file with mode: 0644]
hacks/glx/polytopes.man [new file with mode: 0644]
hacks/glx/pulsar.c
hacks/glx/queens.c
hacks/glx/sballs.c
hacks/glx/stairs.c
hacks/glx/starwars.c
hacks/glx/xpm-ximage.c
hacks/greynetic.c
hacks/halftone.c
hacks/halo.c
hacks/images/atari.xbm
hacks/images/blocktube.xpm
hacks/images/macbomb.xbm
hacks/juggle.c
hacks/kumppa.c
hacks/metaballs.c
hacks/phosphor.man
hacks/rd-bomb.c
hacks/shadebobs.man
hacks/slidescreen.c
hacks/sonar.c
hacks/webcollage
hacks/webcollage-helper.c
hacks/xlockmore.c
hacks/xmatrix.c
hacks/xrayswarm.c
hacks/xsublim.c
po/POTFILES.in
po/fr.po
utils/colorbars.c
utils/grabclient.c
utils/images/logo-180.xpm
utils/images/logo-50.xpm
utils/logo.c
utils/resources.c
utils/version.h
utils/visual.c
utils/yarandom.h
xscreensaver.lsm
xscreensaver.spec

diff --git a/README b/README
index 7f656b94b9d97593884e4d157bb1164e625dd559..b3422d9c27bf041e88db1ca83257d5ae10ee4043 100644 (file)
--- a/README
+++ b/README
@@ -18,10 +18,16 @@ Makefiles for you.  Run `configure --help' to see how to override these
 choices, or to specify things like the default installation directory.
 The file `INSTALL' gives a general overview of use of these sorts of
 configure scripts (those generated by the GNU autoconf system.)
 choices, or to specify things like the default installation directory.
 The file `INSTALL' gives a general overview of use of these sorts of
 configure scripts (those generated by the GNU autoconf system.)
-The most important hint is probably this:
+
+If you have libraries in non-standard places, you can specify their
+locations with options like this:
 
      ./configure --with-motif=/opt/Motif --with-xpm=/usr/local
 
 
      ./configure --with-motif=/opt/Motif --with-xpm=/usr/local
 
+On MacOS X, it is strongly recommended that you install Fink first
+(http://fink.sourceforge.net/).  With Fink installed, you probably want
+to pass --prefix=/sw to configure.
+
 To build on VMS, see README.VMS.
 
 If you think you've found a bug, please let me know!  No bug report is too
 To build on VMS, see README.VMS.
 
 If you think you've found a bug, please let me know!  No bug report is too
@@ -70,6 +76,12 @@ the XScreenSaver FAQ about that: http://www.jwz.org/xscreensaver/faq.html
 
                               ============
 
 
                               ============
 
+Changes since 4.11:   * New GL hacks, `flipflop', `antspotlight', and
+                        `polytopes'.
+                      * Added VMS to `bsod'.
+                      * Compile without warnings in "gcc -pedantic".
+                      * Updates to `webcollage' and `queens'.
+                      * Fixed a bug that could cause PAM to hang.
 Changes since 4.10:   * New hacks, `hypertorus', `cubestorm', `glknots',
                         `blocktube', and `glmatrix'.
                       * Updates to `cloudlife', `engine', `xmatrix', and
 Changes since 4.10:   * New hacks, `hypertorus', `cubestorm', `glknots',
                         `blocktube', and `glmatrix'.
                       * Updates to `cloudlife', `engine', `xmatrix', and
index 9c847673278619a8a875084134a74f01d6ab1fec..6afb2421dca24bfcb1239b4f98fb4d6356cd983a 100644 (file)
@@ -54,15 +54,9 @@ COMPILATION PROBLEMS:
 
     Before doing this, you'll need to nuke `config.cache'.
 
 
     Before doing this, you'll need to nuke `config.cache'.
 
-    If you get errors about not being able to find Gtk or Motif (the
-     gtk/ or Xm/ header files), and you can't find them on your system,
-    then your system is horked and your vendor is lame.  Perhaps the
-    problem is that you don't have some kind of ``development option''
-    installed.  Xt/ is free and available on all systems; Xm/ (Motif)
-    is available on all commercial systems except SunOS 4.x and some
-    early releases of Solaris.  Linux and other free Unixes systems
-    usually come with Gtk, but a Motif clone is also available from
-    http://www.lesstif.org/.
+    If you get errors about not being able to find Gtk, then perhaps
+    the problem is that you don't have some kind of ``development
+    option'' installed.
 
 RUN-TIME PROBLEMS:
 
 
 RUN-TIME PROBLEMS:
 
@@ -81,8 +75,8 @@ RUN-TIME PROBLEMS:
         *  Is the problem in the driver (`xscreensaver'), the GUI
            (`xscreensaver-demo'), or in the graphics hacks?
 
         *  Is the problem in the driver (`xscreensaver'), the GUI
            (`xscreensaver-demo'), or in the graphics hacks?
 
-        *  If the problem is in the GUI, was it built using
-           Motif, Lesstif, or Gtk?  Which version?
+        *  If the problem is in the GUI, was it built using Gtk, Motif,
+           or Lesstif?  Which version?
 
         *  If the problem is in one (or more) of the hacks, which ones?
            If you're not sure, try running `xscreensaver-demo' to go
 
         *  If the problem is in one (or more) of the hacks, which ones?
            If you're not sure, try running `xscreensaver-demo' to go
index fc5b9fddab278a82f224ca3a785a6277a009cb99..085a7f01b717501ec86b007b3e6f3451375c1f34 100755 (executable)
--- a/configure
+++ b/configure
@@ -1306,6 +1306,15 @@ done
 #       gcc.  Old gcc doesn't support -std, and new gcc doesn't support -lang.
 #       so much for compatibility!)
 #
 #       gcc.  Old gcc doesn't support -std, and new gcc doesn't support -lang.
 #       so much for compatibility!)
 #
+#       UPDATE: apparently there is NO WAY to tell gcc 3.2.2 to require that
+#       declarations preceed statements, without resorting to "-pedantic".
+#       This means that there is no way to get gcc3 to issue warnings that
+#       ensure that your code complies with the ANSI/ISO C89 standard, without
+#       also drowning in totally useless warnings.  Thank you master may I
+#       have another.
+#
+#       So, I give up, let's just use -pedantic.
+#
 ###############################################################################
 
 
 ###############################################################################
 
 
@@ -2371,7 +2380,9 @@ fi
   if test -n "$GCC"; then
     echo "$as_me:$LINENO: result: Turning on gcc compiler warnings." >&5
 echo "${ECHO_T}Turning on gcc compiler warnings." >&6
   if test -n "$GCC"; then
     echo "$as_me:$LINENO: result: Turning on gcc compiler warnings." >&5
 echo "${ECHO_T}Turning on gcc compiler warnings." >&6
-    CC="$CC -Wall -Wstrict-prototypes -Wnested-externs"
+    CC="$CC -pedantic -Wall -Wstrict-prototypes -Wnested-externs"
+    # supposedly gcc 3.4 will have "-Wdeclaration-after-statement"
+    # and then perhaps we can do without -pedantic?
   else
     case "$host" in
       *-irix5* |*-irix6.0-3* )
   else
     case "$host" in
       *-irix5* |*-irix6.0-3* )
@@ -14869,7 +14880,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 14878 "configure"
+#line 14889 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 #ifndef MESA_MAJOR_VERSION
 #include "confdefs.h"
 #include <GL/gl.h>
 #ifndef MESA_MAJOR_VERSION
index 411df4ac1634fea83052970c530561b8f742b1e7..4df13b8e9c151c07a603cf0600cdbc690c1effac 100644 (file)
@@ -65,7 +65,9 @@ AC_DEFUN(AC_PROG_CC_ANSI,
 
   if test -n "$GCC"; then
     AC_MSG_RESULT(Turning on gcc compiler warnings.)
 
   if test -n "$GCC"; then
     AC_MSG_RESULT(Turning on gcc compiler warnings.)
-    CC="$CC -Wall -Wstrict-prototypes -Wnested-externs"
+    CC="$CC -pedantic -Wall -Wstrict-prototypes -Wnested-externs"
+    # supposedly gcc 3.4 will have "-Wdeclaration-after-statement"
+    # and then perhaps we can do without -pedantic?
   else
     case "$host" in
       *-irix5* |*-irix6.[0-3]* )
   else
     case "$host" in
       *-irix5* |*-irix6.[0-3]* )
@@ -92,6 +94,15 @@ AC_DEFUN(AC_PROG_CC_ANSI,
 #       gcc.  Old gcc doesn't support -std, and new gcc doesn't support -lang.
 #       so much for compatibility!)
 #
 #       gcc.  Old gcc doesn't support -std, and new gcc doesn't support -lang.
 #       so much for compatibility!)
 #
+#       UPDATE: apparently there is NO WAY to tell gcc 3.2.2 to require that
+#       declarations preceed statements, without resorting to "-pedantic".
+#       This means that there is no way to get gcc3 to issue warnings that
+#       ensure that your code complies with the ANSI/ISO C89 standard, without
+#       also drowning in totally useless warnings.  Thank you master may I
+#       have another.
+#
+#       So, I give up, let's just use -pedantic.
+#
 ###############################################################################
 
 AC_DEFUN(AC_GCC_ACCEPTS_STD,
 ###############################################################################
 
 AC_DEFUN(AC_GCC_ACCEPTS_STD,
index 47c798f08f3bda1f69d10dc25eb992b8a8f1cd1c..d78f5e3307617961d641fc6f8eb33ba228a7c4a8 100644 (file)
@@ -4,8 +4,8 @@
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
-!                              version 4.11
-!                              23-Jun-2003
+!                              version 4.12
+!                              14-Aug-2003
 !
 ! 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/
              "Ripples (stir)"  ripples -root -oily -light 2 -stir          \n\
           "Ripples (desktop)"  ripples -root -water -light 6               \n\
                                hypercube -root                             \n\
              "Ripples (stir)"  ripples -root -oily -light 2 -stir          \n\
           "Ripples (desktop)"  ripples -root -water -light 6               \n\
                                hypercube -root                             \n\
-                               hyperball -root                             \n\
+-                              hyperball -root                             \n\
                                halo -root                                  \n\
                                maze -root                                  \n\
                                noseguy -root                               \n\
                                halo -root                                  \n\
                                maze -root                                  \n\
                                noseguy -root                               \n\
 @GL_KLUDGE@ GL:                        cubestorm -root                             \n\
 @GL_KLUDGE@ GL:                        glknots -root                               \n\
 @GL_KLUDGE@ GL:                        blocktube -root                             \n\
 @GL_KLUDGE@ GL:                        cubestorm -root                             \n\
 @GL_KLUDGE@ GL:                        glknots -root                               \n\
 @GL_KLUDGE@ GL:                        blocktube -root                             \n\
+@GL_KLUDGE@ GL:                        flipflop -root                              \n\
+@GL_KLUDGE@ GL:                        antspotlight -root                          \n\
+@GL_KLUDGE@ GL:                        polytopes -root                             \n\
 -         GL:                  glslideshow -root                           \n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \n\
 -         GL:                  glslideshow -root                           \n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \n\
 -                              goban -root                                 \n\
 -                              electricsheep                               \n\
 -                              cosmos -root                                \n\
 -                              goban -root                                 \n\
 -                              electricsheep                               \n\
 -                              cosmos -root                                \n\
--         GL:                  sphereEversion --root                       \n
+-         GL:                  sphereEversion --root                       \n\
+-         GL:                  fireflies -root                             \n
 
 
 ! To display a randomized slideshow of images, you can do something like this:
 
 
 ! To display a randomized slideshow of images, you can do something like this:
@@ -651,6 +655,8 @@ XScreenSaver*doc.fontList:       *-helvetica-medium-r-*-*-*-100-*-*-*-iso8859-1
 *hacks.hypertorus.name:     HyperTorus
 *hacks.cubestorm.name:      CubeStorm
 *hacks.blocktube.name:      BlockTube
 *hacks.hypertorus.name:     HyperTorus
 *hacks.cubestorm.name:      CubeStorm
 *hacks.blocktube.name:      BlockTube
+*hacks.flipflop.name:       FlipFlop
+*hacks.antspotlight.name:   AntSpotlight
 
 ! obsolete, but still used by xscreensaver-demo-Xm.
 *hacks.documentation.isInstalled: True
 
 ! obsolete, but still used by xscreensaver-demo-Xm.
 *hacks.documentation.isInstalled: True
index 5a6ffa9713bb834633e330d36b90e52ca5847552..42d7cea2319812e1e22fa2ee14cf38c127f0fb41 100644 (file)
@@ -79,7 +79,7 @@
              \"Ripples (stir)\"        ripples -root -oily -light 2 -stir          \\n\
           \"Ripples (desktop)\"        ripples -root -water -light 6               \\n\
                                hypercube -root                             \\n\
              \"Ripples (stir)\"        ripples -root -oily -light 2 -stir          \\n\
           \"Ripples (desktop)\"        ripples -root -water -light 6               \\n\
                                hypercube -root                             \\n\
-                               hyperball -root                             \\n\
+-                              hyperball -root                             \\n\
                                halo -root                                  \\n\
                                maze -root                                  \\n\
                                noseguy -root                               \\n\
                                halo -root                                  \\n\
                                maze -root                                  \\n\
                                noseguy -root                               \\n\
           GL:                  cubestorm -root                             \\n\
           GL:                  glknots -root                               \\n\
           GL:                  blocktube -root                             \\n\
           GL:                  cubestorm -root                             \\n\
           GL:                  glknots -root                               \\n\
           GL:                  blocktube -root                             \\n\
+          GL:                  flipflop -root                              \\n\
+          GL:                  antspotlight -root                          \\n\
+          GL:                  polytopes -root                             \\n\
 -         GL:                  glslideshow -root                           \\n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \\n\
 -         GL:                  glslideshow -root                           \\n\
                                                                              \
 -                              xdaliclock -root -builtin3 -cycle           \\n\
 -                              goban -root                                 \\n\
 -                              electricsheep                               \\n\
 -                              cosmos -root                                \\n\
 -                              goban -root                                 \\n\
 -                              electricsheep                               \\n\
 -                              cosmos -root                                \\n\
--         GL:                  sphereEversion --root                       \\n",
+-         GL:                  sphereEversion --root                       \\n\
+-         GL:                  fireflies -root                             \\n",
 "XScreenSaver.pointerPollTime:         0:00:05",
 "XScreenSaver.initialDelay:            0:00:00",
 "XScreenSaver.windowCreationTimeout:   0:00:30",
 "XScreenSaver.pointerPollTime:         0:00:05",
 "XScreenSaver.initialDelay:            0:00:00",
 "XScreenSaver.windowCreationTimeout:   0:00:30",
 "*hacks.hypertorus.name:     HyperTorus",
 "*hacks.cubestorm.name:      CubeStorm",
 "*hacks.blocktube.name:      BlockTube",
 "*hacks.hypertorus.name:     HyperTorus",
 "*hacks.cubestorm.name:      CubeStorm",
 "*hacks.blocktube.name:      BlockTube",
+"*hacks.flipflop.name:       FlipFlop",
+"*hacks.antspotlight.name:   AntSpotlight",
 "*hacks.documentation.isInstalled: True",
 "*hacks.documentation.isInstalled: True",
index 23f5944dea4ec7e8de44f208a3d5824683996c61..608e488c898e225617434fa03258e1d7a50f2cb2 100644 (file)
@@ -91,30 +91,30 @@ typedef struct {
 
   parameter_type type;
 
 
   parameter_type type;
 
-  char *id;            /* widget name */
-  char *label;         /* heading label, or null */
+  xmlChar *id;         /* widget name */
+  xmlChar *label;      /* heading label, or null */
 
   /* command, fake, description, fakepreview, string, file
    */
 
   /* command, fake, description, fakepreview, string, file
    */
-  char *string;                /* file name, description, whatever. */
+  xmlChar *string;     /* file name, description, whatever. */
 
   /* slider, spinbutton
    */
 
   /* slider, spinbutton
    */
-  char *low_label;     /* label for the left side */
-  char *high_label;    /* label for the right side */
+  xmlChar *low_label;  /* label for the left side */
+  xmlChar *high_label; /* label for the right side */
   float low;           /* minimum value */
   float high;          /* maximum value */
   float value;         /* default value */
   gboolean integer_p;  /* whether the range is integral, or real */
   float low;           /* minimum value */
   float high;          /* maximum value */
   float value;         /* default value */
   gboolean integer_p;  /* whether the range is integral, or real */
-  char *arg;           /* command-line option to set (substitute "%") */
+  xmlChar *arg;                /* command-line option to set (substitute "%") */
   gboolean invert_p;   /* whether to flip the value and pretend the
                            range goes from hi-low instead of low-hi. */
 
   /* boolean, select-option
    */
   gboolean invert_p;   /* whether to flip the value and pretend the
                            range goes from hi-low instead of low-hi. */
 
   /* boolean, select-option
    */
-  char *arg_set;       /* command-line option to set for "yes", or null */
-  char *arg_unset;     /* command-line option to set for "no", or null */
-  char *test;          /* #### no idea - enablement? */
+  xmlChar *arg_set;    /* command-line option to set for "yes", or null */
+  xmlChar *arg_unset;  /* command-line option to set for "no", or null */
+  xmlChar *test;       /* #### no idea - enablement? */
 
   /* select
    */
 
   /* select
    */
@@ -246,9 +246,9 @@ describe_parameter (FILE *out, parameter *p)
    `floatp' is set to TRUE.  Otherwise, it is unchanged.
  */
 static float
    `floatp' is set to TRUE.  Otherwise, it is unchanged.
  */
 static float
-xml_get_float (xmlNodePtr node, const char *name, gboolean *floatpP)
+xml_get_float (xmlNodePtr node, const xmlChar *name, gboolean *floatpP)
 {
 {
-  const char *s = xmlGetProp (node, name);
+  const char *s = (char *) xmlGetProp (node, name);
   float f;
   char c;
   if (!s || 1 != sscanf (s, "%f %c", &f, &c))
   float f;
   char c;
   if (!s || 1 != sscanf (s, "%f %c", &f, &c))
@@ -262,7 +262,7 @@ xml_get_float (xmlNodePtr node, const char *name, gboolean *floatpP)
 
 
 static void sanity_check_parameter (const char *filename,
 
 
 static void sanity_check_parameter (const char *filename,
-                                    const char *node_name,
+                                    const xmlChar *node_name,
                                     parameter *p);
 
 /* Allocates and returns a new `parameter' object based on the
                                     parameter *p);
 
 /* Allocates and returns a new `parameter' object based on the
@@ -273,7 +273,7 @@ static parameter *
 make_parameter (const char *filename, xmlNodePtr node)
 {
   parameter *p;
 make_parameter (const char *filename, xmlNodePtr node)
 {
   parameter *p;
-  const char *name = node->name;
+  const char *name = (char *) node->name;
   const char *convert;
   gboolean floatp = FALSE;
 
   const char *convert;
   gboolean floatp = FALSE;
 
@@ -304,7 +304,7 @@ make_parameter (const char *filename, xmlNodePtr node)
 
   if (p->type == SPINBUTTON)
     {
 
   if (p->type == SPINBUTTON)
     {
-      const char *type = xmlGetProp (node, "type");
+      const char *type = (char *) xmlGetProp (node, (xmlChar *) "type");
       if (!type || !strcmp (type, "spinbutton")) p->type = SPINBUTTON;
       else if (!strcmp (type, "slider"))         p->type = SLIDER;
       else
       if (!type || !strcmp (type, "spinbutton")) p->type = SPINBUTTON;
       else if (!strcmp (type, "slider"))         p->type = SLIDER;
       else
@@ -321,23 +321,24 @@ make_parameter (const char *filename, xmlNodePtr node)
       if (node->xmlChildrenNode &&
           node->xmlChildrenNode->type == XML_TEXT_NODE &&
           !node->xmlChildrenNode->next)
       if (node->xmlChildrenNode &&
           node->xmlChildrenNode->type == XML_TEXT_NODE &&
           !node->xmlChildrenNode->next)
-        p->string = strdup (node->xmlChildrenNode->content);
+        p->string = (xmlChar *)
+          strdup ((char *) node->xmlChildrenNode->content);
     }
 
     }
 
-  p->id         = xmlGetProp (node, "id");
-  p->label      = xmlGetProp (node, "_label");
-  p->low_label  = xmlGetProp (node, "_low-label");
-  p->high_label = xmlGetProp (node, "_high-label");
-  p->low        = xml_get_float (node, "low",     &floatp);
-  p->high       = xml_get_float (node, "high",    &floatp);
-  p->value      = xml_get_float (node, "default", &floatp);
+  p->id         = xmlGetProp (node, (xmlChar *) "id");
+  p->label      = xmlGetProp (node, (xmlChar *) "_label");
+  p->low_label  = xmlGetProp (node, (xmlChar *) "_low-label");
+  p->high_label = xmlGetProp (node, (xmlChar *) "_high-label");
+  p->low        = xml_get_float (node, (xmlChar *) "low",     &floatp);
+  p->high       = xml_get_float (node, (xmlChar *) "high",    &floatp);
+  p->value      = xml_get_float (node, (xmlChar *) "default", &floatp);
   p->integer_p  = !floatp;
   p->integer_p  = !floatp;
-  convert       = xmlGetProp (node, "convert");
+  convert       = (char *) xmlGetProp (node, (xmlChar *) "convert");
   p->invert_p   = (convert && !strcmp (convert, "invert"));
   p->invert_p   = (convert && !strcmp (convert, "invert"));
-  p->arg        = xmlGetProp (node, "arg");
-  p->arg_set    = xmlGetProp (node, "arg-set");
-  p->arg_unset  = xmlGetProp (node, "arg-unset");
-  p->test       = xmlGetProp (node, "test");
+  p->arg        = xmlGetProp (node, (xmlChar *) "arg");
+  p->arg_set    = xmlGetProp (node, (xmlChar *) "arg-set");
+  p->arg_unset  = xmlGetProp (node, (xmlChar *) "arg-unset");
+  p->test       = xmlGetProp (node, (xmlChar *) "test");
 
   /* Check for missing decimal point */
   if (debug_p &&
 
   /* Check for missing decimal point */
   if (debug_p &&
@@ -360,7 +361,7 @@ make_parameter (const char *filename, xmlNodePtr node)
         }
     }
 
         }
     }
 
-  sanity_check_parameter (filename, name, p);
+  sanity_check_parameter (filename, (const xmlChar *) name, p);
 
   return p;
 }
 
   return p;
 }
@@ -383,7 +384,7 @@ make_select_option (const char *filename, xmlNodePtr node)
                  blurb(), filename, node->name, (int)node->type);
       return 0;
     }
                  blurb(), filename, node->name, (int)node->type);
       return 0;
     }
-  else if (strcmp (node->name, "option"))
+  else if (strcmp ((char *) node->name, "option"))
     {
       if (debug_p)
         fprintf (stderr,
     {
       if (debug_p)
         fprintf (stderr,
@@ -397,12 +398,12 @@ make_select_option (const char *filename, xmlNodePtr node)
       char *enable, *e;
 
       s->type       = SELECT_OPTION;
       char *enable, *e;
 
       s->type       = SELECT_OPTION;
-      s->id         = xmlGetProp (node, "id");
-      s->label      = xmlGetProp (node, "_label");
-      s->arg_set    = xmlGetProp (node, "arg-set");
-      s->arg_unset  = xmlGetProp (node, "arg-unset");
-      s->test       = xmlGetProp (node, "test");
-      enable        = xmlGetProp (node, "enable");
+      s->id         = xmlGetProp (node, (xmlChar *) "id");
+      s->label      = xmlGetProp (node, (xmlChar *) "_label");
+      s->arg_set    = xmlGetProp (node, (xmlChar *) "arg-set");
+      s->arg_unset  = xmlGetProp (node, (xmlChar *) "arg-unset");
+      s->test       = xmlGetProp (node, (xmlChar *) "test");
+      enable = (char*)xmlGetProp (node, (xmlChar *) "enable");
 
       if (enable)
         {
 
       if (enable)
         {
@@ -426,7 +427,7 @@ make_select_option (const char *filename, xmlNodePtr node)
    when they should have typed "arg=", etc.
  */
 static void
    when they should have typed "arg=", etc.
  */
 static void
-sanity_check_parameter (const char *filename, const char *node_name,
+sanity_check_parameter (const char *filename, const xmlChar *node_name,
                         parameter *p)
 {
   struct {
                         parameter *p)
 {
   struct {
@@ -530,10 +531,10 @@ sanity_check_parameter (const char *filename, const char *node_name,
 # define WARN(STR) \
    fprintf (stderr, "%s: %s: " STR " in <%s%s id=\"%s\">\n", \
               blurb(), filename, node_name, \
 # define WARN(STR) \
    fprintf (stderr, "%s: %s: " STR " in <%s%s id=\"%s\">\n", \
               blurb(), filename, node_name, \
-              (!strcmp(node_name, "number") \
+              (!strcmp((char *) node_name, "number") \
                ? (p->type == SPINBUTTON ? " type=spinbutton" : " type=slider")\
                : ""), \
                ? (p->type == SPINBUTTON ? " type=spinbutton" : " type=slider")\
                : ""), \
-              (p->id ? p->id : ""))
+              (p->id ? (char *) p->id : ""))
 # define CHECK(SLOT,NAME) \
    if (p->SLOT && !allowed.SLOT) \
      WARN ("\"" NAME "\" is not a valid option"); \
 # define CHECK(SLOT,NAME) \
    if (p->SLOT && !allowed.SLOT) \
      WARN ("\"" NAME "\" is not a valid option"); \
@@ -568,7 +569,7 @@ make_parameters_1 (const char *filename, xmlNodePtr node,
 
   for (; node; node = node->next)
     {
 
   for (; node; node = node->next)
     {
-      const char *name = node->name;
+      const char *name = (char *) node->name;
       if (!strcmp (name, "hgroup") ||
           !strcmp (name, "vgroup"))
         {
       if (!strcmp (name, "hgroup") ||
           !strcmp (name, "vgroup"))
         {
@@ -616,7 +617,7 @@ make_parameters (const char *filename, xmlNodePtr node, GtkWidget *parent)
   for (; node; node = node->next)
     {
       if (node->type == XML_ELEMENT_NODE &&
   for (; node; node = node->next)
     {
       if (node->type == XML_ELEMENT_NODE &&
-          !strcmp (node->name, "screensaver"))
+          !strcmp ((char *) node->name, "screensaver"))
         return make_parameters_1 (filename, node->xmlChildrenNode, parent, &row);
     }
   return 0;
         return make_parameters_1 (filename, node->xmlChildrenNode, parent, &row);
     }
   return 0;
@@ -693,7 +694,7 @@ static void
 make_parameter_widget (const char *filename,
                        parameter *p, GtkWidget *parent, int *row)
 {
 make_parameter_widget (const char *filename,
                        parameter *p, GtkWidget *parent, int *row)
 {
-  const char *label = p->label;
+  const char *label = (char *) p->label;
   if (p->widget) return;
 
   switch (p->type)
   if (p->widget) return;
 
   switch (p->type)
@@ -715,7 +716,7 @@ make_parameter_widget (const char *filename,
 
         p->widget = gtk_entry_new ();
         if (p->string)
 
         p->widget = gtk_entry_new ();
         if (p->string)
-          gtk_entry_set_text (GTK_ENTRY (p->widget), p->string);
+          gtk_entry_set_text (GTK_ENTRY (p->widget), (char *) p->string);
         if (row)
           gtk_table_attach (GTK_TABLE (parent), p->widget, 1, 3,
                             *row, *row + 1,
         if (row)
           gtk_table_attach (GTK_TABLE (parent), p->widget, 1, 3,
                             *row, *row + 1,
@@ -742,7 +743,7 @@ make_parameter_widget (const char *filename,
         gtk_widget_show (L);
 
         if (p->string)
         gtk_widget_show (L);
 
         if (p->string)
-          gtk_entry_set_text (GTK_ENTRY (entry), p->string);
+          gtk_entry_set_text (GTK_ENTRY (entry), (char *) p->string);
 
         if (row)
           {
 
         if (row)
           {
@@ -828,7 +829,7 @@ make_parameter_widget (const char *filename,
 
         if (p->low_label)
           {
 
         if (p->low_label)
           {
-            GtkWidget *w = gtk_label_new (_(p->low_label));
+            GtkWidget *w = gtk_label_new (_((char *) p->low_label));
             gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT);
             gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5);
             gtk_widget_show (w);
             gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT);
             gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5);
             gtk_widget_show (w);
@@ -853,7 +854,7 @@ make_parameter_widget (const char *filename,
 
         if (p->high_label)
           {
 
         if (p->high_label)
           {
-            GtkWidget *w = gtk_label_new (_(p->high_label));
+            GtkWidget *w = gtk_label_new (_((char *) p->high_label));
             gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
             gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
             gtk_widget_show (w);
             gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
             gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
             gtk_widget_show (w);
@@ -935,7 +936,7 @@ make_parameter_widget (const char *filename,
         for (opts = p->options; opts; opts = opts->next)
           {
             parameter *s = (parameter *) opts->data;
         for (opts = p->options; opts; opts = opts->next)
           {
             parameter *s = (parameter *) opts->data;
-            GtkWidget *i = gtk_menu_item_new_with_label (_(s->label));
+            GtkWidget *i = gtk_menu_item_new_with_label (_((char *) s->label));
             gtk_widget_show (i);
             gtk_menu_append (GTK_MENU (menu), i);
           }
             gtk_widget_show (i);
             gtk_menu_append (GTK_MENU (menu), i);
           }
@@ -962,7 +963,7 @@ make_parameter_widget (const char *filename,
 
   if (p->widget)
     {
 
   if (p->widget)
     {
-      gtk_widget_set_name (p->widget, p->id);
+      gtk_widget_set_name (p->widget, (char *) p->id);
       gtk_widget_show (p->widget);
       if (row)
         (*row)++;
       gtk_widget_show (p->widget);
       if (row)
         (*row)++;
@@ -1124,7 +1125,7 @@ de_stringify (char *s)
 static char *
 format_switch (parameter *p, const char *value)
 {
 static char *
 format_switch (parameter *p, const char *value)
 {
-  char *fmt = p->arg;
+  char *fmt = (char *) p->arg;
   char *v2;
   char *result, *s;
   if (!fmt || !value) return 0;
   char *v2;
   char *result, *s;
   if (!fmt || !value) return 0;
@@ -1156,7 +1157,7 @@ parameter_to_switch (parameter *p)
     {
     case COMMAND:
       if (p->arg)
     {
     case COMMAND:
       if (p->arg)
-        return strdup (p->arg);
+        return strdup ((char *) p->arg);
       else
         return 0;
       break;
       else
         return 0;
       break;
@@ -1167,7 +1168,7 @@ parameter_to_switch (parameter *p)
         const char *s = gtk_entry_get_text (GTK_ENTRY (p->widget));
         char *v;
         if (!strcmp ((s ? s : ""),
         const char *s = gtk_entry_get_text (GTK_ENTRY (p->widget));
         char *v;
         if (!strcmp ((s ? s : ""),
-                     (p->string ? p->string : "")))
+                     (p->string ? (char *) p->string : "")))
           v = 0;  /* same as default */
         else
           v = format_switch (p, s);
           v = 0;  /* same as default */
         else
           v = format_switch (p, s);
@@ -1213,8 +1214,8 @@ parameter_to_switch (parameter *p)
       {
         GtkToggleButton *b = GTK_TOGGLE_BUTTON (p->widget);
         const char *s = (gtk_toggle_button_get_active (b)
       {
         GtkToggleButton *b = GTK_TOGGLE_BUTTON (p->widget);
         const char *s = (gtk_toggle_button_get_active (b)
-                         ? p->arg_set
-                         : p->arg_unset);
+                         ? (char *) p->arg_set
+                         : (char *) p->arg_unset);
         if (s)
           return strdup (s);
         else
         if (s)
           return strdup (s);
         else
@@ -1233,7 +1234,7 @@ parameter_to_switch (parameter *p)
         const char *s;
         if (!o) abort();
         if (o->type != SELECT_OPTION) abort();
         const char *s;
         if (!o) abort();
         if (o->type != SELECT_OPTION) abort();
-        s = o->arg_set;
+        s = (char *) o->arg_set;
         if (s)
           return strdup (s);
         else
         if (s)
           return strdup (s);
         else
@@ -1453,7 +1454,7 @@ parse_command_line_into_parameters_1 (const char *filename,
         }
       else if (pp->arg)
         {
         }
       else if (pp->arg)
         {
-          if (compare_opts (option, value, pp->arg))
+          if (compare_opts (option, value, (char *) pp->arg))
             {
               which = -1;
               match = pp;
             {
               which = -1;
               match = pp;
@@ -1461,7 +1462,7 @@ parse_command_line_into_parameters_1 (const char *filename,
         }
       else if (pp->arg_set)
         {
         }
       else if (pp->arg_set)
         {
-          if (compare_opts (option, value, pp->arg_set))
+          if (compare_opts (option, value, (char *) pp->arg_set))
             {
               which = 1;
               match = pp;
             {
               which = 1;
               match = pp;
@@ -1469,7 +1470,7 @@ parse_command_line_into_parameters_1 (const char *filename,
         }
       else if (pp->arg_unset)
         {
         }
       else if (pp->arg_unset)
         {
-          if (compare_opts (option, value, pp->arg_unset))
+          if (compare_opts (option, value, (char *) pp->arg_unset))
             {
               which = 0;
               match = pp;
             {
               which = 0;
               match = pp;
@@ -1580,7 +1581,7 @@ restore_defaults (const char *progname, GList *parms)
         case FILENAME:
           {
             gtk_entry_set_text (GTK_ENTRY (p->widget),
         case FILENAME:
           {
             gtk_entry_set_text (GTK_ENTRY (p->widget),
-                                (p->string ? p->string : ""));
+                                (p->string ? (char *) p->string : ""));
             break;
           }
         case SLIDER:
             break;
           }
         case SLIDER:
@@ -1658,7 +1659,7 @@ get_description (GList *parms)
     return 0;
   else
     {
     return 0;
   else
     {
-      char *d = strdup (doc->string);
+      char *d = strdup ((char *) doc->string);
       char *s;
       for (s = d; *s; s++)
         if (s[0] == '\n')
       char *s;
       for (s = d; *s; s++)
         if (s[0] == '\n')
@@ -1781,7 +1782,7 @@ load_configurator_1 (const char *program, const char *arguments,
 
       p = calloc (1, sizeof(*p));
       p->type = COMMAND;
 
       p = calloc (1, sizeof(*p));
       p->type = COMMAND;
-      p->arg = strdup (arguments);
+      p->arg = (xmlChar *) strdup (arguments);
 
       data->parameters = g_list_append (0, (gpointer) p);
     }
 
       data->parameters = g_list_append (0, (gpointer) p);
     }
index e2c9be771cd5166c0e72da060cf75de2374d1343..3ac260ae8cdd909926744dc9e8a987f4cd462708 100644 (file)
 #include "demo-Gtk-widgets.h"
 #include "demo-Gtk-support.h"
 
 #include "demo-Gtk-widgets.h"
 #include "demo-Gtk-support.h"
 
+# ifdef __GNUC__
+#  define STFU __extension__  /* ignore gcc -pendantic warnings in next sexp */
+# else
+#  define STFU /* */
+# endif
+
 GtkWidget*
 create_xscreensaver_demo (void)
 {
 GtkWidget*
 create_xscreensaver_demo (void)
 {
@@ -480,7 +486,7 @@ create_xscreensaver_demo (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (demo);
   gtk_container_add (GTK_CONTAINER (demo_manual_hbbox), demo);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (demo);
   gtk_container_add (GTK_CONTAINER (demo_manual_hbbox), demo);
-  GTK_WIDGET_SET_FLAGS (demo, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (demo, GTK_CAN_DEFAULT);
   gtk_tooltips_set_tip (tooltips, demo, _("Demo the selected screen saver in full-screen mode (click the mouse to return.)"), NULL);
 
   settings = gtk_button_new_with_label (_("Settings..."));
   gtk_tooltips_set_tip (tooltips, demo, _("Demo the selected screen saver in full-screen mode (click the mouse to return.)"), NULL);
 
   settings = gtk_button_new_with_label (_("Settings..."));
@@ -490,7 +496,7 @@ create_xscreensaver_demo (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (settings);
   gtk_container_add (GTK_CONTAINER (demo_manual_hbbox), settings);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (settings);
   gtk_container_add (GTK_CONTAINER (demo_manual_hbbox), settings);
-  GTK_WIDGET_SET_FLAGS (settings, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (settings, GTK_CAN_DEFAULT);
   gtk_tooltips_set_tip (tooltips, settings, _("Customization and explanation of the selected screen saver."), NULL);
 
   list_vbox = gtk_vbox_new (FALSE, 0);
   gtk_tooltips_set_tip (tooltips, settings, _("Customization and explanation of the selected screen saver."), NULL);
 
   list_vbox = gtk_vbox_new (FALSE, 0);
@@ -642,7 +648,7 @@ create_xscreensaver_demo (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (next);
   gtk_box_pack_start (GTK_BOX (next_prev_hbox), next, FALSE, FALSE, 0);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (next);
   gtk_box_pack_start (GTK_BOX (next_prev_hbox), next, FALSE, FALSE, 0);
-  GTK_WIDGET_SET_FLAGS (next, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (next, GTK_CAN_DEFAULT);
   gtk_tooltips_set_tip (tooltips, next, _("Run the next screen saver in the list in full-screen mode (click the mouse to return.)"), NULL);
 
   prev = gtk_button_new_with_label (_("/\\"));
   gtk_tooltips_set_tip (tooltips, next, _("Run the next screen saver in the list in full-screen mode (click the mouse to return.)"), NULL);
 
   prev = gtk_button_new_with_label (_("/\\"));
@@ -652,7 +658,7 @@ create_xscreensaver_demo (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (prev);
   gtk_box_pack_start (GTK_BOX (next_prev_hbox), prev, FALSE, FALSE, 0);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (prev);
   gtk_box_pack_start (GTK_BOX (next_prev_hbox), prev, FALSE, FALSE, 0);
-  GTK_WIDGET_SET_FLAGS (prev, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (prev, GTK_CAN_DEFAULT);
   gtk_tooltips_set_tip (tooltips, prev, _("Run the previous screen saver in the list in full-screen mode (click the mouse to return.)"), NULL);
 
   preview_frame = gtk_frame_new (_("Description"));
   gtk_tooltips_set_tip (tooltips, prev, _("Run the previous screen saver in the list in full-screen mode (click the mouse to return.)"), NULL);
 
   preview_frame = gtk_frame_new (_("Description"));
@@ -1645,7 +1651,7 @@ create_xscreensaver_settings_dialog (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (manual);
   gtk_container_add (GTK_CONTAINER (doc_hbuttonbox), manual);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (manual);
   gtk_container_add (GTK_CONTAINER (doc_hbuttonbox), manual);
-  GTK_WIDGET_SET_FLAGS (manual, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (manual, GTK_CAN_DEFAULT);
   gtk_tooltips_set_tip (tooltips, manual, _("Click here to read the manual for this display mode, if it has one."), NULL);
 
   dialog_action_area = GTK_DIALOG (xscreensaver_settings_dialog)->action_area;
   gtk_tooltips_set_tip (tooltips, manual, _("Click here to read the manual for this display mode, if it has one."), NULL);
 
   dialog_action_area = GTK_DIALOG (xscreensaver_settings_dialog)->action_area;
@@ -1678,7 +1684,7 @@ create_xscreensaver_settings_dialog (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (adv_button);
   gtk_container_add (GTK_CONTAINER (dialog_hbuttonbox), adv_button);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (adv_button);
   gtk_container_add (GTK_CONTAINER (dialog_hbuttonbox), adv_button);
-  GTK_WIDGET_SET_FLAGS (adv_button, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (adv_button, GTK_CAN_DEFAULT);
   gtk_tooltips_set_tip (tooltips, adv_button, _("Edit the command line directly."), NULL);
 
   std_button = gtk_button_new_with_label (_("Standard <<"));
   gtk_tooltips_set_tip (tooltips, adv_button, _("Edit the command line directly."), NULL);
 
   std_button = gtk_button_new_with_label (_("Standard <<"));
@@ -1688,7 +1694,7 @@ create_xscreensaver_settings_dialog (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (std_button);
   gtk_container_add (GTK_CONTAINER (dialog_hbuttonbox), std_button);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (std_button);
   gtk_container_add (GTK_CONTAINER (dialog_hbuttonbox), std_button);
-  GTK_WIDGET_SET_FLAGS (std_button, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (std_button, GTK_CAN_DEFAULT);
   gtk_tooltips_set_tip (tooltips, std_button, _("Back to the graphical configuration options."), NULL);
 
   ok_cancel_hbuttonbox = gtk_hbutton_box_new ();
   gtk_tooltips_set_tip (tooltips, std_button, _("Back to the graphical configuration options."), NULL);
 
   ok_cancel_hbuttonbox = gtk_hbutton_box_new ();
@@ -1707,7 +1713,7 @@ create_xscreensaver_settings_dialog (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (ok_button);
   gtk_container_add (GTK_CONTAINER (ok_cancel_hbuttonbox), ok_button);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (ok_button);
   gtk_container_add (GTK_CONTAINER (ok_cancel_hbuttonbox), ok_button);
-  GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
 
   cancel_button = gtk_button_new_with_label (_("Cancel"));
   gtk_widget_set_name (cancel_button, "cancel_button");
 
   cancel_button = gtk_button_new_with_label (_("Cancel"));
   gtk_widget_set_name (cancel_button, "cancel_button");
@@ -1716,7 +1722,7 @@ create_xscreensaver_settings_dialog (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (cancel_button);
   gtk_container_add (GTK_CONTAINER (ok_cancel_hbuttonbox), cancel_button);
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (cancel_button);
   gtk_container_add (GTK_CONTAINER (ok_cancel_hbuttonbox), cancel_button);
-  GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
 
   gtk_signal_connect (GTK_OBJECT (opt_notebook), "switch_page",
                       GTK_SIGNAL_FUNC (settings_switch_page_cb),
 
   gtk_signal_connect (GTK_OBJECT (opt_notebook), "switch_page",
                       GTK_SIGNAL_FUNC (settings_switch_page_cb),
index b2620a4f7ef12d17e8488a2a6b1afae377dea322..715ca3934f55a472ed8a2b8300177e391a65d9b3 100644 (file)
 # include <unistd.h>
 #endif
 
 # include <unistd.h>
 #endif
 
+# ifdef __GNUC__
+#  define STFU __extension__  /* ignore gcc -pendantic warnings in next sexp */
+# else
+#  define STFU /* */
+# endif
+
+
 #ifdef ENABLE_NLS
 # include <locale.h>
 #endif /* ENABLE_NLS */
 #ifdef ENABLE_NLS
 # include <locale.h>
 #endif /* ENABLE_NLS */
@@ -515,13 +522,13 @@ warning_dialog (GtkWidget *parent, const char *message,
   gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
   gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
   gtk_window_set_title (GTK_WINDOW (dialog), progclass);
   gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
   gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
   gtk_window_set_title (GTK_WINDOW (dialog), progclass);
-  GTK_WIDGET_SET_FLAGS (ok, GTK_CAN_DEFAULT);
+  STFU GTK_WIDGET_SET_FLAGS (ok, GTK_CAN_DEFAULT);
   gtk_widget_show (ok);
   gtk_widget_grab_focus (ok);
 
   if (cancel)
     {
   gtk_widget_show (ok);
   gtk_widget_grab_focus (ok);
 
   if (cancel)
     {
-      GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT); 
+      STFU GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT); 
       gtk_widget_show (cancel);
     }
   gtk_widget_show (label);
       gtk_widget_show (cancel);
     }
   gtk_widget_show (label);
@@ -850,6 +857,12 @@ await_xscreensaver (state *s)
                "\n"));
 
       if (root_p)
                "\n"));
 
       if (root_p)
+
+# ifdef __GNUC__
+        __extension__     /* don't warn about "string length is greater than
+                             the length ISO C89 compilers are required to
+                             support" in the following expression... */
+# endif
         strcat (buf,
          _("You are running as root.  This usually means that xscreensaver\n"
             "was unable to contact your X server because access control is\n"
         strcat (buf,
          _("You are running as root.  This usually means that xscreensaver\n"
             "was unable to contact your X server because access control is\n"
@@ -988,7 +1001,7 @@ force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p)
   if (!was) gtk_widget_set_sensitive (parent, True);
 #ifdef HAVE_GTK2
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
   if (!was) gtk_widget_set_sensitive (parent, True);
 #ifdef HAVE_GTK2
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
-  g_assert (model);
+  STFU g_assert (model);
   gtk_tree_model_iter_nth_child (model, &iter, NULL, list_elt);
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
   gtk_tree_selection_select_iter (selection, &iter);
   gtk_tree_model_iter_nth_child (model, &iter, NULL, list_elt);
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
   gtk_tree_selection_select_iter (selection, &iter);
@@ -1136,7 +1149,7 @@ hack_time_text (state *s, const char *line, Time *store, Bool sec_p)
       else
         {
           char c;
       else
         {
           char c;
-          if (sscanf (line, "%u%c", &value, &c) != 1)
+          if (sscanf (line, "%d%c", &value, &c) != 1)
             value = -1;
           if (!sec_p)
             value *= 60;
             value = -1;
           if (!sec_p)
             value *= 60;
@@ -1506,7 +1519,7 @@ flush_popup_changes_and_save (state *s)
   else if (!strcasecmp (visual, "greyscale"))          visual = "GrayScale";
   else if (!strcasecmp (visual, "pseudocolor"))        visual = "PseudoColor";
   else if (!strcasecmp (visual, "directcolor"))        visual = "DirectColor";
   else if (!strcasecmp (visual, "greyscale"))          visual = "GrayScale";
   else if (!strcasecmp (visual, "pseudocolor"))        visual = "PseudoColor";
   else if (!strcasecmp (visual, "directcolor"))        visual = "DirectColor";
-  else if (1 == sscanf (visual, " %ld %c", &id, &c))   ;
+  else if (1 == sscanf (visual, " %lu %c", &id, &c))   ;
   else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ;
   else
     {
   else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ;
   else
     {
@@ -1630,7 +1643,7 @@ list_activated_cb (GtkTreeView       *list,
   char *str;
   int list_elt;
 
   char *str;
   int list_elt;
 
-  g_return_if_fail (!gdk_pointer_is_grabbed ());
+  STFU g_return_if_fail (!gdk_pointer_is_grabbed ());
 
   str = gtk_tree_path_to_string (path);
   list_elt = strtol (str, NULL, 10);
 
   str = gtk_tree_path_to_string (path);
   list_elt = strtol (str, NULL, 10);
@@ -3899,6 +3912,12 @@ g_log_handler (const gchar *log_domain, GLogLevelFlags log_level,
 }
 
 
 }
 
 
+#ifdef __GNUC__
+ __extension__     /* shut up about "string length is greater than the length
+                      ISO C89 compilers are required to support" when including
+                      the .ad file... */
+#endif
+
 static char *defaults[] = {
 #include "XScreenSaver_ad.h"
  0
 static char *defaults[] = {
 #include "XScreenSaver_ad.h"
  0
@@ -4442,7 +4461,7 @@ main (int argc, char **argv)
       gtk_widget_ref (outer_vbox);
       gtk_container_remove (GTK_CONTAINER (s->toplevel_widget),
                             outer_vbox);
       gtk_widget_ref (outer_vbox);
       gtk_container_remove (GTK_CONTAINER (s->toplevel_widget),
                             outer_vbox);
-      GTK_OBJECT_SET_FLAGS (outer_vbox, GTK_FLOATING);
+      STFU GTK_OBJECT_SET_FLAGS (outer_vbox, GTK_FLOATING);
       gtk_container_add (GTK_CONTAINER (capplet), outer_vbox);
 
       /* Find the window above us, and set the title and close handler. */
       gtk_container_add (GTK_CONTAINER (capplet), outer_vbox);
 
       /* Find the window above us, and set the title and close handler. */
index f8d0de286ee7efc80cf79123b40f045f28b22fef..c0f72e3a772c74990417e9c96ba8c7fbccb0624b 100644 (file)
@@ -467,6 +467,11 @@ await_xscreensaver (Widget widget)
               "\n");
 
       if (root_p)
               "\n");
 
       if (root_p)
+# ifdef __GNUC__
+        __extension__     /* don't warn about "string length is greater than
+                             the length ISO C89 compilers are required to
+                             support" in the following expression... */
+# endif
         strcat (buf,
             "You are running as root.  This usually means that xscreensaver\n"
             "was unable to contact your X server because access control is\n"
         strcat (buf,
             "You are running as root.  This usually means that xscreensaver\n"
             "was unable to contact your X server because access control is\n"
@@ -599,7 +604,7 @@ apply_changes_and_save (Widget widget)
   else if (!strcasecmp (visual, "greyscale"))          visual = "GrayScale";
   else if (!strcasecmp (visual, "pseudocolor"))        visual = "PseudoColor";
   else if (!strcasecmp (visual, "directcolor"))        visual = "DirectColor";
   else if (!strcasecmp (visual, "greyscale"))          visual = "GrayScale";
   else if (!strcasecmp (visual, "pseudocolor"))        visual = "PseudoColor";
   else if (!strcasecmp (visual, "directcolor"))        visual = "DirectColor";
-  else if (1 == sscanf (visual, " %ld %c", &id, &c))   ;
+  else if (1 == sscanf (visual, " %lu %c", &id, &c))   ;
   else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ;
   else
     {
   else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ;
   else
     {
@@ -1677,6 +1682,12 @@ demo_ehandler (Display *dpy, XErrorEvent *error)
 
 
 
 
 
 
+#ifdef __GNUC__
+ __extension__     /* shut up about "string length is greater than the length
+                      ISO C89 compilers are required to support" when including
+                      the .ad file... */
+#endif
+
 static char *defaults[] = {
 #include "XScreenSaver_ad.h"
  0
 static char *defaults[] = {
 #include "XScreenSaver_ad.h"
  0
index 7560d1a41ec487175784a56687f81db48495a77b..a5abb806cef71521c5291cb6c0baded8270e75f4 100644 (file)
@@ -246,6 +246,7 @@ pam_passwd_valid_p (const char *typed_passwd, Bool verbose_p)
 
   PAM_NO_DELAY(pamh);
 
 
   PAM_NO_DELAY(pamh);
 
+  timeout.tv_sec = 0;
   timeout.tv_nsec = 1;
   set = block_sigchld();
   status = pam_authenticate (pamh, 0);
   timeout.tv_nsec = 1;
   set = block_sigchld();
   status = pam_authenticate (pamh, 0);
index 41613c7dcbcd2f05ecc4681f98d4f7c7df7be61a..ed10dc64adb09844040a374aa0386a32f5a9ad26 100644 (file)
@@ -48,6 +48,11 @@ static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV;
 static Atom XA_RESTART, XA_PREFS, XA_THROTTLE, XA_UNTHROTTLE;
 
 static char *screensaver_version;
 static Atom XA_RESTART, XA_PREFS, XA_THROTTLE, XA_UNTHROTTLE;
 
 static char *screensaver_version;
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support" in the
+                     usage string... */
+# endif
 static char *usage = "\n\
 usage: %s -<option>\n\
 \n\
 static char *usage = "\n\
 usage: %s -<option>\n\
 \n\
index 1823ad09269fc5948d528f0d2e1628f08c5efea6..af0505e6950db5451fbb69cedf036af44c8e035c 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "23-Jun-2003 (4.11)" "X Version 11"
+.TH XScreenSaver 1 "14-Aug-2003 (4.12)" "X Version 11"
 .SH NAME
 xscreensaver-command - control a running xscreensaver process
 .SH SYNOPSIS
 .SH NAME
 xscreensaver-command - control a running xscreensaver process
 .SH SYNOPSIS
index 135cbe45f1c155aeb38caff4cebd23b8259d67c0..34884f0036a80b9f9fd88b4d0a39fdcae28cf40d 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "23-Jun-2003 (4.11)" "X Version 11"
+.TH XScreenSaver 1 "14-Aug-2003 (4.12)" "X Version 11"
 .SH NAME
 xscreensaver-demo - interactively control the background xscreensaver daemon
 .SH SYNOPSIS
 .SH NAME
 xscreensaver-demo - interactively control the background xscreensaver daemon
 .SH SYNOPSIS
index f7f4c8746d1133042f2817d6058d28d1ceed5974..619020497d39c293085bc3a762367697f76a52da 100755 (executable)
@@ -51,10 +51,18 @@ BEGIN {
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.12 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.13 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 
 
 my $verbose = 0;
 
+# This matches files that we are allowed to use as images (case-insensitive.)
+# Anything not matching this is ignored.  This is so you can point your
+# imageDirectory at directory trees that have things other than images in
+# them, but it assumes that you gave your images sensible file extensions.
+#
+my $good_file_re = '\.(gif|p?jpe?g|png|tiff?|xbm|xpm)$';
+
+
 # These are programs that can be used to put an image file on the root
 # window (including virtual root windows.)  The first one of these programs
 # that exists on $PATH will be used (with the file name as the last arg.)
 # These are programs that can be used to put an image file on the root
 # window (including virtual root windows.)  The first one of these programs
 # that exists on $PATH will be used (with the file name as the last arg.)
@@ -72,6 +80,7 @@ my @programs = (
 # "xsri       -scale -keep-aspect -center-horizontal -center-vertical",
 );
 
 # "xsri       -scale -keep-aspect -center-horizontal -center-vertical",
 );
 
+
 sub pick_displayer {
   my @names = ();
 
 sub pick_displayer {
   my @names = ();
 
@@ -95,6 +104,8 @@ sub pick_displayer {
 
 my @all_files = ();
 my %seen_inodes;
 
 my @all_files = ();
 my %seen_inodes;
+my $skip_count = 0;
+my $dir_count = 1;
 
 sub find_all_files {
   my ($dir) = @_;
 
 sub find_all_files {
   my ($dir) = @_;
@@ -112,10 +123,7 @@ sub find_all_files {
   my @dirs = ();
 
   foreach my $file (@files) {
   my @dirs = ();
 
   foreach my $file (@files) {
-    next if ($file =~ m/^\./);      # ignore dot files
-    next if ($file =~ m/[~%\#]$/);  # ignore backup files
-    next if ($file =~ m/\.(BAK|bak|tmp|orig|rej|rpmsave)$/);
-    next if ($file eq "core");
+    next if ($file =~ m/^\./);      # ignore dot files/dirs
 
     $file = "$dir/$file";
     my @st = stat($file);
 
     $file = "$dir/$file";
     my @st = stat($file);
@@ -139,10 +147,18 @@ sub find_all_files {
 
     if (S_ISDIR($mode)) {
       push @dirs, $file;
 
     if (S_ISDIR($mode)) {
       push @dirs, $file;
+      $dir_count++;
       print STDERR "$progname:   found dir  $file\n" if ($verbose > 2);
     } elsif (S_ISREG($mode) || S_ISLNK($mode)) {
       print STDERR "$progname:   found dir  $file\n" if ($verbose > 2);
     } elsif (S_ISREG($mode) || S_ISLNK($mode)) {
-      push @all_files, $file;
-      print STDERR "$progname:   found file $file\n" if ($verbose > 2);
+
+      if ($file =~ m/[~%\#]$/ ||               # backup file, or
+          ! ($file =~ m/$good_file_re/io)) {   # no image extension
+        $skip_count++;
+        print STDERR "$progname:   skip file $file\n" if ($verbose > 2);
+      } else {
+        push @all_files, $file;
+        print STDERR "$progname:   found file $file\n" if ($verbose > 2);
+      }
     } elsif ($verbose > 2) {
       print STDERR "$progname:   nonreg $file\n";
     }
     } elsif ($verbose > 2) {
       print STDERR "$progname:   nonreg $file\n";
     }
@@ -161,7 +177,11 @@ sub find_random_file {
 
   print STDERR "$progname: recursively reading $dir...\n" if ($verbose > 1);
   find_all_files ($dir);
 
   print STDERR "$progname: recursively reading $dir...\n" if ($verbose > 1);
   find_all_files ($dir);
-  print STDERR "$progname: found " . ($#all_files+1) . " files\n"
+  print STDERR "$progname: found " . ($#all_files+1) .
+               " file" . ($#all_files == 0 ? "" : "s") .
+               " in $dir_count dir" . ($dir_count == 1 ? "" : "s") .
+               "; skipped $skip_count file" . ($skip_count == 1 ? "" : "s") .
+               ".\n"
     if ($verbose > 1);
 
   @all_files = sort(@all_files);
     if ($verbose > 1);
 
   @all_files = sort(@all_files);
index f69bffb17a69c9c2e0185eba96e9aed3ebfa81af..f84a146efec46378c2ac449b67942675efa53d64 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "23-Jun-2003 (4.11)" "X Version 11"
+.TH XScreenSaver 1 "14-Aug-2003 (4.12)" "X Version 11"
 .SH NAME
 xscreensaver-getimage-file - put a randomly-selected image on the root window
 .SH SYNOPSIS
 .SH NAME
 xscreensaver-getimage-file - put a randomly-selected image on the root window
 .SH SYNOPSIS
index cfeb15da9e0f99b22d90bacbb0e20e26cbd4123d..5cd56bd5edf78198d6daed3341b8b8524dbcaf3d 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "23-Jun-2003 (4.11)" "X Version 11"
+.TH XScreenSaver 1 "14-Aug-2003 (4.12)" "X Version 11"
 .SH NAME
 xscreensaver-getimage-video - put a video frame on the root window
 .SH SYNOPSIS
 .SH NAME
 xscreensaver-getimage-video - put a video frame on the root window
 .SH SYNOPSIS
index 47247686b428a9508bcc1e3573153b1d22a492c5..8dc800a40ed97709d542c4106d46dce3258cab1b 100644 (file)
 #endif
 
 
 #endif
 
 
+#ifdef __GNUC__
+ __extension__     /* shut up about "string length is greater than the length
+                      ISO C89 compilers are required to support" when including
+                      the .ad file... */
+#endif
+
 static char *defaults[] = {
 #include "../driver/XScreenSaver_ad.h"
  0
 static char *defaults[] = {
 #include "../driver/XScreenSaver_ad.h"
  0
@@ -184,7 +190,10 @@ compute_image_scaling (int src_w, int src_h,
       int th = src_h * r;
       int pct = (r * 100);
 
       int th = src_h * r;
       int pct = (r * 100);
 
+#if 0
+      /* this optimization breaks things */
       if (pct < 95 || pct > 105)  /* don't scale if it's close */
       if (pct < 95 || pct > 105)  /* don't scale if it's close */
+#endif
         {
           if (verbose_p)
             fprintf (stderr, "%s: scaling image by %d%% (%dx%d -> %dx%d)\n",
         {
           if (verbose_p)
             fprintf (stderr, "%s: scaling image by %d%% (%dx%d -> %dx%d)\n",
@@ -575,8 +584,7 @@ maybe_read_ppm (Screen *screen, Visual *visual,
   ximage = XCreateImage (dpy, visual, depth, ZPixmap, 0, 0,
                          w, h, 8, 0);
   if (ximage)
   ximage = XCreateImage (dpy, visual, depth, ZPixmap, 0, 0,
                          w, h, 8, 0);
   if (ximage)
-    ximage->data = (unsigned char *)
-      calloc (ximage->height, ximage->bytes_per_line);
+    ximage->data = (char *) calloc (ximage->height, ximage->bytes_per_line);
   if (!ximage || !ximage->data)
     {
       fprintf (stderr, "%s: out of memory loading %dx%d PPM file %s\n",
   if (!ximage || !ximage->data)
     {
       fprintf (stderr, "%s: out of memory loading %dx%d PPM file %s\n",
@@ -722,8 +730,7 @@ read_jpeg_ximage (Screen *screen, Visual *visual, Drawable drawable,
                          cinfo.output_width, cinfo.output_height,
                          8, 0);
   if (ximage)
                          cinfo.output_width, cinfo.output_height,
                          8, 0);
   if (ximage)
-    ximage->data = (unsigned char *)
-      calloc (ximage->height, ximage->bytes_per_line);
+    ximage->data = (char *) calloc (ximage->height, ximage->bytes_per_line);
 
   if (ximage && ximage->data)
     scanbuf = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE,
 
   if (ximage && ximage->data)
     scanbuf = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE,
@@ -814,8 +821,7 @@ scale_ximage (Screen *screen, Visual *visual,
   XImage *ximage2 = XCreateImage (dpy, visual, depth,
                                   ZPixmap, 0, 0,
                                   new_width, new_height, 8, 0);
   XImage *ximage2 = XCreateImage (dpy, visual, depth,
                                   ZPixmap, 0, 0,
                                   new_width, new_height, 8, 0);
-  ximage2->data = (unsigned char *)
-    calloc (ximage2->height, ximage2->bytes_per_line);
+  ximage2->data = (char *) calloc (ximage2->height, ximage2->bytes_per_line);
 
   if (!ximage2->data)
     {
 
   if (!ximage2->data)
     {
@@ -1462,7 +1468,7 @@ main (int argc, char **argv)
           window = (Window) RootWindowOfScreen (screen);
         }
       else if ((1 == sscanf (argv[i], " 0x%lx %c", &w, &dummy) ||
           window = (Window) RootWindowOfScreen (screen);
         }
       else if ((1 == sscanf (argv[i], " 0x%lx %c", &w, &dummy) ||
-                1 == sscanf (argv[i], " %ld %c",   &w, &dummy)) &&
+                1 == sscanf (argv[i], " %lu %c",   &w, &dummy)) &&
                w != 0)
         {
           if (drawable)
                w != 0)
         {
           if (drawable)
@@ -1491,6 +1497,11 @@ main (int argc, char **argv)
             fprintf (stderr, "\n%s: unparsable window/pixmap ID: \"%s\"\n",
                      progname, argv[i]);
         LOSE:
             fprintf (stderr, "\n%s: unparsable window/pixmap ID: \"%s\"\n",
                      progname, argv[i]);
         LOSE:
+# ifdef __GNUC__
+          __extension__   /* don't warn about "string length is greater than
+                             the length ISO C89 compilers are required to
+                             support" in the usage string... */
+# endif
           fprintf (stderr, USAGE, progname, version, progname);
           exit (1);
         }
           fprintf (stderr, USAGE, progname, version, progname);
           exit (1);
         }
index 9f325df712ce8c0dc1be6a0a39a166d843e76b5b..5e0367065cada426e2b4c8fb814b2daa85fa0ecc 100644 (file)
@@ -1,4 +1,4 @@
-.TH XScreenSaver 1 "23-Jun-2003 (4.11)" "X Version 11"
+.TH XScreenSaver 1 "14-Aug-2003 (4.12)" "X Version 11"
 .SH NAME
 xscreensaver-getimage - put some randomly-selected image on the root window
 .SH SYNOPSIS
 .SH NAME
 xscreensaver-getimage - put some randomly-selected image on the root window
 .SH SYNOPSIS
index 1077c7543c007298008a77c760222f3851504d60..a70de0e4043a2eba2e497f7b36210824cd85c530 100644 (file)
@@ -216,6 +216,12 @@ static XrmOptionDescRec options [] = {
 #endif /* 0 */
 };
 
 #endif /* 0 */
 };
 
+#ifdef __GNUC__
+ __extension__     /* shut up about "string length is greater than the length
+                      ISO C89 compilers are required to support" when including
+                      the .ad file... */
+#endif
+
 static char *defaults[] = {
 #include "XScreenSaver_ad.h"
  0
 static char *defaults[] = {
 #include "XScreenSaver_ad.h"
  0
@@ -237,7 +243,9 @@ xscreensaver %s, copyright (c) 1991-2003 by Jamie Zawinski <jwz@jwz.org>\n\
   Rather than editing that file by hand, just run `xscreensaver-demo':\n\
   that program lets you configure the screen saver graphically,\n\
   including timeouts, locking, and display modes.\n\
   Rather than editing that file by hand, just run `xscreensaver-demo':\n\
   that program lets you configure the screen saver graphically,\n\
   including timeouts, locking, and display modes.\n\
-\n\
+\n",
+         si->version);
+  fprintf (stdout, "\
   Just getting started?  Try this:\n\
 \n\
         xscreensaver &\n\
   Just getting started?  Try this:\n\
 \n\
         xscreensaver &\n\
@@ -246,8 +254,8 @@ xscreensaver %s, copyright (c) 1991-2003 by Jamie Zawinski <jwz@jwz.org>\n\
   For updates, online manual, and FAQ, please see the web page:\n\
 \n\
        http://www.jwz.org/xscreensaver/\n\
   For updates, online manual, and FAQ, please see the web page:\n\
 \n\
        http://www.jwz.org/xscreensaver/\n\
-\n",
-         si->version);
+\n");
+
   fflush (stdout);
   fflush (stderr);
   exit (1);
   fflush (stdout);
   fflush (stderr);
   exit (1);
@@ -341,7 +349,8 @@ saver_ehandler (Display *dpy, XErrorEvent *error)
    "    bug.  That will cause xscreensaver to dump a `core' file to the\n"
    "    current directory.  Please include the stack trace from that core\n"
    "    file in your bug report.  *DO NOT* mail the core file itself!\n"
    "    bug.  That will cause xscreensaver to dump a `core' file to the\n"
    "    current directory.  Please include the stack trace from that core\n"
    "    file in your bug report.  *DO NOT* mail the core file itself!\n"
-   "    That won't work.\n"
+   "    That won't work.\n");
+          fprintf (real_stderr,
    "\n"
    "    http://www.jwz.org/xscreensaver/bugs.html explains how to create\n"
    "    the most useful bug reports, and how to examine core files.\n"
    "\n"
    "    http://www.jwz.org/xscreensaver/bugs.html explains how to create\n"
    "    the most useful bug reports, and how to examine core files.\n"
index 81d3e5ad3f360aa8a412c308cd3e18b3aff87553..0e0b2060b7080fff329ed633ddc82a5bf3b516b6 100644 (file)
 #include <string.h>
 #include <stdio.h>
 
 #include <string.h>
 #include <stdio.h>
 
+#ifdef HAVE_SIGACTION
+# include <signal.h>    /* for sigset_t */
+#endif
+
 #include "prefs.h"
 
 extern char *progname;
 #include "prefs.h"
 
 extern char *progname;
index 6fc5ad85748035fa281fc4d0e36a494ddd4af17d..552e3430cdf52c9237bcce7b3b021d9701227f51 100644 (file)
@@ -11,7 +11,7 @@
 .if n .sp 1
 .if t .sp .5
 ..
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "23-Jun-2003 (4.11)" "X Version 11"
+.TH XScreenSaver 1 "14-Aug-2003 (4.12)" "X Version 11"
 .SH NAME
 xscreensaver - extensible screen saver framework, plus locking
 .SH SYNOPSIS
 .SH NAME
 xscreensaver - extensible screen saver framework, plus locking
 .SH SYNOPSIS
index f6b19eb8cabd993feb7674120e40a9b6441f5147..fc61a59dcfee08965dd2fba903e0762a8840ccc4 100644 (file)
@@ -67,7 +67,7 @@ typedef struct
     int width;
     int height;
     int widthBytes;
     int width;
     int height;
     int widthBytes;
-    unsigned char *buf;
+    char *buf;
 }
 Bitmap;
 
 }
 Bitmap;
 
@@ -594,7 +594,7 @@ static unsigned char font5x8Buf[] =
    0x0f, 0x0f, 0x0f, 0x00
 };
 
    0x0f, 0x0f, 0x0f, 0x00
 };
 
-static Bitmap font5x8 = { 8, 1024, 1, font5x8Buf };
+static Bitmap font5x8 = { 8, 1024, 1, (char *) font5x8Buf };
 
 /* draw the given 5x8 character at the given coordinates */
 void bitmapDrawChar5x8 (Bitmap *b, int x, int y, char c)
 
 /* draw the given 5x8 character at the given coordinates */
 void bitmapDrawChar5x8 (Bitmap *b, int x, int y, char c)
index fbe2a7706d0f1baf4595d74ece97c8df870a2d9e..008b60fdb52047c5a7a5846d6a5ae6f7146f4f4a 100644 (file)
@@ -17,6 +17,7 @@
 #include "screenhack.h"
 #include "xpm-pixmap.h"
 #include <stdio.h>
 #include "screenhack.h"
 #include "xpm-pixmap.h"
 #include <stdio.h>
+#include <ctype.h>
 #include <time.h>
 #include <sys/time.h>
 #include <X11/Xutil.h>
 #include <time.h>
 #include <sys/time.h>
 #include <X11/Xutil.h>
@@ -224,6 +225,12 @@ windows (Display *dpy, Window window, int delay, int which)
      "\n"
      "_Press any key to continue");
 
      "\n"
      "_Press any key to continue");
 
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
   const char *wnt = /* from Jim Niemira <urmane@urmane.org> */
     ("*** STOP: 0x0000001E (0x80000003,0x80106fc0,0x8025ea21,0xfd6829e8)\n"
    "Unhandled Kernel exception c0000047 from fa8418b4 (8025ea21,fd6829e8)\n"
   const char *wnt = /* from Jim Niemira <urmane@urmane.org> */
     ("*** STOP: 0x0000001E (0x80000003,0x80106fc0,0x8025ea21,0xfd6829e8)\n"
    "Unhandled Kernel exception c0000047 from fa8418b4 (8025ea21,fd6829e8)\n"
@@ -412,6 +419,12 @@ sco (Display *dpy, Window window, int delay)
   int lines_1 = 0, lines_2 = 0, lines_3 = 0, lines_4 = 0;
   const char *s;
 
   int lines_1 = 0, lines_2 = 0, lines_3 = 0, lines_4 = 0;
   const char *s;
 
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
   const char *sco_panic_1 =
     ("Unexpected trap in kernel mode:\n"
      "\n"
   const char *sco_panic_1 =
     ("Unexpected trap in kernel mode:\n"
      "\n"
@@ -528,6 +541,12 @@ sparc_linux (Display *dpy, Window window, int delay)
   int lines = 1;
   const char *s;
 
   int lines = 1;
   const char *s;
 
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
   const char *linux_panic =
     ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
        "Unable to handle kernel paging request at virtual address f0d4a000\n"
   const char *linux_panic =
     ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
        "Unable to handle kernel paging request at virtual address f0d4a000\n"
@@ -1002,6 +1021,12 @@ macsbug (Display *dpy, Window window, int delay)
   int col_right, row_top, row_bottom, page_right, page_bottom, body_top;
   int xoff, yoff;
 
   int col_right, row_top, row_bottom, page_right, page_bottom, body_top;
   int xoff, yoff;
 
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
   const char *left = ("    SP     \n"
                      " 04EB0A58  \n"
                      "58 00010000\n"
   const char *left = ("    SP     \n"
                      " 04EB0A58  \n"
                      "58 00010000\n"
@@ -1064,6 +1089,13 @@ macsbug (Display *dpy, Window window, int delay)
                      "  PC: 2A0DE3E6\n"
                      "  Frame Type: B008");
 #else
                      "  PC: 2A0DE3E6\n"
                      "  Frame Type: B008");
 #else
+
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
   const char * body = ("PowerPC unmapped memory exception at 003AFDAC "
                                                "BowelsOfTheMemoryMgr+04F9C\n"
                      " Calling chain using A6/R1 links\n"
   const char * body = ("PowerPC unmapped memory exception at 003AFDAC "
                                                "BowelsOfTheMemoryMgr+04F9C\n"
                      " Calling chain using A6/R1 links\n"
@@ -1259,6 +1291,12 @@ macx (Display *dpy, Window window, int delay)
   XFontStruct *font;
   GC gc;
 
   XFontStruct *font;
   GC gc;
 
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
   const char *macx_panic =
    ("panic(cpu 0): Unable to find driver for this platform: "
     "\"PowerMac 3,5\".\n"
   const char *macx_panic =
    ("panic(cpu 0): Unable to find driver for this platform: "
     "\"PowerMac 3,5\".\n"
@@ -1636,6 +1674,12 @@ scrolling_puts (scrolling_window *ts, const char* aString, int delay)
 static void
 sparc_solaris (Display* dpy, Window window, int delay)
 {
 static void
 sparc_solaris (Display* dpy, Window window, int delay)
 {
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
   const char *msg1 =
     "BAD TRAP: cpu=0 type=0x31 rp=0x2a10043b5e0 addr=0xf3880 mmu_fsr=0x0\n"
     "BAD TRAP occured in module \"unix\" due to an illegal access to a"
   const char *msg1 =
     "BAD TRAP: cpu=0 type=0x31 rp=0x2a10043b5e0 addr=0xf3880 mmu_fsr=0x0\n"
     "BAD TRAP occured in module \"unix\" due to an illegal access to a"
@@ -2065,7 +2109,7 @@ linux_fsck (Display *dpy, Window window, int delay)
 
       if (*linux_panic[i])
         {
 
       if (*linux_panic[i])
         {
-          strftime (prefix, sizeof(prefix)-1, "%b %d %k:%M:%S ", tm);
+          strftime (prefix, sizeof(prefix)-1, "%b %d %H:%M:%S ", tm);
           scrolling_puts (ts, prefix, 0);
           scrolling_puts (ts, sysname, 0);
           scrolling_puts (ts, linux_panic[i], 0);
           scrolling_puts (ts, prefix, 0);
           scrolling_puts (ts, sysname, 0);
           scrolling_puts (ts, linux_panic[i], 0);
@@ -2092,6 +2136,183 @@ linux_fsck (Display *dpy, Window window, int delay)
   XClearWindow(dpy, window);
 }
 
   XClearWindow(dpy, window);
 }
 
+/* VMS by jwz (text sent by Roland Barmettler <roli@barmettler.net>)
+ */
+static void
+vms (Display *dpy, Window window, int delay)
+{
+  XWindowAttributes xgwa;
+  scrolling_window *ts;
+  const char *sysname;
+  int char_delay = 0;
+  int dot_delay = 40000;
+  int chunk_delay = 500000;
+  char *s, *s1;
+  int i;
+  int arg_count;
+
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
+  const char *lines[] = {
+    "%CNXMAN,  Lost connection to system #\n"
+    "%SHADOW-I-VOLPROC, DSA0: shadow master has changed.  "
+    "Dump file WILL be written if system crashes.\n"
+    "\n",
+    "",
+
+    "%CNXMAN,  Quorum lost, blocking activity\n"
+    "%CNXMAN,  Timed-out lost connection to system #\n"
+    "%CNXMAN,  Timed-out lost connection to system #\n"
+    "%CNXMAN,  Timed-out lost connection to system #\n"
+    "%CNXMAN,  Proposing reconfiguration of the VMScluster\n",
+    "",
+
+    "%CNXMAN,  Removed from VMScluster system #\n"
+    "%CNXMAN,  Removed from VMScluster system #\n"
+    "%CNXMAN,  Removed from VMScluster system #\n"
+    "%CNXMAN,  Completing VMScluster state transition\n",
+
+    "\n"
+    "**** OpenVMS (TM) Alpha Operating system V7.3-1   - BUGCHECK ****\n"
+    "\n"
+    "** Bugcheck code = 000005DC: CLUEXIT, Node voluntarily exiting "
+    "VMScluster\n"
+    "** Crash CPU: 00    Primary CPU: 00    Active CPUs: 00000001\n"
+    "** Current Process = NULL\n"
+    "** Current PSB ID = 00000001\n"
+    "** Image Name =\n"
+    "\n"
+    "** Dumping error log buffers to HBVS unit 0\n"
+    "**** Unable to dump error log buffers to remaining shadow set members\n"
+    "** Error log buffers not dumped to HBVS unit 200\n"
+    "\n"
+    "** Dumping memory to HBVS unit 0\n"
+    "**** Starting compressed selective memory dump at #...\n",
+
+    "...",
+
+    "\n"
+    "**** Memory dump complete - not all processes or global pages saved\n",
+
+    "\n"
+    "halted CPU 0\n",
+    "",
+
+    "\n"
+    "halt code = 5\n"
+    "HALT instruction executed\n"
+    "PC = ffffffff800c3884\n",
+
+    "\n"
+    "CPU 0 booting\n",
+
+    "\n"
+    "resetting all I/O buses\n"
+    "\n"
+    "\n"
+    };
+  char *args[8];
+
+  XGetWindowAttributes (dpy, window, &xgwa);
+  ts = make_scrolling_window (dpy, window, "VMS", False);
+  XClearWindow(dpy,window);
+  ts->sub_x = 0;
+  ts->sub_y = 0;
+  ts->sub_width = xgwa.width;
+  ts->sub_height = xgwa.height;
+
+  sysname = "VMS001";
+# ifdef HAVE_UNAME
+  {
+    struct utsname uts;
+    if (uname (&uts) >= 0)
+      sysname = uts.nodename;
+    s = strchr (sysname, '.');
+    if (s) *s = 0;
+  }
+# endif        /* !HAVE_UNAME */
+
+  args[0] = malloc (strlen(sysname) + 7);
+  strcpy (args[0], sysname);
+  args[0][5] = 0;
+
+  i = strlen(args[0])-1;
+  if (i < 6) i++;
+  args[0][i] = '1' + (random() % 9);
+  args[0][i+1] = 0;
+
+  for (s = args[0]; *s; s++)
+    if (isalpha(*s)) *s = toupper (*s);
+
+  args[1] = strdup (args[0]);
+  args[2] = strdup (args[0]); args[2][i] = '1' + (random() % 9);
+  args[3] = strdup (args[0]); args[3][i] = '1' + (random() % 9);
+
+  args[4] = strdup (args[1]);
+  args[5] = strdup (args[2]);
+  args[6] = strdup (args[3]);
+
+  {
+    time_t t = time ((time_t *) 0);
+    struct tm *tm = localtime (&t);
+    args[7] = malloc (30);
+    strftime (args[7], 29, "%d-%b-%Y %H:%M", tm);
+    for (s = args[7]; *s; s++)
+      if (isalpha(*s)) *s = toupper (*s);
+  }
+
+  arg_count = 0;
+  for (i = 0; i < countof(lines); i++)
+    {
+      const char *fmt = lines[i];
+      if (! strcmp (fmt, "..."))
+        {
+          int steps = 180 + (random() % 60);
+          while (--steps >= 0)
+            {
+              scrolling_puts (ts, ".", 0);
+              XSync (dpy, False);
+              usleep (dot_delay);
+              if (bsod_sleep (dpy, 0))
+                goto DONE;
+            }
+        }
+      else
+        {
+          char *fmt2 = malloc (strlen (fmt) * 2 + 1);
+          for (s = (char *) fmt, s1 = fmt2; *s; s++)
+            {
+              if (*s == '#')
+                {
+                  strcpy (s1, args[arg_count++]);
+                  s1 += strlen(s1);
+                }
+              else
+                *s1++ = *s;
+            }
+          *s1 = 0;
+          scrolling_puts (ts, fmt2, char_delay);
+          free (fmt2);
+          usleep (chunk_delay);
+          if (bsod_sleep (dpy, 0))
+            goto DONE;
+        }
+    }
+
+  XSync(dpy, False);
+  bsod_sleep(dpy, delay);
+
+ DONE:
+  free_scrolling_window (ts);
+  for (i = 0; i < countof (args); i++)
+    free (args[i]);
+}
+
+
 \f
 
 /* HPUX panic, by Tobias Klausmann <klausman@schwarzvogel.de>
 \f
 
 /* HPUX panic, by Tobias Klausmann <klausman@schwarzvogel.de>
@@ -2105,6 +2326,12 @@ hpux (Display* dpy, Window window, int delay)
   const char *sysname;
   char buf[2048];
 
   const char *sysname;
   char buf[2048];
 
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
   const char *msg1 =
    "Console Login:\n"
    "\n"
   const char *msg1 =
    "Console Login:\n"
    "\n"
@@ -2447,7 +2674,7 @@ struct apple2_state {
 enum {
   A2_SP_ROWMASK=1023,
   A2_SP_PUT=1024,
 enum {
   A2_SP_ROWMASK=1023,
   A2_SP_PUT=1024,
-  A2_SP_COPY=2048,
+  A2_SP_COPY=2048
 };
 
 static void
 };
 
 static void
@@ -2752,7 +2979,7 @@ ntsc_to_yiq(struct ntsc_dec *it)
 enum {
   A2_CMAP_HISTBITS=5,
   A2_CMAP_LEVELS=2,
 enum {
   A2_CMAP_HISTBITS=5,
   A2_CMAP_LEVELS=2,
-  A2_CMAP_OFFSETS=4,
+  A2_CMAP_OFFSETS=4
 };
 
 #define A2_CMAP_INDEX(COLORMODE, LEVEL, HIST, OFFSET) \
 };
 
 #define A2_CMAP_INDEX(COLORMODE, LEVEL, HIST, OFFSET) \
@@ -3850,6 +4077,7 @@ char *defaults [] = {
   "*doHPUX:                True",
   "*doApple2:              True",
   "*doOS390:               True",
   "*doHPUX:                True",
   "*doApple2:              True",
   "*doOS390:               True",
+  "*doVMS:                True",
 
   ".Windows.font:         -*-courier-bold-r-*-*-*-120-*-*-m-*-*-*",
   ".Windows.font2:        -*-courier-bold-r-*-*-*-180-*-*-m-*-*-*",
 
   ".Windows.font:         -*-courier-bold-r-*-*-*-120-*-*-m-*-*-*",
   ".Windows.font2:        -*-courier-bold-r-*-*-*-180-*-*-m-*-*-*",
@@ -3929,6 +4157,11 @@ char *defaults [] = {
   "*apple2TVContrast:      90",
   "*apple2SimulateUser:    True",
 
   "*apple2TVContrast:      90",
   "*apple2SimulateUser:    True",
 
+  ".VMS.font:             9x15bold",
+  ".VMS.font2:            -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*",
+  ".VMS.foreground:       White",
+  ".VMS.background:       Black",
+
 #ifdef HAVE_XSHM_EXTENSION
   "*useSHM:                True",
 #endif
 #ifdef HAVE_XSHM_EXTENSION
   "*useSHM:                True",
 #endif
@@ -3974,6 +4207,8 @@ XrmOptionDescRec options [] = {
   { "-no-hpux",                ".doHPUX",              XrmoptionNoArg,  "False" },
   { "-os390",          ".doOS390",             XrmoptionNoArg,  "True"  },
   { "-no-os390",       ".doOS390",             XrmoptionNoArg,  "False" },
   { "-no-hpux",                ".doHPUX",              XrmoptionNoArg,  "False" },
   { "-os390",          ".doOS390",             XrmoptionNoArg,  "True"  },
   { "-no-os390",       ".doOS390",             XrmoptionNoArg,  "False" },
+  { "-vms",            ".doVMS",               XrmoptionNoArg,  "True"  },
+  { "-no-vms",         ".doVMS",               XrmoptionNoArg,  "False" },
   { 0, 0, 0, 0 }
 };
 
   { 0, 0, 0, 0 }
 };
 
@@ -4000,6 +4235,7 @@ static struct {
   { "HPUX",            hpux },
   { "OS390",           os390 },
   { "Apple2",          apple2 },
   { "HPUX",            hpux },
   { "OS390",           os390 },
   { "Apple2",          apple2 },
+  { "VMS",             vms },
 };
 
 
 };
 
 
index ab9095181560c47a318a5b4db19eef00ca4f792c..5b83e21dfd134f7a9a739e031118c7cdc13d40f9 100644 (file)
@@ -16,7 +16,7 @@
 bubbles - frying pan / soft drink simulation
 .SH SYNOPSIS
 .B bubbles
 bubbles - frying pan / soft drink simulation
 .SH SYNOPSIS
 .B bubbles
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-simple] [\-broken] [\-3D] [\-file filename] [\-directory directoryname]
+[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-simple] [\-broken] [\-3D]
 .SH DESCRIPTION
 \fIBubbles\fP sprays lots of little random bubbles all over the window which
 then grow until they reach their maximum size and go pop.  The inspiration
 .SH DESCRIPTION
 \fIBubbles\fP sprays lots of little random bubbles all over the window which
 then grow until they reach their maximum size and go pop.  The inspiration
@@ -67,9 +67,7 @@ this sort of thing.
 .TP 8
 .B \-broken
 Don't hide bubbles when they pop.  This was a bug during development
 .TP 8
 .B \-broken
 Don't hide bubbles when they pop.  This was a bug during development
-but the results were actually quite attractive.  (This option is only
-available if you have the XPM library available and the imake generated
-Makefile has defined HAVE_XPM).
+but the results were actually quite attractive.
 .TP 8
 .B \-3D
 Normally, the simulation is done completely in two dimensions.  When a
 .TP 8
 .B \-3D
 Normally, the simulation is done completely in two dimensions.  When a
@@ -80,19 +78,6 @@ whole thing looks more realistic but I find it attracts attention to
 the flickering of each bubble as they are move and are redrawn.  Your
 mileage may vary.
 .TP 8
 the flickering of each bubble as they are move and are redrawn.  Your
 mileage may vary.
 .TP 8
-.B \-file filename
-Use the pixmap definitions in the given file, instead of the default (if
-one is compiled in).  This is ignored if \fI\-simple\fP is specified.  If
-the file is compressed (either with compress or gzip), it is decompressed
-before use.  (This option only works if you have XPM compiled into your
-binary and you have compiled with BUBBLES_IO set in bubbles.h.  This is
-\fBnot\fP the default).
-.TP 8
-.B \-directory directoryname
-Similar to \fI-file\fP except the file is taken randomly from the
-contents of the specified directory.  (Again, this option is only available
-if you have XPM and BUBBLES_IO was set when compiling.  See above).
-.TP 8
 .B \-quiet
 Don't print messages explaining why one or several command line options
 were ignored.  This is disabled by default.
 .B \-quiet
 Don't print messages explaining why one or several command line options
 were ignored.  This is disabled by default.
index 28c58aacd5089dd6d43f010a9efea471350a132c..1500bcc8b114f9034688403bf5550e65776a0055 100644 (file)
@@ -374,7 +374,7 @@ void InitBumpMap( SBumps *pBumps, XWindowAttributes *pXWinAttribs )
        free( aColors );
 }
 
        free( aColors );
 }
 
-/* Soften the bump map.  This is to avoid pixellated-looking ridges.
+/* Soften the bump map.  This is to avoid pixelated-looking ridges.
  * |-----|-----|-----|
  * |  0% |12.5%|  0% | The adjacent pixels are averaged together
  * |-----|-----|-----| first.  Then than value is averaged with
  * |-----|-----|-----|
  * |  0% |12.5%|  0% | The adjacent pixels are averaged together
  * |-----|-----|-----| first.  Then than value is averaged with
@@ -442,7 +442,9 @@ void Execute( SBumps *pBumps )
                if( iScreenY < 0 )                                                      continue;
                else if( iScreenY >= pBumps->iWinHeight )       break;
 
                if( iScreenY < 0 )                                                      continue;
                else if( iScreenY >= pBumps->iWinHeight )       break;
 
-               pDOffset = &pBumps->pXImage->data[ (iLightY+pBumps->SpotLight.nLightRadius) * pBumps->pXImage->bytes_per_line ];
+    /* warning: pointer targets in assignment differ in signedness
+       Should pDOffset be a int8?  I can't tell.  -jwz, 22-Jul-2003 */
+               pDOffset = (int8_ *) &pBumps->pXImage->data[ (iLightY+pBumps->SpotLight.nLightRadius) * pBumps->pXImage->bytes_per_line ];
                pBOffset = pBumps->aBumpMap + ( iScreenY * pBumps->iWinWidth ) + nLightXPos;
                for( iScreenX=nLightXPos, iLightX=-pBumps->SpotLight.nLightRadius; iLightX<nLightOffsetFar; ++iScreenX, ++iLightX, ++pBOffset, pDOffset+=pBumps->bytesPerPixel )
                {
                pBOffset = pBumps->aBumpMap + ( iScreenY * pBumps->iWinWidth ) + nLightXPos;
                for( iScreenX=nLightXPos, iLightX=-pBumps->SpotLight.nLightRadius; iLightX<nLightOffsetFar; ++iScreenX, ++iLightX, ++pBOffset, pDOffset+=pBumps->bytesPerPixel )
                {
index bf9188e3e561965063f4aebdf6c94ed59b93f6c5..ba3008536733756eb2874d8dc43a5cc333144a5f 100644 (file)
@@ -4,8 +4,8 @@
             a screen saver and locker for the X window system
                             by Jamie Zawinski
 
             a screen saver and locker for the X window system
                             by Jamie Zawinski
 
-                              version 4.11
-                               23-Jun-2003
+                              version 4.12
+                               14-Aug-2003
 
                      http://www.jwz.org/xscreensaver/
 
 
                      http://www.jwz.org/xscreensaver/
 
diff --git a/hacks/config/antspotlight.xml b/hacks/config/antspotlight.xml
new file mode 100644 (file)
index 0000000..3dfccdc
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="antspotlight" _label="AntSpotlight">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="20000"
+          convert="invert"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Andspotlight draws an ant (with a headlight) who walks on top of an
+image of your desktop or other image.  Written by Blair Tennessy.
+  </_description>
+</screensaver>
index 7931eec9eb854f8fc5566414294315fa378ebf73..a34a07b44fe2757bffd815bdd87b63ae17e28aa2 100644 (file)
@@ -20,7 +20,7 @@
   <boolean id="3d" _label="Do Red/Blue 3D seperation" arg-set="-3d"/>
 
   <_description>
   <boolean id="3d" _label="Do Red/Blue 3D seperation" arg-set="-3d"/>
 
   <_description>
-This draws what looks like a spinning, deforming baloon with
+This draws what looks like a spinning, deforming balloon with
 varying-sized spots painted on its invisible surface.  Written by
 Jeremie Petit.
   </_description>
 varying-sized spots painted on its invisible surface.  Written by
 Jeremie Petit.
   </_description>
index 0194d5617bc09cc2bc1cffec3a37ff8a19d8e085..d7042e19b6612fd96ed8f078fe4a1ed2d30fdb6d 100644 (file)
@@ -19,6 +19,7 @@
      <boolean id="macx"       _label="MacOS X"      arg-unset="-no-macx"/>
      <boolean id="blitdamage" _label="NCD X Terminal" arg-unset="-no-blitdamage"/>
      <boolean id="os390"      _label="OS/390"       arg-unset="-no-os390"/>
      <boolean id="macx"       _label="MacOS X"      arg-unset="-no-macx"/>
      <boolean id="blitdamage" _label="NCD X Terminal" arg-unset="-no-blitdamage"/>
      <boolean id="os390"      _label="OS/390"       arg-unset="-no-os390"/>
+     <boolean id="vms"        _label="VMS"          arg-unset="-no-vms"/>
    </vgroup>
    <vgroup>
      <boolean id="bsd"        _label="BSD"          arg-set="-bsd"/>
    </vgroup>
    <vgroup>
      <boolean id="bsd"        _label="BSD"          arg-set="-bsd"/>
index 519adbe47afaf99dbc4f8de13ef869ed428edb57..bfd73a1fedf958d8f65a2b4bb37ee04009193dce 100644 (file)
 
   <select id="engine">
    <option id="random" _label="Random Engine"/>
 
   <select id="engine">
    <option id="random" _label="Random Engine"/>
-   <option id="1" _label="BMW M3 (4 cylinders)" arg-set="-engine 'BMW M3'"/>
-   <option id="2" _label="VW Beetle (4 cylinders, flat)" arg-set="-engine 'VW Beetle'"/>
-   <option id="3" _label="Audi Quattro (5 cylinders)" arg-set="-engine 'Audi Quattro'"/>
-   <option id="4" _label="BMW M5 (6 cylinders)" arg-set="-engine 'BMW M5'"/>
-   <option id="5" _label="Subaru XT (6 cylinders, V)" arg-set="-engine 'Subaru XT'"/>
-   <option id="6" _label="Porsche 911 (6 cylinders, flat)" arg-set="-engine 'Porsche 911'"/>
-   <option id="7" _label="Corvette Z06 (8 cylinders, V)" arg-set="-engine 'Corvette Z06'"/>
-   <option id="8" _label="Dodge Viper (10 cylinders, V)" arg-set="-engine 'Dodge Viper'"/>
-   <option id="9" _label="Jaguar XKE (12 cylinders, V)" arg-set="-engine 'Jaguar XKE'"/>
+   <option id="1" _label="Honda Insight (3 cylinders)" arg-set="-engine 'Honda Insight'"/>
+   <option id="2" _label="BMW M3 (4 cylinders)" arg-set="-engine 'BMW M3'"/>
+   <option id="3" _label="VW Beetle (4 cylinders, flat)" arg-set="-engine 'VW Beetle'"/>
+   <option id="4" _label="Audi Quattro (5 cylinders)" arg-set="-engine 'Audi Quattro'"/>
+   <option id="5" _label="BMW M5 (6 cylinders)" arg-set="-engine 'BMW M5'"/>
+   <option id="6" _label="Subaru XT (6 cylinders, V)" arg-set="-engine 'Subaru XT'"/>
+   <option id="7" _label="Porsche 911 (6 cylinders, flat)" arg-set="-engine 'Porsche 911'"/>
+   <option id="8" _label="Corvette Z06 (8 cylinders, V)" arg-set="-engine 'Corvette Z06'"/>
+   <option id="9" _label="Dodge Viper (10 cylinders, V)" arg-set="-engine 'Dodge Viper'"/>
+   <option id="10" _label="Jaguar XKE (12 cylinders, V)" arg-set="-engine 'Jaguar XKE'"/>
   </select>
 
   <boolean id="titles" _label="Show Engine Name" arg-set="-titles"/>
   </select>
 
   <boolean id="titles" _label="Show Engine Name" arg-set="-titles"/>
diff --git a/hacks/config/fireflies.xml b/hacks/config/fireflies.xml
new file mode 100644 (file)
index 0000000..323c641
--- /dev/null
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="fireflies" _label="Fireflies">
+<command arg="-root" />
+
+<hgroup>
+<vgroup>
+<hgroup>
+    <number id="minbaits"
+       arg="-minbaits %"
+       type="spinbutton"
+       _label="Minimum baits"
+       low="1"
+       high="50"
+       default="2"
+    />
+    <number id="minflies"
+       arg="-minflies %"
+       type="spinbutton"
+       _label="Minimum flies"
+       low="1"
+       high="10000"
+       default="100"
+    />
+</hgroup>
+<hgroup>
+    <number id="maxbaits"
+       arg="-maxbaits %"
+       type="spinbutton"
+       _label="Maximum baits"
+       low="1"
+       high="50"
+       default="5"
+    />
+    <number id="maxflies"
+       arg="-maxflies %"
+       type="spinbutton"
+       _label="Maximum flies"
+       low="1"
+       high="10000"
+       default="175"
+    />
+</hgroup>
+
+<boolean id="draw"
+    _label="Draw baits"
+    arg-set="-drawbait"
+/>
+<hgroup>
+    <number id="bspeed"
+       arg="-bspeed %"
+       type="spinbutton"
+       _label="Bait speed"
+       low="0"
+       high="10000"
+       default="50"
+    />
+    <number id="baccel"
+       arg="-baccel %"
+       type="spinbutton"
+       _label="Bait accel"
+       low="0"
+       high="10000"
+       default="600"
+    />
+</hgroup>
+<hgroup>
+    <number id="fspeed"
+       arg="-fspeed %"
+       type="spinbutton"
+       _label="Firefly speed"
+       low="0"
+       high="10000"
+       default="100"
+    />
+    <number id="faccel"
+       arg="-faccel %"
+       type="spinbutton"
+       _label="Firefly accel"
+       low="0"
+       high="10000"
+       default="300"
+    />
+</hgroup>
+<number id="taillength"
+    arg="-taillength %"
+    type="slider"
+    _label="Tails"
+    _low-label="Short"
+    _high-label="Long"
+    low="0"
+    high="100"
+    default="22"
+/>
+<number id="tailwidth"
+    arg="-tailwidth %"
+    type="slider"
+    _low-label="Narrow"
+    _high-label="Wide"
+    low="0"
+    high="100"
+    default="25"
+/>
+<number id="tailopacity"
+    arg="-tailopacity %"
+    type="slider"
+    _low-label="Invisible"
+    _high-label="Opaque"
+    low="0"
+    high="100"
+    default="60"
+/>
+</vgroup>
+<vgroup>
+<hgroup>
+<number id="colorspeed"
+    arg="-colorspeed %"
+    type="spinbutton"
+    _label="Color cycle speed"
+    low="1"
+    high="100"
+    default="15"
+/>
+</hgroup>
+<number id="fps"
+    arg="-fps %"
+    type="spinbutton"
+    _label="Frames per sec"
+    low="1"
+    high="100"
+    default="20"
+/>
+<number id="fastforward"
+    arg="-fastforward %"
+    type="spinbutton"
+    _label="Fast Forward speed"
+    low="1"
+    high="100"
+    default="1"
+/>
+<number id="size"
+    arg="-size %"
+    type="slider"
+    _label="Firefly size"
+    _low-label="Tiny"
+    _high-label="Huge"
+    low="5"
+    high="100"
+    default="15"
+/>
+<number id="glowfactor"
+    arg="-glowfactor %"
+    type="slider"
+    _label="Glow factor"
+    _low-label="Half"
+    _high-label="10 times"
+    low="5"
+    high="100"
+    default="20"
+/>
+<number id="wind"
+    arg="-wind %"
+    type="slider"
+    _label="Wind"
+    _low-label="Still"
+    _high-label="Hurricane"
+    low="0"
+    high="100"
+    default="30"
+/>
+</vgroup>
+</hgroup>
+<hgroup>
+    <vgroup>
+       <number id="m0"
+           arg="-m0 %"
+           type="slider"
+           _label="Normal swarm motion"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="30"
+       />
+       <number id="m1"
+           arg="-m1 %"
+           type="slider"
+           _label="Swarm comes to a halt"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="10"
+       />
+       <number id="m2"
+           arg="-m2 %"
+           type="slider"
+           _label="Swarm does loops"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="10"
+       />
+       <number id="m3"
+           arg="-m3 %"
+           type="slider"
+           _label="Swarm bursts into rainbow               "
+           _low-label="Never"
+           _high-label="Often"
+           low="00"
+           high="100"
+           default="10"
+       />
+       <number id="m4"
+           arg="-m4 %"
+           type="slider"
+           _label="Swarm tails glow"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="15"
+       />
+       <number id="m5"
+           arg="-m5 %"
+           type="slider"
+           _label="Swarm hyperspeed"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="10"
+       />
+       <number id="m6"
+           arg="-m6 %"
+           type="slider"
+           _label="Faded colors"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="10"
+       />
+    </vgroup>
+    <vgroup>
+       <number id="M0"
+           arg="-M0 %"
+           type="slider"
+           _label="Make all swarms do something"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="5"
+       />
+       <number id="M1"
+           arg="-M1 %"
+           type="slider"
+           _label="Kill some fireflies"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="10"
+       />
+       <number id="M2"
+           arg="-M2 %"
+           type="slider"
+           _label="Add some fireflies"
+           _low-label="Never"
+           _high-label="Often"
+           low="00"
+           high="100"
+           default="10"
+       />
+       <number id="M3"
+           arg="-M3 %"
+           type="slider"
+           _label="Wind picks up"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="20"
+       />
+       <number id="M4"
+           arg="-M4 %"
+           type="slider"
+           _label="Matrix (pause and rotate)"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="20"
+       />
+       <number id="M5"
+           arg="-M5 %"
+           type="slider"
+           _label="Split a swarm"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="10"
+       />
+       <number id="M6"
+           arg="-M6 %"
+           type="slider"
+           _label="Merge two swarms"
+           _low-label="Never"
+           _high-label="Often"
+           low="0"
+           high="100"
+           default="10"
+       />
+    </vgroup>
+</hgroup>
+
+  <_description>
+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;.
+  </_description>
+</screensaver>
diff --git a/hacks/config/flipflop.xml b/hacks/config/flipflop.xml
new file mode 100644 (file)
index 0000000..bacc8d5
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="flipflop" _label="FlipFlop">
+
+  <command arg="-root"/>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="50000" default="20000"
+          convert="invert"/>
+
+  <select id="render">
+    <option id="solid"    _label="Solid Tiles" arg-set="-no-texture"/>
+    <option id="wire"     _label="Wireframe" arg-set="-wireframe"/>
+  </select>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+Flipflop draws a grid of 3D colored tiles that change positions with 
+each other.  Written by Kevin Ogden.
+  </_description>
+</screensaver>
index de2bf6bf509e8571dcaf6be4c18731cd3f1619ed..dc196960a9cb995de77d21fa1e90c416c1207378 100644 (file)
   <_description>
 Hyperball is to hypercube as dodecahedron is to cube: this displays
 a 2D projection of the sequence of 3D objects which are the projections
   <_description>
 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.  Written by Joe Keane.
+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.
   </_description>
 </screensaver>
   </_description>
 </screensaver>
index c9c19de1b15ddf9f368777af687a2d4fa9c66a05..b43553e335d89ccefde885242a0913431d54003d 100644 (file)
@@ -56,5 +56,8 @@ 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.
 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.
   </_description>
 </screensaver>
   </_description>
 </screensaver>
diff --git a/hacks/config/polytopes.xml b/hacks/config/polytopes.xml
new file mode 100644 (file)
index 0000000..0b2c8e3
--- /dev/null
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="polytopes" _label="Regular 4D Polytopes">
+
+  <command arg="-root"/>
+
+  <select id="display-mode">
+    <option id="mesh" _label="Wireframe Mesh"
+            arg-set="-mesh"/>
+    <option id="surface" _label="Solid Surface"
+            arg-set="-surface"/>
+    <option id="transparent" _label="Transparent Surface"/>
+  </select>
+
+  <select id="polytope">
+    <option id="random" _label="Random Object"/>
+    <option id="cell-5" _label="5-Cell (Hyper-Tetrahedron)"
+            arg-set="-5-cell"/>
+    <option id="cell-8" _label="8-Cell (Hypercube / Tesseract)"
+            arg-set="-8-cell"/>
+    <option id="cell-16" _label="16-Cell (Hyper-Octahedron)"
+            arg-set="-16-cell"/>
+    <option id="cell-24" _label="24-Cell"
+            arg-set="-24-cell"/>
+    <option id="cell-120" _label="120-Cell"
+            arg-set="-120-cell"/>
+    <option id="cell-600" _label="600-Cell"
+            arg-set="-600-cell"/>
+  </select>
+
+  <select id="colors">
+    <option id="single" _label="Single Color"
+            arg-set="-single-color"/>
+    <option id="depth" _label="Colors By 4D Depth"/>
+  </select>
+
+  <select id="projection3d">
+    <option id="perspective-3d" _label="Perspective 3d"/>
+    <option id="orthographic-3d" _label="Orthographic 3d"
+            arg-set="-orthographic-3d"/>
+  </select>
+
+  <select id="projection4d">
+    <option id="perspective-4d" _label="Perspective 4d"/>
+    <option id="orthographic-4d" _label="Orthographic 4d"
+            arg-set="-orthographic-4d"/>
+  </select>
+
+  <hgroup>
+
+    <vgroup>
+
+      <number id="speed-wx" type="slider" arg="-speed-wx %"
+              _label="WX Rotation Speed"
+              _low-label="-4.0" _high-label="4.0"
+              low="-4.0" high="4.0" default="1.1"/>
+
+      <number id="speed-wy" type="slider" arg="-speed-wy %"
+              _label="WY Rotation Speed"
+              _low-label="-4.0" _high-label="4.0"
+              low="-4.0" high="4.0" default="1.3"/>
+
+      <number id="speed-wz" type="slider" arg="-speed-wz %"
+              _label="WZ Rotation Speed"
+              _low-label="-4.0" _high-label="4.0"
+              low="-4.0" high="4.0" default="1.5"/>
+
+    </vgroup>
+
+    <vgroup>
+
+      <number id="speed-xy" type="slider" arg="-speed-xy %"
+              _label="XY Rotation Speed"
+              _low-label="-4.0" _high-label="4.0"
+              low="-4.0" high="4.0" default="1.7"/>
+    
+      <number id="speed-xz" type="slider" arg="-speed-xz %"
+              _label="XZ Rotation Speed"
+              _low-label="-4.0" _high-label="4.0"
+              low="-4.0" high="4.0" default="1.9"/>
+    
+      <number id="speed-yz" type="slider" arg="-speed-yz %"
+              _label="YZ Rotation Speed"
+              _low-label="-4.0" _high-label="4.0"
+              low="-4.0" high="4.0" default="2.1"/>
+    
+    </vgroup>
+
+  </hgroup>
+
+  <number id="speed" type="slider" arg="-delay %"
+          _label="Display Speed" _low-label="Slow" _high-label="Fast"
+          low="0" high="40000" default="25000"
+          convert="invert"/>
+
+  <boolean id="showfps" _label="Show Frames-per-Second" arg-set="-fps"/>
+
+  <_description>
+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.
+  </_description>
+</screensaver>
index 3f80495b222a25d4ad7a741eff48a9c86810e7f3..7ab68e52447dff19930646934c17cf93a411fe92 100644 (file)
@@ -24,7 +24,7 @@
           low="0" high="100" default="10"/>
 
   <_description>
           low="0" high="100" default="10"/>
 
   <_description>
-This draws smoothly-shaded oscilating oval patterns, that look
+This draws smoothly-shaded oscillating oval patterns, that look
 something like vapor trails or neon tubes.  Written by Shane Smit.
   </_description>
 </screensaver>
 something like vapor trails or neon tubes.  Written by Shane Smit.
   </_description>
 </screensaver>
index b10adacf79a87616decc21acb18cdafbe38c37d2..16ccbb8248f807a664db1d65a3442ae4415f1166 100644 (file)
@@ -13,7 +13,7 @@
           _label="Radius" low="5" high="1000" default="125"/>
 
   <_description>
           _label="Radius" low="5" high="1000" default="125"/>
 
   <_description>
-Draws a spotlight scanning across a black screen, illumnating the
+Draws a spotlight scanning across a black screen, illuminating the
 underlying desktop when it passes.  Written by Rick Schultz.
   </_description>
 </screensaver>
 underlying desktop when it passes.  Written by Rick Schultz.
   </_description>
 </screensaver>
index 9d355c3127b5010e43e35a4721e41cacc879cb1a..65a468162ef9fe5dcbfb7974600652edbd337e31 100644 (file)
@@ -587,7 +587,6 @@ setup(void)
     }
   else
     {
     }
   else
     {
-      XWindowAttributes xgwa;
       XGetWindowAttributes (dpy, window, &xgwa);
       XSelectInput (dpy, window,
                     xgwa.your_event_mask | ExposureMask |
       XGetWindowAttributes (dpy, window, &xgwa);
       XSelectInput (dpy, window,
                     xgwa.your_event_mask | ExposureMask |
index 6dd19925ad15726489f028138677905feba23656..26ed801c823b269b2de27eebf2d224a44d4c7db5 100644 (file)
@@ -320,7 +320,7 @@ static void Initialize( Display *pDisplay, Window Win, GC *pGC, XImage **ppImage
 
        /* Find the preferred bits-per-pixel. (jwz) */
        {
 
        /* Find the preferred bits-per-pixel. (jwz) */
        {
-               int i, pfvc = 0;
+               int pfvc = 0;
                XPixmapFormatValues *pfv = XListPixmapFormats( pDisplay, &pfvc );
                for( i=0; i<pfvc; i++ )
                        if( pfv[ i ].depth == XWinAttribs.depth )
                XPixmapFormatValues *pfv = XListPixmapFormats( pDisplay, &pfvc );
                for( i=0; i<pfvc; i++ )
                        if( pfv[ i ].depth == XWinAttribs.depth )
index a65a6742bb40b2b1fa3de4d9ee5f77288d7ffd1c..8b7fd04477737014be106fa080113f9645bbd800 100644 (file)
@@ -93,7 +93,8 @@ SRCS          = xscreensaver-gl-helper.c \
                  toaster_slots.c toaster_wing.c toast.c toast2.c \
                  bouncingcow.c cow_face.c cow_hide.c cow_hoofs.c cow_horns.c \
                  cow_tail.c cow_udder.c glslideshow.c jigglypuff.c klein.c \
                  toaster_slots.c toaster_wing.c toast.c toast2.c \
                  bouncingcow.c cow_face.c cow_hide.c cow_hoofs.c cow_horns.c \
                  cow_tail.c cow_udder.c glslideshow.c jigglypuff.c klein.c \
-                 hypertorus.c glmatrix.c cubestorm.c glknots.c blocktube.c
+                 hypertorus.c glmatrix.c cubestorm.c glknots.c blocktube.c \
+                 flipflop.c antspotlight.c polytopes.c
 
 OBJS           = xscreensaver-gl-helper.o \
                  atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
 
 OBJS           = xscreensaver-gl-helper.o \
                  atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
@@ -119,7 +120,8 @@ OBJS                = xscreensaver-gl-helper.o \
                  toaster_slots.o toaster_wing.o toast.o toast2.o \
                  bouncingcow.o cow_face.o cow_hide.o cow_hoofs.o cow_horns.o \
                  cow_tail.o cow_udder.o glslideshow.o jigglypuff.o klein.o \
                  toaster_slots.o toaster_wing.o toast.o toast2.o \
                  bouncingcow.o cow_face.o cow_hide.o cow_hoofs.o cow_horns.o \
                  cow_tail.o cow_udder.o glslideshow.o jigglypuff.o klein.o \
-                 hypertorus.o glmatrix.o cubestorm.o glknots.o blocktube.o
+                 hypertorus.o glmatrix.o cubestorm.o glknots.o blocktube.o \
+                 flipflop.o antspotlight.o polytopes.o
 
 GL_EXES                = cage gears moebius pipes sproingies stairs superquadrics \
                  morph3d rubik atlantis lament bubble3d glplanet pulsar \
 
 GL_EXES                = cage gears moebius pipes sproingies stairs superquadrics \
                  morph3d rubik atlantis lament bubble3d glplanet pulsar \
@@ -128,7 +130,7 @@ GL_EXES             = cage gears moebius pipes sproingies stairs superquadrics \
                  glforestfire sballs cubenetic spheremonics lavalite queens \
                  endgame glblur flurry atunnel flyingtoasters bouncingcow \
                  glslideshow jigglypuff klein hypertorus glmatrix cubestorm \
                  glforestfire sballs cubenetic spheremonics lavalite queens \
                  endgame glblur flurry atunnel flyingtoasters bouncingcow \
                  glslideshow jigglypuff klein hypertorus glmatrix cubestorm \
-                 glknots blocktube
+                 glknots blocktube flipflop antspotlight polytopes
 GLE_EXES       = extrusion
 GL_UTIL_EXES   = xscreensaver-gl-helper
 HACK_EXES      = @GL_EXES@ @GLE_EXES@
 GLE_EXES       = extrusion
 GL_UTIL_EXES   = xscreensaver-gl-helper
 HACK_EXES      = @GL_EXES@ @GLE_EXES@
@@ -145,7 +147,8 @@ HDRS                = atlantis.h bubble3d.h buildlwo.h e_textures.h xpm-ximage.h \
                  grab-ximage.h font-ximage.h tube.h sphere.h boxed.h \
                  stonerview-move.h stonerview-osc.h glutstroke.h \
                  glut_roman.h marching.h rotator.h trackball.h gltrackball.h \
                  grab-ximage.h font-ximage.h tube.h sphere.h boxed.h \
                  stonerview-move.h stonerview-osc.h glutstroke.h \
                  glut_roman.h marching.h rotator.h trackball.h gltrackball.h \
-                 chessmodels.h chessgames.h gllist.h flurry.h tunnel_draw.h
+                 chessmodels.h chessgames.h gllist.h flurry.h tunnel_draw.h \
+                 ants.h
 GL_MEN         = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
                  cubenetic.man dangerball.man engine.man extrusion.man \
                  flipscreen3d.man gears.man gflux.man glforestfire.man \
 GL_MEN         = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
                  cubenetic.man dangerball.man engine.man extrusion.man \
                  flipscreen3d.man gears.man gflux.man glforestfire.man \
@@ -157,7 +160,8 @@ GL_MEN              = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
                  endgame.man flurry.man glblur.man atunnel.man \
                  flyingtoasters.man bouncingcow.man glslideshow.man \
                  jigglypuff.man klein.man hypertorus.man glmatrix.man \
                  endgame.man flurry.man glblur.man atunnel.man \
                  flyingtoasters.man bouncingcow.man glslideshow.man \
                  jigglypuff.man klein.man hypertorus.man glmatrix.man \
-                 cubestorm.man glknots.man blocktube.man
+                 cubestorm.man glknots.man blocktube.man flipflop.man \
+                 antspotlight.man polytopes.man
 MEN            = @GL_MEN@
 EXTRAS         = README Makefile.in dxf2gl.pl
 
 MEN            = @GL_MEN@
 EXTRAS         = README Makefile.in dxf2gl.pl
 
@@ -536,6 +540,15 @@ glknots:   glknots.o       tube.o $(TRACK_OBJS) $(HACK_OBJS)
 blocktube:     blocktube.o     $(HACK_OBJS) xpm-ximage.o
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) xpm-ximage.o $(HACK_LIBS) $(XPM_LIBS)
 
 blocktube:     blocktube.o     $(HACK_OBJS) xpm-ximage.o
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) xpm-ximage.o $(HACK_LIBS) $(XPM_LIBS)
 
+flipflop:      flipflop.o      $(TRACK_OBJS) $(HACK_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(TRACK_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+antspotlight:  antspotlight.o  $(TRACK_OBJS) $(GRAB_OBJS) $(HACK_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(TRACK_OBJS) $(GRAB_OBJS) $(HACK_OBJS) $(HACK_LIBS)
+
+polytopes:     polytopes.o     $(HACK_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
+
 # This one works differently (it's not xlock-like.)
 #
 STONER_OBJS=stonerview.o stonerview-move.o stonerview-osc.o stonerview-view.o \
 # This one works differently (it's not xlock-like.)
 #
 STONER_OBJS=stonerview.o stonerview-move.o stonerview-osc.o stonerview-view.o \
@@ -565,6 +578,11 @@ dnalogo:   dnalogo.o       tube.o $(HACK_OBJS)
 #
 # DO NOT DELETE: updated by make distdepend
 
 #
 # DO NOT DELETE: updated by make distdepend
 
+antspotlight.o: $(srcdir)/ants.h
+antspotlight.o: ../../config.h
+antspotlight.o: $(srcdir)/gltrackball.h
+antspotlight.o: $(srcdir)/grab-ximage.h
+antspotlight.o: $(srcdir)/rotator.h
 atlantis.o: $(srcdir)/atlantis.h
 atlantis.o: ../../config.h
 atlantis.o: $(HACK_SRC)/images/sea-texture.xpm
 atlantis.o: $(srcdir)/atlantis.h
 atlantis.o: ../../config.h
 atlantis.o: $(HACK_SRC)/images/sea-texture.xpm
@@ -634,6 +652,8 @@ extrusion.o: $(srcdir)/xpm-ximage.h
 extrusion-screw.o: ../../config.h
 extrusion-taper.o: ../../config.h
 extrusion-twistoid.o: ../../config.h
 extrusion-screw.o: ../../config.h
 extrusion-taper.o: ../../config.h
 extrusion-twistoid.o: ../../config.h
+flipflop.o: ../../config.h
+flipflop.o: $(srcdir)/gltrackball.h
 flipscreen3d.o: ../../config.h
 flipscreen3d.o: $(srcdir)/gltrackball.h
 flipscreen3d.o: $(srcdir)/grab-ximage.h
 flipscreen3d.o: ../../config.h
 flipscreen3d.o: $(srcdir)/gltrackball.h
 flipscreen3d.o: $(srcdir)/grab-ximage.h
@@ -641,15 +661,19 @@ flurry.o: ../../config.h
 flurry.o: $(srcdir)/flurry.h
 flurry.o: $(srcdir)/gltrackball.h
 flurry.o: $(srcdir)/rotator.h
 flurry.o: $(srcdir)/flurry.h
 flurry.o: $(srcdir)/gltrackball.h
 flurry.o: $(srcdir)/rotator.h
+flurry-smoke.o: ../../config.h
 flurry-smoke.o: $(srcdir)/flurry.h
 flurry-smoke.o: $(srcdir)/gltrackball.h
 flurry-smoke.o: $(srcdir)/rotator.h
 flurry-smoke.o: $(srcdir)/flurry.h
 flurry-smoke.o: $(srcdir)/gltrackball.h
 flurry-smoke.o: $(srcdir)/rotator.h
+flurry-spark.o: ../../config.h
 flurry-spark.o: $(srcdir)/flurry.h
 flurry-spark.o: $(srcdir)/gltrackball.h
 flurry-spark.o: $(srcdir)/rotator.h
 flurry-spark.o: $(srcdir)/flurry.h
 flurry-spark.o: $(srcdir)/gltrackball.h
 flurry-spark.o: $(srcdir)/rotator.h
+flurry-star.o: ../../config.h
 flurry-star.o: $(srcdir)/flurry.h
 flurry-star.o: $(srcdir)/gltrackball.h
 flurry-star.o: $(srcdir)/rotator.h
 flurry-star.o: $(srcdir)/flurry.h
 flurry-star.o: $(srcdir)/gltrackball.h
 flurry-star.o: $(srcdir)/rotator.h
+flurry-texture.o: ../../config.h
 flurry-texture.o: $(srcdir)/flurry.h
 flurry-texture.o: $(srcdir)/gltrackball.h
 flurry-texture.o: $(srcdir)/rotator.h
 flurry-texture.o: $(srcdir)/flurry.h
 flurry-texture.o: $(srcdir)/gltrackball.h
 flurry-texture.o: $(srcdir)/rotator.h
@@ -743,6 +767,7 @@ morph3d.o: ../../config.h
 pipeobjs.o: $(srcdir)/buildlwo.h
 pipes.o: $(srcdir)/buildlwo.h
 pipes.o: ../../config.h
 pipeobjs.o: $(srcdir)/buildlwo.h
 pipes.o: $(srcdir)/buildlwo.h
 pipes.o: ../../config.h
+polytopes.o: ../../config.h
 pulsar.o: ../../config.h
 pulsar.o: $(srcdir)/xpm-ximage.h
 queens.o: ../../config.h
 pulsar.o: ../../config.h
 pulsar.o: $(srcdir)/xpm-ximage.h
 queens.o: ../../config.h
diff --git a/hacks/glx/ants.h b/hacks/glx/ants.h
new file mode 100644 (file)
index 0000000..e3746f6
--- /dev/null
@@ -0,0 +1,45 @@
+/* ants.h -- header file containing common ant parameters
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * This file is provided AS IS with no warranties of any kind.  The author
+ * shall have no liability with respect to the infringement of copyrights,
+ * trade secrets or any patents by this file or any part thereof.  In no
+ * event will the author be liable for any lost revenue or profits or
+ * other special, indirect and consequential damages.
+ *
+ * Copyright 2003 Blair Tennessy
+*/
+
+static GLfloat MaterialRed[] = {0.6, 0.0, 0.0, 1.0};
+/*static GLfloat MaterialPurple[] = {0.6, 0.2, 0.5, 1.0};*/
+/*static GLfloat MaterialOrange[] = {1.0, 0.69, 0.00, 1.0};*/
+/*static GLfloat MaterialGreen[] = {0.1, 0.5, 0.2, 0.2};*/
+/*static GLfloat MaterialBlue[] = {0.4, 0.4, 0.8, 1.0};*/
+/*static GLfloat MaterialCyan[] = {0.2, 0.5, 0.7, 1.0};*/
+/*static GLfloat MaterialYellow[] = {0.7, 0.7, 0.0, 1.0};*/
+static GLfloat MaterialMagenta[] = {0.6, 0.2, 0.5, 1.0};
+/*static GLfloat MaterialWhite[] = {0.7, 0.7, 0.7, 1.0};*/
+static GLfloat MaterialGray[] = {0.2, 0.2, 0.2, 1.0};
+static GLfloat MaterialGrayB[] = {0.1, 0.1, 0.1, 0.5};
+/*static GLfloat MaterialGray35[] = {0.30, 0.30, 0.30, 1.0};*/
+
+static GLfloat MaterialGray5[] = {0.5, 0.5, 0.5, 1.0};
+static GLfloat MaterialGray6[] = {0.6, 0.6, 0.6, 1.0};
+static GLfloat MaterialGray8[] = {0.8, 0.8, 0.8, 1.0};
+
+typedef struct {
+
+  double position[3];
+  double goal[3];
+  double velocity;
+  double direction;
+  double step;
+
+  GLfloat *material;
+
+} Ant;
diff --git a/hacks/glx/antspotlight.c b/hacks/glx/antspotlight.c
new file mode 100644 (file)
index 0000000..e6f173a
--- /dev/null
@@ -0,0 +1,763 @@
+/*
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * This file is provided AS IS with no warranties of any kind.  The author
+ * shall have no liability with respect to the infringement of copyrights,
+ * trade secrets or any patents by this file or any part thereof.  In no
+ * event will the author be liable for any lost revenue or profits or
+ * other special, indirect and consequential damages.
+ *
+ * Copyright 2003 Blair Tennessy
+ */
+
+#include <X11/Intrinsic.h>
+
+#ifdef STANDALONE
+#define PROGCLASS          "AntSpotlight"
+#define HACK_INIT          init_antspotlight
+#define HACK_DRAW          draw_antspotlight
+#define HACK_RESHAPE       reshape_antspotlight
+#define HACK_HANDLE_EVENT   antspotlight_handle_event
+#define EVENT_MASK         PointerMotionMask
+#define antspotlight_opts          xlockmore_opts
+#define DEFAULTS           "*delay:   20000   \n" \
+                           "*showFPS: False   \n"
+
+#include "xlockmore.h"
+#else
+#include "xlock.h"
+#endif
+
+#include <GL/glu.h>
+#include "rotator.h"
+#include "gltrackball.h"
+
+ModeSpecOpt antspotlight_opts = {
+  0, NULL, 0, NULL, NULL
+};
+
+#ifdef USE_MODULES
+ModStruct   antspotlight_description = {
+  "antspotlight", "init_antspotlight", "draw_antspotlight", 
+  "release_antspotlight", "draw_antspotlight", "change_antspotlight", 
+  (char *) NULL, &antspotlight_opts, 1000, 1, 1, 1, 4, 1.0, "",
+  "draws an ant scoping the screen", 0, NULL
+};
+#endif
+
+#define Scale4Window               0.3
+#define Scale4Iconic               0.4
+
+#define sqr(A)                     ((A)*(A))
+
+#ifndef Pi
+#define Pi M_PI
+#endif
+
+int winw, winh;
+int tw, th; /* texture width, height */
+int tx, ty;
+GLfloat max_tx, max_ty;
+#define QW 12
+#define QH 12
+GLfloat qw = QW, qh = QH; /* for the quad we'll draw */
+GLfloat qx = -6 , qy = 6;
+int mono = 0, wire = 0, ticks = 0;
+
+typedef struct {
+  GLint       WindH, WindW;
+  GLXContext *glx_context;
+  rotator    *rot;
+  trackball_state *trackball;
+  Bool        button_down_p;
+} antspotlightstruct;
+
+#include "ants.h"
+#include "grab-ximage.h"
+
+static antspotlightstruct *antspotlight = (antspotlightstruct *) NULL;
+
+#define NUM_SCENES      2
+
+/* draw method for ant */
+Bool draw_ant(float *Material, int mono, int shadow, 
+             float ant_step, Bool (*sphere)(float), Bool (*cone)(float)) {
+  
+  float cos1 = cos(ant_step);
+  float cos2 = cos(ant_step + 2 * Pi / 3);
+  float cos3 = cos(ant_step + 4 * Pi / 3);
+  float sin1 = sin(ant_step);
+  float sin2 = sin(ant_step + 2 * Pi / 3);
+  float sin3 = sin(ant_step + 4 * Pi / 3);
+  
+  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mono ? MaterialGray5 : Material);
+  glEnable(GL_CULL_FACE);
+  glPushMatrix();
+  glScalef(1, 1.3, 1);
+  if(!((*sphere)(0.18)))
+    return False;
+  glScalef(1, 1 / 1.3, 1);
+  glTranslatef(0.00, 0.30, 0.00);
+  if(!((*sphere)(0.2)))
+    return False;
+  
+  glTranslatef(-0.05, 0.17, 0.05);
+  glRotatef(-90, 1, 0, 0);
+  glRotatef(-25, 0, 1, 0);
+  if(!((*cone)(0.05)))
+    return False;
+  glTranslatef(0.00, 0.10, 0.00);
+  if(!((*cone)(0.05)))
+    return False;
+  glRotatef(25, 0, 1, 0);
+  glRotatef(90, 1, 0, 0);
+  
+  glScalef(1, 1.3, 1);
+  glTranslatef(0.15, -0.65, 0.05);
+  if(!((*sphere)(0.25)))
+    return False;
+  glScalef(1, 1 / 1.3, 1);
+  glPopMatrix();
+  glDisable(GL_CULL_FACE);
+  
+  glDisable(GL_LIGHTING);
+  
+  /* ANTENNAS */
+  glBegin(GL_LINES);
+  glColor3fv(mono ? MaterialGray5 : Material);
+  glVertex3f(0.00, 0.30, 0.00);
+  glColor3fv(MaterialGray);
+  glVertex3f(0.40, 0.70, 0.40);
+  glColor3fv(mono ? MaterialGray5 : Material);
+  glVertex3f(0.00, 0.30, 0.00);
+  glColor3fv(MaterialGray);
+  glVertex3f(0.40, 0.70, -0.40);
+  glEnd();
+
+  if(!shadow) {
+    glBegin(GL_POINTS);
+    glColor3fv(mono ? MaterialGray6 : MaterialRed);
+    glVertex3f(0.40, 0.70, 0.40);
+    glVertex3f(0.40, 0.70, -0.40);
+    glEnd();
+  }
+
+  /* LEFT-FRONT ARM */
+  glBegin(GL_LINE_STRIP);
+  glColor3fv(mono ? MaterialGray5 : Material);
+  glVertex3f(0.00, 0.05, 0.18);
+  glVertex3f(0.35 + 0.05 * cos1, 0.15, 0.25);
+  glColor3fv(MaterialGray);
+  glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45);
+  glEnd();
+
+  /* LEFT-CENTER ARM */
+  glBegin(GL_LINE_STRIP);
+  glColor3fv(mono ? MaterialGray5 : Material);
+  glVertex3f(0.00, 0.00, 0.18);
+  glVertex3f(0.35 + 0.05 * cos2, 0.00, 0.25);
+  glColor3fv(MaterialGray);
+  glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45);
+  glEnd();
+
+  /* LEFT-BACK ARM */
+  glBegin(GL_LINE_STRIP);
+  glColor3fv(mono ? MaterialGray5 : Material);
+  glVertex3f(0.00, -0.05, 0.18);
+  glVertex3f(0.35 + 0.05 * cos3, -0.15, 0.25);
+  glColor3fv(MaterialGray);
+  glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45);
+  glEnd();
+
+  /* RIGHT-FRONT ARM */
+  glBegin(GL_LINE_STRIP);
+  glColor3fv(mono ? MaterialGray5 : Material);
+  glVertex3f(0.00, 0.05, -0.18);
+  glVertex3f(0.35 - 0.05 * sin1, 0.15, -0.25);
+  glColor3fv(MaterialGray);
+  glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45);
+  glEnd();
+
+  /* RIGHT-CENTER ARM */
+  glBegin(GL_LINE_STRIP);
+  glColor3fv(mono ? MaterialGray5 : Material);
+  glVertex3f(0.00, 0.00, -0.18);
+  glVertex3f(0.35 - 0.05 * sin2, 0.00, -0.25);
+  glColor3fv(MaterialGray);
+  glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45);
+  glEnd();
+
+  /* RIGHT-BACK ARM */
+  glBegin(GL_LINE_STRIP);
+  glColor3fv(mono ? MaterialGray5 : Material);
+  glVertex3f(0.00, -0.05, -0.18);
+  glVertex3f(0.35 - 0.05 * sin3, -0.15, -0.25);
+  glColor3fv(MaterialGray);
+  glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45);
+  glEnd();
+
+  if(!shadow) {
+    glBegin(GL_POINTS);
+    if(mono)
+      glColor3fv(MaterialGray8);
+    else
+      glColor3fv(MaterialMagenta);
+    glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45);
+    glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45);
+    glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45);
+    glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45);
+    glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45);
+    glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45);
+    glEnd();
+  }
+
+  glEnable(GL_LIGHTING);
+
+  return True;
+}
+
+/* filled sphere */
+static Bool mySphere(float radius) {
+  GLUquadricObj *quadObj;
+  
+  if((quadObj = gluNewQuadric()) == 0)
+    return False;
+
+  gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL);
+  gluSphere(quadObj, radius, 16, 16);
+  gluDeleteQuadric(quadObj);
+
+  return True;
+}
+
+/* silhouette sphere */
+static Bool mySphere2(float radius) {
+  GLUquadricObj *quadObj;
+
+  if((quadObj = gluNewQuadric()) == 0)
+       return False;
+  gluQuadricDrawStyle(quadObj, (GLenum) GLU_SILHOUETTE);
+  gluSphere(quadObj, radius, 16, 8);
+  gluDeleteQuadric(quadObj);
+
+  return True;
+}
+
+/* no cone */
+static Bool myCone2(float radius) { return True; }
+
+Ant *ant;
+
+double boardsize = 8.0;
+#define BOARDLIST 1
+
+GLfloat spot_direction[3];
+
+void draw_board(void) {
+  int i, j;
+  double cutoff = Pi/3.0;
+  double center[3];
+  double centertex[2];
+
+  glEnable(GL_TEXTURE_2D);
+  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray6);
+
+  /* draw mesh */
+
+  /* center is roughly spotlight position */
+  center[0] = ant->position[0];/* + cos(ant->direction); */
+  center[1] = 0.0;
+  center[2] = ant->position[2];/* - 0.7*sin(ant->direction);*/
+
+  centertex[0] = (boardsize/2.0+center[0]) * max_tx / boardsize;
+  centertex[1] = max_ty - ((boardsize/2.0+center[2]) * max_ty / boardsize);
+
+/*   glPolygonMode(GL_FRONT, GL_LINE); */
+/*   glDisable(GL_TEXTURE_2D); */
+
+  /* 
+     the vertices determined here should correspond to the illuminated
+     board.  ideally the code adapts vertex distribution to the
+     intensity and shape of the light.
+     
+     i should be finding the intersection of the cone of light and
+     the board-plane.
+  */
+  for(i = -8; i < 8; ++i) {
+
+    double theta1, theta2;
+
+    glBegin(GL_TRIANGLE_STRIP);
+    glNormal3f(0.0, 1.0, 0.0);
+    glTexCoord2f(centertex[0], centertex[1]);
+    glVertex3f(center[0], 0.01, center[2]);
+
+    /* watch those constants */
+    theta1 = ant->direction + i*(cutoff/8);
+    theta2 = ant->direction + (i+1)*(cutoff/8);
+
+    for(j = 1; j <= 40; ++j) {
+      double point[3], tex[2];
+      /* double fj = pow(1.05, j) - 1.0;*/
+      double fj = j / 6.0;
+      point[0] = center[0] + fj*cos(theta1);
+      point[1] = 0.0;
+      point[2] = center[2] - fj*sin(theta1);
+
+      tex[0] = (boardsize/2.0+point[0]) * max_tx / boardsize;
+      tex[1] = max_ty - ((boardsize/2.0+point[2]) * max_ty / boardsize);
+
+      glTexCoord2f(tex[0], tex[1]);
+      glVertex3f(point[0], point[1], point[2]);
+
+      point[0] = center[0] + fj*cos(theta2);
+      point[1] = 0.0;
+      point[2] = center[2] - fj*sin(theta2);
+
+      tex[0] = (boardsize/2.0+point[0]) * max_tx / boardsize;
+      tex[1] = max_ty - ((boardsize/2.0+point[2]) * max_ty / boardsize);
+
+      glTexCoord2f(tex[0], tex[1]);
+      glVertex3f(point[0], point[1], point[2]);
+    }
+
+    glEnd();
+  }
+
+  glDisable(GL_TEXTURE_2D);
+}
+
+/* return euclidean distance between two points */
+double distance(double x[3], double y[3]) {
+  double dx = x[0] - y[0];
+  double dz = x[2] - y[2];
+  return sqrt(dx*dx + dz*dz);
+}
+
+/* determine a new goal */
+void find_goal(void) {
+  do {
+    ant->goal[0] = random()%((int)(boardsize+0.5)-2) - boardsize/2.0 + 1.0;
+    ant->goal[1] = 0.0;
+    ant->goal[2] = random()%((int)(boardsize+0.5)-2) - boardsize/2.0 + 1.0;
+  }
+  while(distance(ant->position, ant->goal) < 1.0);
+}
+
+/* construct our ant */
+void build_ant(void) {
+  ant = (Ant *) malloc(sizeof (Ant));
+  ant->position[0] = 0.0;
+  ant->position[1] = 0.0;
+  ant->position[2] = 0.0;
+  ant->direction = 0.0;
+  ant->velocity = 0.02;
+  ant->material = MaterialGray5;
+  find_goal();
+}
+
+#define EPSILON 0.01
+
+double sign(double d) {
+  return d < 0.0 ? -1.0 : 1.0;
+}
+
+double min(double a, double b) {
+  return a < b ? a : b;
+}
+
+double max(double a, double b) {
+  return a > b ? a : b;
+}
+
+/* find a new goal and reset steps */
+void reset_ant(void) {
+  find_goal();
+}
+
+/* draw ant composed of skeleton and glass */
+void show_ant(void) {
+
+  glPushMatrix();
+
+  /* move into position */
+  glTranslatef(ant->position[0], 0.33, ant->position[2]);
+  glRotatef(180.0 + ant->direction*180.0/Pi, 0.0, 1.0, 0.0);
+  glRotatef(90.0, 0.0, 0.0, 1.0);
+
+  /* draw skeleton */
+  draw_ant(ant->material, mono, 0, ant->step, mySphere2, myCone2);
+
+  /* draw glass */
+  if(!wire && !mono) {
+    glEnable(GL_BLEND);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGrayB);
+    glColor4fv(MaterialGrayB);
+    draw_ant(MaterialGrayB, mono, 0, ant->step, mySphere, myCone2);
+    glDisable(GL_BLEND);
+  }
+
+  glPopMatrix();
+}
+
+void draw_antspotlight_strip(ModeInfo *mi) {
+
+  /* compute spotlight position and direction */
+  GLfloat light1_position[4];
+
+  light1_position[0] = ant->position[0] + 0.7*cos(ant->direction);
+  light1_position[1] = 0.5;
+  light1_position[2] = ant->position[2] - 0.7*sin(ant->direction);
+  light1_position[3] = 1.0;
+
+  spot_direction[0] = cos(ant->direction);
+  spot_direction[1] = -0.5;
+  spot_direction[2] = -sin(ant->direction);
+
+  glLightfv(GL_LIGHT2, GL_POSITION, light1_position);
+  glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, spot_direction);
+  
+  glEnable(GL_LIGHT2);
+  glDisable(GL_LIGHT0);
+  glDisable(GL_LIGHT1);
+
+  /* draw board */
+  if(wire)
+    ;
+  else
+    draw_board();
+/*     glCallList(BOARDLIST); */
+
+  glDisable(GL_LIGHT2);
+  glEnable(GL_LIGHT0);
+  glEnable(GL_LIGHT1);
+  
+  /* now modify ant */
+  show_ant();
+
+  /* near goal, bend path towards next step */
+  if(distance(ant->position, ant->goal) < 0.2) {
+    reset_ant();
+  }
+
+  /* move toward goal, correct ant direction if required */
+  else {
+    
+    /* difference */
+    double dx = ant->goal[0] - ant->position[0];
+    double dz = -(ant->goal[2] - ant->position[2]);
+    double theta, ideal, dt;
+    
+    if(fabs(dx) > EPSILON) {
+      theta = atan(dz/dx);
+      if(dx < 0.0)
+       theta += Pi;
+    }
+    else
+      theta = dz > 0.0 ? (1.0/2.0)*Pi : (3.0/2.0)*Pi;
+    
+    if(theta < 0.0)
+      theta += 2*Pi;
+    
+    ideal = theta - ant->direction;
+    if(ideal > Pi)
+      ideal -= 2*Pi;
+    
+    /* compute correction */
+    dt = sign(ideal) * min(fabs(ideal), Pi/100.0);
+    ant->direction += dt;
+    while(ant->direction < 0.0)
+      ant->direction += 2*Pi;
+    while(ant->direction > 2*Pi)
+      ant->direction -= 2*Pi;
+  }
+
+  ant->position[0] += ant->velocity * cos(ant->direction);
+  ant->position[2] += ant->velocity * sin(-ant->direction);
+  ant->step += 10*ant->velocity;
+}
+
+void reshape_antspotlight(ModeInfo * mi, int width, int height) {
+  double h = (GLfloat) height / (GLfloat) width;  
+  int size = 2;
+  antspotlightstruct *mp = &antspotlight[MI_SCREEN(mi)];
+
+  glViewport(0, 0, mp->WindW = (GLint) width, mp->WindH = (GLint) height);
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+
+  gluPerspective(45, 1/h, 1.0, 25.0);
+
+  glMatrixMode(GL_MODELVIEW);
+  glLineWidth(size);
+  glPointSize(size);
+}
+
+/* lighting variables */
+GLfloat front_shininess[] = {60.0};
+GLfloat front_specular[] = {0.8, 0.8, 0.8, 1.0};
+GLfloat ambient[] = {0.4, 0.4, 0.4, 1.0};
+GLfloat ambient2[] = {0.0, 0.0, 0.0, 0.0};
+GLfloat diffuse[] = {1.0, 1.0, 1.0, 1.0};
+GLfloat position0[] = {1.0, 5.0, 1.0, 0.0};
+GLfloat position1[] = {-1.0, -5.0, 1.0, 0.0};
+GLfloat lmodel_ambient[] = {0.8, 0.8, 0.8, 1.0};
+GLfloat lmodel_twoside[] = {GL_TRUE};
+GLfloat spotlight_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
+GLfloat spotlight_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
+
+static void pinit(void) {
+  glClearDepth(1.0);
+  glClearColor(0.0, 0.0, 0.0, 1.0);
+  
+  /* setup twoside lighting */
+  glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+  glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
+  glLightfv(GL_LIGHT0, GL_POSITION, position0);
+  glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
+  glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
+  glLightfv(GL_LIGHT1, GL_POSITION, position1);
+/*   glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); */
+  glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
+  glEnable(GL_LIGHTING);
+  glEnable(GL_LIGHT0);
+  glEnable(GL_LIGHT1);
+
+  /* setup spotlight */
+  glLightfv(GL_LIGHT2, GL_AMBIENT, spotlight_ambient);
+  glLightfv(GL_LIGHT2, GL_DIFFUSE, spotlight_diffuse);
+  glLightf(GL_LIGHT2, GL_CONSTANT_ATTENUATION, 0.1);
+  glLightf(GL_LIGHT2, GL_LINEAR_ATTENUATION, 0.05);
+  glLightf(GL_LIGHT2, GL_QUADRATIC_ATTENUATION, 0.0);
+  glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 60.0);
+  glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 3.0);
+
+  glEnable(GL_NORMALIZE);
+  glFrontFace(GL_CCW);
+  glCullFace(GL_BACK);
+
+  /* setup material properties */
+  glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess);
+  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular);
+
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+  glShadeModel(GL_SMOOTH);
+/*   glShadeModel(GL_FLAT); */
+  glEnable(GL_DEPTH_TEST);
+}
+
+/* cleanup routine */
+void release_antspotlight(ModeInfo * mi) {
+
+  if(antspotlight) {
+    free((void *) antspotlight);
+    antspotlight = (antspotlightstruct *) NULL;
+  }
+
+  FreeAllGL(mi);
+}
+
+int mag = 1;
+#define MAX_MAGNIFICATION 10
+#define max(a, b) a < b ? b : a
+#define min(a, b) a < b ? a : b
+
+/* event handling */
+Bool antspotlight_handle_event(ModeInfo *mi, XEvent *event) {
+  antspotlightstruct *mp = &antspotlight[MI_SCREEN(mi)];
+
+  switch(event->xany.type) {
+  case ButtonPress:
+
+    switch(event->xbutton.button) {
+
+    case Button1:
+      mp->button_down_p = True;
+      gltrackball_start(mp->trackball, 
+                       event->xbutton.x, event->xbutton.y,
+                       MI_WIDTH (mi), MI_HEIGHT (mi));
+      break;
+      
+    case Button4:
+      mag = max(mag-1, 1);
+      break;
+
+    case Button5:
+      mag = min(mag+1, MAX_MAGNIFICATION);
+      break;
+    }
+
+    break;
+    
+  case ButtonRelease:
+
+    switch(event->xbutton.button) {
+    case Button1:
+      mp->button_down_p = False;
+      break;
+    }
+
+    break;
+
+  case MotionNotify:
+    if(mp->button_down_p)
+      gltrackball_track(mp->trackball,
+                       event->xmotion.x, event->xmotion.y,
+                       MI_WIDTH (mi), MI_HEIGHT (mi));
+    break;
+    
+  default:
+    return False;
+  }
+
+  return True;
+}
+
+/* get screenshot */
+void get_snapshot(ModeInfo *modeinfo) {
+  XImage *ximage;
+  int status;
+
+  if(MI_IS_WIREFRAME(modeinfo))
+    return;
+
+  ximage = screen_to_ximage(modeinfo->xgwa.screen, modeinfo->window);
+
+  qw = QW; qh = QH;
+  tw = modeinfo->xgwa.width;
+  th = modeinfo->xgwa.height;
+  
+#if 0  /* jwz: this makes the image start off the bottom right of the screen */
+  qx += (qw*tw/winw);
+  qy -= (qh*th/winh);
+#endif
+
+  qw *= (GLfloat)tw/winw;
+  qh *= (GLfloat)th/winh;
+
+  max_tx = (GLfloat) tw / (GLfloat) ximage->width;
+  max_ty = (GLfloat) th / (GLfloat) ximage->height;
+
+  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+                  GL_LINEAR_MIPMAP_LINEAR);
+  
+  clear_gl_error();
+  status = gluBuild2DMipmaps(GL_TEXTURE_2D, 3,
+                            ximage->width, ximage->height,
+                            GL_RGBA, GL_UNSIGNED_BYTE, ximage->data);
+  
+  if (!status && glGetError())
+    /* Some implementations of gluBuild2DMipmaps(), but set a GL error anyway.
+       We could just call check_gl_error(), but that would exit. */
+    status = -1;
+  
+  if(status) {
+    const unsigned char *s = gluErrorString(status);
+    fprintf(stderr, "%s: error mipmapping %dx%d texture: %s\n",
+           progname, ximage->width, ximage->height,
+           (s ? s : (unsigned char *) "(unknown)"));
+    fprintf(stderr, "%s: turning on -wireframe.\n", progname);
+    MI_IS_WIREFRAME(modeinfo) = 1;
+    clear_gl_error();
+  }
+  check_gl_error("mipmapping");  /* should get a return code instead of a
+                                   GL error, but just in case... */
+  
+  free(ximage->data);
+  ximage->data = 0;
+  XDestroyImage (ximage);
+}
+
+void init_antspotlight(ModeInfo *mi) {
+  double rot_speed = 0.3;
+
+  antspotlightstruct *mp;
+  
+  if(!antspotlight) {
+    if((antspotlight = (antspotlightstruct *) 
+       calloc(MI_NUM_SCREENS(mi), sizeof (antspotlightstruct))) == NULL)
+      return;
+  }
+  mp = &antspotlight[MI_SCREEN(mi)];
+  mp->rot = make_rotator (rot_speed, rot_speed, rot_speed, 1, 0, True);
+  mp->trackball = gltrackball_init ();
+
+  if((mp->glx_context = init_GL(mi)) != NULL) {
+    reshape_antspotlight(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+    glDrawBuffer(GL_BACK);
+    pinit();
+  }
+  else
+    MI_CLEARWINDOW(mi);
+
+  get_snapshot(mi);
+  build_ant();
+  mono = MI_IS_MONO(mi);
+  wire = MI_IS_WIREFRAME(mi);
+
+/*   glNewList(BOARDLIST, GL_COMPILE); */
+/*   draw_board(); */
+/*   glEndList(); */
+}
+
+void draw_antspotlight(ModeInfo * mi) {
+  antspotlightstruct *mp;
+  
+  Display    *display = MI_DISPLAY(mi);
+  Window      window = MI_WINDOW(mi);
+  
+  if(!antspotlight)
+       return;
+  mp = &antspotlight[MI_SCREEN(mi)];
+  
+  MI_IS_DRAWN(mi) = True;
+  
+  if(!mp->glx_context)
+       return;
+  
+  glXMakeCurrent(display, window, *(mp->glx_context));
+  
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+  
+  glPushMatrix();
+
+  /* position camera */
+
+  /* follow focused ant */
+  glTranslatef(0.0, 0.0, -10.0 - mag);
+  glRotatef(35.0, 1.0, 0.0, 0.0);
+  gltrackball_rotate(mp->trackball);
+  glTranslatef(-ant->position[0], ant->position[1], -ant->position[2]);
+
+  /* stable position */
+/*   glTranslatef(0.0, 0.0, -10.0 - mag); */
+/*   gltrackball_rotate(mp->trackball); */
+/*   glRotatef(40.0, 1.0, 0.0, 0.0); */
+/*   glRotatef(20.0, 0.0, 1.0, 0.0); */
+
+  draw_antspotlight_strip(mi);
+
+  ++ticks;
+  
+  glPopMatrix();
+  
+  if (MI_IS_FPS(mi)) do_fps (mi);
+  glFlush();
+  
+  glXSwapBuffers(display, window);
+}
+
+void change_antspotlight(ModeInfo * mi) {
+  antspotlightstruct *mp = &antspotlight[MI_SCREEN(mi)];
+  
+  if (!mp->glx_context)
+       return;
+  
+  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context));
+  pinit();
+}
diff --git a/hacks/glx/antspotlight.man b/hacks/glx/antspotlight.man
new file mode 100644 (file)
index 0000000..f3c8f53
--- /dev/null
@@ -0,0 +1,54 @@
+.TH XScreenSaver 1 "July 2003"
+.SH NAME
+antspotlight \- ant spotlight screenhack
+.SH SYNOPSIS
+.B antspotlight
+[\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install]
+[\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps]
+.SH DESCRIPTION
+The \fIantspotlight\fP code displays a single ant spotting out a screenshot.
+.SH OPTIONS
+.I antspotlight
+accepts the following options:
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-install
+Install a private colormap for the window.
+.TP 8
+.B \-visual \fIvisual\fP\fP
+Specify which visual to use.  Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.B \-fps
+Display a running tally of how many frames per second are being rendered.
+In conjunction with \fB\-delay 0\fP, this can be a useful benchmark of 
+your GL performance.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.BR xscreensaver\-demo (1),
+.BR xscreensaver\-getimage (1)
+.SH COPYRIGHT
+Copyright \(co 2003 by Blair Tennessy.  Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation.  No representations are made about the
+suitability of this software for any purpose.  It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Blair Tennessy <tennessb@unbc.ca>, 20-July-2003.
index d37998954977d62cd442aab77f5209bf329ea5c8..e7fc50f1d7d00f00c1e7e05f2aeba865168a26d2 100644 (file)
@@ -1,7 +1,7 @@
 /* atlantis --- Shows moving 3D sea animals */
 
 #if !defined( lint ) && !defined( SABER )
 /* atlantis --- Shows moving 3D sea animals */
 
 #if !defined( lint ) && !defined( SABER )
-static const char sccsid[] = "@(#)atlantis.c   1.3 98/06/18 xlockmore";
+static const char sccsid[] = "@(#)atlantis.c   5.08 2003/04/09 xlockmore";
 
 #endif
 
 
 #endif
 
@@ -30,7 +30,7 @@ static const char sccsid[] = "@(#)atlantis.c  1.3 98/06/18 xlockmore";
  * Thanks goes also to Brian Paul for making it possible and inexpensive
  * to use OpenGL at home.
  *
  * Thanks goes also to Brian Paul for making it possible and inexpensive
  * to use OpenGL at home.
  *
- * My e-mail address is lassauge@sagem.fr
+ * My e-mail address is lassauge@mail.dotcom.fr
  *
  * Eric Lassauge  (May-13-1998)
  *
  *
  * Eric Lassauge  (May-13-1998)
  *
@@ -201,7 +201,7 @@ InitFishs(atlantisstruct * ap)
                ap->sharks[i].v = 1.0;
        }
 
                ap->sharks[i].v = 1.0;
        }
 
-       /* Random whae direction */
+       /* Random whale direction */
        ap->whaledir = LRAND() & 1;
 
        ap->dolph.x = 30000.0;
        ap->whaledir = LRAND() & 1;
 
        ap->dolph.x = 30000.0;
@@ -249,6 +249,7 @@ Init(ModeInfo *mi)
        {0.4, 0.4, 0.4, 1.0};
        static float lmodel_localviewer[] =
        {0.0};
        {0.4, 0.4, 0.4, 1.0};
        static float lmodel_localviewer[] =
        {0.0};
+       float        fblue = 0.0, fgreen;
 
        glFrontFace(GL_CCW);
 
 
        glFrontFace(GL_CCW);
 
@@ -325,7 +326,10 @@ Init(ModeInfo *mi)
 
        InitFishs(ap);
 
 
        InitFishs(ap);
 
-       glClearColor(0.0, 0.39, 0.7, 0.0);
+       /* Add a little randomness */
+       fblue = ((float) (NRAND(30)) / 100.0) + 0.70;
+       fgreen = fblue * 0.56;
+       glClearColor(0.0, fgreen, fblue, 0.0);
 }
 
 void
 }
 
 void
@@ -360,10 +364,10 @@ clear_tank (atlantisstruct * ap)
 
   if (do_gradient && !ap->wire)
     {
 
   if (do_gradient && !ap->wire)
     {
-      static GLint gradient_list = -1;
-      static GLint gradient_tex = -1;
+      static GLuint gradient_list = 0;
+      static GLuint gradient_tex = 0;
 
 
-      if (gradient_list == -1)
+      if (gradient_list == 0)
         {
           unsigned char *pixels = 0;
           int start = 64;
         {
           unsigned char *pixels = 0;
           int start = 64;
index 2542973a9e047cce05b042b6ff434f19194a1531..b16e0d3824a93696b1ab785fb0dff8410ef3402b 100644 (file)
@@ -135,7 +135,7 @@ static Bool LoadGLTextures(ModeInfo *mi)
     glGenTextures(1, &envTexture);
     glBindTexture(GL_TEXTURE_2D, envTexture);
     texti = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi),
     glGenTextures(1, &envTexture);
     glBindTexture(GL_TEXTURE_2D, envTexture);
     texti = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi),
-                          envImage_xpm);
+                          blocktube_xpm);
     if (!texti) {
         status = False;
     } else {
     if (!texti) {
         status = False;
     } else {
index cdf04a52a80744b01c39315fd7fab1c80c5ea83a..3159a2438a60364c2280a565330b548f154e727a 100644 (file)
@@ -1092,7 +1092,7 @@ pinit(ModeInfo * mi)
                          GL_RGB, GL_UNSIGNED_BYTE, gp->tex1);
    if (i)
      {
                          GL_RGB, GL_UNSIGNED_BYTE, gp->tex1);
    if (i)
      {
-       const char *s = gluErrorString (i);
+       const char *s = (char *) gluErrorString (i);
        fprintf (stderr, "%s: error mipmapping texture: %s\n",
                 progname, (s ? s : "(unknown)"));
        exit (1);
        fprintf (stderr, "%s: error mipmapping texture: %s\n",
                 progname, (s ? s : "(unknown)"));
        exit (1);
index cab42a2f6a47f1ec9ee7da061740bcecf14d0b8e..fd9b5e14925308b75bb97325b0cbc3cda08485cb 100644 (file)
@@ -11,6 +11,11 @@ static unsigned int height = 256;
   pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \
   data += 4;
 
   pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \
   data += 4;
 
+# ifdef __GNUC__
+  __extension__  /* don't warn about "string length is greater than the length
+                    ISO C89 compilers are required to support" when including
+                    the following constant data... */
+# endif
 static char *header_data =
        "!FY'\"&Q#!&M!!VM-!6Y(!&M##6Q&\"69%\"FU'!FE!!VM$!VI$!&M!!FM#!VU&!'!!"
        "\"&M%#&M!\"6Q$\"')#!FY#\"FY%\"6Y\"\"&Y#\"6]$\"&U!\"G%!\"7%&!G)!!'-!!')!\"'=!"
 static char *header_data =
        "!FY'\"&Q#!&M!!VM-!6Y(!&M##6Q&\"69%\"FU'!FE!!VM$!VI$!&M!!FM#!VU&!'!!"
        "\"&M%#&M!\"6Q$\"')#!FY#\"FY%\"6Y\"\"&Y#\"6]$\"&U!\"G%!\"7%&!G)!!'-!!')!\"'=!"
index f8965441807b8df00729e9bccc77df8644725a36..18c2bda5381be14e269b2d72c60ae0d262340710 100644 (file)
@@ -357,7 +357,7 @@ pinit(ModeInfo *mi)
                                  GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData);
        if (status)
          {
                                  GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData);
        if (status)
          {
-               const char *s = gluErrorString (status);
+               const char *s = (char *) gluErrorString (status);
                fprintf (stderr, "%s: error mipmapping texture: %s\n",
                                 progname, (s ? s : "(unknown)"));
                exit (1);
                fprintf (stderr, "%s: error mipmapping texture: %s\n",
                                 progname, (s ? s : "(unknown)"));
                exit (1);
index 039d2fed64d64162983a1aea0fdc4a3fbfc39f51..7b55956abec948f1e66bdbd67dcbf0fcba3dbc1d 100644 (file)
@@ -241,7 +241,7 @@ static const char * smctypes[] = {
 typedef struct {
   int type; /* package type. 0 = to-92, 1 = to-220 */
   GLfloat tw, th; /* texture dimensions */
 typedef struct {
   int type; /* package type. 0 = to-92, 1 = to-220 */
   GLfloat tw, th; /* texture dimensions */
-  int tnum; /* texture binding */
+  GLuint tnum; /* texture binding */
 } Transistor;
 
 typedef struct {
 } Transistor;
 
 typedef struct {
@@ -392,7 +392,7 @@ void DrawRCA(RCA *);
 void DrawThreeFive(ThreeFive *);
 void DrawSwitch(Switch *);
 
 void DrawThreeFive(ThreeFive *);
 void DrawSwitch(Switch *);
 
-void freetexture(int);
+void freetexture(GLuint);
 void reorder(Component *[]);
 void circle(float, int,int);
 void bandedCylinder(float, float , GLfloat, GLfloat , GLfloat,  Band **, int);
 void reorder(Component *[]);
 void circle(float, int,int);
 void bandedCylinder(float, float , GLfloat, GLfloat , GLfloat,  Band **, int);
@@ -2002,7 +2002,7 @@ void display(void)
   glFlush();
 }
 
   glFlush();
 }
 
-void freetexture (int texture) {
+void freetexture (GLuint texture) {
   s_refs[texture]--;
   if (s_refs[texture] < 1) {
     glDeleteTextures(1, &texture);
   s_refs[texture]--;
   if (s_refs[texture] < 1) {
     glDeleteTextures(1, &texture);
@@ -2064,7 +2064,7 @@ TexNum * fonttexturealloc (const char *str, float *fg, float *bg)
                              GL_RGBA, GL_UNSIGNED_BYTE, ximage->data);
   if (status)
     {
                              GL_RGBA, GL_UNSIGNED_BYTE, ximage->data);
   if (status)
     {
-      const char *s = gluErrorString (status);
+      const char *s = (char *) gluErrorString (status);
       fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                progname, ximage->width, ximage->height,
                (s ? s : "(unknown)"));
       fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                progname, ximage->width, ximage->height,
                (s ? s : "(unknown)"));
index 7fa06e1bc03fe1826806bb1a19dd319665f5d5db..a7399dd17a3bc26a658c77b6a24a8f3b3ec754db 100644 (file)
@@ -1,4 +1,4 @@
-/* cubenetic, Copyright (c) 2002 Jamie Zawinski <jwz@jwz.org>
+/* cubenetic, Copyright (c) 2002, 2003 Jamie Zawinski <jwz@jwz.org>
  *
  * 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
@@ -324,7 +324,7 @@ init_texture (ModeInfo *mi)
   cc->texture_height = texture_size;
 
   i = texture_size * texture_size * 4;
   cc->texture_height = texture_size;
 
   i = texture_size * texture_size * 4;
-  cc->texture = (char *) malloc (i);
+  cc->texture = (unsigned char *) malloc (i);
   memset (cc->texture, 0xFF, i);
 }
 
   memset (cc->texture, 0xFF, i);
 }
 
index 683486518f98155b1654cfe669557d461d5fdb87..07a82dc4bd08513a5f6955cffc4f8ab6f98c82de 100644 (file)
@@ -273,7 +273,7 @@ void Create_Texture(ModeInfo *mi, const char *filename)
     {
       XImage *ximage = xpm_file_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi),
                                            MI_COLORMAP (mi), filename);
     {
       XImage *ximage = xpm_file_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi),
                                            MI_COLORMAP (mi), filename);
-      image  = ximage->data;
+      image  = (GLubyte *) ximage->data;
       width  = ximage->width;
       height = ximage->height;
       format = GL_RGBA;
       width  = ximage->width;
       height = ximage->height;
       format = GL_RGBA;
@@ -308,7 +308,7 @@ void Create_Texture(ModeInfo *mi, const char *filename)
                                  GL_UNSIGNED_BYTE, image);
       if (status)
         {
                                  GL_UNSIGNED_BYTE, image);
       if (status)
         {
-          const char *s = gluErrorString (status);
+          const char *s = (char *) gluErrorString (status);
           fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                    progname, width, height,
                    (s ? s : "(unknown)"));
           fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                    progname, width, height,
                    (s ? s : "(unknown)"));
diff --git a/hacks/glx/flipflop.c b/hacks/glx/flipflop.c
new file mode 100644 (file)
index 0000000..6e1593d
--- /dev/null
@@ -0,0 +1,588 @@
+/* flipflop, Copyright (c) 2003 Kevin Ogden <kogden1@hotmail.com>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#include <X11/Intrinsic.h>
+
+#include <math.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define BOARDSIZE 9
+#define NUMSQUARES 76
+#define HALFTHICK 0.04
+
+#ifdef STANDALONE
+# define PROGCLASS        "Flipflop"
+# define HACK_INIT        init_flipflop
+# define HACK_DRAW        draw_flipflop
+# define HACK_RESHAPE     reshape_flipflop
+# define HACK_HANDLE_EVENT flipflop_handle_event
+# define EVENT_MASK       PointerMotionMask
+# define flipflop_opts  xlockmore_opts
+
+#define DEFAULTS       "*delay:       20000       \n" \
+                       "*showFPS:       False       \n" \
+                      "*wireframe:     False     \n"
+
+# include "xlockmore.h"
+
+#else
+# include "xlock.h"
+#endif
+
+#ifdef USE_GL
+
+#include <GL/glu.h>
+#include "gltrackball.h"
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+static XrmOptionDescRec opts[] = {
+  {"+rotate", ".flipflop.rotate", XrmoptionNoArg, (caddr_t) "false" },
+  {"-rotate", ".flipflop.rotate", XrmoptionNoArg, (caddr_t) "true" },
+};
+
+
+
+static int rotate, wire, clearbits;
+
+static argtype vars[] = {
+  {(caddr_t *) &rotate, "rotate", "Rotate", "True", t_Bool},
+};
+
+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 {
+  GLXContext *glx_context;
+  Window window;
+  trackball_state *trackball;
+  Bool button_down_p;
+} Flipflopcreen;
+
+static Flipflopcreen *qs = NULL;
+
+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;
+
+
+/*** ADDED RANDSHEET VARS ***/
+
+static randsheet MyRandSheet;
+
+static double theta = 0.0;
+/* amount which the square flips.  1 is a entire flip */
+static float flipspeed = 0.03;
+/* relative distace of camera from center */
+static float reldist = 1;
+/* likelehood a square will attempt a move */
+static float energy = 40;
+
+
+static void randsheet_initialize( randsheet *rs );
+static int randsheet_new_move( 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 drawBoard(void);
+static void display(Flipflopcreen *c);
+static void draw_sheet(void);
+
+
+/* configure lighting */
+static void
+setup_lights(void)
+{
+/*   GLfloat position0[] = { BOARDSIZE*0.5, BOARDSIZE*0.1, BOARDSIZE*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 };
+
+  if (wire) return;
+
+  glEnable(GL_LIGHTING);
+  glLightfv(GL_LIGHT0, GL_POSITION, position0);
+  glEnable(GL_LIGHT0);
+ }
+
+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 == 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(void)
+{
+  int i;
+  for( i=0; i < (energy) ; i++ )
+    randsheet_new_move( &MyRandSheet );
+  randsheet_move( &MyRandSheet, flipspeed * 3.14159 );
+  randsheet_draw( &MyRandSheet );
+}
+
+
+static void
+display(Flipflopcreen *c)
+{
+   GLfloat amb[] = { 0.8, 0.8, 0.8, 1.0 };
+
+
+ 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);
+
+
+  /** setup perspectif */
+  glTranslatef(0.0, 0.0, -reldist*BOARDSIZE);
+  glRotatef(22.5, 1.0, 0.0, 0.0);
+  gltrackball_rotate (c->trackball);
+  glRotatef(theta*100, 0.0, 1.0, 0.0);
+  glTranslatef(-0.5*BOARDSIZE, 0.0, -0.5*BOARDSIZE);
+
+  drawBoard();
+
+  if (!c->button_down_p)
+    theta += .001;
+
+}
+
+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);
+}
+
+void
+init_flipflop(ModeInfo *mi)
+{
+  int screen = MI_SCREEN(mi);
+  Flipflopcreen *c;
+  wire = MI_IS_WIREFRAME(mi);
+
+  if(!qs &&
+     !(qs = (Flipflopcreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Flipflopcreen))))
+    return;
+
+  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);
+
+  glClearColor(0.0, 0.0, 0.0, 0.0);
+
+  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( &MyRandSheet );
+
+
+}
+
+void
+draw_flipflop(ModeInfo *mi)
+{
+  Flipflopcreen *c = &qs[MI_SCREEN(mi)];
+  Window w = MI_WINDOW(mi);
+  Display *disp = MI_DISPLAY(mi);
+
+  if(!c->glx_context)
+    return;
+
+  glXMakeCurrent(disp, w, *(c->glx_context));
+
+  display(c);
+
+  if(mi->fps_p){
+    do_fps(mi);
+  }
+
+  glFinish();
+  glXSwapBuffers(disp, w);
+
+
+}
+
+void
+release_flipflop(ModeInfo *mi)
+{
+  if(qs)
+    free((void *) qs);
+
+  FreeAllGL(MI);
+}
+
+/*** ADDED RANDSHEET FUNCTIONS ***/
+
+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();
+}
+
+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;
+       }
+}
+
+/* Pick and random square and direction and try to move it. */
+/* May not actually move anything, just attempt a random move. */
+/* Returns true if move was sucessful. */
+/* This could probably be implemented faster in a dequeue */
+/* to avoid trying to move a square which is already moving */
+/* but speed is most likely bottlenecked by rendering anyway... */
+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;
+}
+
+/*   move a single frame.  */
+/*   Pass in the angle in rads the square rotates in a frame. */
+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;
+           }
+       }
+}
+
+
+    /* draw all the moving squares  */
+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();
+
+       }
+}
+
+/**** END RANDSHEET FUNCTIONS ***/
+
+#endif
diff --git a/hacks/glx/flipflop.man b/hacks/glx/flipflop.man
new file mode 100644 (file)
index 0000000..1ba6f5c
--- /dev/null
@@ -0,0 +1,61 @@
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+flipflop - draws a grid of 3D squares that change positions
+.SH SYNOPSIS
+.B flipflop
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-holdtime \fInumber\fP]
+[\-changetime \fInumber\fP]
+[\-no-texture]
+[\-no-fog]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+Flipflop draws a grid of 3D colored tiles that change positions with 
+each other.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use.  Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-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.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2003 by Kevin Ogden.  Permission to use, copy, modify, 
+distribute, and sell this software and its documentation for any purpose is 
+hereby granted without fee, provided that the above copyright notice appear 
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation.  No representations are made about the 
+suitability of this software for any purpose.  It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Kevin Ogden <kogden1@hotmail.com>
index 14cb2767f0e29d724d8bff1fd1a5b8331d0794f5..e72d8dce8725f7890ceb739345591ad41d35f17b 100644 (file)
@@ -439,7 +439,7 @@ void getSnapshot (ModeInfo *modeinfo)
 
  if (status)
    {
 
  if (status)
    {
-     const char *s = gluErrorString (status);
+     const char *s = (char *) gluErrorString (status);
      fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
               progname, ximage->width, ximage->height,
               (s ? s : "(unknown)"));
      fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
               progname, ximage->width, ximage->height,
               (s ? s : "(unknown)"));
index c89fe7d1f93aa815f1fc464d88e62ee80da20c4a..97c3d9533334b3987c2e1124655ad410fa24c077 100644 (file)
@@ -32,6 +32,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 /* Smoke.cpp: implementation of the Smoke class. */
 
 
 /* Smoke.cpp: implementation of the Smoke class. */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "flurry.h"
 
 #define MAXANGLES 16384
 #include "flurry.h"
 
 #define MAXANGLES 16384
index cc41b42e6bdce477fc01d9e64734422a3680e536..5b58b56915f4c2a7ce63c2f578efb1ba8d86b321 100644 (file)
@@ -32,6 +32,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 /* Spark.cpp: implementation of the Spark class. */
 
 
 /* Spark.cpp: implementation of the Spark class. */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "flurry.h"
 
 void InitSpark(Spark *s)
 #include "flurry.h"
 
 void InitSpark(Spark *s)
index f7e1b8648a7f4d092dd59f95a1a2b2dbd877b6cf..8d9cc41b48803314b838da51388e2454f1c35f1a 100644 (file)
@@ -32,6 +32,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 /* Star.c: implementation of the Star class. */
 
 
 /* Star.c: implementation of the Star class. */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "flurry.h"
 
 /* Construction/Destruction */
 #include "flurry.h"
 
 /* Construction/Destruction */
index 29d5df0140ada09be2f882be650a83fb1b4314dd..c787f59a76e736ff3005538bcd6e1229bea109ac 100644 (file)
@@ -39,6 +39,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
 
  *
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "flurry.h"
 
 #include <GL/gl.h>
 #include "flurry.h"
 
 #include <GL/gl.h>
index a8aca0fdbf02956e9d3a375aeb5a7b3306bc4e1d..38c0adebb624559c6445834de82712b87f6c2349 100644 (file)
@@ -156,7 +156,7 @@ void DrawSpark(global_info_t *info, flurry_info_t *flurry, Spark *s);
 /* int fieldIncoherence = 0; */
 /* int ifieldSpeed = 120; */
 
 /* int fieldIncoherence = 0; */
 /* int ifieldSpeed = 120; */
 
-static /*inline*/ float FastDistance2D(float x, float y)
+static inline float FastDistance2D(float x, float y)
 {
         /* this function computes the distance from 0,0 to x,y with ~3.5% error */
        float mn;
 {
         /* this function computes the distance from 0,0 to x,y with ~3.5% error */
        float mn;
index 1b95173ae8432e64095b47afeb1189efa2b9e76e..47e8a700dbaf3159b8b4895bfb31300318db599a 100644 (file)
@@ -1,5 +1,5 @@
 /* font-ximage.c --- renders text to an XImage for use with OpenGL.
 /* font-ximage.c --- renders text to an XImage for use with OpenGL.
- * xscreensaver, Copyright (c) 2001 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 2001, 2003 Jamie Zawinski <jwz@jwz.org>
  *
  * 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
@@ -31,6 +31,7 @@ extern char *progname;
 #undef countof
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
 #undef countof
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
+#if 0
 static Bool
 bigendian (void)
 {
 static Bool
 bigendian (void)
 {
@@ -38,6 +39,7 @@ bigendian (void)
   u.i = 1;
   return !u.c[0];
 }
   u.i = 1;
   return !u.c[0];
 }
+#endif
 
 /* return the next larger power of 2. */
 static int
 
 /* return the next larger power of 2. */
 static int
@@ -199,9 +201,15 @@ text_to_ximage (Screen *screen, Visual *visual,
          things as necessary) OpenGL pretends everything is client-side, so
          we need to pack things in the right order for the client machine.
        */
          things as necessary) OpenGL pretends everything is client-side, so
          we need to pack things in the right order for the client machine.
        */
+#if 0
+    /* #### Cherub says that the little-endian case must be taken on MacOSX,
+            or else the colors/alpha are the wrong way around.  How can
+            that be the case?
+     */
       if (bigendian())
         rpos = 24, gpos = 16, bpos =  8, apos =  0;
       else
       if (bigendian())
         rpos = 24, gpos = 16, bpos =  8, apos =  0;
       else
+#endif
         rpos =  0, gpos =  8, bpos = 16, apos = 24;
 
       fg = (((unsigned long) (texture_fg[0] * 255.0) << rpos) |
         rpos =  0, gpos =  8, bpos = 16, apos = 24;
 
       fg = (((unsigned long) (texture_fg[0] * 255.0) << rpos) |
index ad14d01f2c1827e3a9f95f5ac99c03c4d905738b..f9b1cb2ec6193761e82fc0a96d331017c7e8d84d 100644 (file)
@@ -2,7 +2,7 @@
 /* gflux - creates a fluctuating 3D grid 
  * requires OpenGL or MesaGL
  * 
 /* gflux - creates a fluctuating 3D grid 
  * requires OpenGL or MesaGL
  * 
- * Copyright (c) Josiah Pease, 2000
+ * Copyright (c) Josiah Pease, 2000, 2003
  * 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
  * 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
@@ -213,7 +213,7 @@ typedef struct {
        int imageMax;
        GLubyte *image;
 #endif
        int imageMax;
        GLubyte *image;
 #endif
-    GLint texName;
+    GLuint texName;
     GLfloat tex_xscale;
     GLfloat tex_yscale;
     void (*drawFunc)(void);
     GLfloat tex_xscale;
     GLfloat tex_yscale;
     void (*drawFunc)(void);
@@ -680,7 +680,7 @@ grabTexture(void)
 
   gflux->imageWidth  = ximage->width;
   gflux->imageHeight = ximage->height;
 
   gflux->imageWidth  = ximage->width;
   gflux->imageHeight = ximage->height;
-  gflux->image = ximage->data;
+  gflux->image = (GLubyte *) ximage->data;
 
   if (bigimage)  /* don't scale really large images */
     {
 
   if (bigimage)  /* don't scale really large images */
     {
index 81488ac8575822f727bdb1802ef10765b079de6c..ab514646646c18378f8c045dd0557fb903a3306f 100644 (file)
@@ -115,7 +115,7 @@ make_knot (ModeInfo *mi)
   int faces = (wire ? 3 : 6);
 
   int i;
   int faces = (wire ? 3 : 6);
 
   int i;
-  double x, y, z, ox, oy, oz;
+  double x, y, z, ox=0, oy=0, oz=0;
   double mu;
 
   double p[9];
   double mu;
 
   double p[9];
index 1fa1123cf394dc4e30ff3048034a50aa5e3603df..9b5754069a039a12e39e14a635ce8a839ba60a7c 100644 (file)
@@ -57,6 +57,11 @@ extern XtAppContext app;
 #include "xpm-ximage.h"
 #include <ctype.h>
 
 #include "xpm-ximage.h"
 #include <ctype.h>
 
+#ifdef __GNUC__
+  __extension__  /* don't warn about "string length is greater than the length
+                    ISO C89 compilers are required to support" when including
+                    the following XPM file... */
+#endif
 #include "../images/matrix3.xpm"
 
 #ifdef USE_GL /* whole file */
 #include "../images/matrix3.xpm"
 
 #ifdef USE_GL /* whole file */
@@ -333,7 +338,7 @@ draw_glyph (ModeInfo *mi, int glyph,
   int wire = MI_IS_WIREFRAME(mi);
   GLfloat w = mp->tex_char_width;
   GLfloat h = mp->tex_char_height;
   int wire = MI_IS_WIREFRAME(mi);
   GLfloat w = mp->tex_char_width;
   GLfloat h = mp->tex_char_height;
-  GLfloat cx, cy;
+  GLfloat cx = 0, cy = 0;
   GLfloat S = 1;
   Bool spinner_p = (glyph < 0);
 
   GLfloat S = 1;
   Bool spinner_p = (glyph < 0);
 
@@ -587,6 +592,7 @@ matrix_handle_event (ModeInfo *mi, XEvent *event)
 }
 
 
 }
 
 
+#if 0
 static Bool
 bigendian (void)
 {
 static Bool
 bigendian (void)
 {
@@ -594,6 +600,7 @@ bigendian (void)
   u.i = 1;
   return !u.c[0];
 }
   u.i = 1;
   return !u.c[0];
 }
+#endif
 
 
 /* The image with the characters in it is 512x598, meaning that it needs to
 
 
 /* The image with the characters in it is 512x598, meaning that it needs to
@@ -719,9 +726,15 @@ load_textures (ModeInfo *mi, Bool flip_p)
    */
   {
     int rpos, gpos, bpos, apos;  /* bitfield positions */
    */
   {
     int rpos, gpos, bpos, apos;  /* bitfield positions */
+#if 0
+    /* #### Cherub says that the little-endian case must be taken on MacOSX,
+            or else the colors/alpha are the wrong way around.  How can
+            that be the case?
+     */
     if (bigendian())
       rpos = 24, gpos = 16, bpos =  8, apos =  0;
     else
     if (bigendian())
       rpos = 24, gpos = 16, bpos =  8, apos =  0;
     else
+#endif
       rpos =  0, gpos =  8, bpos = 16, apos = 24;
 
     for (y = 0; y < xi->height; y++)
       rpos =  0, gpos =  8, bpos = 16, apos = 24;
 
     for (y = 0; y < xi->height; y++)
index f2080b303af96aa6b258f2b46bd5419745cc0c61..316e6821205dc65c6fcb809febd8253cb3921434 100644 (file)
@@ -142,7 +142,13 @@ ModStruct   planet_description =
  "Animates texture mapped sphere (planet)", 0, NULL};
 #endif
 
  "Animates texture mapped sphere (planet)", 0, NULL};
 #endif
 
+# ifdef __GNUC__
+  __extension__  /* don't warn about "string length is greater than the length
+                    ISO C89 compilers are required to support" when including
+                    the following XPM file... */
+# endif
 #include "../images/earth.xpm"
 #include "../images/earth.xpm"
+
 #include "xpm-ximage.h"
 #include "rotator.h"
 #include "gltrackball.h"
 #include "xpm-ximage.h"
 #include "rotator.h"
 #include "gltrackball.h"
index f705a65c010da82bf24c30a26a6f4c23c2aba4cc..5a88a4e5c39436b2573215bee823ec6860c3980d 100644 (file)
@@ -69,7 +69,7 @@ typedef struct {
   GLuint texid;                           /* which texture to draw */
   enum { IN, OUT, DEAD } state;    /* how to draw it */
   rect from, to;                  /* the journey this quad is taking */
   GLuint texid;                           /* which texture to draw */
   enum { IN, OUT, DEAD } state;    /* how to draw it */
   rect from, to;                  /* the journey this quad is taking */
-} quad;
+} gls_quad;
 
 
 typedef struct {
 
 
 typedef struct {
@@ -79,7 +79,7 @@ typedef struct {
   int motion_frames;            /* how many frames each pan takes */
   int fade_frames;              /* how many frames fading in/out takes */
 
   int motion_frames;            /* how many frames each pan takes */
   int fade_frames;              /* how many frames fading in/out takes */
 
-  quad quads[2];               /* the (up to) 2 quads we animate */
+  gls_quad quads[2];           /* the (up to) 2 quads we animate */
   GLuint texids[2];            /* textures: "old" and "new" */
   GLuint current_texid;         /* the "new" one */
 
   GLuint texids[2];            /* textures: "old" and "new" */
   GLuint current_texid;         /* the "new" one */
 
@@ -157,7 +157,7 @@ double_time (void)
 
 
 static void
 
 
 static void
-draw_quad (ModeInfo *mi, quad *q)
+draw_quad (ModeInfo *mi, gls_quad *q)
 {
   slideshow_state *ss = &sss[MI_SCREEN(mi)];
   int wire = MI_IS_WIREFRAME(mi);
 {
   slideshow_state *ss = &sss[MI_SCREEN(mi)];
   int wire = MI_IS_WIREFRAME(mi);
@@ -316,7 +316,7 @@ draw_quads (ModeInfo *mi)
 /* Re-randomize the state of the given quad.
  */
 static void
 /* Re-randomize the state of the given quad.
  */
 static void
-reset_quad (ModeInfo *mi, quad *q)
+reset_quad (ModeInfo *mi, gls_quad *q)
 {
 /*  slideshow_state *ss = &sss[MI_SCREEN(mi)];*/
 
 {
 /*  slideshow_state *ss = &sss[MI_SCREEN(mi)];*/
 
@@ -403,7 +403,7 @@ shrink_image (ModeInfo *mi, XImage *ximage)
 /* Load a new image into a texture for the given quad.
  */
 static void
 /* Load a new image into a texture for the given quad.
  */
 static void
-load_quad (ModeInfo *mi, quad *q)
+load_quad (ModeInfo *mi, gls_quad *q)
 {
   slideshow_state *ss = &sss[MI_SCREEN(mi)];
   XImage *ximage;
 {
   slideshow_state *ss = &sss[MI_SCREEN(mi)];
   XImage *ximage;
@@ -466,7 +466,7 @@ load_quad (ModeInfo *mi, quad *q)
   if (status)
     {
       char buf[100];
   if (status)
     {
       char buf[100];
-      const char *s = gluErrorString (status);
+      const char *s = (char *) gluErrorString (status);
 
       if (!s || !*s)
         {
 
       if (!s || !*s)
         {
@@ -648,7 +648,7 @@ init_slideshow (ModeInfo *mi)
 
   for (i = 0; i < countof(ss->quads); i++)
     {
 
   for (i = 0; i < countof(ss->quads); i++)
     {
-      quad *q = &ss->quads[i];
+      gls_quad *q = &ss->quads[i];
       q->texid = ss->current_texid;
       q->state = DEAD;
       reset_quad (mi, q);
       q->texid = ss->current_texid;
       q->state = DEAD;
       reset_quad (mi, q);
@@ -718,7 +718,7 @@ ponder_state_change (ModeInfo *mi)
       /* Reset all quads, and mark only #0 as active. */
       for (i = 0; i < countof(ss->quads); i++)
         {
       /* Reset all quads, and mark only #0 as active. */
       for (i = 0; i < countof(ss->quads); i++)
         {
-          quad *q = &ss->quads[i];
+          gls_quad *q = &ss->quads[i];
           q->state = DEAD;
           reset_quad (mi, q);
           q->texid = ss->current_texid;
           q->state = DEAD;
           reset_quad (mi, q);
           q->texid = ss->current_texid;
@@ -795,7 +795,7 @@ draw_slideshow (ModeInfo *mi)
          It's time to begin fading the visible one out, and the
          invisible one in.  (Reset the invisible one first.)
        */
          It's time to begin fading the visible one out, and the
          invisible one in.  (Reset the invisible one first.)
        */
-      quad *vq, *iq;
+      gls_quad *vq, *iq;
 
       ponder_state_change (mi);
 
 
       ponder_state_change (mi);
 
index e13f3b5fd365eedb4853e2771fed8270f5e4cbaf..b5208dc85e868c1b311f9b47ec2aacda34c24058 100644 (file)
@@ -2,7 +2,7 @@
 .SH NAME
 glslideshow - slideshow of images using smooth zooming and fades
 .SH SYNOPSIS
 .SH NAME
 glslideshow - slideshow of images using smooth zooming and fades
 .SH SYNOPSIS
-B glslideshow
+.B glslideshow
 [\-display \fIhost:display.screen\fP]
 [\-visual \fIvisual\fP]
 [\-window]
 [\-display \fIhost:display.screen\fP]
 [\-visual \fIvisual\fP]
 [\-window]
index d1e920794a0acdbdfeeee93153378274fadbdaf4..c0b5a2f01082a4c90f6655e6a5fbcb363bede846 100644 (file)
@@ -85,6 +85,15 @@ spread_bits (unsigned char value, unsigned char width)
 }
 
 
 }
 
 
+static Bool
+bigendian (void)
+{
+  union { int i; char c[sizeof(int)]; } u;
+  u.i = 1;
+  return !u.c[0];
+}
+
+
 /* Returns an XImage structure containing an image of the desktop.
    (As a side-effect, that image *may* be painted onto the given Window.)
    This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the
 /* Returns an XImage structure containing an image of the desktop.
    (As a side-effect, that image *may* be painted onto the given Window.)
    This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the
@@ -146,10 +155,10 @@ screen_to_ximage (Screen *screen, Window window)
      */
     {
       int x, y;
      */
     {
       int x, y;
-      int crpos, cgpos, cbpos, capos;  /* bitfield positions */
-      int srpos, sgpos, sbpos;
-      int srmsk, sgmsk, sbmsk;
-      int srsiz, sgsiz, sbsiz;
+      unsigned int crpos=0, cgpos=0, cbpos=0, capos=0; /* bitfield positions */
+      unsigned int srpos=0, sgpos=0, sbpos=0;
+      unsigned int srmsk=0, sgmsk=0, sbmsk=0;
+      unsigned int srsiz=0, sgsiz=0, sbsiz=0;
       int i;
 
       unsigned char spread_map[3][256];
       int i;
 
       unsigned char spread_map[3][256];
@@ -171,7 +180,10 @@ screen_to_ximage (Screen *screen, Window window)
          we need to pack things in "RGBA" order on the client machine,
          regardless of its endianness.
        */
          we need to pack things in "RGBA" order on the client machine,
          regardless of its endianness.
        */
-      crpos =  0, cgpos =  8, cbpos = 16, capos = 24;
+      if (bigendian())
+        crpos = 24, cgpos = 16, cbpos =  8, capos =  0;
+      else
+        crpos =  0, cgpos =  8, cbpos = 16, capos = 24;
 
       if (colors == 0)  /* truecolor */
         {
 
       if (colors == 0)  /* truecolor */
         {
index e5351886f017efd61d2c642506e75bf4d6868dc5..ae8891f739cb743dc95a68e7a8c38afba8b2ea68 100644 (file)
@@ -195,6 +195,8 @@ static GLfloat flowerbox_colors[4][4] = {
     {0.0, 0.0, 0.9, 1.0},
 };
 
     {0.0, 0.0, 0.9, 1.0},
 };
 
+# if 0 /* I am not even going to *try* and make this bullshit compile
+          without warning under gcc -std=c89 -pedantic.  -jwz. */
 #ifdef DEBUG
 # ifdef __GNUC__ /* GCC style */
 #define _DEBUG(msg, args...) do { \
 #ifdef DEBUG
 # ifdef __GNUC__ /* GCC style */
 #define _DEBUG(msg, args...) do { \
@@ -212,6 +214,7 @@ static GLfloat flowerbox_colors[4][4] = {
 #define _DEBUG(msg, ...)
 # endif
 #endif
 #define _DEBUG(msg, ...)
 # endif
 #endif
+#endif /* 0 */
 
 /* This is all the half-edge b-rep code (as well as basic geometry) */
 typedef struct face face;
 
 /* This is all the half-edge b-rep code (as well as basic geometry) */
 typedef struct face face;
@@ -356,7 +359,7 @@ static inline hedge *partner(hedge *h) {
        return h->e->left;
     }
     else {
        return h->e->left;
     }
     else {
-       _DEBUG("Inconsistent edge detected. Presumably, this is a bug. Exiting.\n", NULL);
+/*     _DEBUG("Inconsistent edge detected. Presumably, this is a bug. Exiting.\n", NULL); */
        exit(-1);
     }
 }
        exit(-1);
     }
 }
@@ -385,7 +388,7 @@ hedge *hedge_new(hedge *hafter, vertex *vtx)
     hedge *h = (hedge*)malloc(sizeof(hedge));
     
     if(!h) {
     hedge *h = (hedge*)malloc(sizeof(hedge));
     
     if(!h) {
-       _DEBUG("Out of memory in hedge_new()\n",NULL);
+/*     _DEBUG("Out of memory in hedge_new()\n",NULL); */
        return NULL;
     }
     h->f = hafter->f;
        return NULL;
     }
     h->f = hafter->f;
@@ -402,7 +405,7 @@ edge *edge_new(solid *s)
 {
     edge *e = (edge*)malloc(sizeof(edge));
     if(!e) {
 {
     edge *e = (edge*)malloc(sizeof(edge));
     if(!e) {
-       _DEBUG("Out of memory in edge_new()\n",NULL);
+/*     _DEBUG("Out of memory in edge_new()\n",NULL);*/
        exit(-1);
     }
     e->next = s->edges;
        exit(-1);
     }
     e->next = s->edges;
@@ -416,7 +419,7 @@ face *face_new(solid *s, hedge *h)
 {
     face *f = (face*)malloc(sizeof(face));
     if(!f) {
 {
     face *f = (face*)malloc(sizeof(face));
     if(!f) {
-       _DEBUG("Out of memory in face_new()",NULL);
+/*     _DEBUG("Out of memory in face_new()",NULL);*/
        exit(-1);
     }
     f->s = s;
        exit(-1);
     }
     f->s = s;
@@ -477,11 +480,11 @@ face *face_split(face *f, hedge *h1, hedge *h2)
     face *fn;
 
     if(h1->f != f || h2->f != f) {
     face *fn;
 
     if(h1->f != f || h2->f != f) {
-       _DEBUG("Whoah, cap'n, yer usin' a bad halfedge!\n",NULL);
+/*     _DEBUG("Whoah, cap'n, yer usin' a bad halfedge!\n",NULL);*/
        exit(-1);
     }
     if(h1 == h2) {
        exit(-1);
     }
     if(h1 == h2) {
-       _DEBUG("Trying to split a face at a single vertex\n",NULL);
+/*     _DEBUG("Trying to split a face at a single vertex\n",NULL);*/
        exit(-1);
     }
     /* close the loops */
        exit(-1);
     }
     /* close the loops */
@@ -837,7 +840,7 @@ void setup_opengl(ModeInfo *mi, jigglystruct *js)
 
 int parse_color(jigglystruct *js)
 {
 
 int parse_color(jigglystruct *js)
 {
-    int r, g, b;
+    unsigned int r, g, b;
     if(!strcmp(color, "clownbarf")) {
        js->color_style = COLOR_STYLE_CLOWNBARF;
        return 1;
     if(!strcmp(color, "clownbarf")) {
        js->color_style = COLOR_STYLE_CLOWNBARF;
        return 1;
@@ -1055,11 +1058,11 @@ void init_jigglypuff(ModeInfo *mi)
        MI_CLEARWINDOW(mi);
     }
     js->trackball = gltrackball_init();
        MI_CLEARWINDOW(mi);
     }
     js->trackball = gltrackball_init();
-    _DEBUG("distance : %f\nhold : %f\nspherify : %f\ndamping : %f\ndfact : %f\n",
+/*    _DEBUG("distance : %f\nhold : %f\nspherify : %f\ndamping : %f\ndfact : %f\n",
           js->stable_distance, js->hold_strength, js->spherify_strength,
           js->damping_velocity, js->damping_factor);
     _DEBUG("wire : %d\nspooky : %d\nstyle : %d\nshininess : %d\n",
           js->stable_distance, js->hold_strength, js->spherify_strength,
           js->damping_velocity, js->damping_factor);
     _DEBUG("wire : %d\nspooky : %d\nstyle : %d\nshininess : %d\n",
-          js->do_wireframe, js->spooky, js->color_style, js->shininess);
+          js->do_wireframe, js->spooky, js->color_style, js->shininess);*/
 }
 
 /* This is the end of the file */
 }
 
 /* This is the end of the file */
index b068e3f4e7ff8259be004e41437ea1b78e9d9730..e4a87158c1f7d193149714fca9d7acc734ef8f22 100644 (file)
@@ -64,7 +64,7 @@ enum {
        SEASHELL,
        SWALLOWTAIL,
        BOHEM,
        SEASHELL,
        SWALLOWTAIL,
        BOHEM,
-    SURFACE_LAST,
+    SURFACE_LAST
 };
 
 /* primitives to draw with 
 };
 
 /* primitives to draw with 
@@ -78,7 +78,7 @@ enum {
        MY_POINTS = 0,
        MY_LINES,
        MY_LINE_LOOP,
        MY_POINTS = 0,
        MY_LINES,
        MY_LINE_LOOP,
-       MY_PRIM_LAST,
+       MY_PRIM_LAST
 };
 
 
 };
 
 
index eb75dd6d8ac81c509c604a87b2cde344fab0ad0c..bb6f219987796f0738ceab351da653df896280b7 100644 (file)
@@ -1861,7 +1861,7 @@ reshape_lament(ModeInfo *mi, int width, int height)
      Note that the image-map bits we have are 128x128.  Therefore, if the
      image is magnified a lot, it looks pretty blocky.  So it's better to
      have a 128x128 animation on a 1280x1024 screen that looks good, than
      Note that the image-map bits we have are 128x128.  Therefore, if the
      image is magnified a lot, it looks pretty blocky.  So it's better to
      have a 128x128 animation on a 1280x1024 screen that looks good, than
-     a 1024x1024 animation that looks really pixellated.
+     a 1024x1024 animation that looks really pixelated.
    */
   if (win_size > target_size * 1.5)
     {
    */
   if (win_size > target_size * 1.5)
     {
index dcdb0f5e4363e2711a4c53d4f42c4820c3cba485..eebef51d0a665339be2bf9edd2946970fe57e9e7 100644 (file)
@@ -608,7 +608,7 @@ pinit(void)
                                GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData);
     if (status)
       {
                                GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData);
     if (status)
       {
-        const char *s = gluErrorString (status);
+        const char *s = (char *) gluErrorString (status);
         fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                  progname, WoodTextureWidth, WoodTextureHeight,
                  (s ? s : "(unknown)"));
         fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                  progname, WoodTextureWidth, WoodTextureHeight,
                  (s ? s : "(unknown)"));
index c54c101c6f6b821da0d2000de59bc25482e6a494..39ad1969e7e8d05693c7b0c63e4c63e094199d4b 100644 (file)
@@ -90,6 +90,11 @@ static int scale_down;
 #define TUBE_FACES_2     3
 
 
 #define TUBE_FACES_2     3
 
 
+# ifdef __GNUC__
+  __extension__  /* don't warn about "string length is greater than the length
+                    ISO C89 compilers are required to support" when includng
+                    the following data file... */
+# endif
 const char * const builtin_pdb_data[] = {
 # include "molecules.h"
 };
 const char * const builtin_pdb_data[] = {
 # include "molecules.h"
 };
diff --git a/hacks/glx/polytopes.c b/hacks/glx/polytopes.c
new file mode 100644 (file)
index 0000000..d4a9eaa
--- /dev/null
@@ -0,0 +1,3007 @@
+/* polytopes --- Shows one of the six regular polytopes rotating in 4d */
+
+#if !defined( lint ) && !defined( SABER )
+static const char sccsid[] = "@(#)polytopes.c  1.1 03/05/18 xlockmore";
+
+#endif
+
+/* Copyright (c) 2003 Carsten Steger <carsten@mirsanmir.org>. */
+
+/*
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation.
+ *
+ * This file is provided AS IS with no warranties of any kind.  The author
+ * shall have no liability with respect to the infringement of copyrights,
+ * trade secrets or any patents by this file or any part thereof.  In no
+ * event will the author be liable for any lost revenue or profits or
+ * other special, indirect and consequential damages.
+ *
+ * REVISION HISTORY:
+ * C. Steger - 03/08/10: Initial version
+ */
+
+/*
+ * 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.
+ */
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#define SQRT15OVER4 1.93649167310370844259 /* sqrt(15/4) */
+#define SQRT10OVER3 1.82574185835055371152 /* sqrt(10/3) */
+#define SQRT5OVER2  1.58113883008418966600 /* sqrt(5/2) */
+#define SQRT5OVER6  0.91287092917527685576 /* sqrt(5/6) */
+#define SQRT5OVER12 0.64549722436790281420 /* sqrt(5/12) */
+#define SQRT2       1.41421356237309504880 /* sqrt(2) */
+#define GOLDEN      1.61803398874989484820 /* (sqrt(5)+1)/2 */
+#define GOLDENINV   0.61803398874989484820 /* (sqrt(5)-1)/2 */
+#define SQRT2INV    0.70710678118654752440 /* sqrt(1/2) */
+#define GOLDEN2     1.14412280563536859520 /* ((sqrt(5)+1)/2)/sqrt(2) */
+#define GOLDENINV2  0.43701602444882107080 /* ((sqrt(5)-1)/2)/sqrt(2) */
+#define GOLDEN22    1.85122958682191611960 /* (((sqrt(5)+1)/2)^2)/sqrt(2) */
+#define GOLDENINV22 0.27009075673772645360 /* (((sqrt(5)-1)/2)^2)/sqrt(2) */
+
+#define DISP_WIREFRAME            0
+#define DISP_WIREFRAME_STR       "0"
+#define DISP_SURFACE              1
+#define DISP_SURFACE_STR         "1"
+#define DISP_TRANSPARENT          2
+#define DISP_TRANSPARENT_STR     "2"
+
+#define POLYTOPE_RANDOM          -1
+#define POLYTOPE_RANDOM_STR      "-1"
+#define POLYTOPE_5_CELL           0
+#define POLYTOPE_5_CELL_STR      "0"
+#define POLYTOPE_8_CELL           1
+#define POLYTOPE_8_CELL_STR      "1"
+#define POLYTOPE_16_CELL          2
+#define POLYTOPE_16_CELL_STR     "2"
+#define POLYTOPE_24_CELL          3
+#define POLYTOPE_24_CELL_STR     "3"
+#define POLYTOPE_120_CELL         4
+#define POLYTOPE_120_CELL_STR    "4"
+#define POLYTOPE_600_CELL         5
+#define POLYTOPE_600_CELL_STR    "5"
+#define POLYTOPE_LAST_CELL        POLYTOPE_600_CELL
+
+#define COLORS_SINGLE             0
+#define COLORS_SINGLE_STR        "0"
+#define COLORS_DEPTH              1
+#define COLORS_DEPTH_STR         "1"
+
+#define DISP_3D_PERSPECTIVE       0
+#define DISP_3D_PERSPECTIVE_STR  "0"
+#define DISP_3D_ORTHOGRAPHIC      1
+#define DISP_3D_ORTHOGRAPHIC_STR "1"
+
+#define DISP_4D_PERSPECTIVE       0
+#define DISP_4D_PERSPECTIVE_STR  "0"
+#define DISP_4D_ORTHOGRAPHIC      1
+#define DISP_4D_ORTHOGRAPHIC_STR "1"
+
+#define DALPHA                    1.1
+#define DALPHA_STR               "1.1"
+#define DBETA                     1.3
+#define DBETA_STR                "1.3"
+#define DDELTA                    1.5
+#define DDELTA_STR               "1.5"
+#define DZETA                     1.7
+#define DZETA_STR                "1.7"
+#define DETA                      1.9
+#define DETA_STR                 "1.9"
+#define DTHETA                    2.1
+#define DTHETA_STR               "2.1"
+
+#define DEF_DISPLAY_MODE          DISP_TRANSPARENT_STR   
+#define DEF_POLYTOPE              POLYTOPE_RANDOM_STR
+#define DEF_COLORS                COLORS_DEPTH_STR
+#define DEF_3D_PROJECTION         DISP_3D_PERSPECTIVE_STR
+#define DEF_4D_PROJECTION         DISP_4D_PERSPECTIVE_STR
+#define DEF_DALPHA                DALPHA_STR
+#define DEF_DBETA                 DBETA_STR
+#define DEF_DDELTA                DDELTA_STR
+#define DEF_DZETA                 DZETA_STR
+#define DEF_DETA                  DETA_STR
+#define DEF_DTHETA                DTHETA_STR
+
+#ifdef STANDALONE
+# define PROGCLASS       "Polytopes"
+# define HACK_INIT       init_polytopes
+# define HACK_DRAW       draw_polytopes
+# define HACK_RESHAPE    reshape_polytopes
+# define polytopes_opts xlockmore_opts
+# define DEFAULTS        "*delay:      25000 \n" \
+                         "*showFPS:    False \n" \
+                         "*wireframe:  False \n" \
+                         "*displayMode: "  DEF_DISPLAY_MODE  " \n" \
+                         "*polytope: "     DEF_POLYTOPE      " \n" \
+                         "*colors: "       DEF_COLORS        " \n" \
+                         "*projection3d: " DEF_3D_PROJECTION " \n" \
+                         "*projection4d: " DEF_4D_PROJECTION " \n" \
+                         "speedwx: "       DEF_DALPHA        " \n" \
+                         "speedwy: "       DEF_DBETA         " \n" \
+                         "speedwz: "       DEF_DDELTA        " \n" \
+                         "speedxy: "       DEF_DZETA         " \n" \
+                         "speedxz: "       DEF_DETA          " \n" \
+                         "speedyz: "       DEF_DTHETA        " \n"
+# include "xlockmore.h"         /* from the xscreensaver distribution */
+#else  /* !STANDALONE */
+# include "xlock.h"             /* from the xlockmore distribution */
+#endif /* !STANDALONE */
+
+#ifdef USE_GL
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+
+#ifdef USE_MODULES
+ModStruct   polytopes_description =
+{"polytopes", "init_polytopes", "draw_polytopes", "release_polytopes",
+ "draw_polytopes", "change_polytopes", NULL, &polytopes_opts,
+ 25000, 1, 1, 1, 1.0, 4, "",
+ "Shows one of the six regular 4d polytopes rotating in 4d", 0, NULL};
+
+#endif
+
+
+static int display_mode;
+static int polytope;
+static int color_mode;
+static int projection_3d;
+static int projection_4d;
+static float speed_wx;
+static float speed_wy;
+static float speed_wz;
+static float speed_xy;
+static float speed_xz;
+static float speed_yz;
+
+/* 4D rotation angles */
+static float alpha, beta, delta, zeta, eta, theta;
+static float aspect;
+
+static const float offset4d[4] = {  0.0,  0.0,  0.0,  3.0 };
+static const float offset3d[4] = {  0.0,  0.0, -2.0,  0.0 };
+
+
+static XrmOptionDescRec opts[] =
+{
+  {"-mesh",            ".polytopes.displayMode",  XrmoptionNoArg,
+                       (caddr_t)DISP_WIREFRAME_STR },
+  {"-surface",         ".polytopes.displayMode",  XrmoptionNoArg,
+                       (caddr_t)DISP_SURFACE_STR },
+  {"-transparent",     ".polytopes.displayMode",  XrmoptionNoArg,
+                       (caddr_t)DISP_TRANSPARENT_STR },
+  {"-random",          ".polytopes.polytope",     XrmoptionNoArg,
+                       (caddr_t)POLYTOPE_RANDOM_STR },
+  {"-5-cell",          ".polytopes.polytope",     XrmoptionNoArg,
+                       (caddr_t)POLYTOPE_5_CELL_STR },
+  {"-8-cell",          ".polytopes.polytope",     XrmoptionNoArg,
+                       (caddr_t)POLYTOPE_8_CELL_STR },
+  {"-16-cell",         ".polytopes.polytope",     XrmoptionNoArg,
+                       (caddr_t)POLYTOPE_16_CELL_STR },
+  {"-24-cell",         ".polytopes.polytope",     XrmoptionNoArg,
+                       (caddr_t)POLYTOPE_24_CELL_STR },
+  {"-120-cell",        ".polytopes.polytope",     XrmoptionNoArg,
+                       (caddr_t)POLYTOPE_120_CELL_STR },
+  {"-600-cell",        ".polytopes.polytope",     XrmoptionNoArg,
+                       (caddr_t)POLYTOPE_600_CELL_STR },
+  {"-single-color",    ".polytopes.colors",       XrmoptionNoArg,
+                       (caddr_t)COLORS_SINGLE_STR },
+  {"-depth-colors",    ".polytopes.colors",       XrmoptionNoArg,
+                       (caddr_t)COLORS_DEPTH_STR },
+  {"-perspective-3d",  ".polytopes.projection3d", XrmoptionNoArg,
+                       (caddr_t)DISP_3D_PERSPECTIVE_STR },
+  {"-orthographic-3d", ".polytopes.projection3d", XrmoptionNoArg,
+                       (caddr_t)DISP_3D_ORTHOGRAPHIC_STR },
+  {"-perspective-4d",  ".polytopes.projection4d", XrmoptionNoArg,
+                       (caddr_t)DISP_4D_PERSPECTIVE_STR },
+  {"-orthographic-4d", ".polytopes.projection4d", XrmoptionNoArg,
+                       (caddr_t)DISP_4D_ORTHOGRAPHIC_STR },
+  {"-speed-wx",        ".polytopes.speedwx",      XrmoptionSepArg,
+                       (caddr_t)NULL },
+  {"-speed-wy",        ".polytopes.speedwy",      XrmoptionSepArg,
+                       (caddr_t)NULL },
+  {"-speed-wz",        ".polytopes.speedwz",      XrmoptionSepArg,
+                       (caddr_t)NULL },
+  {"-speed-xy",        ".polytopes.speedxy",      XrmoptionSepArg,
+                       (caddr_t)NULL },
+  {"-speed-xz",        ".polytopes.speedxz",      XrmoptionSepArg,
+                       (caddr_t)NULL },
+  {"-speed-yz",        ".polytopes.speedyz",      XrmoptionSepArg,
+                       (caddr_t)NULL }
+};
+
+static argtype vars[] =
+{
+  { (caddr_t *) &display_mode,  "displayMode",  "DisplayMode",
+    DEF_DISPLAY_MODE,  t_Int },
+  { (caddr_t *) &polytope,      "polytope",     "Polytope",
+    DEF_POLYTOPE,      t_Int },
+  { (caddr_t *) &color_mode,    "colors",       "Colors",
+    DEF_COLORS,        t_Int },
+  { (caddr_t *) &projection_3d, "projection3d", "Projection3d",
+    DEF_3D_PROJECTION, t_Int },
+  { (caddr_t *) &projection_4d, "projection4d", "Projection4d",
+    DEF_4D_PROJECTION, t_Int },
+  { (caddr_t *) &speed_wx,      "speedwx",      "Speedwx",
+    DEF_DALPHA,        t_Float},
+  { (caddr_t *) &speed_wy,      "speedwy",      "Speedwy",
+    DEF_DBETA,         t_Float},
+  { (caddr_t *) &speed_wz,      "speedwz",      "Speedwz",
+    DEF_DDELTA,        t_Float},
+  { (caddr_t *) &speed_xy,      "speedxy",      "Speedxy",
+    DEF_DZETA,         t_Float},
+  { (caddr_t *) &speed_xz,      "speedxz",      "Speedxz",
+    DEF_DETA,          t_Float},
+  { (caddr_t *) &speed_yz,      "speedyz",      "Speedyz",
+    DEF_DTHETA,        t_Float}
+};
+
+static OptionStruct desc[] =
+{
+  { "-mesh",            "display the polytope as a wireframe mesh" },
+  { "-surface",         "display the polytope as a solid surface" },
+  { "-transparent",     "display the polytope as a transparent surface" },
+  { "-solid",           "display the polytope as a solid object" },
+  { "-bands",           "display the polytope as see-through bands" },
+  { "-twosided",        "display the polytope with two colors" },
+  { "-colorwheel",      "display the polytope with a smooth color wheel" },
+  { "-perspective-3d",  "project the polytope perspectively from 3d to 2d" },
+  { "-orthographic-3d", "project the polytope orthographically from 3d to 2d"},
+  { "-perspective-4d",  "project the polytope perspectively from 4d to 3d" },
+  { "-orthographic-4d", "project the polytope orthographically from 4d to 3d"},
+  { "-speed-wx <arg>",  "rotation speed around the wx plane" },
+  { "-speed-wy <arg>",  "rotation speed around the wy plane" },
+  { "-speed-wz <arg>",  "rotation speed around the wz plane" },
+  { "-speed-xy <arg>",  "rotation speed around the xy plane" },
+  { "-speed-xz <arg>",  "rotation speed around the xz plane" },
+  { "-speed-yz <arg>",  "rotation speed around the yz plane" }
+};
+
+ModeSpecOpt polytopes_opts =
+{sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc};
+
+
+typedef struct {
+  GLint       WindH, WindW;
+  GLXContext *glx_context;
+} polytopesstruct;
+
+static polytopesstruct *poly = (polytopesstruct *) NULL;
+
+
+/* Vertex, edge, and face data for the six regular polytopes.  All the
+   polytopes are constructed with coordinates chosen such that their 4d
+   circumsphere has a radius of 2. */
+
+/* 5-cell {3,3,3} */
+#define NUM_VERT_5 5
+#define NUM_EDGE_5 10
+#define NUM_FACE_5 10
+#define VERT_PER_FACE_5 3
+
+#define MIN_EDGE_DEPTH_5 (-0.5)
+#define MAX_EDGE_DEPTH_5 0.75
+#define MIN_FACE_DEPTH_5 (-0.5)
+#define MAX_FACE_DEPTH_5 (1.0/3.0)
+
+static float vert_5[NUM_VERT_5][4] = {
+  { -SQRT5OVER2, -SQRT5OVER6, -SQRT5OVER12, -0.5 },
+  {  SQRT5OVER2, -SQRT5OVER6, -SQRT5OVER12, -0.5 },
+  {         0.0, SQRT10OVER3, -SQRT5OVER12, -0.5 },
+  {         0.0,         0.0,  SQRT15OVER4, -0.5 },
+  {         0.0,         0.0,          0.0,  2.0 }
+};
+
+static int edge_5[NUM_EDGE_5][2] = {
+  { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 1, 2 }, { 1, 3 }, { 1, 4 },
+  { 2, 3 }, { 2, 4 }, { 3, 4 }
+};
+
+static int face_5[NUM_FACE_5][VERT_PER_FACE_5] = {
+  { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 2, 3 }, { 0, 2, 4 }, { 0, 3, 4 },
+  { 1, 2, 3 }, { 1, 2, 4 }, { 1, 3, 4 }, { 2, 3, 4 }
+};
+
+static float edge_color_5[NUM_EDGE_5][4];
+static float face_color_5[NUM_FACE_5][4];
+static float face_color_trans_5[NUM_FACE_5][4];
+
+
+/* 8-cell {4,3,3} */
+#define NUM_VERT_8 16
+#define NUM_EDGE_8 32
+#define NUM_FACE_8 24
+#define VERT_PER_FACE_8 4
+
+#define MIN_EDGE_DEPTH_8 (-1.0)
+#define MAX_EDGE_DEPTH_8 1.0
+#define MIN_FACE_DEPTH_8 (-1.0)
+#define MAX_FACE_DEPTH_8 1.0
+
+static float vert_8[NUM_VERT_8][4] = {
+  { -1.0, -1.0, -1.0, -1.0 }, {  1.0, -1.0, -1.0, -1.0 },
+  { -1.0,  1.0, -1.0, -1.0 }, {  1.0,  1.0, -1.0, -1.0 },
+  { -1.0, -1.0,  1.0, -1.0 }, {  1.0, -1.0,  1.0, -1.0 },
+  { -1.0,  1.0,  1.0, -1.0 }, {  1.0,  1.0,  1.0, -1.0 },
+  { -1.0, -1.0, -1.0,  1.0 }, {  1.0, -1.0, -1.0,  1.0 },
+  { -1.0,  1.0, -1.0,  1.0 }, {  1.0,  1.0, -1.0,  1.0 },
+  { -1.0, -1.0,  1.0,  1.0 }, {  1.0, -1.0,  1.0,  1.0 },
+  { -1.0,  1.0,  1.0,  1.0 }, {  1.0,  1.0,  1.0,  1.0 }
+};
+
+static int edge_8[NUM_EDGE_8][2] = {
+  {  0,  1 }, {  0,  2 }, {  0,  4 }, {  0,  8 }, {  1,  3 }, {  1,  5 },
+  {  1,  9 }, {  2,  3 }, {  2,  6 }, {  2, 10 }, {  3,  7 }, {  3, 11 },
+  {  4,  5 }, {  4,  6 }, {  4, 12 }, {  5,  7 }, {  5, 13 }, {  6,  7 },
+  {  6, 14 }, {  7, 15 }, {  8,  9 }, {  8, 10 }, {  8, 12 }, {  9, 11 },
+  {  9, 13 }, { 10, 11 }, { 10, 14 }, { 11, 15 }, { 12, 13 }, { 12, 14 },
+  { 13, 15 }, { 14, 15 }
+};
+
+static int face_8[NUM_FACE_8][VERT_PER_FACE_8] = {
+  {  0,  1,  3,  2 }, {  0,  1,  5,  4 }, {  0,  1,  9,  8 },
+  {  0,  2,  6,  4 }, {  0,  2, 10,  8 }, {  0,  4, 12,  8 },
+  {  1,  3,  7,  5 }, {  1,  3, 11,  9 }, {  1,  5, 13,  9 },
+  {  2,  3,  7,  6 }, {  2,  3, 11, 10 }, {  2,  6, 14, 10 },
+  {  3,  7, 15, 11 }, {  4,  5,  7,  6 }, {  4,  5, 13, 12 },
+  {  4,  6, 14, 12 }, {  5,  7, 15, 13 }, {  6,  7, 15, 14 },
+  {  8,  9, 11, 10 }, {  8,  9, 13, 12 }, {  8, 10, 14, 12 },
+  {  9, 11, 15, 13 }, { 10, 11, 15, 14 }, { 12, 13, 15, 14 }
+};
+
+static float edge_color_8[NUM_EDGE_8][4];
+static float face_color_8[NUM_FACE_8][4];
+static float face_color_trans_8[NUM_FACE_8][4];
+
+
+/* 16-cell {3,3,4} */
+#define NUM_VERT_16 8
+#define NUM_EDGE_16 24
+#define NUM_FACE_16 32
+#define VERT_PER_FACE_16 3
+
+#define MIN_EDGE_DEPTH_16 (-1.0)
+#define MAX_EDGE_DEPTH_16 1.0
+#define MIN_FACE_DEPTH_16 (-2.0/3.0)
+#define MAX_FACE_DEPTH_16 (2.0/3.0)
+
+static float vert_16[NUM_VERT_16][4] = {
+  {  0.0,  0.0,  0.0, -2.0 }, {  0.0,  0.0, -2.0,  0.0 },
+  {  0.0, -2.0,  0.0,  0.0 }, { -2.0,  0.0,  0.0,  0.0 },
+  {  2.0,  0.0,  0.0,  0.0 }, {  0.0,  2.0,  0.0,  0.0 },
+  {  0.0,  0.0,  2.0,  0.0 }, {  0.0,  0.0,  0.0,  2.0 }
+};
+
+static int edge_16[NUM_EDGE_16][2] = {
+  { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 }, { 0, 6 }, { 1, 2 },
+  { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 7 }, { 2, 3 }, { 2, 4 }, { 2, 6 },
+  { 2, 7 }, { 3, 5 }, { 3, 6 }, { 3, 7 }, { 4, 5 }, { 4, 6 }, { 4, 7 },
+  { 5, 6 }, { 5, 7 }, { 6, 7 }
+};
+
+static int face_16[NUM_FACE_16][VERT_PER_FACE_16] = {
+  { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 1, 5 }, { 0, 2, 3 }, { 0, 2, 4 },
+  { 0, 2, 6 }, { 0, 3, 5 }, { 0, 3, 6 }, { 0, 4, 5 }, { 0, 4, 6 }, { 0, 5, 6 },
+  { 1, 2, 3 }, { 1, 2, 4 }, { 1, 2, 7 }, { 1, 3, 5 }, { 1, 3, 7 }, { 1, 4, 5 },
+  { 1, 4, 7 }, { 1, 5, 7 }, { 2, 3, 6 }, { 2, 3, 7 }, { 2, 4, 6 }, { 2, 4, 7 },
+  { 2, 6, 7 }, { 3, 5, 6 }, { 3, 5, 7 }, { 3, 6, 7 }, { 4, 5, 6 }, { 4, 5, 7 },
+  { 4, 6, 7 }, { 5, 6, 7 }
+};
+
+static float edge_color_16[NUM_EDGE_16][4];
+static float face_color_16[NUM_FACE_16][4];
+static float face_color_trans_16[NUM_FACE_16][4];
+
+
+/* 24-cell {3,4,3} */
+#define NUM_VERT_24 24
+#define NUM_EDGE_24 96
+#define NUM_FACE_24 96
+#define VERT_PER_FACE_24 3
+
+#define MIN_EDGE_DEPTH_24 (-SQRT2)
+#define MAX_EDGE_DEPTH_24 SQRT2
+#define MIN_FACE_DEPTH_24 (-SQRT2)
+#define MAX_FACE_DEPTH_24 SQRT2
+
+static float vert_24[NUM_VERT_24][4] = {
+  {    0.0,    0.0, -SQRT2, -SQRT2 }, {    0.0, -SQRT2,    0.0, -SQRT2 },
+  { -SQRT2,    0.0,    0.0, -SQRT2 }, {  SQRT2,    0.0,    0.0, -SQRT2 },
+  {    0.0,  SQRT2,    0.0, -SQRT2 }, {    0.0,    0.0,  SQRT2, -SQRT2 },
+  {    0.0, -SQRT2, -SQRT2,    0.0 }, { -SQRT2,    0.0, -SQRT2,    0.0 },
+  {  SQRT2,    0.0, -SQRT2,    0.0 }, {    0.0,  SQRT2, -SQRT2,    0.0 },
+  { -SQRT2, -SQRT2,    0.0,    0.0 }, {  SQRT2, -SQRT2,    0.0,    0.0 },
+  { -SQRT2,  SQRT2,    0.0,    0.0 }, {  SQRT2,  SQRT2,    0.0,    0.0 },
+  {    0.0, -SQRT2,  SQRT2,    0.0 }, { -SQRT2,    0.0,  SQRT2,    0.0 },
+  {  SQRT2,    0.0,  SQRT2,    0.0 }, {    0.0,  SQRT2,  SQRT2,    0.0 },
+  {    0.0,    0.0, -SQRT2,  SQRT2 }, {    0.0, -SQRT2,    0.0,  SQRT2 },
+  { -SQRT2,    0.0,    0.0,  SQRT2 }, {  SQRT2,    0.0,    0.0,  SQRT2 },
+  {    0.0,  SQRT2,    0.0,  SQRT2 }, {    0.0,    0.0,  SQRT2,  SQRT2 }
+};
+
+static int edge_24[NUM_EDGE_24][2] = {
+  {  0,  1 }, {  0,  2 }, {  0,  3 }, {  0,  4 }, {  0,  6 }, {  0,  7 },
+  {  0,  8 }, {  0,  9 }, {  1,  2 }, {  1,  3 }, {  1,  5 }, {  1,  6 },
+  {  1, 10 }, {  1, 11 }, {  1, 14 }, {  2,  4 }, {  2,  5 }, {  2,  7 },
+  {  2, 10 }, {  2, 12 }, {  2, 15 }, {  3,  4 }, {  3,  5 }, {  3,  8 },
+  {  3, 11 }, {  3, 13 }, {  3, 16 }, {  4,  5 }, {  4,  9 }, {  4, 12 },
+  {  4, 13 }, {  4, 17 }, {  5, 14 }, {  5, 15 }, {  5, 16 }, {  5, 17 },
+  {  6,  7 }, {  6,  8 }, {  6, 10 }, {  6, 11 }, {  6, 18 }, {  6, 19 },
+  {  7,  9 }, {  7, 10 }, {  7, 12 }, {  7, 18 }, {  7, 20 }, {  8,  9 },
+  {  8, 11 }, {  8, 13 }, {  8, 18 }, {  8, 21 }, {  9, 12 }, {  9, 13 },
+  {  9, 18 }, {  9, 22 }, { 10, 14 }, { 10, 15 }, { 10, 19 }, { 10, 20 },
+  { 11, 14 }, { 11, 16 }, { 11, 19 }, { 11, 21 }, { 12, 15 }, { 12, 17 },
+  { 12, 20 }, { 12, 22 }, { 13, 16 }, { 13, 17 }, { 13, 21 }, { 13, 22 },
+  { 14, 15 }, { 14, 16 }, { 14, 19 }, { 14, 23 }, { 15, 17 }, { 15, 20 },
+  { 15, 23 }, { 16, 17 }, { 16, 21 }, { 16, 23 }, { 17, 22 }, { 17, 23 },
+  { 18, 19 }, { 18, 20 }, { 18, 21 }, { 18, 22 }, { 19, 20 }, { 19, 21 },
+  { 19, 23 }, { 20, 22 }, { 20, 23 }, { 21, 22 }, { 21, 23 }, { 22, 23 }
+};
+
+static int face_24[NUM_FACE_24][VERT_PER_FACE_24] = {
+  {  0,  1,  2 }, {  0,  1,  3 }, {  0,  1,  6 }, {  0,  2,  4 }, 
+  {  0,  2,  7 }, {  0,  3,  4 }, {  0,  3,  8 }, {  0,  4,  9 },
+  {  0,  6,  7 }, {  0,  6,  8 }, {  0,  7,  9 }, {  0,  8,  9 },
+  {  1,  2,  5 }, {  1,  2, 10 }, {  1,  3,  5 }, {  1,  3, 11 },
+  {  1,  5, 14 }, {  1,  6, 10 }, {  1,  6, 11 }, {  1, 10, 14 },
+  {  1, 11, 14 }, {  2,  4,  5 }, {  2,  4, 12 }, {  2,  5, 15 },
+  {  2,  7, 10 }, {  2,  7, 12 }, {  2, 10, 15 }, {  2, 12, 15 },
+  {  3,  4,  5 }, {  3,  4, 13 }, {  3,  5, 16 }, {  3,  8, 11 },
+  {  3,  8, 13 }, {  3, 11, 16 }, {  3, 13, 16 }, {  4,  5, 17 },
+  {  4,  9, 12 }, {  4,  9, 13 }, {  4, 12, 17 }, {  4, 13, 17 },
+  {  5, 14, 15 }, {  5, 14, 16 }, {  5, 15, 17 }, {  5, 16, 17 },
+  {  6,  7, 10 }, {  6,  7, 18 }, {  6,  8, 11 }, {  6,  8, 18 },
+  {  6, 10, 19 }, {  6, 11, 19 }, {  6, 18, 19 }, {  7,  9, 12 },
+  {  7,  9, 18 }, {  7, 10, 20 }, {  7, 12, 20 }, {  7, 18, 20 },
+  {  8,  9, 13 }, {  8,  9, 18 }, {  8, 11, 21 }, {  8, 13, 21 },
+  {  8, 18, 21 }, {  9, 12, 22 }, {  9, 13, 22 }, {  9, 18, 22 },
+  { 10, 14, 15 }, { 10, 14, 19 }, { 10, 15, 20 }, { 10, 19, 20 },
+  { 11, 14, 16 }, { 11, 14, 19 }, { 11, 16, 21 }, { 11, 19, 21 },
+  { 12, 15, 17 }, { 12, 15, 20 }, { 12, 17, 22 }, { 12, 20, 22 },
+  { 13, 16, 17 }, { 13, 16, 21 }, { 13, 17, 22 }, { 13, 21, 22 },
+  { 14, 15, 23 }, { 14, 16, 23 }, { 14, 19, 23 }, { 15, 17, 23 },
+  { 15, 20, 23 }, { 16, 17, 23 }, { 16, 21, 23 }, { 17, 22, 23 },
+  { 18, 19, 20 }, { 18, 19, 21 }, { 18, 20, 22 }, { 18, 21, 22 },
+  { 19, 20, 23 }, { 19, 21, 23 }, { 20, 22, 23 }, { 21, 22, 23 }
+};
+
+static float edge_color_24[NUM_EDGE_24][4];
+static float face_color_24[NUM_FACE_24][4];
+static float face_color_trans_24[NUM_FACE_24][4];
+
+
+/* 120-cell {5,3,3} */
+#define NUM_VERT_120 600
+#define NUM_EDGE_120 1200
+#define NUM_FACE_120 720
+#define VERT_PER_FACE_120 5
+
+#define MIN_EDGE_DEPTH_120 (-GOLDEN22)
+#define MAX_EDGE_DEPTH_120 GOLDEN22
+#define MIN_FACE_DEPTH_120 (-GOLDEN22)
+#define MAX_FACE_DEPTH_120 GOLDEN22
+
+static float vert_120[NUM_VERT_120][4] = {
+  { -GOLDENINV22,          0.0,    -SQRT2INV,    -GOLDEN22 },
+  {  GOLDENINV22,          0.0,    -SQRT2INV,    -GOLDEN22 },
+  {  -GOLDENINV2,  -GOLDENINV2,  -GOLDENINV2,    -GOLDEN22 },
+  {   GOLDENINV2,  -GOLDENINV2,  -GOLDENINV2,    -GOLDEN22 },
+  {  -GOLDENINV2,   GOLDENINV2,  -GOLDENINV2,    -GOLDEN22 },
+  {   GOLDENINV2,   GOLDENINV2,  -GOLDENINV2,    -GOLDEN22 },
+  {          0.0,    -SQRT2INV, -GOLDENINV22,    -GOLDEN22 },
+  {          0.0,     SQRT2INV, -GOLDENINV22,    -GOLDEN22 },
+  {    -SQRT2INV, -GOLDENINV22,          0.0,    -GOLDEN22 },
+  {     SQRT2INV, -GOLDENINV22,          0.0,    -GOLDEN22 },
+  {    -SQRT2INV,  GOLDENINV22,          0.0,    -GOLDEN22 },
+  {     SQRT2INV,  GOLDENINV22,          0.0,    -GOLDEN22 },
+  {          0.0,    -SQRT2INV,  GOLDENINV22,    -GOLDEN22 },
+  {          0.0,     SQRT2INV,  GOLDENINV22,    -GOLDEN22 },
+  {  -GOLDENINV2,  -GOLDENINV2,   GOLDENINV2,    -GOLDEN22 },
+  {   GOLDENINV2,  -GOLDENINV2,   GOLDENINV2,    -GOLDEN22 },
+  {  -GOLDENINV2,   GOLDENINV2,   GOLDENINV2,    -GOLDEN22 },
+  {   GOLDENINV2,   GOLDENINV2,   GOLDENINV2,    -GOLDEN22 },
+  { -GOLDENINV22,          0.0,     SQRT2INV,    -GOLDEN22 },
+  {  GOLDENINV22,          0.0,     SQRT2INV,    -GOLDEN22 },
+  {  -GOLDENINV2,          0.0,     -GOLDEN2,  -SQRT5OVER2 },
+  {   GOLDENINV2,          0.0,     -GOLDEN2,  -SQRT5OVER2 },
+  {    -SQRT2INV,    -SQRT2INV,    -SQRT2INV,  -SQRT5OVER2 },
+  {     SQRT2INV,    -SQRT2INV,    -SQRT2INV,  -SQRT5OVER2 },
+  {    -SQRT2INV,     SQRT2INV,    -SQRT2INV,  -SQRT5OVER2 },
+  {     SQRT2INV,     SQRT2INV,    -SQRT2INV,  -SQRT5OVER2 },
+  {          0.0,     -GOLDEN2,  -GOLDENINV2,  -SQRT5OVER2 },
+  {          0.0,      GOLDEN2,  -GOLDENINV2,  -SQRT5OVER2 },
+  {     -GOLDEN2,  -GOLDENINV2,          0.0,  -SQRT5OVER2 },
+  {      GOLDEN2,  -GOLDENINV2,          0.0,  -SQRT5OVER2 },
+  {     -GOLDEN2,   GOLDENINV2,          0.0,  -SQRT5OVER2 },
+  {      GOLDEN2,   GOLDENINV2,          0.0,  -SQRT5OVER2 },
+  {          0.0,     -GOLDEN2,   GOLDENINV2,  -SQRT5OVER2 },
+  {          0.0,      GOLDEN2,   GOLDENINV2,  -SQRT5OVER2 },
+  {    -SQRT2INV,    -SQRT2INV,     SQRT2INV,  -SQRT5OVER2 },
+  {     SQRT2INV,    -SQRT2INV,     SQRT2INV,  -SQRT5OVER2 },
+  {    -SQRT2INV,     SQRT2INV,     SQRT2INV,  -SQRT5OVER2 },
+  {     SQRT2INV,     SQRT2INV,     SQRT2INV,  -SQRT5OVER2 },
+  {  -GOLDENINV2,          0.0,      GOLDEN2,  -SQRT5OVER2 },
+  {   GOLDENINV2,          0.0,      GOLDEN2,  -SQRT5OVER2 },
+  {          0.0,          0.0,       -SQRT2,       -SQRT2 },
+  {    -SQRT2INV,  -GOLDENINV2,     -GOLDEN2,       -SQRT2 },
+  {     SQRT2INV,  -GOLDENINV2,     -GOLDEN2,       -SQRT2 },
+  {    -SQRT2INV,   GOLDENINV2,     -GOLDEN2,       -SQRT2 },
+  {     SQRT2INV,   GOLDENINV2,     -GOLDEN2,       -SQRT2 },
+  {  -GOLDENINV2,     -GOLDEN2,    -SQRT2INV,       -SQRT2 },
+  {   GOLDENINV2,     -GOLDEN2,    -SQRT2INV,       -SQRT2 },
+  {  -GOLDENINV2,      GOLDEN2,    -SQRT2INV,       -SQRT2 },
+  {   GOLDENINV2,      GOLDEN2,    -SQRT2INV,       -SQRT2 },
+  {     -GOLDEN2,    -SQRT2INV,  -GOLDENINV2,       -SQRT2 },
+  {      GOLDEN2,    -SQRT2INV,  -GOLDENINV2,       -SQRT2 },
+  {     -GOLDEN2,     SQRT2INV,  -GOLDENINV2,       -SQRT2 },
+  {      GOLDEN2,     SQRT2INV,  -GOLDENINV2,       -SQRT2 },
+  {          0.0,       -SQRT2,          0.0,       -SQRT2 },
+  {       -SQRT2,          0.0,          0.0,       -SQRT2 },
+  {        SQRT2,          0.0,          0.0,       -SQRT2 },
+  {          0.0,        SQRT2,          0.0,       -SQRT2 },
+  {     -GOLDEN2,    -SQRT2INV,   GOLDENINV2,       -SQRT2 },
+  {      GOLDEN2,    -SQRT2INV,   GOLDENINV2,       -SQRT2 },
+  {     -GOLDEN2,     SQRT2INV,   GOLDENINV2,       -SQRT2 },
+  {      GOLDEN2,     SQRT2INV,   GOLDENINV2,       -SQRT2 },
+  {  -GOLDENINV2,     -GOLDEN2,     SQRT2INV,       -SQRT2 },
+  {   GOLDENINV2,     -GOLDEN2,     SQRT2INV,       -SQRT2 },
+  {  -GOLDENINV2,      GOLDEN2,     SQRT2INV,       -SQRT2 },
+  {   GOLDENINV2,      GOLDEN2,     SQRT2INV,       -SQRT2 },
+  {    -SQRT2INV,  -GOLDENINV2,      GOLDEN2,       -SQRT2 },
+  {     SQRT2INV,  -GOLDENINV2,      GOLDEN2,       -SQRT2 },
+  {    -SQRT2INV,   GOLDENINV2,      GOLDEN2,       -SQRT2 },
+  {     SQRT2INV,   GOLDENINV2,      GOLDEN2,       -SQRT2 },
+  {          0.0,          0.0,        SQRT2,       -SQRT2 },
+  {          0.0,  -GOLDENINV2,  -SQRT5OVER2,     -GOLDEN2 },
+  {          0.0,   GOLDENINV2,  -SQRT5OVER2,     -GOLDEN2 },
+  {  -GOLDENINV2,    -SQRT2INV,       -SQRT2,     -GOLDEN2 },
+  {   GOLDENINV2,    -SQRT2INV,       -SQRT2,     -GOLDEN2 },
+  {  -GOLDENINV2,     SQRT2INV,       -SQRT2,     -GOLDEN2 },
+  {   GOLDENINV2,     SQRT2INV,       -SQRT2,     -GOLDEN2 },
+  { -GOLDENINV22,     -GOLDEN2,     -GOLDEN2,     -GOLDEN2 },
+  {  GOLDENINV22,     -GOLDEN2,     -GOLDEN2,     -GOLDEN2 },
+  {     -GOLDEN2, -GOLDENINV22,     -GOLDEN2,     -GOLDEN2 },
+  {      GOLDEN2, -GOLDENINV22,     -GOLDEN2,     -GOLDEN2 },
+  {     -GOLDEN2,  GOLDENINV22,     -GOLDEN2,     -GOLDEN2 },
+  {      GOLDEN2,  GOLDENINV22,     -GOLDEN2,     -GOLDEN2 },
+  { -GOLDENINV22,      GOLDEN2,     -GOLDEN2,     -GOLDEN2 },
+  {  GOLDENINV22,      GOLDEN2,     -GOLDEN2,     -GOLDEN2 },
+  {       -SQRT2,  -GOLDENINV2,    -SQRT2INV,     -GOLDEN2 },
+  {        SQRT2,  -GOLDENINV2,    -SQRT2INV,     -GOLDEN2 },
+  {       -SQRT2,   GOLDENINV2,    -SQRT2INV,     -GOLDEN2 },
+  {        SQRT2,   GOLDENINV2,    -SQRT2INV,     -GOLDEN2 },
+  {    -SQRT2INV,       -SQRT2,  -GOLDENINV2,     -GOLDEN2 },
+  {     SQRT2INV,       -SQRT2,  -GOLDENINV2,     -GOLDEN2 },
+  {  -SQRT5OVER2,          0.0,  -GOLDENINV2,     -GOLDEN2 },
+  {   SQRT5OVER2,          0.0,  -GOLDENINV2,     -GOLDEN2 },
+  {    -SQRT2INV,        SQRT2,  -GOLDENINV2,     -GOLDEN2 },
+  {     SQRT2INV,        SQRT2,  -GOLDENINV2,     -GOLDEN2 },
+  {     -GOLDEN2,     -GOLDEN2, -GOLDENINV22,     -GOLDEN2 },
+  {      GOLDEN2,     -GOLDEN2, -GOLDENINV22,     -GOLDEN2 },
+  {     -GOLDEN2,      GOLDEN2, -GOLDENINV22,     -GOLDEN2 },
+  {      GOLDEN2,      GOLDEN2, -GOLDENINV22,     -GOLDEN2 },
+  {  -GOLDENINV2,  -SQRT5OVER2,          0.0,     -GOLDEN2 },
+  {   GOLDENINV2,  -SQRT5OVER2,          0.0,     -GOLDEN2 },
+  {  -GOLDENINV2,   SQRT5OVER2,          0.0,     -GOLDEN2 },
+  {   GOLDENINV2,   SQRT5OVER2,          0.0,     -GOLDEN2 },
+  {     -GOLDEN2,     -GOLDEN2,  GOLDENINV22,     -GOLDEN2 },
+  {      GOLDEN2,     -GOLDEN2,  GOLDENINV22,     -GOLDEN2 },
+  {     -GOLDEN2,      GOLDEN2,  GOLDENINV22,     -GOLDEN2 },
+  {      GOLDEN2,      GOLDEN2,  GOLDENINV22,     -GOLDEN2 },
+  {    -SQRT2INV,       -SQRT2,   GOLDENINV2,     -GOLDEN2 },
+  {     SQRT2INV,       -SQRT2,   GOLDENINV2,     -GOLDEN2 },
+  {  -SQRT5OVER2,          0.0,   GOLDENINV2,     -GOLDEN2 },
+  {   SQRT5OVER2,          0.0,   GOLDENINV2,     -GOLDEN2 },
+  {    -SQRT2INV,        SQRT2,   GOLDENINV2,     -GOLDEN2 },
+  {     SQRT2INV,        SQRT2,   GOLDENINV2,     -GOLDEN2 },
+  {       -SQRT2,  -GOLDENINV2,     SQRT2INV,     -GOLDEN2 },
+  {        SQRT2,  -GOLDENINV2,     SQRT2INV,     -GOLDEN2 },
+  {       -SQRT2,   GOLDENINV2,     SQRT2INV,     -GOLDEN2 },
+  {        SQRT2,   GOLDENINV2,     SQRT2INV,     -GOLDEN2 },
+  { -GOLDENINV22,     -GOLDEN2,      GOLDEN2,     -GOLDEN2 },
+  {  GOLDENINV22,     -GOLDEN2,      GOLDEN2,     -GOLDEN2 },
+  {     -GOLDEN2, -GOLDENINV22,      GOLDEN2,     -GOLDEN2 },
+  {      GOLDEN2, -GOLDENINV22,      GOLDEN2,     -GOLDEN2 },
+  {     -GOLDEN2,  GOLDENINV22,      GOLDEN2,     -GOLDEN2 },
+  {      GOLDEN2,  GOLDENINV22,      GOLDEN2,     -GOLDEN2 },
+  { -GOLDENINV22,      GOLDEN2,      GOLDEN2,     -GOLDEN2 },
+  {  GOLDENINV22,      GOLDEN2,      GOLDEN2,     -GOLDEN2 },
+  {  -GOLDENINV2,    -SQRT2INV,        SQRT2,     -GOLDEN2 },
+  {   GOLDENINV2,    -SQRT2INV,        SQRT2,     -GOLDEN2 },
+  {  -GOLDENINV2,     SQRT2INV,        SQRT2,     -GOLDEN2 },
+  {   GOLDENINV2,     SQRT2INV,        SQRT2,     -GOLDEN2 },
+  {          0.0,  -GOLDENINV2,   SQRT5OVER2,     -GOLDEN2 },
+  {          0.0,   GOLDENINV2,   SQRT5OVER2,     -GOLDEN2 },
+  {          0.0, -GOLDENINV22,    -GOLDEN22,    -SQRT2INV },
+  {          0.0,  GOLDENINV22,    -GOLDEN22,    -SQRT2INV },
+  {    -SQRT2INV,    -SQRT2INV,  -SQRT5OVER2,    -SQRT2INV },
+  {     SQRT2INV,    -SQRT2INV,  -SQRT5OVER2,    -SQRT2INV },
+  {    -SQRT2INV,     SQRT2INV,  -SQRT5OVER2,    -SQRT2INV },
+  {     SQRT2INV,     SQRT2INV,  -SQRT5OVER2,    -SQRT2INV },
+  {     -GOLDEN2,  -GOLDENINV2,       -SQRT2,    -SQRT2INV },
+  {      GOLDEN2,  -GOLDENINV2,       -SQRT2,    -SQRT2INV },
+  {     -GOLDEN2,   GOLDENINV2,       -SQRT2,    -SQRT2INV },
+  {      GOLDEN2,   GOLDENINV2,       -SQRT2,    -SQRT2INV },
+  {  -GOLDENINV2,       -SQRT2,     -GOLDEN2,    -SQRT2INV },
+  {   GOLDENINV2,       -SQRT2,     -GOLDEN2,    -SQRT2INV },
+  {  -GOLDENINV2,        SQRT2,     -GOLDEN2,    -SQRT2INV },
+  {   GOLDENINV2,        SQRT2,     -GOLDEN2,    -SQRT2INV },
+  {    -SQRT2INV,  -SQRT5OVER2,    -SQRT2INV,    -SQRT2INV },
+  {     SQRT2INV,  -SQRT5OVER2,    -SQRT2INV,    -SQRT2INV },
+  {  -SQRT5OVER2,    -SQRT2INV,    -SQRT2INV,    -SQRT2INV },
+  {   SQRT5OVER2,    -SQRT2INV,    -SQRT2INV,    -SQRT2INV },
+  {  -SQRT5OVER2,     SQRT2INV,    -SQRT2INV,    -SQRT2INV },
+  {   SQRT5OVER2,     SQRT2INV,    -SQRT2INV,    -SQRT2INV },
+  {    -SQRT2INV,   SQRT5OVER2,    -SQRT2INV,    -SQRT2INV },
+  {     SQRT2INV,   SQRT5OVER2,    -SQRT2INV,    -SQRT2INV },
+  {       -SQRT2,     -GOLDEN2,  -GOLDENINV2,    -SQRT2INV },
+  {        SQRT2,     -GOLDEN2,  -GOLDENINV2,    -SQRT2INV },
+  {       -SQRT2,      GOLDEN2,  -GOLDENINV2,    -SQRT2INV },
+  {        SQRT2,      GOLDEN2,  -GOLDENINV2,    -SQRT2INV },
+  {    -GOLDEN22,          0.0, -GOLDENINV22,    -SQRT2INV },
+  {     GOLDEN22,          0.0, -GOLDENINV22,    -SQRT2INV },
+  { -GOLDENINV22,    -GOLDEN22,          0.0,    -SQRT2INV },
+  {  GOLDENINV22,    -GOLDEN22,          0.0,    -SQRT2INV },
+  { -GOLDENINV22,     GOLDEN22,          0.0,    -SQRT2INV },
+  {  GOLDENINV22,     GOLDEN22,          0.0,    -SQRT2INV },
+  {    -GOLDEN22,          0.0,  GOLDENINV22,    -SQRT2INV },
+  {     GOLDEN22,          0.0,  GOLDENINV22,    -SQRT2INV },
+  {       -SQRT2,     -GOLDEN2,   GOLDENINV2,    -SQRT2INV },
+  {        SQRT2,     -GOLDEN2,   GOLDENINV2,    -SQRT2INV },
+  {       -SQRT2,      GOLDEN2,   GOLDENINV2,    -SQRT2INV },
+  {        SQRT2,      GOLDEN2,   GOLDENINV2,    -SQRT2INV },
+  {    -SQRT2INV,  -SQRT5OVER2,     SQRT2INV,    -SQRT2INV },
+  {     SQRT2INV,  -SQRT5OVER2,     SQRT2INV,    -SQRT2INV },
+  {  -SQRT5OVER2,    -SQRT2INV,     SQRT2INV,    -SQRT2INV },
+  {   SQRT5OVER2,    -SQRT2INV,     SQRT2INV,    -SQRT2INV },
+  {  -SQRT5OVER2,     SQRT2INV,     SQRT2INV,    -SQRT2INV },
+  {   SQRT5OVER2,     SQRT2INV,     SQRT2INV,    -SQRT2INV },
+  {    -SQRT2INV,   SQRT5OVER2,     SQRT2INV,    -SQRT2INV },
+  {     SQRT2INV,   SQRT5OVER2,     SQRT2INV,    -SQRT2INV },
+  {  -GOLDENINV2,       -SQRT2,      GOLDEN2,    -SQRT2INV },
+  {   GOLDENINV2,       -SQRT2,      GOLDEN2,    -SQRT2INV },
+  {  -GOLDENINV2,        SQRT2,      GOLDEN2,    -SQRT2INV },
+  {   GOLDENINV2,        SQRT2,      GOLDEN2,    -SQRT2INV },
+  {     -GOLDEN2,  -GOLDENINV2,        SQRT2,    -SQRT2INV },
+  {      GOLDEN2,  -GOLDENINV2,        SQRT2,    -SQRT2INV },
+  {     -GOLDEN2,   GOLDENINV2,        SQRT2,    -SQRT2INV },
+  {      GOLDEN2,   GOLDENINV2,        SQRT2,    -SQRT2INV },
+  {    -SQRT2INV,    -SQRT2INV,   SQRT5OVER2,    -SQRT2INV },
+  {     SQRT2INV,    -SQRT2INV,   SQRT5OVER2,    -SQRT2INV },
+  {    -SQRT2INV,     SQRT2INV,   SQRT5OVER2,    -SQRT2INV },
+  {     SQRT2INV,     SQRT2INV,   SQRT5OVER2,    -SQRT2INV },
+  {          0.0, -GOLDENINV22,     GOLDEN22,    -SQRT2INV },
+  {          0.0,  GOLDENINV22,     GOLDEN22,    -SQRT2INV },
+  {  -GOLDENINV2,  -GOLDENINV2,    -GOLDEN22,  -GOLDENINV2 },
+  {   GOLDENINV2,  -GOLDENINV2,    -GOLDEN22,  -GOLDENINV2 },
+  {  -GOLDENINV2,   GOLDENINV2,    -GOLDEN22,  -GOLDENINV2 },
+  {   GOLDENINV2,   GOLDENINV2,    -GOLDEN22,  -GOLDENINV2 },
+  {     -GOLDEN2,          0.0,  -SQRT5OVER2,  -GOLDENINV2 },
+  {      GOLDEN2,          0.0,  -SQRT5OVER2,  -GOLDENINV2 },
+  {    -SQRT2INV,     -GOLDEN2,       -SQRT2,  -GOLDENINV2 },
+  {     SQRT2INV,     -GOLDEN2,       -SQRT2,  -GOLDENINV2 },
+  {    -SQRT2INV,      GOLDEN2,       -SQRT2,  -GOLDENINV2 },
+  {     SQRT2INV,      GOLDEN2,       -SQRT2,  -GOLDENINV2 },
+  {          0.0,  -SQRT5OVER2,     -GOLDEN2,  -GOLDENINV2 },
+  {       -SQRT2,    -SQRT2INV,     -GOLDEN2,  -GOLDENINV2 },
+  {        SQRT2,    -SQRT2INV,     -GOLDEN2,  -GOLDENINV2 },
+  {       -SQRT2,     SQRT2INV,     -GOLDEN2,  -GOLDENINV2 },
+  {        SQRT2,     SQRT2INV,     -GOLDEN2,  -GOLDENINV2 },
+  {          0.0,   SQRT5OVER2,     -GOLDEN2,  -GOLDENINV2 },
+  {     -GOLDEN2,       -SQRT2,    -SQRT2INV,  -GOLDENINV2 },
+  {      GOLDEN2,       -SQRT2,    -SQRT2INV,  -GOLDENINV2 },
+  {     -GOLDEN2,        SQRT2,    -SQRT2INV,  -GOLDENINV2 },
+  {      GOLDEN2,        SQRT2,    -SQRT2INV,  -GOLDENINV2 },
+  {  -GOLDENINV2,    -GOLDEN22,  -GOLDENINV2,  -GOLDENINV2 },
+  {   GOLDENINV2,    -GOLDEN22,  -GOLDENINV2,  -GOLDENINV2 },
+  {    -GOLDEN22,  -GOLDENINV2,  -GOLDENINV2,  -GOLDENINV2 },
+  {     GOLDEN22,  -GOLDENINV2,  -GOLDENINV2,  -GOLDENINV2 },
+  {    -GOLDEN22,   GOLDENINV2,  -GOLDENINV2,  -GOLDENINV2 },
+  {     GOLDEN22,   GOLDENINV2,  -GOLDENINV2,  -GOLDENINV2 },
+  {  -GOLDENINV2,     GOLDEN22,  -GOLDENINV2,  -GOLDENINV2 },
+  {   GOLDENINV2,     GOLDEN22,  -GOLDENINV2,  -GOLDENINV2 },
+  {  -SQRT5OVER2,     -GOLDEN2,          0.0,  -GOLDENINV2 },
+  {   SQRT5OVER2,     -GOLDEN2,          0.0,  -GOLDENINV2 },
+  {  -SQRT5OVER2,      GOLDEN2,          0.0,  -GOLDENINV2 },
+  {   SQRT5OVER2,      GOLDEN2,          0.0,  -GOLDENINV2 },
+  {  -GOLDENINV2,    -GOLDEN22,   GOLDENINV2,  -GOLDENINV2 },
+  {   GOLDENINV2,    -GOLDEN22,   GOLDENINV2,  -GOLDENINV2 },
+  {    -GOLDEN22,  -GOLDENINV2,   GOLDENINV2,  -GOLDENINV2 },
+  {     GOLDEN22,  -GOLDENINV2,   GOLDENINV2,  -GOLDENINV2 },
+  {    -GOLDEN22,   GOLDENINV2,   GOLDENINV2,  -GOLDENINV2 },
+  {     GOLDEN22,   GOLDENINV2,   GOLDENINV2,  -GOLDENINV2 },
+  {  -GOLDENINV2,     GOLDEN22,   GOLDENINV2,  -GOLDENINV2 },
+  {   GOLDENINV2,     GOLDEN22,   GOLDENINV2,  -GOLDENINV2 },
+  {     -GOLDEN2,       -SQRT2,     SQRT2INV,  -GOLDENINV2 },
+  {      GOLDEN2,       -SQRT2,     SQRT2INV,  -GOLDENINV2 },
+  {     -GOLDEN2,        SQRT2,     SQRT2INV,  -GOLDENINV2 },
+  {      GOLDEN2,        SQRT2,     SQRT2INV,  -GOLDENINV2 },
+  {          0.0,  -SQRT5OVER2,      GOLDEN2,  -GOLDENINV2 },
+  {       -SQRT2,    -SQRT2INV,      GOLDEN2,  -GOLDENINV2 },
+  {        SQRT2,    -SQRT2INV,      GOLDEN2,  -GOLDENINV2 },
+  {       -SQRT2,     SQRT2INV,      GOLDEN2,  -GOLDENINV2 },
+  {        SQRT2,     SQRT2INV,      GOLDEN2,  -GOLDENINV2 },
+  {          0.0,   SQRT5OVER2,      GOLDEN2,  -GOLDENINV2 },
+  {    -SQRT2INV,     -GOLDEN2,        SQRT2,  -GOLDENINV2 },
+  {     SQRT2INV,     -GOLDEN2,        SQRT2,  -GOLDENINV2 },
+  {    -SQRT2INV,      GOLDEN2,        SQRT2,  -GOLDENINV2 },
+  {     SQRT2INV,      GOLDEN2,        SQRT2,  -GOLDENINV2 },
+  {     -GOLDEN2,          0.0,   SQRT5OVER2,  -GOLDENINV2 },
+  {      GOLDEN2,          0.0,   SQRT5OVER2,  -GOLDENINV2 },
+  {  -GOLDENINV2,  -GOLDENINV2,     GOLDEN22,  -GOLDENINV2 },
+  {   GOLDENINV2,  -GOLDENINV2,     GOLDEN22,  -GOLDENINV2 },
+  {  -GOLDENINV2,   GOLDENINV2,     GOLDEN22,  -GOLDENINV2 },
+  {   GOLDENINV2,   GOLDENINV2,     GOLDEN22,  -GOLDENINV2 },
+  {    -SQRT2INV,          0.0,    -GOLDEN22, -GOLDENINV22 },
+  {     SQRT2INV,          0.0,    -GOLDEN22, -GOLDENINV22 },
+  {     -GOLDEN2,     -GOLDEN2,     -GOLDEN2, -GOLDENINV22 },
+  {      GOLDEN2,     -GOLDEN2,     -GOLDEN2, -GOLDENINV22 },
+  {     -GOLDEN2,      GOLDEN2,     -GOLDEN2, -GOLDENINV22 },
+  {      GOLDEN2,      GOLDEN2,     -GOLDEN2, -GOLDENINV22 },
+  {          0.0,    -GOLDEN22,    -SQRT2INV, -GOLDENINV22 },
+  {          0.0,     GOLDEN22,    -SQRT2INV, -GOLDENINV22 },
+  {    -GOLDEN22,    -SQRT2INV,          0.0, -GOLDENINV22 },
+  {     GOLDEN22,    -SQRT2INV,          0.0, -GOLDENINV22 },
+  {    -GOLDEN22,     SQRT2INV,          0.0, -GOLDENINV22 },
+  {     GOLDEN22,     SQRT2INV,          0.0, -GOLDENINV22 },
+  {          0.0,    -GOLDEN22,     SQRT2INV, -GOLDENINV22 },
+  {          0.0,     GOLDEN22,     SQRT2INV, -GOLDENINV22 },
+  {     -GOLDEN2,     -GOLDEN2,      GOLDEN2, -GOLDENINV22 },
+  {      GOLDEN2,     -GOLDEN2,      GOLDEN2, -GOLDENINV22 },
+  {     -GOLDEN2,      GOLDEN2,      GOLDEN2, -GOLDENINV22 },
+  {      GOLDEN2,      GOLDEN2,      GOLDEN2, -GOLDENINV22 },
+  {    -SQRT2INV,          0.0,     GOLDEN22, -GOLDENINV22 },
+  {     SQRT2INV,          0.0,     GOLDEN22, -GOLDENINV22 },
+  { -GOLDENINV22,    -SQRT2INV,    -GOLDEN22,          0.0 },
+  {  GOLDENINV22,    -SQRT2INV,    -GOLDEN22,          0.0 },
+  { -GOLDENINV22,     SQRT2INV,    -GOLDEN22,          0.0 },
+  {  GOLDENINV22,     SQRT2INV,    -GOLDEN22,          0.0 },
+  {  -GOLDENINV2,     -GOLDEN2,  -SQRT5OVER2,          0.0 },
+  {   GOLDENINV2,     -GOLDEN2,  -SQRT5OVER2,          0.0 },
+  {  -GOLDENINV2,      GOLDEN2,  -SQRT5OVER2,          0.0 },
+  {   GOLDENINV2,      GOLDEN2,  -SQRT5OVER2,          0.0 },
+  {          0.0,       -SQRT2,       -SQRT2,          0.0 },
+  {       -SQRT2,          0.0,       -SQRT2,          0.0 },
+  {        SQRT2,          0.0,       -SQRT2,          0.0 },
+  {          0.0,        SQRT2,       -SQRT2,          0.0 },
+  {  -SQRT5OVER2,  -GOLDENINV2,     -GOLDEN2,          0.0 },
+  {   SQRT5OVER2,  -GOLDENINV2,     -GOLDEN2,          0.0 },
+  {  -SQRT5OVER2,   GOLDENINV2,     -GOLDEN2,          0.0 },
+  {   SQRT5OVER2,   GOLDENINV2,     -GOLDEN2,          0.0 },
+  {    -GOLDEN22, -GOLDENINV22,    -SQRT2INV,          0.0 },
+  {     GOLDEN22, -GOLDENINV22,    -SQRT2INV,          0.0 },
+  {    -GOLDEN22,  GOLDENINV22,    -SQRT2INV,          0.0 },
+  {     GOLDEN22,  GOLDENINV22,    -SQRT2INV,          0.0 },
+  {     -GOLDEN2,  -SQRT5OVER2,  -GOLDENINV2,          0.0 },
+  {      GOLDEN2,  -SQRT5OVER2,  -GOLDENINV2,          0.0 },
+  {     -GOLDEN2,   SQRT5OVER2,  -GOLDENINV2,          0.0 },
+  {      GOLDEN2,   SQRT5OVER2,  -GOLDENINV2,          0.0 },
+  {    -SQRT2INV,    -GOLDEN22, -GOLDENINV22,          0.0 },
+  {     SQRT2INV,    -GOLDEN22, -GOLDENINV22,          0.0 },
+  {    -SQRT2INV,     GOLDEN22, -GOLDENINV22,          0.0 },
+  {     SQRT2INV,     GOLDEN22, -GOLDENINV22,          0.0 },
+  {       -SQRT2,       -SQRT2,          0.0,          0.0 },
+  {        SQRT2,       -SQRT2,          0.0,          0.0 },
+  {       -SQRT2,        SQRT2,          0.0,          0.0 },
+  {        SQRT2,        SQRT2,          0.0,          0.0 },
+  {    -SQRT2INV,    -GOLDEN22,  GOLDENINV22,          0.0 },
+  {     SQRT2INV,    -GOLDEN22,  GOLDENINV22,          0.0 },
+  {    -SQRT2INV,     GOLDEN22,  GOLDENINV22,          0.0 },
+  {     SQRT2INV,     GOLDEN22,  GOLDENINV22,          0.0 },
+  {     -GOLDEN2,  -SQRT5OVER2,   GOLDENINV2,          0.0 },
+  {      GOLDEN2,  -SQRT5OVER2,   GOLDENINV2,          0.0 },
+  {     -GOLDEN2,   SQRT5OVER2,   GOLDENINV2,          0.0 },
+  {      GOLDEN2,   SQRT5OVER2,   GOLDENINV2,          0.0 },
+  {    -GOLDEN22, -GOLDENINV22,     SQRT2INV,          0.0 },
+  {     GOLDEN22, -GOLDENINV22,     SQRT2INV,          0.0 },
+  {    -GOLDEN22,  GOLDENINV22,     SQRT2INV,          0.0 },
+  {     GOLDEN22,  GOLDENINV22,     SQRT2INV,          0.0 },
+  {  -SQRT5OVER2,  -GOLDENINV2,      GOLDEN2,          0.0 },
+  {   SQRT5OVER2,  -GOLDENINV2,      GOLDEN2,          0.0 },
+  {  -SQRT5OVER2,   GOLDENINV2,      GOLDEN2,          0.0 },
+  {   SQRT5OVER2,   GOLDENINV2,      GOLDEN2,          0.0 },
+  {          0.0,       -SQRT2,        SQRT2,          0.0 },
+  {       -SQRT2,          0.0,        SQRT2,          0.0 },
+  {        SQRT2,          0.0,        SQRT2,          0.0 },
+  {          0.0,        SQRT2,        SQRT2,          0.0 },
+  {  -GOLDENINV2,     -GOLDEN2,   SQRT5OVER2,          0.0 },
+  {   GOLDENINV2,     -GOLDEN2,   SQRT5OVER2,          0.0 },
+  {  -GOLDENINV2,      GOLDEN2,   SQRT5OVER2,          0.0 },
+  {   GOLDENINV2,      GOLDEN2,   SQRT5OVER2,          0.0 },
+  { -GOLDENINV22,    -SQRT2INV,     GOLDEN22,          0.0 },
+  {  GOLDENINV22,    -SQRT2INV,     GOLDEN22,          0.0 },
+  { -GOLDENINV22,     SQRT2INV,     GOLDEN22,          0.0 },
+  {  GOLDENINV22,     SQRT2INV,     GOLDEN22,          0.0 },
+  {    -SQRT2INV,          0.0,    -GOLDEN22,  GOLDENINV22 },
+  {     SQRT2INV,          0.0,    -GOLDEN22,  GOLDENINV22 },
+  {     -GOLDEN2,     -GOLDEN2,     -GOLDEN2,  GOLDENINV22 },
+  {      GOLDEN2,     -GOLDEN2,     -GOLDEN2,  GOLDENINV22 },
+  {     -GOLDEN2,      GOLDEN2,     -GOLDEN2,  GOLDENINV22 },
+  {      GOLDEN2,      GOLDEN2,     -GOLDEN2,  GOLDENINV22 },
+  {          0.0,    -GOLDEN22,    -SQRT2INV,  GOLDENINV22 },
+  {          0.0,     GOLDEN22,    -SQRT2INV,  GOLDENINV22 },
+  {    -GOLDEN22,    -SQRT2INV,          0.0,  GOLDENINV22 },
+  {     GOLDEN22,    -SQRT2INV,          0.0,  GOLDENINV22 },
+  {    -GOLDEN22,     SQRT2INV,          0.0,  GOLDENINV22 },
+  {     GOLDEN22,     SQRT2INV,          0.0,  GOLDENINV22 },
+  {          0.0,    -GOLDEN22,     SQRT2INV,  GOLDENINV22 },
+  {          0.0,     GOLDEN22,     SQRT2INV,  GOLDENINV22 },
+  {     -GOLDEN2,     -GOLDEN2,      GOLDEN2,  GOLDENINV22 },
+  {      GOLDEN2,     -GOLDEN2,      GOLDEN2,  GOLDENINV22 },
+  {     -GOLDEN2,      GOLDEN2,      GOLDEN2,  GOLDENINV22 },
+  {      GOLDEN2,      GOLDEN2,      GOLDEN2,  GOLDENINV22 },
+  {    -SQRT2INV,          0.0,     GOLDEN22,  GOLDENINV22 },
+  {     SQRT2INV,          0.0,     GOLDEN22,  GOLDENINV22 },
+  {  -GOLDENINV2,  -GOLDENINV2,    -GOLDEN22,   GOLDENINV2 },
+  {   GOLDENINV2,  -GOLDENINV2,    -GOLDEN22,   GOLDENINV2 },
+  {  -GOLDENINV2,   GOLDENINV2,    -GOLDEN22,   GOLDENINV2 },
+  {   GOLDENINV2,   GOLDENINV2,    -GOLDEN22,   GOLDENINV2 },
+  {     -GOLDEN2,          0.0,  -SQRT5OVER2,   GOLDENINV2 },
+  {      GOLDEN2,          0.0,  -SQRT5OVER2,   GOLDENINV2 },
+  {    -SQRT2INV,     -GOLDEN2,       -SQRT2,   GOLDENINV2 },
+  {     SQRT2INV,     -GOLDEN2,       -SQRT2,   GOLDENINV2 },
+  {    -SQRT2INV,      GOLDEN2,       -SQRT2,   GOLDENINV2 },
+  {     SQRT2INV,      GOLDEN2,       -SQRT2,   GOLDENINV2 },
+  {          0.0,  -SQRT5OVER2,     -GOLDEN2,   GOLDENINV2 },
+  {       -SQRT2,    -SQRT2INV,     -GOLDEN2,   GOLDENINV2 },
+  {        SQRT2,    -SQRT2INV,     -GOLDEN2,   GOLDENINV2 },
+  {       -SQRT2,     SQRT2INV,     -GOLDEN2,   GOLDENINV2 },
+  {        SQRT2,     SQRT2INV,     -GOLDEN2,   GOLDENINV2 },
+  {          0.0,   SQRT5OVER2,     -GOLDEN2,   GOLDENINV2 },
+  {     -GOLDEN2,       -SQRT2,    -SQRT2INV,   GOLDENINV2 },
+  {      GOLDEN2,       -SQRT2,    -SQRT2INV,   GOLDENINV2 },
+  {     -GOLDEN2,        SQRT2,    -SQRT2INV,   GOLDENINV2 },
+  {      GOLDEN2,        SQRT2,    -SQRT2INV,   GOLDENINV2 },
+  {  -GOLDENINV2,    -GOLDEN22,  -GOLDENINV2,   GOLDENINV2 },
+  {   GOLDENINV2,    -GOLDEN22,  -GOLDENINV2,   GOLDENINV2 },
+  {    -GOLDEN22,  -GOLDENINV2,  -GOLDENINV2,   GOLDENINV2 },
+  {     GOLDEN22,  -GOLDENINV2,  -GOLDENINV2,   GOLDENINV2 },
+  {    -GOLDEN22,   GOLDENINV2,  -GOLDENINV2,   GOLDENINV2 },
+  {     GOLDEN22,   GOLDENINV2,  -GOLDENINV2,   GOLDENINV2 },
+  {  -GOLDENINV2,     GOLDEN22,  -GOLDENINV2,   GOLDENINV2 },
+  {   GOLDENINV2,     GOLDEN22,  -GOLDENINV2,   GOLDENINV2 },
+  {  -SQRT5OVER2,     -GOLDEN2,          0.0,   GOLDENINV2 },
+  {   SQRT5OVER2,     -GOLDEN2,          0.0,   GOLDENINV2 },
+  {  -SQRT5OVER2,      GOLDEN2,          0.0,   GOLDENINV2 },
+  {   SQRT5OVER2,      GOLDEN2,          0.0,   GOLDENINV2 },
+  {  -GOLDENINV2,    -GOLDEN22,   GOLDENINV2,   GOLDENINV2 },
+  {   GOLDENINV2,    -GOLDEN22,   GOLDENINV2,   GOLDENINV2 },
+  {    -GOLDEN22,  -GOLDENINV2,   GOLDENINV2,   GOLDENINV2 },
+  {     GOLDEN22,  -GOLDENINV2,   GOLDENINV2,   GOLDENINV2 },
+  {    -GOLDEN22,   GOLDENINV2,   GOLDENINV2,   GOLDENINV2 },
+  {     GOLDEN22,   GOLDENINV2,   GOLDENINV2,   GOLDENINV2 },
+  {  -GOLDENINV2,     GOLDEN22,   GOLDENINV2,   GOLDENINV2 },
+  {   GOLDENINV2,     GOLDEN22,   GOLDENINV2,   GOLDENINV2 },
+  {     -GOLDEN2,       -SQRT2,     SQRT2INV,   GOLDENINV2 },
+  {      GOLDEN2,       -SQRT2,     SQRT2INV,   GOLDENINV2 },
+  {     -GOLDEN2,        SQRT2,     SQRT2INV,   GOLDENINV2 },
+  {      GOLDEN2,        SQRT2,     SQRT2INV,   GOLDENINV2 },
+  {          0.0,  -SQRT5OVER2,      GOLDEN2,   GOLDENINV2 },
+  {       -SQRT2,    -SQRT2INV,      GOLDEN2,   GOLDENINV2 },
+  {        SQRT2,    -SQRT2INV,      GOLDEN2,   GOLDENINV2 },
+  {       -SQRT2,     SQRT2INV,      GOLDEN2,   GOLDENINV2 },
+  {        SQRT2,     SQRT2INV,      GOLDEN2,   GOLDENINV2 },
+  {          0.0,   SQRT5OVER2,      GOLDEN2,   GOLDENINV2 },
+  {    -SQRT2INV,     -GOLDEN2,        SQRT2,   GOLDENINV2 },
+  {     SQRT2INV,     -GOLDEN2,        SQRT2,   GOLDENINV2 },
+  {    -SQRT2INV,      GOLDEN2,        SQRT2,   GOLDENINV2 },
+  {     SQRT2INV,      GOLDEN2,        SQRT2,   GOLDENINV2 },
+  {     -GOLDEN2,          0.0,   SQRT5OVER2,   GOLDENINV2 },
+  {      GOLDEN2,          0.0,   SQRT5OVER2,   GOLDENINV2 },
+  {  -GOLDENINV2,  -GOLDENINV2,     GOLDEN22,   GOLDENINV2 },
+  {   GOLDENINV2,  -GOLDENINV2,     GOLDEN22,   GOLDENINV2 },
+  {  -GOLDENINV2,   GOLDENINV2,     GOLDEN22,   GOLDENINV2 },
+  {   GOLDENINV2,   GOLDENINV2,     GOLDEN22,   GOLDENINV2 },
+  {          0.0, -GOLDENINV22,    -GOLDEN22,     SQRT2INV },
+  {          0.0,  GOLDENINV22,    -GOLDEN22,     SQRT2INV },
+  {    -SQRT2INV,    -SQRT2INV,  -SQRT5OVER2,     SQRT2INV },
+  {     SQRT2INV,    -SQRT2INV,  -SQRT5OVER2,     SQRT2INV },
+  {    -SQRT2INV,     SQRT2INV,  -SQRT5OVER2,     SQRT2INV },
+  {     SQRT2INV,     SQRT2INV,  -SQRT5OVER2,     SQRT2INV },
+  {     -GOLDEN2,  -GOLDENINV2,       -SQRT2,     SQRT2INV },
+  {      GOLDEN2,  -GOLDENINV2,       -SQRT2,     SQRT2INV },
+  {     -GOLDEN2,   GOLDENINV2,       -SQRT2,     SQRT2INV },
+  {      GOLDEN2,   GOLDENINV2,       -SQRT2,     SQRT2INV },
+  {  -GOLDENINV2,       -SQRT2,     -GOLDEN2,     SQRT2INV },
+  {   GOLDENINV2,       -SQRT2,     -GOLDEN2,     SQRT2INV },
+  {  -GOLDENINV2,        SQRT2,     -GOLDEN2,     SQRT2INV },
+  {   GOLDENINV2,        SQRT2,     -GOLDEN2,     SQRT2INV },
+  {    -SQRT2INV,  -SQRT5OVER2,    -SQRT2INV,     SQRT2INV },
+  {     SQRT2INV,  -SQRT5OVER2,    -SQRT2INV,     SQRT2INV },
+  {  -SQRT5OVER2,    -SQRT2INV,    -SQRT2INV,     SQRT2INV },
+  {   SQRT5OVER2,    -SQRT2INV,    -SQRT2INV,     SQRT2INV },
+  {  -SQRT5OVER2,     SQRT2INV,    -SQRT2INV,     SQRT2INV },
+  {   SQRT5OVER2,     SQRT2INV,    -SQRT2INV,     SQRT2INV },
+  {    -SQRT2INV,   SQRT5OVER2,    -SQRT2INV,     SQRT2INV },
+  {     SQRT2INV,   SQRT5OVER2,    -SQRT2INV,     SQRT2INV },
+  {       -SQRT2,     -GOLDEN2,  -GOLDENINV2,     SQRT2INV },
+  {        SQRT2,     -GOLDEN2,  -GOLDENINV2,     SQRT2INV },
+  {       -SQRT2,      GOLDEN2,  -GOLDENINV2,     SQRT2INV },
+  {        SQRT2,      GOLDEN2,  -GOLDENINV2,     SQRT2INV },
+  {    -GOLDEN22,          0.0, -GOLDENINV22,     SQRT2INV },
+  {     GOLDEN22,          0.0, -GOLDENINV22,     SQRT2INV },
+  { -GOLDENINV22,    -GOLDEN22,          0.0,     SQRT2INV },
+  {  GOLDENINV22,    -GOLDEN22,          0.0,     SQRT2INV },
+  { -GOLDENINV22,     GOLDEN22,          0.0,     SQRT2INV },
+  {  GOLDENINV22,     GOLDEN22,          0.0,     SQRT2INV },
+  {    -GOLDEN22,          0.0,  GOLDENINV22,     SQRT2INV },
+  {     GOLDEN22,          0.0,  GOLDENINV22,     SQRT2INV },
+  {       -SQRT2,     -GOLDEN2,   GOLDENINV2,     SQRT2INV },
+  {        SQRT2,     -GOLDEN2,   GOLDENINV2,     SQRT2INV },
+  {       -SQRT2,      GOLDEN2,   GOLDENINV2,     SQRT2INV },
+  {        SQRT2,      GOLDEN2,   GOLDENINV2,     SQRT2INV },
+  {    -SQRT2INV,  -SQRT5OVER2,     SQRT2INV,     SQRT2INV },
+  {     SQRT2INV,  -SQRT5OVER2,     SQRT2INV,     SQRT2INV },
+  {  -SQRT5OVER2,    -SQRT2INV,     SQRT2INV,     SQRT2INV },
+  {   SQRT5OVER2,    -SQRT2INV,     SQRT2INV,     SQRT2INV },
+  {  -SQRT5OVER2,     SQRT2INV,     SQRT2INV,     SQRT2INV },
+  {   SQRT5OVER2,     SQRT2INV,     SQRT2INV,     SQRT2INV },
+  {    -SQRT2INV,   SQRT5OVER2,     SQRT2INV,     SQRT2INV },
+  {     SQRT2INV,   SQRT5OVER2,     SQRT2INV,     SQRT2INV },
+  {  -GOLDENINV2,       -SQRT2,      GOLDEN2,     SQRT2INV },
+  {   GOLDENINV2,       -SQRT2,      GOLDEN2,     SQRT2INV },
+  {  -GOLDENINV2,        SQRT2,      GOLDEN2,     SQRT2INV },
+  {   GOLDENINV2,        SQRT2,      GOLDEN2,     SQRT2INV },
+  {     -GOLDEN2,  -GOLDENINV2,        SQRT2,     SQRT2INV },
+  {      GOLDEN2,  -GOLDENINV2,        SQRT2,     SQRT2INV },
+  {     -GOLDEN2,   GOLDENINV2,        SQRT2,     SQRT2INV },
+  {      GOLDEN2,   GOLDENINV2,        SQRT2,     SQRT2INV },
+  {    -SQRT2INV,    -SQRT2INV,   SQRT5OVER2,     SQRT2INV },
+  {     SQRT2INV,    -SQRT2INV,   SQRT5OVER2,     SQRT2INV },
+  {    -SQRT2INV,     SQRT2INV,   SQRT5OVER2,     SQRT2INV },
+  {     SQRT2INV,     SQRT2INV,   SQRT5OVER2,     SQRT2INV },
+  {          0.0, -GOLDENINV22,     GOLDEN22,     SQRT2INV },
+  {          0.0,  GOLDENINV22,     GOLDEN22,     SQRT2INV },
+  {          0.0,  -GOLDENINV2,  -SQRT5OVER2,      GOLDEN2 },
+  {          0.0,   GOLDENINV2,  -SQRT5OVER2,      GOLDEN2 },
+  {  -GOLDENINV2,    -SQRT2INV,       -SQRT2,      GOLDEN2 },
+  {   GOLDENINV2,    -SQRT2INV,       -SQRT2,      GOLDEN2 },
+  {  -GOLDENINV2,     SQRT2INV,       -SQRT2,      GOLDEN2 },
+  {   GOLDENINV2,     SQRT2INV,       -SQRT2,      GOLDEN2 },
+  { -GOLDENINV22,     -GOLDEN2,     -GOLDEN2,      GOLDEN2 },
+  {  GOLDENINV22,     -GOLDEN2,     -GOLDEN2,      GOLDEN2 },
+  {     -GOLDEN2, -GOLDENINV22,     -GOLDEN2,      GOLDEN2 },
+  {      GOLDEN2, -GOLDENINV22,     -GOLDEN2,      GOLDEN2 },
+  {     -GOLDEN2,  GOLDENINV22,     -GOLDEN2,      GOLDEN2 },
+  {      GOLDEN2,  GOLDENINV22,     -GOLDEN2,      GOLDEN2 },
+  { -GOLDENINV22,      GOLDEN2,     -GOLDEN2,      GOLDEN2 },
+  {  GOLDENINV22,      GOLDEN2,     -GOLDEN2,      GOLDEN2 },
+  {       -SQRT2,  -GOLDENINV2,    -SQRT2INV,      GOLDEN2 },
+  {        SQRT2,  -GOLDENINV2,    -SQRT2INV,      GOLDEN2 },
+  {       -SQRT2,   GOLDENINV2,    -SQRT2INV,      GOLDEN2 },
+  {        SQRT2,   GOLDENINV2,    -SQRT2INV,      GOLDEN2 },
+  {    -SQRT2INV,       -SQRT2,  -GOLDENINV2,      GOLDEN2 },
+  {     SQRT2INV,       -SQRT2,  -GOLDENINV2,      GOLDEN2 },
+  {  -SQRT5OVER2,          0.0,  -GOLDENINV2,      GOLDEN2 },
+  {   SQRT5OVER2,          0.0,  -GOLDENINV2,      GOLDEN2 },
+  {    -SQRT2INV,        SQRT2,  -GOLDENINV2,      GOLDEN2 },
+  {     SQRT2INV,        SQRT2,  -GOLDENINV2,      GOLDEN2 },
+  {     -GOLDEN2,     -GOLDEN2, -GOLDENINV22,      GOLDEN2 },
+  {      GOLDEN2,     -GOLDEN2, -GOLDENINV22,      GOLDEN2 },
+  {     -GOLDEN2,      GOLDEN2, -GOLDENINV22,      GOLDEN2 },
+  {      GOLDEN2,      GOLDEN2, -GOLDENINV22,      GOLDEN2 },
+  {  -GOLDENINV2,  -SQRT5OVER2,          0.0,      GOLDEN2 },
+  {   GOLDENINV2,  -SQRT5OVER2,          0.0,      GOLDEN2 },
+  {  -GOLDENINV2,   SQRT5OVER2,          0.0,      GOLDEN2 },
+  {   GOLDENINV2,   SQRT5OVER2,          0.0,      GOLDEN2 },
+  {     -GOLDEN2,     -GOLDEN2,  GOLDENINV22,      GOLDEN2 },
+  {      GOLDEN2,     -GOLDEN2,  GOLDENINV22,      GOLDEN2 },
+  {     -GOLDEN2,      GOLDEN2,  GOLDENINV22,      GOLDEN2 },
+  {      GOLDEN2,      GOLDEN2,  GOLDENINV22,      GOLDEN2 },
+  {    -SQRT2INV,       -SQRT2,   GOLDENINV2,      GOLDEN2 },
+  {     SQRT2INV,       -SQRT2,   GOLDENINV2,      GOLDEN2 },
+  {  -SQRT5OVER2,          0.0,   GOLDENINV2,      GOLDEN2 },
+  {   SQRT5OVER2,          0.0,   GOLDENINV2,      GOLDEN2 },
+  {    -SQRT2INV,        SQRT2,   GOLDENINV2,      GOLDEN2 },
+  {     SQRT2INV,        SQRT2,   GOLDENINV2,      GOLDEN2 },
+  {       -SQRT2,  -GOLDENINV2,     SQRT2INV,      GOLDEN2 },
+  {        SQRT2,  -GOLDENINV2,     SQRT2INV,      GOLDEN2 },
+  {       -SQRT2,   GOLDENINV2,     SQRT2INV,      GOLDEN2 },
+  {        SQRT2,   GOLDENINV2,     SQRT2INV,      GOLDEN2 },
+  { -GOLDENINV22,     -GOLDEN2,      GOLDEN2,      GOLDEN2 },
+  {  GOLDENINV22,     -GOLDEN2,      GOLDEN2,      GOLDEN2 },
+  {     -GOLDEN2, -GOLDENINV22,      GOLDEN2,      GOLDEN2 },
+  {      GOLDEN2, -GOLDENINV22,      GOLDEN2,      GOLDEN2 },
+  {     -GOLDEN2,  GOLDENINV22,      GOLDEN2,      GOLDEN2 },
+  {      GOLDEN2,  GOLDENINV22,      GOLDEN2,      GOLDEN2 },
+  { -GOLDENINV22,      GOLDEN2,      GOLDEN2,      GOLDEN2 },
+  {  GOLDENINV22,      GOLDEN2,      GOLDEN2,      GOLDEN2 },
+  {  -GOLDENINV2,    -SQRT2INV,        SQRT2,      GOLDEN2 },
+  {   GOLDENINV2,    -SQRT2INV,        SQRT2,      GOLDEN2 },
+  {  -GOLDENINV2,     SQRT2INV,        SQRT2,      GOLDEN2 },
+  {   GOLDENINV2,     SQRT2INV,        SQRT2,      GOLDEN2 },
+  {          0.0,  -GOLDENINV2,   SQRT5OVER2,      GOLDEN2 },
+  {          0.0,   GOLDENINV2,   SQRT5OVER2,      GOLDEN2 },
+  {          0.0,          0.0,       -SQRT2,        SQRT2 },
+  {    -SQRT2INV,  -GOLDENINV2,     -GOLDEN2,        SQRT2 },
+  {     SQRT2INV,  -GOLDENINV2,     -GOLDEN2,        SQRT2 },
+  {    -SQRT2INV,   GOLDENINV2,     -GOLDEN2,        SQRT2 },
+  {     SQRT2INV,   GOLDENINV2,     -GOLDEN2,        SQRT2 },
+  {  -GOLDENINV2,     -GOLDEN2,    -SQRT2INV,        SQRT2 },
+  {   GOLDENINV2,     -GOLDEN2,    -SQRT2INV,        SQRT2 },
+  {  -GOLDENINV2,      GOLDEN2,    -SQRT2INV,        SQRT2 },
+  {   GOLDENINV2,      GOLDEN2,    -SQRT2INV,        SQRT2 },
+  {     -GOLDEN2,    -SQRT2INV,  -GOLDENINV2,        SQRT2 },
+  {      GOLDEN2,    -SQRT2INV,  -GOLDENINV2,        SQRT2 },
+  {     -GOLDEN2,     SQRT2INV,  -GOLDENINV2,        SQRT2 },
+  {      GOLDEN2,     SQRT2INV,  -GOLDENINV2,        SQRT2 },
+  {          0.0,       -SQRT2,          0.0,        SQRT2 },
+  {       -SQRT2,          0.0,          0.0,        SQRT2 },
+  {        SQRT2,          0.0,          0.0,        SQRT2 },
+  {          0.0,        SQRT2,          0.0,        SQRT2 },
+  {     -GOLDEN2,    -SQRT2INV,   GOLDENINV2,        SQRT2 },
+  {      GOLDEN2,    -SQRT2INV,   GOLDENINV2,        SQRT2 },
+  {     -GOLDEN2,     SQRT2INV,   GOLDENINV2,        SQRT2 },
+  {      GOLDEN2,     SQRT2INV,   GOLDENINV2,        SQRT2 },
+  {  -GOLDENINV2,     -GOLDEN2,     SQRT2INV,        SQRT2 },
+  {   GOLDENINV2,     -GOLDEN2,     SQRT2INV,        SQRT2 },
+  {  -GOLDENINV2,      GOLDEN2,     SQRT2INV,        SQRT2 },
+  {   GOLDENINV2,      GOLDEN2,     SQRT2INV,        SQRT2 },
+  {    -SQRT2INV,  -GOLDENINV2,      GOLDEN2,        SQRT2 },
+  {     SQRT2INV,  -GOLDENINV2,      GOLDEN2,        SQRT2 },
+  {    -SQRT2INV,   GOLDENINV2,      GOLDEN2,        SQRT2 },
+  {     SQRT2INV,   GOLDENINV2,      GOLDEN2,        SQRT2 },
+  {          0.0,          0.0,        SQRT2,        SQRT2 },
+  {  -GOLDENINV2,          0.0,     -GOLDEN2,   SQRT5OVER2 },
+  {   GOLDENINV2,          0.0,     -GOLDEN2,   SQRT5OVER2 },
+  {    -SQRT2INV,    -SQRT2INV,    -SQRT2INV,   SQRT5OVER2 },
+  {     SQRT2INV,    -SQRT2INV,    -SQRT2INV,   SQRT5OVER2 },
+  {    -SQRT2INV,     SQRT2INV,    -SQRT2INV,   SQRT5OVER2 },
+  {     SQRT2INV,     SQRT2INV,    -SQRT2INV,   SQRT5OVER2 },
+  {          0.0,     -GOLDEN2,  -GOLDENINV2,   SQRT5OVER2 },
+  {          0.0,      GOLDEN2,  -GOLDENINV2,   SQRT5OVER2 },
+  {     -GOLDEN2,  -GOLDENINV2,          0.0,   SQRT5OVER2 },
+  {      GOLDEN2,  -GOLDENINV2,          0.0,   SQRT5OVER2 },
+  {     -GOLDEN2,   GOLDENINV2,          0.0,   SQRT5OVER2 },
+  {      GOLDEN2,   GOLDENINV2,          0.0,   SQRT5OVER2 },
+  {          0.0,     -GOLDEN2,   GOLDENINV2,   SQRT5OVER2 },
+  {          0.0,      GOLDEN2,   GOLDENINV2,   SQRT5OVER2 },
+  {    -SQRT2INV,    -SQRT2INV,     SQRT2INV,   SQRT5OVER2 },
+  {     SQRT2INV,    -SQRT2INV,     SQRT2INV,   SQRT5OVER2 },
+  {    -SQRT2INV,     SQRT2INV,     SQRT2INV,   SQRT5OVER2 },
+  {     SQRT2INV,     SQRT2INV,     SQRT2INV,   SQRT5OVER2 },
+  {  -GOLDENINV2,          0.0,      GOLDEN2,   SQRT5OVER2 },
+  {   GOLDENINV2,          0.0,      GOLDEN2,   SQRT5OVER2 },
+  { -GOLDENINV22,          0.0,    -SQRT2INV,     GOLDEN22 },
+  {  GOLDENINV22,          0.0,    -SQRT2INV,     GOLDEN22 },
+  {  -GOLDENINV2,  -GOLDENINV2,  -GOLDENINV2,     GOLDEN22 },
+  {   GOLDENINV2,  -GOLDENINV2,  -GOLDENINV2,     GOLDEN22 },
+  {  -GOLDENINV2,   GOLDENINV2,  -GOLDENINV2,     GOLDEN22 },
+  {   GOLDENINV2,   GOLDENINV2,  -GOLDENINV2,     GOLDEN22 },
+  {          0.0,    -SQRT2INV, -GOLDENINV22,     GOLDEN22 },
+  {          0.0,     SQRT2INV, -GOLDENINV22,     GOLDEN22 },
+  {    -SQRT2INV, -GOLDENINV22,          0.0,     GOLDEN22 },
+  {     SQRT2INV, -GOLDENINV22,          0.0,     GOLDEN22 },
+  {    -SQRT2INV,  GOLDENINV22,          0.0,     GOLDEN22 },
+  {     SQRT2INV,  GOLDENINV22,          0.0,     GOLDEN22 },
+  {          0.0,    -SQRT2INV,  GOLDENINV22,     GOLDEN22 },
+  {          0.0,     SQRT2INV,  GOLDENINV22,     GOLDEN22 },
+  {  -GOLDENINV2,  -GOLDENINV2,   GOLDENINV2,     GOLDEN22 },
+  {   GOLDENINV2,  -GOLDENINV2,   GOLDENINV2,     GOLDEN22 },
+  {  -GOLDENINV2,   GOLDENINV2,   GOLDENINV2,     GOLDEN22 },
+  {   GOLDENINV2,   GOLDENINV2,   GOLDENINV2,     GOLDEN22 },
+  { -GOLDENINV22,          0.0,     SQRT2INV,     GOLDEN22 },
+  {  GOLDENINV22,          0.0,     SQRT2INV,     GOLDEN22 }
+};
+
+static int edge_120[NUM_EDGE_120][2] = {
+  {   0,   1 }, {   0,   2 }, {   0,   4 }, {   0,  20 }, {   1,   3 },
+  {   1,   5 }, {   1,  21 }, {   2,   6 }, {   2,   8 }, {   2,  22 },
+  {   3,   6 }, {   3,   9 }, {   3,  23 }, {   4,   7 }, {   4,  10 },
+  {   4,  24 }, {   5,   7 }, {   5,  11 }, {   5,  25 }, {   6,  12 },
+  {   6,  26 }, {   7,  13 }, {   7,  27 }, {   8,  10 }, {   8,  14 },
+  {   8,  28 }, {   9,  11 }, {   9,  15 }, {   9,  29 }, {  10,  16 },
+  {  10,  30 }, {  11,  17 }, {  11,  31 }, {  12,  14 }, {  12,  15 },
+  {  12,  32 }, {  13,  16 }, {  13,  17 }, {  13,  33 }, {  14,  18 },
+  {  14,  34 }, {  15,  19 }, {  15,  35 }, {  16,  18 }, {  16,  36 },
+  {  17,  19 }, {  17,  37 }, {  18,  19 }, {  18,  38 }, {  19,  39 },
+  {  20,  40 }, {  20,  41 }, {  20,  43 }, {  21,  40 }, {  21,  42 },
+  {  21,  44 }, {  22,  41 }, {  22,  45 }, {  22,  49 }, {  23,  42 },
+  {  23,  46 }, {  23,  50 }, {  24,  43 }, {  24,  47 }, {  24,  51 },
+  {  25,  44 }, {  25,  48 }, {  25,  52 }, {  26,  45 }, {  26,  46 },
+  {  26,  53 }, {  27,  47 }, {  27,  48 }, {  27,  56 }, {  28,  49 },
+  {  28,  54 }, {  28,  57 }, {  29,  50 }, {  29,  55 }, {  29,  58 },
+  {  30,  51 }, {  30,  54 }, {  30,  59 }, {  31,  52 }, {  31,  55 },
+  {  31,  60 }, {  32,  53 }, {  32,  61 }, {  32,  62 }, {  33,  56 },
+  {  33,  63 }, {  33,  64 }, {  34,  57 }, {  34,  61 }, {  34,  65 },
+  {  35,  58 }, {  35,  62 }, {  35,  66 }, {  36,  59 }, {  36,  63 },
+  {  36,  67 }, {  37,  60 }, {  37,  64 }, {  37,  68 }, {  38,  65 },
+  {  38,  67 }, {  38,  69 }, {  39,  66 }, {  39,  68 }, {  39,  69 },
+  {  40,  70 }, {  40,  71 }, {  41,  72 }, {  41,  78 }, {  42,  73 },
+  {  42,  79 }, {  43,  74 }, {  43,  80 }, {  44,  75 }, {  44,  81 },
+  {  45,  76 }, {  45,  88 }, {  46,  77 }, {  46,  89 }, {  47,  82 },
+  {  47,  92 }, {  48,  83 }, {  48,  93 }, {  49,  84 }, {  49,  94 },
+  {  50,  85 }, {  50,  95 }, {  51,  86 }, {  51,  96 }, {  52,  87 },
+  {  52,  97 }, {  53,  98 }, {  53,  99 }, {  54,  90 }, {  54, 108 },
+  {  55,  91 }, {  55, 109 }, {  56, 100 }, {  56, 101 }, {  57, 102 },
+  {  57, 112 }, {  58, 103 }, {  58, 113 }, {  59, 104 }, {  59, 114 },
+  {  60, 105 }, {  60, 115 }, {  61, 106 }, {  61, 116 }, {  62, 107 },
+  {  62, 117 }, {  63, 110 }, {  63, 122 }, {  64, 111 }, {  64, 123 },
+  {  65, 118 }, {  65, 124 }, {  66, 119 }, {  66, 125 }, {  67, 120 },
+  {  67, 126 }, {  68, 121 }, {  68, 127 }, {  69, 128 }, {  69, 129 },
+  {  70,  72 }, {  70,  73 }, {  70, 130 }, {  71,  74 }, {  71,  75 },
+  {  71, 131 }, {  72,  76 }, {  72, 132 }, {  73,  77 }, {  73, 133 },
+  {  74,  82 }, {  74, 134 }, {  75,  83 }, {  75, 135 }, {  76,  77 },
+  {  76, 140 }, {  77, 141 }, {  78,  80 }, {  78,  84 }, {  78, 136 },
+  {  79,  81 }, {  79,  85 }, {  79, 137 }, {  80,  86 }, {  80, 138 },
+  {  81,  87 }, {  81, 139 }, {  82,  83 }, {  82, 142 }, {  83, 143 },
+  {  84,  90 }, {  84, 146 }, {  85,  91 }, {  85, 147 }, {  86,  90 },
+  {  86, 148 }, {  87,  91 }, {  87, 149 }, {  88,  94 }, {  88,  98 },
+  {  88, 144 }, {  89,  95 }, {  89,  99 }, {  89, 145 }, {  90, 156 },
+  {  91, 157 }, {  92,  96 }, {  92, 100 }, {  92, 150 }, {  93,  97 },
+  {  93, 101 }, {  93, 151 }, {  94, 102 }, {  94, 152 }, {  95, 103 },
+  {  95, 153 }, {  96, 104 }, {  96, 154 }, {  97, 105 }, {  97, 155 },
+  {  98, 106 }, {  98, 158 }, {  99, 107 }, {  99, 159 }, { 100, 110 },
+  { 100, 160 }, { 101, 111 }, { 101, 161 }, { 102, 106 }, { 102, 164 },
+  { 103, 107 }, { 103, 165 }, { 104, 110 }, { 104, 166 }, { 105, 111 },
+  { 105, 167 }, { 106, 168 }, { 107, 169 }, { 108, 112 }, { 108, 114 },
+  { 108, 162 }, { 109, 113 }, { 109, 115 }, { 109, 163 }, { 110, 174 },
+  { 111, 175 }, { 112, 118 }, { 112, 170 }, { 113, 119 }, { 113, 171 },
+  { 114, 120 }, { 114, 172 }, { 115, 121 }, { 115, 173 }, { 116, 117 },
+  { 116, 124 }, { 116, 176 }, { 117, 125 }, { 117, 177 }, { 118, 120 },
+  { 118, 180 }, { 119, 121 }, { 119, 181 }, { 120, 182 }, { 121, 183 },
+  { 122, 123 }, { 122, 126 }, { 122, 178 }, { 123, 127 }, { 123, 179 },
+  { 124, 128 }, { 124, 184 }, { 125, 128 }, { 125, 185 }, { 126, 129 },
+  { 126, 186 }, { 127, 129 }, { 127, 187 }, { 128, 188 }, { 129, 189 },
+  { 130, 131 }, { 130, 190 }, { 130, 191 }, { 131, 192 }, { 131, 193 },
+  { 132, 136 }, { 132, 190 }, { 132, 196 }, { 133, 137 }, { 133, 191 },
+  { 133, 197 }, { 134, 138 }, { 134, 192 }, { 134, 198 }, { 135, 139 },
+  { 135, 193 }, { 135, 199 }, { 136, 194 }, { 136, 201 }, { 137, 195 },
+  { 137, 202 }, { 138, 194 }, { 138, 203 }, { 139, 195 }, { 139, 204 },
+  { 140, 144 }, { 140, 196 }, { 140, 200 }, { 141, 145 }, { 141, 197 },
+  { 141, 200 }, { 142, 150 }, { 142, 198 }, { 142, 205 }, { 143, 151 },
+  { 143, 199 }, { 143, 205 }, { 144, 206 }, { 144, 210 }, { 145, 207 },
+  { 145, 211 }, { 146, 152 }, { 146, 201 }, { 146, 212 }, { 147, 153 },
+  { 147, 202 }, { 147, 213 }, { 148, 154 }, { 148, 203 }, { 148, 214 },
+  { 149, 155 }, { 149, 204 }, { 149, 215 }, { 150, 208 }, { 150, 216 },
+  { 151, 209 }, { 151, 217 }, { 152, 206 }, { 152, 218 }, { 153, 207 },
+  { 153, 219 }, { 154, 208 }, { 154, 220 }, { 155, 209 }, { 155, 221 },
+  { 156, 162 }, { 156, 212 }, { 156, 214 }, { 157, 163 }, { 157, 213 },
+  { 157, 215 }, { 158, 159 }, { 158, 210 }, { 158, 222 }, { 159, 211 },
+  { 159, 223 }, { 160, 161 }, { 160, 216 }, { 160, 228 }, { 161, 217 },
+  { 161, 229 }, { 162, 224 }, { 162, 226 }, { 163, 225 }, { 163, 227 },
+  { 164, 170 }, { 164, 218 }, { 164, 230 }, { 165, 171 }, { 165, 219 },
+  { 165, 231 }, { 166, 172 }, { 166, 220 }, { 166, 232 }, { 167, 173 },
+  { 167, 221 }, { 167, 233 }, { 168, 176 }, { 168, 222 }, { 168, 230 },
+  { 169, 177 }, { 169, 223 }, { 169, 231 }, { 170, 224 }, { 170, 235 },
+  { 171, 225 }, { 171, 236 }, { 172, 226 }, { 172, 237 }, { 173, 227 },
+  { 173, 238 }, { 174, 178 }, { 174, 228 }, { 174, 232 }, { 175, 179 },
+  { 175, 229 }, { 175, 233 }, { 176, 234 }, { 176, 240 }, { 177, 234 },
+  { 177, 241 }, { 178, 239 }, { 178, 242 }, { 179, 239 }, { 179, 243 },
+  { 180, 184 }, { 180, 235 }, { 180, 244 }, { 181, 185 }, { 181, 236 },
+  { 181, 245 }, { 182, 186 }, { 182, 237 }, { 182, 244 }, { 183, 187 },
+  { 183, 238 }, { 183, 245 }, { 184, 240 }, { 184, 246 }, { 185, 241 },
+  { 185, 247 }, { 186, 242 }, { 186, 248 }, { 187, 243 }, { 187, 249 },
+  { 188, 189 }, { 188, 246 }, { 188, 247 }, { 189, 248 }, { 189, 249 },
+  { 190, 250 }, { 190, 270 }, { 191, 251 }, { 191, 271 }, { 192, 250 },
+  { 192, 272 }, { 193, 251 }, { 193, 273 }, { 194, 250 }, { 194, 279 },
+  { 195, 251 }, { 195, 280 }, { 196, 252 }, { 196, 274 }, { 197, 253 },
+  { 197, 275 }, { 198, 254 }, { 198, 276 }, { 199, 255 }, { 199, 277 },
+  { 200, 256 }, { 200, 278 }, { 201, 252 }, { 201, 282 }, { 202, 253 },
+  { 202, 283 }, { 203, 254 }, { 203, 284 }, { 204, 255 }, { 204, 285 },
+  { 205, 257 }, { 205, 281 }, { 206, 252 }, { 206, 290 }, { 207, 253 },
+  { 207, 291 }, { 208, 254 }, { 208, 292 }, { 209, 255 }, { 209, 293 },
+  { 210, 256 }, { 210, 294 }, { 211, 256 }, { 211, 295 }, { 212, 258 },
+  { 212, 286 }, { 213, 259 }, { 213, 287 }, { 214, 260 }, { 214, 288 },
+  { 215, 261 }, { 215, 289 }, { 216, 257 }, { 216, 296 }, { 217, 257 },
+  { 217, 297 }, { 218, 258 }, { 218, 298 }, { 219, 259 }, { 219, 299 },
+  { 220, 260 }, { 220, 300 }, { 221, 261 }, { 221, 301 }, { 222, 262 },
+  { 222, 302 }, { 223, 262 }, { 223, 303 }, { 224, 258 }, { 224, 310 },
+  { 225, 259 }, { 225, 311 }, { 226, 260 }, { 226, 312 }, { 227, 261 },
+  { 227, 313 }, { 228, 263 }, { 228, 304 }, { 229, 263 }, { 229, 305 },
+  { 230, 264 }, { 230, 306 }, { 231, 265 }, { 231, 307 }, { 232, 266 },
+  { 232, 308 }, { 233, 267 }, { 233, 309 }, { 234, 262 }, { 234, 318 },
+  { 235, 264 }, { 235, 314 }, { 236, 265 }, { 236, 315 }, { 237, 266 },
+  { 237, 316 }, { 238, 267 }, { 238, 317 }, { 239, 263 }, { 239, 321 },
+  { 240, 264 }, { 240, 322 }, { 241, 265 }, { 241, 323 }, { 242, 266 },
+  { 242, 324 }, { 243, 267 }, { 243, 325 }, { 244, 268 }, { 244, 319 },
+  { 245, 269 }, { 245, 320 }, { 246, 268 }, { 246, 326 }, { 247, 269 },
+  { 247, 327 }, { 248, 268 }, { 248, 328 }, { 249, 269 }, { 249, 329 },
+  { 250, 330 }, { 251, 331 }, { 252, 332 }, { 253, 333 }, { 254, 334 },
+  { 255, 335 }, { 256, 336 }, { 257, 337 }, { 258, 338 }, { 259, 339 },
+  { 260, 340 }, { 261, 341 }, { 262, 342 }, { 263, 343 }, { 264, 344 },
+  { 265, 345 }, { 266, 346 }, { 267, 347 }, { 268, 348 }, { 269, 349 },
+  { 270, 271 }, { 270, 274 }, { 270, 350 }, { 271, 275 }, { 271, 351 },
+  { 272, 273 }, { 272, 276 }, { 272, 352 }, { 273, 277 }, { 273, 353 },
+  { 274, 278 }, { 274, 356 }, { 275, 278 }, { 275, 357 }, { 276, 281 },
+  { 276, 358 }, { 277, 281 }, { 277, 359 }, { 278, 360 }, { 279, 282 },
+  { 279, 284 }, { 279, 354 }, { 280, 283 }, { 280, 285 }, { 280, 355 },
+  { 281, 365 }, { 282, 286 }, { 282, 361 }, { 283, 287 }, { 283, 362 },
+  { 284, 288 }, { 284, 363 }, { 285, 289 }, { 285, 364 }, { 286, 288 },
+  { 286, 372 }, { 287, 289 }, { 287, 373 }, { 288, 374 }, { 289, 375 },
+  { 290, 294 }, { 290, 298 }, { 290, 366 }, { 291, 295 }, { 291, 299 },
+  { 291, 367 }, { 292, 296 }, { 292, 300 }, { 292, 368 }, { 293, 297 },
+  { 293, 301 }, { 293, 369 }, { 294, 302 }, { 294, 370 }, { 295, 303 },
+  { 295, 371 }, { 296, 304 }, { 296, 376 }, { 297, 305 }, { 297, 377 },
+  { 298, 306 }, { 298, 378 }, { 299, 307 }, { 299, 379 }, { 300, 308 },
+  { 300, 380 }, { 301, 309 }, { 301, 381 }, { 302, 306 }, { 302, 382 },
+  { 303, 307 }, { 303, 383 }, { 304, 308 }, { 304, 388 }, { 305, 309 },
+  { 305, 389 }, { 306, 390 }, { 307, 391 }, { 308, 392 }, { 309, 393 },
+  { 310, 312 }, { 310, 314 }, { 310, 384 }, { 311, 313 }, { 311, 315 },
+  { 311, 385 }, { 312, 316 }, { 312, 386 }, { 313, 317 }, { 313, 387 },
+  { 314, 319 }, { 314, 395 }, { 315, 320 }, { 315, 396 }, { 316, 319 },
+  { 316, 397 }, { 317, 320 }, { 317, 398 }, { 318, 322 }, { 318, 323 },
+  { 318, 394 }, { 319, 404 }, { 320, 405 }, { 321, 324 }, { 321, 325 },
+  { 321, 399 }, { 322, 326 }, { 322, 400 }, { 323, 327 }, { 323, 401 },
+  { 324, 328 }, { 324, 402 }, { 325, 329 }, { 325, 403 }, { 326, 327 },
+  { 326, 406 }, { 327, 407 }, { 328, 329 }, { 328, 408 }, { 329, 409 },
+  { 330, 350 }, { 330, 352 }, { 330, 354 }, { 331, 351 }, { 331, 353 },
+  { 331, 355 }, { 332, 356 }, { 332, 361 }, { 332, 366 }, { 333, 357 },
+  { 333, 362 }, { 333, 367 }, { 334, 358 }, { 334, 363 }, { 334, 368 },
+  { 335, 359 }, { 335, 364 }, { 335, 369 }, { 336, 360 }, { 336, 370 },
+  { 336, 371 }, { 337, 365 }, { 337, 376 }, { 337, 377 }, { 338, 372 },
+  { 338, 378 }, { 338, 384 }, { 339, 373 }, { 339, 379 }, { 339, 385 },
+  { 340, 374 }, { 340, 380 }, { 340, 386 }, { 341, 375 }, { 341, 381 },
+  { 341, 387 }, { 342, 382 }, { 342, 383 }, { 342, 394 }, { 343, 388 },
+  { 343, 389 }, { 343, 399 }, { 344, 390 }, { 344, 395 }, { 344, 400 },
+  { 345, 391 }, { 345, 396 }, { 345, 401 }, { 346, 392 }, { 346, 397 },
+  { 346, 402 }, { 347, 393 }, { 347, 398 }, { 347, 403 }, { 348, 404 },
+  { 348, 406 }, { 348, 408 }, { 349, 405 }, { 349, 407 }, { 349, 409 },
+  { 350, 410 }, { 350, 412 }, { 351, 410 }, { 351, 413 }, { 352, 411 },
+  { 352, 414 }, { 353, 411 }, { 353, 415 }, { 354, 416 }, { 354, 418 },
+  { 355, 417 }, { 355, 419 }, { 356, 412 }, { 356, 420 }, { 357, 413 },
+  { 357, 421 }, { 358, 414 }, { 358, 422 }, { 359, 415 }, { 359, 423 },
+  { 360, 420 }, { 360, 421 }, { 361, 416 }, { 361, 426 }, { 362, 417 },
+  { 362, 427 }, { 363, 418 }, { 363, 428 }, { 364, 419 }, { 364, 429 },
+  { 365, 422 }, { 365, 423 }, { 366, 424 }, { 366, 432 }, { 367, 425 },
+  { 367, 433 }, { 368, 430 }, { 368, 434 }, { 369, 431 }, { 369, 435 },
+  { 370, 424 }, { 370, 438 }, { 371, 425 }, { 371, 439 }, { 372, 426 },
+  { 372, 436 }, { 373, 427 }, { 373, 437 }, { 374, 428 }, { 374, 436 },
+  { 375, 429 }, { 375, 437 }, { 376, 430 }, { 376, 440 }, { 377, 431 },
+  { 377, 441 }, { 378, 432 }, { 378, 444 }, { 379, 433 }, { 379, 445 },
+  { 380, 434 }, { 380, 446 }, { 381, 435 }, { 381, 447 }, { 382, 438 },
+  { 382, 448 }, { 383, 439 }, { 383, 449 }, { 384, 442 }, { 384, 450 },
+  { 385, 443 }, { 385, 451 }, { 386, 442 }, { 386, 452 }, { 387, 443 },
+  { 387, 453 }, { 388, 440 }, { 388, 454 }, { 389, 441 }, { 389, 455 },
+  { 390, 444 }, { 390, 448 }, { 391, 445 }, { 391, 449 }, { 392, 446 },
+  { 392, 454 }, { 393, 447 }, { 393, 455 }, { 394, 456 }, { 394, 457 },
+  { 395, 450 }, { 395, 460 }, { 396, 451 }, { 396, 461 }, { 397, 452 },
+  { 397, 462 }, { 398, 453 }, { 398, 463 }, { 399, 458 }, { 399, 459 },
+  { 400, 456 }, { 400, 464 }, { 401, 457 }, { 401, 465 }, { 402, 458 },
+  { 402, 466 }, { 403, 459 }, { 403, 467 }, { 404, 460 }, { 404, 462 },
+  { 405, 461 }, { 405, 463 }, { 406, 464 }, { 406, 468 }, { 407, 465 },
+  { 407, 468 }, { 408, 466 }, { 408, 469 }, { 409, 467 }, { 409, 469 },
+  { 410, 411 }, { 410, 470 }, { 411, 471 }, { 412, 416 }, { 412, 472 },
+  { 413, 417 }, { 413, 473 }, { 414, 418 }, { 414, 474 }, { 415, 419 },
+  { 415, 475 }, { 416, 478 }, { 417, 479 }, { 418, 480 }, { 419, 481 },
+  { 420, 424 }, { 420, 476 }, { 421, 425 }, { 421, 477 }, { 422, 430 },
+  { 422, 482 }, { 423, 431 }, { 423, 483 }, { 424, 488 }, { 425, 489 },
+  { 426, 432 }, { 426, 484 }, { 427, 433 }, { 427, 485 }, { 428, 434 },
+  { 428, 486 }, { 429, 435 }, { 429, 487 }, { 430, 492 }, { 431, 493 },
+  { 432, 494 }, { 433, 495 }, { 434, 496 }, { 435, 497 }, { 436, 442 },
+  { 436, 490 }, { 437, 443 }, { 437, 491 }, { 438, 439 }, { 438, 498 },
+  { 439, 499 }, { 440, 441 }, { 440, 500 }, { 441, 501 }, { 442, 508 },
+  { 443, 509 }, { 444, 450 }, { 444, 502 }, { 445, 451 }, { 445, 503 },
+  { 446, 452 }, { 446, 504 }, { 447, 453 }, { 447, 505 }, { 448, 456 },
+  { 448, 506 }, { 449, 457 }, { 449, 507 }, { 450, 512 }, { 451, 513 },
+  { 452, 514 }, { 453, 515 }, { 454, 458 }, { 454, 510 }, { 455, 459 },
+  { 455, 511 }, { 456, 516 }, { 457, 517 }, { 458, 522 }, { 459, 523 },
+  { 460, 464 }, { 460, 518 }, { 461, 465 }, { 461, 519 }, { 462, 466 },
+  { 462, 520 }, { 463, 467 }, { 463, 521 }, { 464, 524 }, { 465, 525 },
+  { 466, 526 }, { 467, 527 }, { 468, 469 }, { 468, 528 }, { 469, 529 },
+  { 470, 472 }, { 470, 473 }, { 470, 530 }, { 471, 474 }, { 471, 475 },
+  { 471, 530 }, { 472, 476 }, { 472, 531 }, { 473, 477 }, { 473, 532 },
+  { 474, 482 }, { 474, 533 }, { 475, 483 }, { 475, 534 }, { 476, 477 },
+  { 476, 535 }, { 477, 536 }, { 478, 480 }, { 478, 484 }, { 478, 531 },
+  { 479, 481 }, { 479, 485 }, { 479, 532 }, { 480, 486 }, { 480, 533 },
+  { 481, 487 }, { 481, 534 }, { 482, 483 }, { 482, 537 }, { 483, 538 },
+  { 484, 490 }, { 484, 539 }, { 485, 491 }, { 485, 540 }, { 486, 490 },
+  { 486, 541 }, { 487, 491 }, { 487, 542 }, { 488, 494 }, { 488, 498 },
+  { 488, 535 }, { 489, 495 }, { 489, 499 }, { 489, 536 }, { 490, 544 },
+  { 491, 545 }, { 492, 496 }, { 492, 500 }, { 492, 537 }, { 493, 497 },
+  { 493, 501 }, { 493, 538 }, { 494, 502 }, { 494, 539 }, { 495, 503 },
+  { 495, 540 }, { 496, 504 }, { 496, 541 }, { 497, 505 }, { 497, 542 },
+  { 498, 506 }, { 498, 543 }, { 499, 507 }, { 499, 543 }, { 500, 510 },
+  { 500, 546 }, { 501, 511 }, { 501, 546 }, { 502, 506 }, { 502, 547 },
+  { 503, 507 }, { 503, 548 }, { 504, 510 }, { 504, 549 }, { 505, 511 },
+  { 505, 550 }, { 506, 551 }, { 507, 552 }, { 508, 512 }, { 508, 514 },
+  { 508, 544 }, { 509, 513 }, { 509, 515 }, { 509, 545 }, { 510, 553 },
+  { 511, 554 }, { 512, 518 }, { 512, 547 }, { 513, 519 }, { 513, 548 },
+  { 514, 520 }, { 514, 549 }, { 515, 521 }, { 515, 550 }, { 516, 517 },
+  { 516, 524 }, { 516, 551 }, { 517, 525 }, { 517, 552 }, { 518, 520 },
+  { 518, 555 }, { 519, 521 }, { 519, 556 }, { 520, 557 }, { 521, 558 },
+  { 522, 523 }, { 522, 526 }, { 522, 553 }, { 523, 527 }, { 523, 554 },
+  { 524, 528 }, { 524, 555 }, { 525, 528 }, { 525, 556 }, { 526, 529 },
+  { 526, 557 }, { 527, 529 }, { 527, 558 }, { 528, 559 }, { 529, 559 },
+  { 530, 560 }, { 530, 561 }, { 531, 560 }, { 531, 562 }, { 532, 561 },
+  { 532, 563 }, { 533, 560 }, { 533, 564 }, { 534, 561 }, { 534, 565 },
+  { 535, 562 }, { 535, 566 }, { 536, 563 }, { 536, 566 }, { 537, 564 },
+  { 537, 567 }, { 538, 565 }, { 538, 567 }, { 539, 562 }, { 539, 568 },
+  { 540, 563 }, { 540, 569 }, { 541, 564 }, { 541, 570 }, { 542, 565 },
+  { 542, 571 }, { 543, 566 }, { 543, 572 }, { 544, 568 }, { 544, 570 },
+  { 545, 569 }, { 545, 571 }, { 546, 567 }, { 546, 573 }, { 547, 568 },
+  { 547, 574 }, { 548, 569 }, { 548, 575 }, { 549, 570 }, { 549, 576 },
+  { 550, 571 }, { 550, 577 }, { 551, 572 }, { 551, 574 }, { 552, 572 },
+  { 552, 575 }, { 553, 573 }, { 553, 576 }, { 554, 573 }, { 554, 577 },
+  { 555, 574 }, { 555, 578 }, { 556, 575 }, { 556, 579 }, { 557, 576 },
+  { 557, 578 }, { 558, 577 }, { 558, 579 }, { 559, 578 }, { 559, 579 },
+  { 560, 580 }, { 561, 581 }, { 562, 582 }, { 563, 583 }, { 564, 584 },
+  { 565, 585 }, { 566, 586 }, { 567, 587 }, { 568, 588 }, { 569, 589 },
+  { 570, 590 }, { 571, 591 }, { 572, 592 }, { 573, 593 }, { 574, 594 },
+  { 575, 595 }, { 576, 596 }, { 577, 597 }, { 578, 598 }, { 579, 599 },
+  { 580, 581 }, { 580, 582 }, { 580, 584 }, { 581, 583 }, { 581, 585 },
+  { 582, 586 }, { 582, 588 }, { 583, 586 }, { 583, 589 }, { 584, 587 },
+  { 584, 590 }, { 585, 587 }, { 585, 591 }, { 586, 592 }, { 587, 593 },
+  { 588, 590 }, { 588, 594 }, { 589, 591 }, { 589, 595 }, { 590, 596 },
+  { 591, 597 }, { 592, 594 }, { 592, 595 }, { 593, 596 }, { 593, 597 },
+  { 594, 598 }, { 595, 599 }, { 596, 598 }, { 597, 599 }, { 598, 599 }
+};
+
+static int face_120[NUM_FACE_120][VERT_PER_FACE_120] = {
+  {   0,   1,   3,   6,   2 }, {   0,   1,   5,   7,   4 },
+  {   0,   1,  21,  40,  20 }, {   0,   2,   8,  10,   4 },
+  {   0,   2,  22,  41,  20 }, {   0,   4,  24,  43,  20 },
+  {   1,   3,   9,  11,   5 }, {   1,   3,  23,  42,  21 },
+  {   1,   5,  25,  44,  21 }, {   2,   6,  12,  14,   8 },
+  {   2,   6,  26,  45,  22 }, {   2,   8,  28,  49,  22 },
+  {   3,   6,  12,  15,   9 }, {   3,   6,  26,  46,  23 },
+  {   3,   9,  29,  50,  23 }, {   4,   7,  13,  16,  10 },
+  {   4,   7,  27,  47,  24 }, {   4,  10,  30,  51,  24 },
+  {   5,   7,  13,  17,  11 }, {   5,   7,  27,  48,  25 },
+  {   5,  11,  31,  52,  25 }, {   6,  12,  32,  53,  26 },
+  {   7,  13,  33,  56,  27 }, {   8,  10,  16,  18,  14 },
+  {   8,  10,  30,  54,  28 }, {   8,  14,  34,  57,  28 },
+  {   9,  11,  17,  19,  15 }, {   9,  11,  31,  55,  29 },
+  {   9,  15,  35,  58,  29 }, {  10,  16,  36,  59,  30 },
+  {  11,  17,  37,  60,  31 }, {  12,  14,  18,  19,  15 },
+  {  12,  14,  34,  61,  32 }, {  12,  15,  35,  62,  32 },
+  {  13,  16,  18,  19,  17 }, {  13,  16,  36,  63,  33 },
+  {  13,  17,  37,  64,  33 }, {  14,  18,  38,  65,  34 },
+  {  15,  19,  39,  66,  35 }, {  16,  18,  38,  67,  36 },
+  {  17,  19,  39,  68,  37 }, {  18,  19,  39,  69,  38 },
+  {  20,  40,  70,  72,  41 }, {  20,  40,  71,  74,  43 },
+  {  20,  41,  78,  80,  43 }, {  21,  40,  70,  73,  42 },
+  {  21,  40,  71,  75,  44 }, {  21,  42,  79,  81,  44 },
+  {  22,  41,  72,  76,  45 }, {  22,  41,  78,  84,  49 },
+  {  22,  45,  88,  94,  49 }, {  23,  42,  73,  77,  46 },
+  {  23,  42,  79,  85,  50 }, {  23,  46,  89,  95,  50 },
+  {  24,  43,  74,  82,  47 }, {  24,  43,  80,  86,  51 },
+  {  24,  47,  92,  96,  51 }, {  25,  44,  75,  83,  48 },
+  {  25,  44,  81,  87,  52 }, {  25,  48,  93,  97,  52 },
+  {  26,  45,  76,  77,  46 }, {  26,  45,  88,  98,  53 },
+  {  26,  46,  89,  99,  53 }, {  27,  47,  82,  83,  48 },
+  {  27,  47,  92, 100,  56 }, {  27,  48,  93, 101,  56 },
+  {  28,  49,  84,  90,  54 }, {  28,  49,  94, 102,  57 },
+  {  28,  54, 108, 112,  57 }, {  29,  50,  85,  91,  55 },
+  {  29,  50,  95, 103,  58 }, {  29,  55, 109, 113,  58 },
+  {  30,  51,  86,  90,  54 }, {  30,  51,  96, 104,  59 },
+  {  30,  54, 108, 114,  59 }, {  31,  52,  87,  91,  55 },
+  {  31,  52,  97, 105,  60 }, {  31,  55, 109, 115,  60 },
+  {  32,  53,  98, 106,  61 }, {  32,  53,  99, 107,  62 },
+  {  32,  61, 116, 117,  62 }, {  33,  56, 100, 110,  63 },
+  {  33,  56, 101, 111,  64 }, {  33,  63, 122, 123,  64 },
+  {  34,  57, 102, 106,  61 }, {  34,  57, 112, 118,  65 },
+  {  34,  61, 116, 124,  65 }, {  35,  58, 103, 107,  62 },
+  {  35,  58, 113, 119,  66 }, {  35,  62, 117, 125,  66 },
+  {  36,  59, 104, 110,  63 }, {  36,  59, 114, 120,  67 },
+  {  36,  63, 122, 126,  67 }, {  37,  60, 105, 111,  64 },
+  {  37,  60, 115, 121,  68 }, {  37,  64, 123, 127,  68 },
+  {  38,  65, 118, 120,  67 }, {  38,  65, 124, 128,  69 },
+  {  38,  67, 126, 129,  69 }, {  39,  66, 119, 121,  68 },
+  {  39,  66, 125, 128,  69 }, {  39,  68, 127, 129,  69 },
+  {  40,  70, 130, 131,  71 }, {  41,  72, 132, 136,  78 },
+  {  42,  73, 133, 137,  79 }, {  43,  74, 134, 138,  80 },
+  {  44,  75, 135, 139,  81 }, {  45,  76, 140, 144,  88 },
+  {  46,  77, 141, 145,  89 }, {  47,  82, 142, 150,  92 },
+  {  48,  83, 143, 151,  93 }, {  49,  84, 146, 152,  94 },
+  {  50,  85, 147, 153,  95 }, {  51,  86, 148, 154,  96 },
+  {  52,  87, 149, 155,  97 }, {  53,  98, 158, 159,  99 },
+  {  54,  90, 156, 162, 108 }, {  55,  91, 157, 163, 109 },
+  {  56, 100, 160, 161, 101 }, {  57, 102, 164, 170, 112 },
+  {  58, 103, 165, 171, 113 }, {  59, 104, 166, 172, 114 },
+  {  60, 105, 167, 173, 115 }, {  61, 106, 168, 176, 116 },
+  {  62, 107, 169, 177, 117 }, {  63, 110, 174, 178, 122 },
+  {  64, 111, 175, 179, 123 }, {  65, 118, 180, 184, 124 },
+  {  66, 119, 181, 185, 125 }, {  67, 120, 182, 186, 126 },
+  {  68, 121, 183, 187, 127 }, {  69, 128, 188, 189, 129 },
+  {  70,  72,  76,  77,  73 }, {  70,  72, 132, 190, 130 },
+  {  70,  73, 133, 191, 130 }, {  71,  74,  82,  83,  75 },
+  {  71,  74, 134, 192, 131 }, {  71,  75, 135, 193, 131 },
+  {  72,  76, 140, 196, 132 }, {  73,  77, 141, 197, 133 },
+  {  74,  82, 142, 198, 134 }, {  75,  83, 143, 199, 135 },
+  {  76,  77, 141, 200, 140 }, {  78,  80,  86,  90,  84 },
+  {  78,  80, 138, 194, 136 }, {  78,  84, 146, 201, 136 },
+  {  79,  81,  87,  91,  85 }, {  79,  81, 139, 195, 137 },
+  {  79,  85, 147, 202, 137 }, {  80,  86, 148, 203, 138 },
+  {  81,  87, 149, 204, 139 }, {  82,  83, 143, 205, 142 },
+  {  84,  90, 156, 212, 146 }, {  85,  91, 157, 213, 147 },
+  {  86,  90, 156, 214, 148 }, {  87,  91, 157, 215, 149 },
+  {  88,  94, 102, 106,  98 }, {  88,  94, 152, 206, 144 },
+  {  88,  98, 158, 210, 144 }, {  89,  95, 103, 107,  99 },
+  {  89,  95, 153, 207, 145 }, {  89,  99, 159, 211, 145 },
+  {  92,  96, 104, 110, 100 }, {  92,  96, 154, 208, 150 },
+  {  92, 100, 160, 216, 150 }, {  93,  97, 105, 111, 101 },
+  {  93,  97, 155, 209, 151 }, {  93, 101, 161, 217, 151 },
+  {  94, 102, 164, 218, 152 }, {  95, 103, 165, 219, 153 },
+  {  96, 104, 166, 220, 154 }, {  97, 105, 167, 221, 155 },
+  {  98, 106, 168, 222, 158 }, {  99, 107, 169, 223, 159 },
+  { 100, 110, 174, 228, 160 }, { 101, 111, 175, 229, 161 },
+  { 102, 106, 168, 230, 164 }, { 103, 107, 169, 231, 165 },
+  { 104, 110, 174, 232, 166 }, { 105, 111, 175, 233, 167 },
+  { 108, 112, 118, 120, 114 }, { 108, 112, 170, 224, 162 },
+  { 108, 114, 172, 226, 162 }, { 109, 113, 119, 121, 115 },
+  { 109, 113, 171, 225, 163 }, { 109, 115, 173, 227, 163 },
+  { 112, 118, 180, 235, 170 }, { 113, 119, 181, 236, 171 },
+  { 114, 120, 182, 237, 172 }, { 115, 121, 183, 238, 173 },
+  { 116, 117, 125, 128, 124 }, { 116, 117, 177, 234, 176 },
+  { 116, 124, 184, 240, 176 }, { 117, 125, 185, 241, 177 },
+  { 118, 120, 182, 244, 180 }, { 119, 121, 183, 245, 181 },
+  { 122, 123, 127, 129, 126 }, { 122, 123, 179, 239, 178 },
+  { 122, 126, 186, 242, 178 }, { 123, 127, 187, 243, 179 },
+  { 124, 128, 188, 246, 184 }, { 125, 128, 188, 247, 185 },
+  { 126, 129, 189, 248, 186 }, { 127, 129, 189, 249, 187 },
+  { 130, 131, 192, 250, 190 }, { 130, 131, 193, 251, 191 },
+  { 130, 190, 270, 271, 191 }, { 131, 192, 272, 273, 193 },
+  { 132, 136, 194, 250, 190 }, { 132, 136, 201, 252, 196 },
+  { 132, 190, 270, 274, 196 }, { 133, 137, 195, 251, 191 },
+  { 133, 137, 202, 253, 197 }, { 133, 191, 271, 275, 197 },
+  { 134, 138, 194, 250, 192 }, { 134, 138, 203, 254, 198 },
+  { 134, 192, 272, 276, 198 }, { 135, 139, 195, 251, 193 },
+  { 135, 139, 204, 255, 199 }, { 135, 193, 273, 277, 199 },
+  { 136, 194, 279, 282, 201 }, { 137, 195, 280, 283, 202 },
+  { 138, 194, 279, 284, 203 }, { 139, 195, 280, 285, 204 },
+  { 140, 144, 206, 252, 196 }, { 140, 144, 210, 256, 200 },
+  { 140, 196, 274, 278, 200 }, { 141, 145, 207, 253, 197 },
+  { 141, 145, 211, 256, 200 }, { 141, 197, 275, 278, 200 },
+  { 142, 150, 208, 254, 198 }, { 142, 150, 216, 257, 205 },
+  { 142, 198, 276, 281, 205 }, { 143, 151, 209, 255, 199 },
+  { 143, 151, 217, 257, 205 }, { 143, 199, 277, 281, 205 },
+  { 144, 206, 290, 294, 210 }, { 145, 207, 291, 295, 211 },
+  { 146, 152, 206, 252, 201 }, { 146, 152, 218, 258, 212 },
+  { 146, 201, 282, 286, 212 }, { 147, 153, 207, 253, 202 },
+  { 147, 153, 219, 259, 213 }, { 147, 202, 283, 287, 213 },
+  { 148, 154, 208, 254, 203 }, { 148, 154, 220, 260, 214 },
+  { 148, 203, 284, 288, 214 }, { 149, 155, 209, 255, 204 },
+  { 149, 155, 221, 261, 215 }, { 149, 204, 285, 289, 215 },
+  { 150, 208, 292, 296, 216 }, { 151, 209, 293, 297, 217 },
+  { 152, 206, 290, 298, 218 }, { 153, 207, 291, 299, 219 },
+  { 154, 208, 292, 300, 220 }, { 155, 209, 293, 301, 221 },
+  { 156, 162, 224, 258, 212 }, { 156, 162, 226, 260, 214 },
+  { 156, 212, 286, 288, 214 }, { 157, 163, 225, 259, 213 },
+  { 157, 163, 227, 261, 215 }, { 157, 213, 287, 289, 215 },
+  { 158, 159, 211, 256, 210 }, { 158, 159, 223, 262, 222 },
+  { 158, 210, 294, 302, 222 }, { 159, 211, 295, 303, 223 },
+  { 160, 161, 217, 257, 216 }, { 160, 161, 229, 263, 228 },
+  { 160, 216, 296, 304, 228 }, { 161, 217, 297, 305, 229 },
+  { 162, 224, 310, 312, 226 }, { 163, 225, 311, 313, 227 },
+  { 164, 170, 224, 258, 218 }, { 164, 170, 235, 264, 230 },
+  { 164, 218, 298, 306, 230 }, { 165, 171, 225, 259, 219 },
+  { 165, 171, 236, 265, 231 }, { 165, 219, 299, 307, 231 },
+  { 166, 172, 226, 260, 220 }, { 166, 172, 237, 266, 232 },
+  { 166, 220, 300, 308, 232 }, { 167, 173, 227, 261, 221 },
+  { 167, 173, 238, 267, 233 }, { 167, 221, 301, 309, 233 },
+  { 168, 176, 234, 262, 222 }, { 168, 176, 240, 264, 230 },
+  { 168, 222, 302, 306, 230 }, { 169, 177, 234, 262, 223 },
+  { 169, 177, 241, 265, 231 }, { 169, 223, 303, 307, 231 },
+  { 170, 224, 310, 314, 235 }, { 171, 225, 311, 315, 236 },
+  { 172, 226, 312, 316, 237 }, { 173, 227, 313, 317, 238 },
+  { 174, 178, 239, 263, 228 }, { 174, 178, 242, 266, 232 },
+  { 174, 228, 304, 308, 232 }, { 175, 179, 239, 263, 229 },
+  { 175, 179, 243, 267, 233 }, { 175, 229, 305, 309, 233 },
+  { 176, 234, 318, 322, 240 }, { 177, 234, 318, 323, 241 },
+  { 178, 239, 321, 324, 242 }, { 179, 239, 321, 325, 243 },
+  { 180, 184, 240, 264, 235 }, { 180, 184, 246, 268, 244 },
+  { 180, 235, 314, 319, 244 }, { 181, 185, 241, 265, 236 },
+  { 181, 185, 247, 269, 245 }, { 181, 236, 315, 320, 245 },
+  { 182, 186, 242, 266, 237 }, { 182, 186, 248, 268, 244 },
+  { 182, 237, 316, 319, 244 }, { 183, 187, 243, 267, 238 },
+  { 183, 187, 249, 269, 245 }, { 183, 238, 317, 320, 245 },
+  { 184, 240, 322, 326, 246 }, { 185, 241, 323, 327, 247 },
+  { 186, 242, 324, 328, 248 }, { 187, 243, 325, 329, 249 },
+  { 188, 189, 248, 268, 246 }, { 188, 189, 249, 269, 247 },
+  { 188, 246, 326, 327, 247 }, { 189, 248, 328, 329, 249 },
+  { 190, 250, 330, 350, 270 }, { 191, 251, 331, 351, 271 },
+  { 192, 250, 330, 352, 272 }, { 193, 251, 331, 353, 273 },
+  { 194, 250, 330, 354, 279 }, { 195, 251, 331, 355, 280 },
+  { 196, 252, 332, 356, 274 }, { 197, 253, 333, 357, 275 },
+  { 198, 254, 334, 358, 276 }, { 199, 255, 335, 359, 277 },
+  { 200, 256, 336, 360, 278 }, { 201, 252, 332, 361, 282 },
+  { 202, 253, 333, 362, 283 }, { 203, 254, 334, 363, 284 },
+  { 204, 255, 335, 364, 285 }, { 205, 257, 337, 365, 281 },
+  { 206, 252, 332, 366, 290 }, { 207, 253, 333, 367, 291 },
+  { 208, 254, 334, 368, 292 }, { 209, 255, 335, 369, 293 },
+  { 210, 256, 336, 370, 294 }, { 211, 256, 336, 371, 295 },
+  { 212, 258, 338, 372, 286 }, { 213, 259, 339, 373, 287 },
+  { 214, 260, 340, 374, 288 }, { 215, 261, 341, 375, 289 },
+  { 216, 257, 337, 376, 296 }, { 217, 257, 337, 377, 297 },
+  { 218, 258, 338, 378, 298 }, { 219, 259, 339, 379, 299 },
+  { 220, 260, 340, 380, 300 }, { 221, 261, 341, 381, 301 },
+  { 222, 262, 342, 382, 302 }, { 223, 262, 342, 383, 303 },
+  { 224, 258, 338, 384, 310 }, { 225, 259, 339, 385, 311 },
+  { 226, 260, 340, 386, 312 }, { 227, 261, 341, 387, 313 },
+  { 228, 263, 343, 388, 304 }, { 229, 263, 343, 389, 305 },
+  { 230, 264, 344, 390, 306 }, { 231, 265, 345, 391, 307 },
+  { 232, 266, 346, 392, 308 }, { 233, 267, 347, 393, 309 },
+  { 234, 262, 342, 394, 318 }, { 235, 264, 344, 395, 314 },
+  { 236, 265, 345, 396, 315 }, { 237, 266, 346, 397, 316 },
+  { 238, 267, 347, 398, 317 }, { 239, 263, 343, 399, 321 },
+  { 240, 264, 344, 400, 322 }, { 241, 265, 345, 401, 323 },
+  { 242, 266, 346, 402, 324 }, { 243, 267, 347, 403, 325 },
+  { 244, 268, 348, 404, 319 }, { 245, 269, 349, 405, 320 },
+  { 246, 268, 348, 406, 326 }, { 247, 269, 349, 407, 327 },
+  { 248, 268, 348, 408, 328 }, { 249, 269, 349, 409, 329 },
+  { 270, 271, 275, 278, 274 }, { 270, 271, 351, 410, 350 },
+  { 270, 274, 356, 412, 350 }, { 271, 275, 357, 413, 351 },
+  { 272, 273, 277, 281, 276 }, { 272, 273, 353, 411, 352 },
+  { 272, 276, 358, 414, 352 }, { 273, 277, 359, 415, 353 },
+  { 274, 278, 360, 420, 356 }, { 275, 278, 360, 421, 357 },
+  { 276, 281, 365, 422, 358 }, { 277, 281, 365, 423, 359 },
+  { 279, 282, 286, 288, 284 }, { 279, 282, 361, 416, 354 },
+  { 279, 284, 363, 418, 354 }, { 280, 283, 287, 289, 285 },
+  { 280, 283, 362, 417, 355 }, { 280, 285, 364, 419, 355 },
+  { 282, 286, 372, 426, 361 }, { 283, 287, 373, 427, 362 },
+  { 284, 288, 374, 428, 363 }, { 285, 289, 375, 429, 364 },
+  { 286, 288, 374, 436, 372 }, { 287, 289, 375, 437, 373 },
+  { 290, 294, 302, 306, 298 }, { 290, 294, 370, 424, 366 },
+  { 290, 298, 378, 432, 366 }, { 291, 295, 303, 307, 299 },
+  { 291, 295, 371, 425, 367 }, { 291, 299, 379, 433, 367 },
+  { 292, 296, 304, 308, 300 }, { 292, 296, 376, 430, 368 },
+  { 292, 300, 380, 434, 368 }, { 293, 297, 305, 309, 301 },
+  { 293, 297, 377, 431, 369 }, { 293, 301, 381, 435, 369 },
+  { 294, 302, 382, 438, 370 }, { 295, 303, 383, 439, 371 },
+  { 296, 304, 388, 440, 376 }, { 297, 305, 389, 441, 377 },
+  { 298, 306, 390, 444, 378 }, { 299, 307, 391, 445, 379 },
+  { 300, 308, 392, 446, 380 }, { 301, 309, 393, 447, 381 },
+  { 302, 306, 390, 448, 382 }, { 303, 307, 391, 449, 383 },
+  { 304, 308, 392, 454, 388 }, { 305, 309, 393, 455, 389 },
+  { 310, 312, 316, 319, 314 }, { 310, 312, 386, 442, 384 },
+  { 310, 314, 395, 450, 384 }, { 311, 313, 317, 320, 315 },
+  { 311, 313, 387, 443, 385 }, { 311, 315, 396, 451, 385 },
+  { 312, 316, 397, 452, 386 }, { 313, 317, 398, 453, 387 },
+  { 314, 319, 404, 460, 395 }, { 315, 320, 405, 461, 396 },
+  { 316, 319, 404, 462, 397 }, { 317, 320, 405, 463, 398 },
+  { 318, 322, 326, 327, 323 }, { 318, 322, 400, 456, 394 },
+  { 318, 323, 401, 457, 394 }, { 321, 324, 328, 329, 325 },
+  { 321, 324, 402, 458, 399 }, { 321, 325, 403, 459, 399 },
+  { 322, 326, 406, 464, 400 }, { 323, 327, 407, 465, 401 },
+  { 324, 328, 408, 466, 402 }, { 325, 329, 409, 467, 403 },
+  { 326, 327, 407, 468, 406 }, { 328, 329, 409, 469, 408 },
+  { 330, 350, 410, 411, 352 }, { 330, 350, 412, 416, 354 },
+  { 330, 352, 414, 418, 354 }, { 331, 351, 410, 411, 353 },
+  { 331, 351, 413, 417, 355 }, { 331, 353, 415, 419, 355 },
+  { 332, 356, 412, 416, 361 }, { 332, 356, 420, 424, 366 },
+  { 332, 361, 426, 432, 366 }, { 333, 357, 413, 417, 362 },
+  { 333, 357, 421, 425, 367 }, { 333, 362, 427, 433, 367 },
+  { 334, 358, 414, 418, 363 }, { 334, 358, 422, 430, 368 },
+  { 334, 363, 428, 434, 368 }, { 335, 359, 415, 419, 364 },
+  { 335, 359, 423, 431, 369 }, { 335, 364, 429, 435, 369 },
+  { 336, 360, 420, 424, 370 }, { 336, 360, 421, 425, 371 },
+  { 336, 370, 438, 439, 371 }, { 337, 365, 422, 430, 376 },
+  { 337, 365, 423, 431, 377 }, { 337, 376, 440, 441, 377 },
+  { 338, 372, 426, 432, 378 }, { 338, 372, 436, 442, 384 },
+  { 338, 378, 444, 450, 384 }, { 339, 373, 427, 433, 379 },
+  { 339, 373, 437, 443, 385 }, { 339, 379, 445, 451, 385 },
+  { 340, 374, 428, 434, 380 }, { 340, 374, 436, 442, 386 },
+  { 340, 380, 446, 452, 386 }, { 341, 375, 429, 435, 381 },
+  { 341, 375, 437, 443, 387 }, { 341, 381, 447, 453, 387 },
+  { 342, 382, 438, 439, 383 }, { 342, 382, 448, 456, 394 },
+  { 342, 383, 449, 457, 394 }, { 343, 388, 440, 441, 389 },
+  { 343, 388, 454, 458, 399 }, { 343, 389, 455, 459, 399 },
+  { 344, 390, 444, 450, 395 }, { 344, 390, 448, 456, 400 },
+  { 344, 395, 460, 464, 400 }, { 345, 391, 445, 451, 396 },
+  { 345, 391, 449, 457, 401 }, { 345, 396, 461, 465, 401 },
+  { 346, 392, 446, 452, 397 }, { 346, 392, 454, 458, 402 },
+  { 346, 397, 462, 466, 402 }, { 347, 393, 447, 453, 398 },
+  { 347, 393, 455, 459, 403 }, { 347, 398, 463, 467, 403 },
+  { 348, 404, 460, 464, 406 }, { 348, 404, 462, 466, 408 },
+  { 348, 406, 468, 469, 408 }, { 349, 405, 461, 465, 407 },
+  { 349, 405, 463, 467, 409 }, { 349, 407, 468, 469, 409 },
+  { 350, 410, 470, 472, 412 }, { 351, 410, 470, 473, 413 },
+  { 352, 411, 471, 474, 414 }, { 353, 411, 471, 475, 415 },
+  { 354, 416, 478, 480, 418 }, { 355, 417, 479, 481, 419 },
+  { 356, 412, 472, 476, 420 }, { 357, 413, 473, 477, 421 },
+  { 358, 414, 474, 482, 422 }, { 359, 415, 475, 483, 423 },
+  { 360, 420, 476, 477, 421 }, { 361, 416, 478, 484, 426 },
+  { 362, 417, 479, 485, 427 }, { 363, 418, 480, 486, 428 },
+  { 364, 419, 481, 487, 429 }, { 365, 422, 482, 483, 423 },
+  { 366, 424, 488, 494, 432 }, { 367, 425, 489, 495, 433 },
+  { 368, 430, 492, 496, 434 }, { 369, 431, 493, 497, 435 },
+  { 370, 424, 488, 498, 438 }, { 371, 425, 489, 499, 439 },
+  { 372, 426, 484, 490, 436 }, { 373, 427, 485, 491, 437 },
+  { 374, 428, 486, 490, 436 }, { 375, 429, 487, 491, 437 },
+  { 376, 430, 492, 500, 440 }, { 377, 431, 493, 501, 441 },
+  { 378, 432, 494, 502, 444 }, { 379, 433, 495, 503, 445 },
+  { 380, 434, 496, 504, 446 }, { 381, 435, 497, 505, 447 },
+  { 382, 438, 498, 506, 448 }, { 383, 439, 499, 507, 449 },
+  { 384, 442, 508, 512, 450 }, { 385, 443, 509, 513, 451 },
+  { 386, 442, 508, 514, 452 }, { 387, 443, 509, 515, 453 },
+  { 388, 440, 500, 510, 454 }, { 389, 441, 501, 511, 455 },
+  { 390, 444, 502, 506, 448 }, { 391, 445, 503, 507, 449 },
+  { 392, 446, 504, 510, 454 }, { 393, 447, 505, 511, 455 },
+  { 394, 456, 516, 517, 457 }, { 395, 450, 512, 518, 460 },
+  { 396, 451, 513, 519, 461 }, { 397, 452, 514, 520, 462 },
+  { 398, 453, 515, 521, 463 }, { 399, 458, 522, 523, 459 },
+  { 400, 456, 516, 524, 464 }, { 401, 457, 517, 525, 465 },
+  { 402, 458, 522, 526, 466 }, { 403, 459, 523, 527, 467 },
+  { 404, 460, 518, 520, 462 }, { 405, 461, 519, 521, 463 },
+  { 406, 464, 524, 528, 468 }, { 407, 465, 525, 528, 468 },
+  { 408, 466, 526, 529, 469 }, { 409, 467, 527, 529, 469 },
+  { 410, 411, 471, 530, 470 }, { 412, 416, 478, 531, 472 },
+  { 413, 417, 479, 532, 473 }, { 414, 418, 480, 533, 474 },
+  { 415, 419, 481, 534, 475 }, { 420, 424, 488, 535, 476 },
+  { 421, 425, 489, 536, 477 }, { 422, 430, 492, 537, 482 },
+  { 423, 431, 493, 538, 483 }, { 426, 432, 494, 539, 484 },
+  { 427, 433, 495, 540, 485 }, { 428, 434, 496, 541, 486 },
+  { 429, 435, 497, 542, 487 }, { 436, 442, 508, 544, 490 },
+  { 437, 443, 509, 545, 491 }, { 438, 439, 499, 543, 498 },
+  { 440, 441, 501, 546, 500 }, { 444, 450, 512, 547, 502 },
+  { 445, 451, 513, 548, 503 }, { 446, 452, 514, 549, 504 },
+  { 447, 453, 515, 550, 505 }, { 448, 456, 516, 551, 506 },
+  { 449, 457, 517, 552, 507 }, { 454, 458, 522, 553, 510 },
+  { 455, 459, 523, 554, 511 }, { 460, 464, 524, 555, 518 },
+  { 461, 465, 525, 556, 519 }, { 462, 466, 526, 557, 520 },
+  { 463, 467, 527, 558, 521 }, { 468, 469, 529, 559, 528 },
+  { 470, 472, 476, 477, 473 }, { 470, 472, 531, 560, 530 },
+  { 470, 473, 532, 561, 530 }, { 471, 474, 482, 483, 475 },
+  { 471, 474, 533, 560, 530 }, { 471, 475, 534, 561, 530 },
+  { 472, 476, 535, 562, 531 }, { 473, 477, 536, 563, 532 },
+  { 474, 482, 537, 564, 533 }, { 475, 483, 538, 565, 534 },
+  { 476, 477, 536, 566, 535 }, { 478, 480, 486, 490, 484 },
+  { 478, 480, 533, 560, 531 }, { 478, 484, 539, 562, 531 },
+  { 479, 481, 487, 491, 485 }, { 479, 481, 534, 561, 532 },
+  { 479, 485, 540, 563, 532 }, { 480, 486, 541, 564, 533 },
+  { 481, 487, 542, 565, 534 }, { 482, 483, 538, 567, 537 },
+  { 484, 490, 544, 568, 539 }, { 485, 491, 545, 569, 540 },
+  { 486, 490, 544, 570, 541 }, { 487, 491, 545, 571, 542 },
+  { 488, 494, 502, 506, 498 }, { 488, 494, 539, 562, 535 },
+  { 488, 498, 543, 566, 535 }, { 489, 495, 503, 507, 499 },
+  { 489, 495, 540, 563, 536 }, { 489, 499, 543, 566, 536 },
+  { 492, 496, 504, 510, 500 }, { 492, 496, 541, 564, 537 },
+  { 492, 500, 546, 567, 537 }, { 493, 497, 505, 511, 501 },
+  { 493, 497, 542, 565, 538 }, { 493, 501, 546, 567, 538 },
+  { 494, 502, 547, 568, 539 }, { 495, 503, 548, 569, 540 },
+  { 496, 504, 549, 570, 541 }, { 497, 505, 550, 571, 542 },
+  { 498, 506, 551, 572, 543 }, { 499, 507, 552, 572, 543 },
+  { 500, 510, 553, 573, 546 }, { 501, 511, 554, 573, 546 },
+  { 502, 506, 551, 574, 547 }, { 503, 507, 552, 575, 548 },
+  { 504, 510, 553, 576, 549 }, { 505, 511, 554, 577, 550 },
+  { 508, 512, 518, 520, 514 }, { 508, 512, 547, 568, 544 },
+  { 508, 514, 549, 570, 544 }, { 509, 513, 519, 521, 515 },
+  { 509, 513, 548, 569, 545 }, { 509, 515, 550, 571, 545 },
+  { 512, 518, 555, 574, 547 }, { 513, 519, 556, 575, 548 },
+  { 514, 520, 557, 576, 549 }, { 515, 521, 558, 577, 550 },
+  { 516, 517, 525, 528, 524 }, { 516, 517, 552, 572, 551 },
+  { 516, 524, 555, 574, 551 }, { 517, 525, 556, 575, 552 },
+  { 518, 520, 557, 578, 555 }, { 519, 521, 558, 579, 556 },
+  { 522, 523, 527, 529, 526 }, { 522, 523, 554, 573, 553 },
+  { 522, 526, 557, 576, 553 }, { 523, 527, 558, 577, 554 },
+  { 524, 528, 559, 578, 555 }, { 525, 528, 559, 579, 556 },
+  { 526, 529, 559, 578, 557 }, { 527, 529, 559, 579, 558 },
+  { 530, 560, 580, 581, 561 }, { 531, 560, 580, 582, 562 },
+  { 532, 561, 581, 583, 563 }, { 533, 560, 580, 584, 564 },
+  { 534, 561, 581, 585, 565 }, { 535, 562, 582, 586, 566 },
+  { 536, 563, 583, 586, 566 }, { 537, 564, 584, 587, 567 },
+  { 538, 565, 585, 587, 567 }, { 539, 562, 582, 588, 568 },
+  { 540, 563, 583, 589, 569 }, { 541, 564, 584, 590, 570 },
+  { 542, 565, 585, 591, 571 }, { 543, 566, 586, 592, 572 },
+  { 544, 568, 588, 590, 570 }, { 545, 569, 589, 591, 571 },
+  { 546, 567, 587, 593, 573 }, { 547, 568, 588, 594, 574 },
+  { 548, 569, 589, 595, 575 }, { 549, 570, 590, 596, 576 },
+  { 550, 571, 591, 597, 577 }, { 551, 572, 592, 594, 574 },
+  { 552, 572, 592, 595, 575 }, { 553, 573, 593, 596, 576 },
+  { 554, 573, 593, 597, 577 }, { 555, 574, 594, 598, 578 },
+  { 556, 575, 595, 599, 579 }, { 557, 576, 596, 598, 578 },
+  { 558, 577, 597, 599, 579 }, { 559, 578, 598, 599, 579 },
+  { 580, 581, 583, 586, 582 }, { 580, 581, 585, 587, 584 },
+  { 580, 582, 588, 590, 584 }, { 581, 583, 589, 591, 585 },
+  { 582, 586, 592, 594, 588 }, { 583, 586, 592, 595, 589 },
+  { 584, 587, 593, 596, 590 }, { 585, 587, 593, 597, 591 },
+  { 588, 590, 596, 598, 594 }, { 589, 591, 597, 599, 595 },
+  { 592, 594, 598, 599, 595 }, { 593, 596, 598, 599, 597 }
+};
+
+static float edge_color_120[NUM_EDGE_120][4];
+static float face_color_120[NUM_FACE_120][4];
+static float face_color_trans_120[NUM_FACE_120][4];
+
+
+/* 600-cell {3,3,5} */
+#define NUM_VERT_600 120
+#define NUM_EDGE_600 720
+#define NUM_FACE_600 1200
+#define VERT_PER_FACE_600 3
+
+#define MIN_EDGE_DEPTH_600 (-GOLDEN/2.0-1)
+#define MAX_EDGE_DEPTH_600 (GOLDEN/2.0+1)
+#define MIN_FACE_DEPTH_600 ((-2*GOLDEN-2)/3.0)
+#define MAX_FACE_DEPTH_600 ((2*GOLDEN+2)/3.0)
+
+static float vert_600[NUM_VERT_600][4] = {
+  {        0.0,        0.0,        0.0,       -2.0 },
+  {        0.0, -GOLDENINV,       -1.0,    -GOLDEN },
+  {        0.0,  GOLDENINV,       -1.0,    -GOLDEN },
+  {       -1.0,        0.0, -GOLDENINV,    -GOLDEN },
+  {        1.0,        0.0, -GOLDENINV,    -GOLDEN },
+  { -GOLDENINV,       -1.0,        0.0,    -GOLDEN },
+  {  GOLDENINV,       -1.0,        0.0,    -GOLDEN },
+  { -GOLDENINV,        1.0,        0.0,    -GOLDEN },
+  {  GOLDENINV,        1.0,        0.0,    -GOLDEN },
+  {       -1.0,        0.0,  GOLDENINV,    -GOLDEN },
+  {        1.0,        0.0,  GOLDENINV,    -GOLDEN },
+  {        0.0, -GOLDENINV,        1.0,    -GOLDEN },
+  {        0.0,  GOLDENINV,        1.0,    -GOLDEN },
+  { -GOLDENINV,        0.0,    -GOLDEN,       -1.0 },
+  {  GOLDENINV,        0.0,    -GOLDEN,       -1.0 },
+  {       -1.0,       -1.0,       -1.0,       -1.0 },
+  {        1.0,       -1.0,       -1.0,       -1.0 },
+  {       -1.0,        1.0,       -1.0,       -1.0 },
+  {        1.0,        1.0,       -1.0,       -1.0 },
+  {        0.0,    -GOLDEN, -GOLDENINV,       -1.0 },
+  {        0.0,     GOLDEN, -GOLDENINV,       -1.0 },
+  {    -GOLDEN, -GOLDENINV,        0.0,       -1.0 },
+  {     GOLDEN, -GOLDENINV,        0.0,       -1.0 },
+  {    -GOLDEN,  GOLDENINV,        0.0,       -1.0 },
+  {     GOLDEN,  GOLDENINV,        0.0,       -1.0 },
+  {        0.0,    -GOLDEN,  GOLDENINV,       -1.0 },
+  {        0.0,     GOLDEN,  GOLDENINV,       -1.0 },
+  {       -1.0,       -1.0,        1.0,       -1.0 },
+  {        1.0,       -1.0,        1.0,       -1.0 },
+  {       -1.0,        1.0,        1.0,       -1.0 },
+  {        1.0,        1.0,        1.0,       -1.0 },
+  { -GOLDENINV,        0.0,     GOLDEN,       -1.0 },
+  {  GOLDENINV,        0.0,     GOLDEN,       -1.0 },
+  {        0.0,       -1.0,    -GOLDEN, -GOLDENINV },
+  {        0.0,        1.0,    -GOLDEN, -GOLDENINV },
+  {    -GOLDEN,        0.0,       -1.0, -GOLDENINV },
+  {     GOLDEN,        0.0,       -1.0, -GOLDENINV },
+  {       -1.0,    -GOLDEN,        0.0, -GOLDENINV },
+  {        1.0,    -GOLDEN,        0.0, -GOLDENINV },
+  {       -1.0,     GOLDEN,        0.0, -GOLDENINV },
+  {        1.0,     GOLDEN,        0.0, -GOLDENINV },
+  {    -GOLDEN,        0.0,        1.0, -GOLDENINV },
+  {     GOLDEN,        0.0,        1.0, -GOLDENINV },
+  {        0.0,       -1.0,     GOLDEN, -GOLDENINV },
+  {        0.0,        1.0,     GOLDEN, -GOLDENINV },
+  {        0.0,        0.0,       -2.0,        0.0 },
+  {       -1.0, -GOLDENINV,    -GOLDEN,        0.0 },
+  {        1.0, -GOLDENINV,    -GOLDEN,        0.0 },
+  {       -1.0,  GOLDENINV,    -GOLDEN,        0.0 },
+  {        1.0,  GOLDENINV,    -GOLDEN,        0.0 },
+  { -GOLDENINV,    -GOLDEN,       -1.0,        0.0 },
+  {  GOLDENINV,    -GOLDEN,       -1.0,        0.0 },
+  { -GOLDENINV,     GOLDEN,       -1.0,        0.0 },
+  {  GOLDENINV,     GOLDEN,       -1.0,        0.0 },
+  {    -GOLDEN,       -1.0, -GOLDENINV,        0.0 },
+  {     GOLDEN,       -1.0, -GOLDENINV,        0.0 },
+  {    -GOLDEN,        1.0, -GOLDENINV,        0.0 },
+  {     GOLDEN,        1.0, -GOLDENINV,        0.0 },
+  {        0.0,       -2.0,        0.0,        0.0 },
+  {       -2.0,        0.0,        0.0,        0.0 },
+  {        2.0,        0.0,        0.0,        0.0 },
+  {        0.0,        2.0,        0.0,        0.0 },
+  {    -GOLDEN,       -1.0,  GOLDENINV,        0.0 },
+  {     GOLDEN,       -1.0,  GOLDENINV,        0.0 },
+  {    -GOLDEN,        1.0,  GOLDENINV,        0.0 },
+  {     GOLDEN,        1.0,  GOLDENINV,        0.0 },
+  { -GOLDENINV,    -GOLDEN,        1.0,        0.0 },
+  {  GOLDENINV,    -GOLDEN,        1.0,        0.0 },
+  { -GOLDENINV,     GOLDEN,        1.0,        0.0 },
+  {  GOLDENINV,     GOLDEN,        1.0,        0.0 },
+  {       -1.0, -GOLDENINV,     GOLDEN,        0.0 },
+  {        1.0, -GOLDENINV,     GOLDEN,        0.0 },
+  {       -1.0,  GOLDENINV,     GOLDEN,        0.0 },
+  {        1.0,  GOLDENINV,     GOLDEN,        0.0 },
+  {        0.0,        0.0,        2.0,        0.0 },
+  {        0.0,       -1.0,    -GOLDEN,  GOLDENINV },
+  {        0.0,        1.0,    -GOLDEN,  GOLDENINV },
+  {    -GOLDEN,        0.0,       -1.0,  GOLDENINV },
+  {     GOLDEN,        0.0,       -1.0,  GOLDENINV },
+  {       -1.0,    -GOLDEN,        0.0,  GOLDENINV },
+  {        1.0,    -GOLDEN,        0.0,  GOLDENINV },
+  {       -1.0,     GOLDEN,        0.0,  GOLDENINV },
+  {        1.0,     GOLDEN,        0.0,  GOLDENINV },
+  {    -GOLDEN,        0.0,        1.0,  GOLDENINV },
+  {     GOLDEN,        0.0,        1.0,  GOLDENINV },
+  {        0.0,       -1.0,     GOLDEN,  GOLDENINV },
+  {        0.0,        1.0,     GOLDEN,  GOLDENINV },
+  { -GOLDENINV,        0.0,    -GOLDEN,        1.0 },
+  {  GOLDENINV,        0.0,    -GOLDEN,        1.0 },
+  {       -1.0,       -1.0,       -1.0,        1.0 },
+  {        1.0,       -1.0,       -1.0,        1.0 },
+  {       -1.0,        1.0,       -1.0,        1.0 },
+  {        1.0,        1.0,       -1.0,        1.0 },
+  {        0.0,    -GOLDEN, -GOLDENINV,        1.0 },
+  {        0.0,     GOLDEN, -GOLDENINV,        1.0 },
+  {    -GOLDEN, -GOLDENINV,        0.0,        1.0 },
+  {     GOLDEN, -GOLDENINV,        0.0,        1.0 },
+  {    -GOLDEN,  GOLDENINV,        0.0,        1.0 },
+  {     GOLDEN,  GOLDENINV,        0.0,        1.0 },
+  {        0.0,    -GOLDEN,  GOLDENINV,        1.0 },
+  {        0.0,     GOLDEN,  GOLDENINV,        1.0 },
+  {       -1.0,       -1.0,        1.0,        1.0 },
+  {        1.0,       -1.0,        1.0,        1.0 },
+  {       -1.0,        1.0,        1.0,        1.0 },
+  {        1.0,        1.0,        1.0,        1.0 },
+  { -GOLDENINV,        0.0,     GOLDEN,        1.0 },
+  {  GOLDENINV,        0.0,     GOLDEN,        1.0 },
+  {        0.0, -GOLDENINV,       -1.0,     GOLDEN },
+  {        0.0,  GOLDENINV,       -1.0,     GOLDEN },
+  {       -1.0,        0.0, -GOLDENINV,     GOLDEN },
+  {        1.0,        0.0, -GOLDENINV,     GOLDEN },
+  { -GOLDENINV,       -1.0,        0.0,     GOLDEN },
+  {  GOLDENINV,       -1.0,        0.0,     GOLDEN },
+  { -GOLDENINV,        1.0,        0.0,     GOLDEN },
+  {  GOLDENINV,        1.0,        0.0,     GOLDEN },
+  {       -1.0,        0.0,  GOLDENINV,     GOLDEN },
+  {        1.0,        0.0,  GOLDENINV,     GOLDEN },
+  {        0.0, -GOLDENINV,        1.0,     GOLDEN },
+  {        0.0,  GOLDENINV,        1.0,     GOLDEN },
+  {        0.0,        0.0,        0.0,        2.0 }
+};
+
+static int edge_600[NUM_EDGE_600][2] = {
+  {   0,   1 }, {   0,   2 }, {   0,   3 }, {   0,   4 }, {   0,   5 },
+  {   0,   6 }, {   0,   7 }, {   0,   8 }, {   0,   9 }, {   0,  10 },
+  {   0,  11 }, {   0,  12 }, {   1,   2 }, {   1,   3 }, {   1,   4 },
+  {   1,   5 }, {   1,   6 }, {   1,  13 }, {   1,  14 }, {   1,  15 },
+  {   1,  16 }, {   1,  19 }, {   1,  33 }, {   2,   3 }, {   2,   4 },
+  {   2,   7 }, {   2,   8 }, {   2,  13 }, {   2,  14 }, {   2,  17 },
+  {   2,  18 }, {   2,  20 }, {   2,  34 }, {   3,   5 }, {   3,   7 },
+  {   3,   9 }, {   3,  13 }, {   3,  15 }, {   3,  17 }, {   3,  21 },
+  {   3,  23 }, {   3,  35 }, {   4,   6 }, {   4,   8 }, {   4,  10 },
+  {   4,  14 }, {   4,  16 }, {   4,  18 }, {   4,  22 }, {   4,  24 },
+  {   4,  36 }, {   5,   6 }, {   5,   9 }, {   5,  11 }, {   5,  15 },
+  {   5,  19 }, {   5,  21 }, {   5,  25 }, {   5,  27 }, {   5,  37 },
+  {   6,  10 }, {   6,  11 }, {   6,  16 }, {   6,  19 }, {   6,  22 },
+  {   6,  25 }, {   6,  28 }, {   6,  38 }, {   7,   8 }, {   7,   9 },
+  {   7,  12 }, {   7,  17 }, {   7,  20 }, {   7,  23 }, {   7,  26 },
+  {   7,  29 }, {   7,  39 }, {   8,  10 }, {   8,  12 }, {   8,  18 },
+  {   8,  20 }, {   8,  24 }, {   8,  26 }, {   8,  30 }, {   8,  40 },
+  {   9,  11 }, {   9,  12 }, {   9,  21 }, {   9,  23 }, {   9,  27 },
+  {   9,  29 }, {   9,  31 }, {   9,  41 }, {  10,  11 }, {  10,  12 },
+  {  10,  22 }, {  10,  24 }, {  10,  28 }, {  10,  30 }, {  10,  32 },
+  {  10,  42 }, {  11,  12 }, {  11,  25 }, {  11,  27 }, {  11,  28 },
+  {  11,  31 }, {  11,  32 }, {  11,  43 }, {  12,  26 }, {  12,  29 },
+  {  12,  30 }, {  12,  31 }, {  12,  32 }, {  12,  44 }, {  13,  14 },
+  {  13,  15 }, {  13,  17 }, {  13,  33 }, {  13,  34 }, {  13,  35 },
+  {  13,  45 }, {  13,  46 }, {  13,  48 }, {  14,  16 }, {  14,  18 },
+  {  14,  33 }, {  14,  34 }, {  14,  36 }, {  14,  45 }, {  14,  47 },
+  {  14,  49 }, {  15,  19 }, {  15,  21 }, {  15,  33 }, {  15,  35 },
+  {  15,  37 }, {  15,  46 }, {  15,  50 }, {  15,  54 }, {  16,  19 },
+  {  16,  22 }, {  16,  33 }, {  16,  36 }, {  16,  38 }, {  16,  47 },
+  {  16,  51 }, {  16,  55 }, {  17,  20 }, {  17,  23 }, {  17,  34 },
+  {  17,  35 }, {  17,  39 }, {  17,  48 }, {  17,  52 }, {  17,  56 },
+  {  18,  20 }, {  18,  24 }, {  18,  34 }, {  18,  36 }, {  18,  40 },
+  {  18,  49 }, {  18,  53 }, {  18,  57 }, {  19,  25 }, {  19,  33 },
+  {  19,  37 }, {  19,  38 }, {  19,  50 }, {  19,  51 }, {  19,  58 },
+  {  20,  26 }, {  20,  34 }, {  20,  39 }, {  20,  40 }, {  20,  52 },
+  {  20,  53 }, {  20,  61 }, {  21,  23 }, {  21,  27 }, {  21,  35 },
+  {  21,  37 }, {  21,  41 }, {  21,  54 }, {  21,  59 }, {  21,  62 },
+  {  22,  24 }, {  22,  28 }, {  22,  36 }, {  22,  38 }, {  22,  42 },
+  {  22,  55 }, {  22,  60 }, {  22,  63 }, {  23,  29 }, {  23,  35 },
+  {  23,  39 }, {  23,  41 }, {  23,  56 }, {  23,  59 }, {  23,  64 },
+  {  24,  30 }, {  24,  36 }, {  24,  40 }, {  24,  42 }, {  24,  57 },
+  {  24,  60 }, {  24,  65 }, {  25,  27 }, {  25,  28 }, {  25,  37 },
+  {  25,  38 }, {  25,  43 }, {  25,  58 }, {  25,  66 }, {  25,  67 },
+  {  26,  29 }, {  26,  30 }, {  26,  39 }, {  26,  40 }, {  26,  44 },
+  {  26,  61 }, {  26,  68 }, {  26,  69 }, {  27,  31 }, {  27,  37 },
+  {  27,  41 }, {  27,  43 }, {  27,  62 }, {  27,  66 }, {  27,  70 },
+  {  28,  32 }, {  28,  38 }, {  28,  42 }, {  28,  43 }, {  28,  63 },
+  {  28,  67 }, {  28,  71 }, {  29,  31 }, {  29,  39 }, {  29,  41 },
+  {  29,  44 }, {  29,  64 }, {  29,  68 }, {  29,  72 }, {  30,  32 },
+  {  30,  40 }, {  30,  42 }, {  30,  44 }, {  30,  65 }, {  30,  69 },
+  {  30,  73 }, {  31,  32 }, {  31,  41 }, {  31,  43 }, {  31,  44 },
+  {  31,  70 }, {  31,  72 }, {  31,  74 }, {  32,  42 }, {  32,  43 },
+  {  32,  44 }, {  32,  71 }, {  32,  73 }, {  32,  74 }, {  33,  45 },
+  {  33,  46 }, {  33,  47 }, {  33,  50 }, {  33,  51 }, {  33,  75 },
+  {  34,  45 }, {  34,  48 }, {  34,  49 }, {  34,  52 }, {  34,  53 },
+  {  34,  76 }, {  35,  46 }, {  35,  48 }, {  35,  54 }, {  35,  56 },
+  {  35,  59 }, {  35,  77 }, {  36,  47 }, {  36,  49 }, {  36,  55 },
+  {  36,  57 }, {  36,  60 }, {  36,  78 }, {  37,  50 }, {  37,  54 },
+  {  37,  58 }, {  37,  62 }, {  37,  66 }, {  37,  79 }, {  38,  51 },
+  {  38,  55 }, {  38,  58 }, {  38,  63 }, {  38,  67 }, {  38,  80 },
+  {  39,  52 }, {  39,  56 }, {  39,  61 }, {  39,  64 }, {  39,  68 },
+  {  39,  81 }, {  40,  53 }, {  40,  57 }, {  40,  61 }, {  40,  65 },
+  {  40,  69 }, {  40,  82 }, {  41,  59 }, {  41,  62 }, {  41,  64 },
+  {  41,  70 }, {  41,  72 }, {  41,  83 }, {  42,  60 }, {  42,  63 },
+  {  42,  65 }, {  42,  71 }, {  42,  73 }, {  42,  84 }, {  43,  66 },
+  {  43,  67 }, {  43,  70 }, {  43,  71 }, {  43,  74 }, {  43,  85 },
+  {  44,  68 }, {  44,  69 }, {  44,  72 }, {  44,  73 }, {  44,  74 },
+  {  44,  86 }, {  45,  46 }, {  45,  47 }, {  45,  48 }, {  45,  49 },
+  {  45,  75 }, {  45,  76 }, {  45,  87 }, {  45,  88 }, {  46,  48 },
+  {  46,  50 }, {  46,  54 }, {  46,  75 }, {  46,  77 }, {  46,  87 },
+  {  46,  89 }, {  47,  49 }, {  47,  51 }, {  47,  55 }, {  47,  75 },
+  {  47,  78 }, {  47,  88 }, {  47,  90 }, {  48,  52 }, {  48,  56 },
+  {  48,  76 }, {  48,  77 }, {  48,  87 }, {  48,  91 }, {  49,  53 },
+  {  49,  57 }, {  49,  76 }, {  49,  78 }, {  49,  88 }, {  49,  92 },
+  {  50,  51 }, {  50,  54 }, {  50,  58 }, {  50,  75 }, {  50,  79 },
+  {  50,  89 }, {  50,  93 }, {  51,  55 }, {  51,  58 }, {  51,  75 },
+  {  51,  80 }, {  51,  90 }, {  51,  93 }, {  52,  53 }, {  52,  56 },
+  {  52,  61 }, {  52,  76 }, {  52,  81 }, {  52,  91 }, {  52,  94 },
+  {  53,  57 }, {  53,  61 }, {  53,  76 }, {  53,  82 }, {  53,  92 },
+  {  53,  94 }, {  54,  59 }, {  54,  62 }, {  54,  77 }, {  54,  79 },
+  {  54,  89 }, {  54,  95 }, {  55,  60 }, {  55,  63 }, {  55,  78 },
+  {  55,  80 }, {  55,  90 }, {  55,  96 }, {  56,  59 }, {  56,  64 },
+  {  56,  77 }, {  56,  81 }, {  56,  91 }, {  56,  97 }, {  57,  60 },
+  {  57,  65 }, {  57,  78 }, {  57,  82 }, {  57,  92 }, {  57,  98 },
+  {  58,  66 }, {  58,  67 }, {  58,  79 }, {  58,  80 }, {  58,  93 },
+  {  58,  99 }, {  59,  62 }, {  59,  64 }, {  59,  77 }, {  59,  83 },
+  {  59,  95 }, {  59,  97 }, {  60,  63 }, {  60,  65 }, {  60,  78 },
+  {  60,  84 }, {  60,  96 }, {  60,  98 }, {  61,  68 }, {  61,  69 },
+  {  61,  81 }, {  61,  82 }, {  61,  94 }, {  61, 100 }, {  62,  66 },
+  {  62,  70 }, {  62,  79 }, {  62,  83 }, {  62,  95 }, {  62, 101 },
+  {  63,  67 }, {  63,  71 }, {  63,  80 }, {  63,  84 }, {  63,  96 },
+  {  63, 102 }, {  64,  68 }, {  64,  72 }, {  64,  81 }, {  64,  83 },
+  {  64,  97 }, {  64, 103 }, {  65,  69 }, {  65,  73 }, {  65,  82 },
+  {  65,  84 }, {  65,  98 }, {  65, 104 }, {  66,  67 }, {  66,  70 },
+  {  66,  79 }, {  66,  85 }, {  66,  99 }, {  66, 101 }, {  67,  71 },
+  {  67,  80 }, {  67,  85 }, {  67,  99 }, {  67, 102 }, {  68,  69 },
+  {  68,  72 }, {  68,  81 }, {  68,  86 }, {  68, 100 }, {  68, 103 },
+  {  69,  73 }, {  69,  82 }, {  69,  86 }, {  69, 100 }, {  69, 104 },
+  {  70,  72 }, {  70,  74 }, {  70,  83 }, {  70,  85 }, {  70, 101 },
+  {  70, 105 }, {  71,  73 }, {  71,  74 }, {  71,  84 }, {  71,  85 },
+  {  71, 102 }, {  71, 106 }, {  72,  74 }, {  72,  83 }, {  72,  86 },
+  {  72, 103 }, {  72, 105 }, {  73,  74 }, {  73,  84 }, {  73,  86 },
+  {  73, 104 }, {  73, 106 }, {  74,  85 }, {  74,  86 }, {  74, 105 },
+  {  74, 106 }, {  75,  87 }, {  75,  88 }, {  75,  89 }, {  75,  90 },
+  {  75,  93 }, {  75, 107 }, {  76,  87 }, {  76,  88 }, {  76,  91 },
+  {  76,  92 }, {  76,  94 }, {  76, 108 }, {  77,  87 }, {  77,  89 },
+  {  77,  91 }, {  77,  95 }, {  77,  97 }, {  77, 109 }, {  78,  88 },
+  {  78,  90 }, {  78,  92 }, {  78,  96 }, {  78,  98 }, {  78, 110 },
+  {  79,  89 }, {  79,  93 }, {  79,  95 }, {  79,  99 }, {  79, 101 },
+  {  79, 111 }, {  80,  90 }, {  80,  93 }, {  80,  96 }, {  80,  99 },
+  {  80, 102 }, {  80, 112 }, {  81,  91 }, {  81,  94 }, {  81,  97 },
+  {  81, 100 }, {  81, 103 }, {  81, 113 }, {  82,  92 }, {  82,  94 },
+  {  82,  98 }, {  82, 100 }, {  82, 104 }, {  82, 114 }, {  83,  95 },
+  {  83,  97 }, {  83, 101 }, {  83, 103 }, {  83, 105 }, {  83, 115 },
+  {  84,  96 }, {  84,  98 }, {  84, 102 }, {  84, 104 }, {  84, 106 },
+  {  84, 116 }, {  85,  99 }, {  85, 101 }, {  85, 102 }, {  85, 105 },
+  {  85, 106 }, {  85, 117 }, {  86, 100 }, {  86, 103 }, {  86, 104 },
+  {  86, 105 }, {  86, 106 }, {  86, 118 }, {  87,  88 }, {  87,  89 },
+  {  87,  91 }, {  87, 107 }, {  87, 108 }, {  87, 109 }, {  88,  90 },
+  {  88,  92 }, {  88, 107 }, {  88, 108 }, {  88, 110 }, {  89,  93 },
+  {  89,  95 }, {  89, 107 }, {  89, 109 }, {  89, 111 }, {  90,  93 },
+  {  90,  96 }, {  90, 107 }, {  90, 110 }, {  90, 112 }, {  91,  94 },
+  {  91,  97 }, {  91, 108 }, {  91, 109 }, {  91, 113 }, {  92,  94 },
+  {  92,  98 }, {  92, 108 }, {  92, 110 }, {  92, 114 }, {  93,  99 },
+  {  93, 107 }, {  93, 111 }, {  93, 112 }, {  94, 100 }, {  94, 108 },
+  {  94, 113 }, {  94, 114 }, {  95,  97 }, {  95, 101 }, {  95, 109 },
+  {  95, 111 }, {  95, 115 }, {  96,  98 }, {  96, 102 }, {  96, 110 },
+  {  96, 112 }, {  96, 116 }, {  97, 103 }, {  97, 109 }, {  97, 113 },
+  {  97, 115 }, {  98, 104 }, {  98, 110 }, {  98, 114 }, {  98, 116 },
+  {  99, 101 }, {  99, 102 }, {  99, 111 }, {  99, 112 }, {  99, 117 },
+  { 100, 103 }, { 100, 104 }, { 100, 113 }, { 100, 114 }, { 100, 118 },
+  { 101, 105 }, { 101, 111 }, { 101, 115 }, { 101, 117 }, { 102, 106 },
+  { 102, 112 }, { 102, 116 }, { 102, 117 }, { 103, 105 }, { 103, 113 },
+  { 103, 115 }, { 103, 118 }, { 104, 106 }, { 104, 114 }, { 104, 116 },
+  { 104, 118 }, { 105, 106 }, { 105, 115 }, { 105, 117 }, { 105, 118 },
+  { 106, 116 }, { 106, 117 }, { 106, 118 }, { 107, 108 }, { 107, 109 },
+  { 107, 110 }, { 107, 111 }, { 107, 112 }, { 107, 119 }, { 108, 109 },
+  { 108, 110 }, { 108, 113 }, { 108, 114 }, { 108, 119 }, { 109, 111 },
+  { 109, 113 }, { 109, 115 }, { 109, 119 }, { 110, 112 }, { 110, 114 },
+  { 110, 116 }, { 110, 119 }, { 111, 112 }, { 111, 115 }, { 111, 117 },
+  { 111, 119 }, { 112, 116 }, { 112, 117 }, { 112, 119 }, { 113, 114 },
+  { 113, 115 }, { 113, 118 }, { 113, 119 }, { 114, 116 }, { 114, 118 },
+  { 114, 119 }, { 115, 117 }, { 115, 118 }, { 115, 119 }, { 116, 117 },
+  { 116, 118 }, { 116, 119 }, { 117, 118 }, { 117, 119 }, { 118, 119 }
+};
+
+static int face_600[NUM_FACE_600][VERT_PER_FACE_600] = {
+  {   0,   1,   2 }, {   0,   1,   3 }, {   0,   1,   4 }, {   0,   1,   5 },
+  {   0,   1,   6 }, {   0,   2,   3 }, {   0,   2,   4 }, {   0,   2,   7 },
+  {   0,   2,   8 }, {   0,   3,   5 }, {   0,   3,   7 }, {   0,   3,   9 },
+  {   0,   4,   6 }, {   0,   4,   8 }, {   0,   4,  10 }, {   0,   5,   6 },
+  {   0,   5,   9 }, {   0,   5,  11 }, {   0,   6,  10 }, {   0,   6,  11 },
+  {   0,   7,   8 }, {   0,   7,   9 }, {   0,   7,  12 }, {   0,   8,  10 },
+  {   0,   8,  12 }, {   0,   9,  11 }, {   0,   9,  12 }, {   0,  10,  11 },
+  {   0,  10,  12 }, {   0,  11,  12 }, {   1,   2,   3 }, {   1,   2,   4 },
+  {   1,   2,  13 }, {   1,   2,  14 }, {   1,   3,   5 }, {   1,   3,  13 },
+  {   1,   3,  15 }, {   1,   4,   6 }, {   1,   4,  14 }, {   1,   4,  16 },
+  {   1,   5,   6 }, {   1,   5,  15 }, {   1,   5,  19 }, {   1,   6,  16 },
+  {   1,   6,  19 }, {   1,  13,  14 }, {   1,  13,  15 }, {   1,  13,  33 },
+  {   1,  14,  16 }, {   1,  14,  33 }, {   1,  15,  19 }, {   1,  15,  33 },
+  {   1,  16,  19 }, {   1,  16,  33 }, {   1,  19,  33 }, {   2,   3,   7 },
+  {   2,   3,  13 }, {   2,   3,  17 }, {   2,   4,   8 }, {   2,   4,  14 },
+  {   2,   4,  18 }, {   2,   7,   8 }, {   2,   7,  17 }, {   2,   7,  20 },
+  {   2,   8,  18 }, {   2,   8,  20 }, {   2,  13,  14 }, {   2,  13,  17 },
+  {   2,  13,  34 }, {   2,  14,  18 }, {   2,  14,  34 }, {   2,  17,  20 },
+  {   2,  17,  34 }, {   2,  18,  20 }, {   2,  18,  34 }, {   2,  20,  34 },
+  {   3,   5,   9 }, {   3,   5,  15 }, {   3,   5,  21 }, {   3,   7,   9 },
+  {   3,   7,  17 }, {   3,   7,  23 }, {   3,   9,  21 }, {   3,   9,  23 },
+  {   3,  13,  15 }, {   3,  13,  17 }, {   3,  13,  35 }, {   3,  15,  21 },
+  {   3,  15,  35 }, {   3,  17,  23 }, {   3,  17,  35 }, {   3,  21,  23 },
+  {   3,  21,  35 }, {   3,  23,  35 }, {   4,   6,  10 }, {   4,   6,  16 },
+  {   4,   6,  22 }, {   4,   8,  10 }, {   4,   8,  18 }, {   4,   8,  24 },
+  {   4,  10,  22 }, {   4,  10,  24 }, {   4,  14,  16 }, {   4,  14,  18 },
+  {   4,  14,  36 }, {   4,  16,  22 }, {   4,  16,  36 }, {   4,  18,  24 },
+  {   4,  18,  36 }, {   4,  22,  24 }, {   4,  22,  36 }, {   4,  24,  36 },
+  {   5,   6,  11 }, {   5,   6,  19 }, {   5,   6,  25 }, {   5,   9,  11 },
+  {   5,   9,  21 }, {   5,   9,  27 }, {   5,  11,  25 }, {   5,  11,  27 },
+  {   5,  15,  19 }, {   5,  15,  21 }, {   5,  15,  37 }, {   5,  19,  25 },
+  {   5,  19,  37 }, {   5,  21,  27 }, {   5,  21,  37 }, {   5,  25,  27 },
+  {   5,  25,  37 }, {   5,  27,  37 }, {   6,  10,  11 }, {   6,  10,  22 },
+  {   6,  10,  28 }, {   6,  11,  25 }, {   6,  11,  28 }, {   6,  16,  19 },
+  {   6,  16,  22 }, {   6,  16,  38 }, {   6,  19,  25 }, {   6,  19,  38 },
+  {   6,  22,  28 }, {   6,  22,  38 }, {   6,  25,  28 }, {   6,  25,  38 },
+  {   6,  28,  38 }, {   7,   8,  12 }, {   7,   8,  20 }, {   7,   8,  26 },
+  {   7,   9,  12 }, {   7,   9,  23 }, {   7,   9,  29 }, {   7,  12,  26 },
+  {   7,  12,  29 }, {   7,  17,  20 }, {   7,  17,  23 }, {   7,  17,  39 },
+  {   7,  20,  26 }, {   7,  20,  39 }, {   7,  23,  29 }, {   7,  23,  39 },
+  {   7,  26,  29 }, {   7,  26,  39 }, {   7,  29,  39 }, {   8,  10,  12 },
+  {   8,  10,  24 }, {   8,  10,  30 }, {   8,  12,  26 }, {   8,  12,  30 },
+  {   8,  18,  20 }, {   8,  18,  24 }, {   8,  18,  40 }, {   8,  20,  26 },
+  {   8,  20,  40 }, {   8,  24,  30 }, {   8,  24,  40 }, {   8,  26,  30 },
+  {   8,  26,  40 }, {   8,  30,  40 }, {   9,  11,  12 }, {   9,  11,  27 },
+  {   9,  11,  31 }, {   9,  12,  29 }, {   9,  12,  31 }, {   9,  21,  23 },
+  {   9,  21,  27 }, {   9,  21,  41 }, {   9,  23,  29 }, {   9,  23,  41 },
+  {   9,  27,  31 }, {   9,  27,  41 }, {   9,  29,  31 }, {   9,  29,  41 },
+  {   9,  31,  41 }, {  10,  11,  12 }, {  10,  11,  28 }, {  10,  11,  32 },
+  {  10,  12,  30 }, {  10,  12,  32 }, {  10,  22,  24 }, {  10,  22,  28 },
+  {  10,  22,  42 }, {  10,  24,  30 }, {  10,  24,  42 }, {  10,  28,  32 },
+  {  10,  28,  42 }, {  10,  30,  32 }, {  10,  30,  42 }, {  10,  32,  42 },
+  {  11,  12,  31 }, {  11,  12,  32 }, {  11,  25,  27 }, {  11,  25,  28 },
+  {  11,  25,  43 }, {  11,  27,  31 }, {  11,  27,  43 }, {  11,  28,  32 },
+  {  11,  28,  43 }, {  11,  31,  32 }, {  11,  31,  43 }, {  11,  32,  43 },
+  {  12,  26,  29 }, {  12,  26,  30 }, {  12,  26,  44 }, {  12,  29,  31 },
+  {  12,  29,  44 }, {  12,  30,  32 }, {  12,  30,  44 }, {  12,  31,  32 },
+  {  12,  31,  44 }, {  12,  32,  44 }, {  13,  14,  33 }, {  13,  14,  34 },
+  {  13,  14,  45 }, {  13,  15,  33 }, {  13,  15,  35 }, {  13,  15,  46 },
+  {  13,  17,  34 }, {  13,  17,  35 }, {  13,  17,  48 }, {  13,  33,  45 },
+  {  13,  33,  46 }, {  13,  34,  45 }, {  13,  34,  48 }, {  13,  35,  46 },
+  {  13,  35,  48 }, {  13,  45,  46 }, {  13,  45,  48 }, {  13,  46,  48 },
+  {  14,  16,  33 }, {  14,  16,  36 }, {  14,  16,  47 }, {  14,  18,  34 },
+  {  14,  18,  36 }, {  14,  18,  49 }, {  14,  33,  45 }, {  14,  33,  47 },
+  {  14,  34,  45 }, {  14,  34,  49 }, {  14,  36,  47 }, {  14,  36,  49 },
+  {  14,  45,  47 }, {  14,  45,  49 }, {  14,  47,  49 }, {  15,  19,  33 },
+  {  15,  19,  37 }, {  15,  19,  50 }, {  15,  21,  35 }, {  15,  21,  37 },
+  {  15,  21,  54 }, {  15,  33,  46 }, {  15,  33,  50 }, {  15,  35,  46 },
+  {  15,  35,  54 }, {  15,  37,  50 }, {  15,  37,  54 }, {  15,  46,  50 },
+  {  15,  46,  54 }, {  15,  50,  54 }, {  16,  19,  33 }, {  16,  19,  38 },
+  {  16,  19,  51 }, {  16,  22,  36 }, {  16,  22,  38 }, {  16,  22,  55 },
+  {  16,  33,  47 }, {  16,  33,  51 }, {  16,  36,  47 }, {  16,  36,  55 },
+  {  16,  38,  51 }, {  16,  38,  55 }, {  16,  47,  51 }, {  16,  47,  55 },
+  {  16,  51,  55 }, {  17,  20,  34 }, {  17,  20,  39 }, {  17,  20,  52 },
+  {  17,  23,  35 }, {  17,  23,  39 }, {  17,  23,  56 }, {  17,  34,  48 },
+  {  17,  34,  52 }, {  17,  35,  48 }, {  17,  35,  56 }, {  17,  39,  52 },
+  {  17,  39,  56 }, {  17,  48,  52 }, {  17,  48,  56 }, {  17,  52,  56 },
+  {  18,  20,  34 }, {  18,  20,  40 }, {  18,  20,  53 }, {  18,  24,  36 },
+  {  18,  24,  40 }, {  18,  24,  57 }, {  18,  34,  49 }, {  18,  34,  53 },
+  {  18,  36,  49 }, {  18,  36,  57 }, {  18,  40,  53 }, {  18,  40,  57 },
+  {  18,  49,  53 }, {  18,  49,  57 }, {  18,  53,  57 }, {  19,  25,  37 },
+  {  19,  25,  38 }, {  19,  25,  58 }, {  19,  33,  50 }, {  19,  33,  51 },
+  {  19,  37,  50 }, {  19,  37,  58 }, {  19,  38,  51 }, {  19,  38,  58 },
+  {  19,  50,  51 }, {  19,  50,  58 }, {  19,  51,  58 }, {  20,  26,  39 },
+  {  20,  26,  40 }, {  20,  26,  61 }, {  20,  34,  52 }, {  20,  34,  53 },
+  {  20,  39,  52 }, {  20,  39,  61 }, {  20,  40,  53 }, {  20,  40,  61 },
+  {  20,  52,  53 }, {  20,  52,  61 }, {  20,  53,  61 }, {  21,  23,  35 },
+  {  21,  23,  41 }, {  21,  23,  59 }, {  21,  27,  37 }, {  21,  27,  41 },
+  {  21,  27,  62 }, {  21,  35,  54 }, {  21,  35,  59 }, {  21,  37,  54 },
+  {  21,  37,  62 }, {  21,  41,  59 }, {  21,  41,  62 }, {  21,  54,  59 },
+  {  21,  54,  62 }, {  21,  59,  62 }, {  22,  24,  36 }, {  22,  24,  42 },
+  {  22,  24,  60 }, {  22,  28,  38 }, {  22,  28,  42 }, {  22,  28,  63 },
+  {  22,  36,  55 }, {  22,  36,  60 }, {  22,  38,  55 }, {  22,  38,  63 },
+  {  22,  42,  60 }, {  22,  42,  63 }, {  22,  55,  60 }, {  22,  55,  63 },
+  {  22,  60,  63 }, {  23,  29,  39 }, {  23,  29,  41 }, {  23,  29,  64 },
+  {  23,  35,  56 }, {  23,  35,  59 }, {  23,  39,  56 }, {  23,  39,  64 },
+  {  23,  41,  59 }, {  23,  41,  64 }, {  23,  56,  59 }, {  23,  56,  64 },
+  {  23,  59,  64 }, {  24,  30,  40 }, {  24,  30,  42 }, {  24,  30,  65 },
+  {  24,  36,  57 }, {  24,  36,  60 }, {  24,  40,  57 }, {  24,  40,  65 },
+  {  24,  42,  60 }, {  24,  42,  65 }, {  24,  57,  60 }, {  24,  57,  65 },
+  {  24,  60,  65 }, {  25,  27,  37 }, {  25,  27,  43 }, {  25,  27,  66 },
+  {  25,  28,  38 }, {  25,  28,  43 }, {  25,  28,  67 }, {  25,  37,  58 },
+  {  25,  37,  66 }, {  25,  38,  58 }, {  25,  38,  67 }, {  25,  43,  66 },
+  {  25,  43,  67 }, {  25,  58,  66 }, {  25,  58,  67 }, {  25,  66,  67 },
+  {  26,  29,  39 }, {  26,  29,  44 }, {  26,  29,  68 }, {  26,  30,  40 },
+  {  26,  30,  44 }, {  26,  30,  69 }, {  26,  39,  61 }, {  26,  39,  68 },
+  {  26,  40,  61 }, {  26,  40,  69 }, {  26,  44,  68 }, {  26,  44,  69 },
+  {  26,  61,  68 }, {  26,  61,  69 }, {  26,  68,  69 }, {  27,  31,  41 },
+  {  27,  31,  43 }, {  27,  31,  70 }, {  27,  37,  62 }, {  27,  37,  66 },
+  {  27,  41,  62 }, {  27,  41,  70 }, {  27,  43,  66 }, {  27,  43,  70 },
+  {  27,  62,  66 }, {  27,  62,  70 }, {  27,  66,  70 }, {  28,  32,  42 },
+  {  28,  32,  43 }, {  28,  32,  71 }, {  28,  38,  63 }, {  28,  38,  67 },
+  {  28,  42,  63 }, {  28,  42,  71 }, {  28,  43,  67 }, {  28,  43,  71 },
+  {  28,  63,  67 }, {  28,  63,  71 }, {  28,  67,  71 }, {  29,  31,  41 },
+  {  29,  31,  44 }, {  29,  31,  72 }, {  29,  39,  64 }, {  29,  39,  68 },
+  {  29,  41,  64 }, {  29,  41,  72 }, {  29,  44,  68 }, {  29,  44,  72 },
+  {  29,  64,  68 }, {  29,  64,  72 }, {  29,  68,  72 }, {  30,  32,  42 },
+  {  30,  32,  44 }, {  30,  32,  73 }, {  30,  40,  65 }, {  30,  40,  69 },
+  {  30,  42,  65 }, {  30,  42,  73 }, {  30,  44,  69 }, {  30,  44,  73 },
+  {  30,  65,  69 }, {  30,  65,  73 }, {  30,  69,  73 }, {  31,  32,  43 },
+  {  31,  32,  44 }, {  31,  32,  74 }, {  31,  41,  70 }, {  31,  41,  72 },
+  {  31,  43,  70 }, {  31,  43,  74 }, {  31,  44,  72 }, {  31,  44,  74 },
+  {  31,  70,  72 }, {  31,  70,  74 }, {  31,  72,  74 }, {  32,  42,  71 },
+  {  32,  42,  73 }, {  32,  43,  71 }, {  32,  43,  74 }, {  32,  44,  73 },
+  {  32,  44,  74 }, {  32,  71,  73 }, {  32,  71,  74 }, {  32,  73,  74 },
+  {  33,  45,  46 }, {  33,  45,  47 }, {  33,  45,  75 }, {  33,  46,  50 },
+  {  33,  46,  75 }, {  33,  47,  51 }, {  33,  47,  75 }, {  33,  50,  51 },
+  {  33,  50,  75 }, {  33,  51,  75 }, {  34,  45,  48 }, {  34,  45,  49 },
+  {  34,  45,  76 }, {  34,  48,  52 }, {  34,  48,  76 }, {  34,  49,  53 },
+  {  34,  49,  76 }, {  34,  52,  53 }, {  34,  52,  76 }, {  34,  53,  76 },
+  {  35,  46,  48 }, {  35,  46,  54 }, {  35,  46,  77 }, {  35,  48,  56 },
+  {  35,  48,  77 }, {  35,  54,  59 }, {  35,  54,  77 }, {  35,  56,  59 },
+  {  35,  56,  77 }, {  35,  59,  77 }, {  36,  47,  49 }, {  36,  47,  55 },
+  {  36,  47,  78 }, {  36,  49,  57 }, {  36,  49,  78 }, {  36,  55,  60 },
+  {  36,  55,  78 }, {  36,  57,  60 }, {  36,  57,  78 }, {  36,  60,  78 },
+  {  37,  50,  54 }, {  37,  50,  58 }, {  37,  50,  79 }, {  37,  54,  62 },
+  {  37,  54,  79 }, {  37,  58,  66 }, {  37,  58,  79 }, {  37,  62,  66 },
+  {  37,  62,  79 }, {  37,  66,  79 }, {  38,  51,  55 }, {  38,  51,  58 },
+  {  38,  51,  80 }, {  38,  55,  63 }, {  38,  55,  80 }, {  38,  58,  67 },
+  {  38,  58,  80 }, {  38,  63,  67 }, {  38,  63,  80 }, {  38,  67,  80 },
+  {  39,  52,  56 }, {  39,  52,  61 }, {  39,  52,  81 }, {  39,  56,  64 },
+  {  39,  56,  81 }, {  39,  61,  68 }, {  39,  61,  81 }, {  39,  64,  68 },
+  {  39,  64,  81 }, {  39,  68,  81 }, {  40,  53,  57 }, {  40,  53,  61 },
+  {  40,  53,  82 }, {  40,  57,  65 }, {  40,  57,  82 }, {  40,  61,  69 },
+  {  40,  61,  82 }, {  40,  65,  69 }, {  40,  65,  82 }, {  40,  69,  82 },
+  {  41,  59,  62 }, {  41,  59,  64 }, {  41,  59,  83 }, {  41,  62,  70 },
+  {  41,  62,  83 }, {  41,  64,  72 }, {  41,  64,  83 }, {  41,  70,  72 },
+  {  41,  70,  83 }, {  41,  72,  83 }, {  42,  60,  63 }, {  42,  60,  65 },
+  {  42,  60,  84 }, {  42,  63,  71 }, {  42,  63,  84 }, {  42,  65,  73 },
+  {  42,  65,  84 }, {  42,  71,  73 }, {  42,  71,  84 }, {  42,  73,  84 },
+  {  43,  66,  67 }, {  43,  66,  70 }, {  43,  66,  85 }, {  43,  67,  71 },
+  {  43,  67,  85 }, {  43,  70,  74 }, {  43,  70,  85 }, {  43,  71,  74 },
+  {  43,  71,  85 }, {  43,  74,  85 }, {  44,  68,  69 }, {  44,  68,  72 },
+  {  44,  68,  86 }, {  44,  69,  73 }, {  44,  69,  86 }, {  44,  72,  74 },
+  {  44,  72,  86 }, {  44,  73,  74 }, {  44,  73,  86 }, {  44,  74,  86 },
+  {  45,  46,  48 }, {  45,  46,  75 }, {  45,  46,  87 }, {  45,  47,  49 },
+  {  45,  47,  75 }, {  45,  47,  88 }, {  45,  48,  76 }, {  45,  48,  87 },
+  {  45,  49,  76 }, {  45,  49,  88 }, {  45,  75,  87 }, {  45,  75,  88 },
+  {  45,  76,  87 }, {  45,  76,  88 }, {  45,  87,  88 }, {  46,  48,  77 },
+  {  46,  48,  87 }, {  46,  50,  54 }, {  46,  50,  75 }, {  46,  50,  89 },
+  {  46,  54,  77 }, {  46,  54,  89 }, {  46,  75,  87 }, {  46,  75,  89 },
+  {  46,  77,  87 }, {  46,  77,  89 }, {  46,  87,  89 }, {  47,  49,  78 },
+  {  47,  49,  88 }, {  47,  51,  55 }, {  47,  51,  75 }, {  47,  51,  90 },
+  {  47,  55,  78 }, {  47,  55,  90 }, {  47,  75,  88 }, {  47,  75,  90 },
+  {  47,  78,  88 }, {  47,  78,  90 }, {  47,  88,  90 }, {  48,  52,  56 },
+  {  48,  52,  76 }, {  48,  52,  91 }, {  48,  56,  77 }, {  48,  56,  91 },
+  {  48,  76,  87 }, {  48,  76,  91 }, {  48,  77,  87 }, {  48,  77,  91 },
+  {  48,  87,  91 }, {  49,  53,  57 }, {  49,  53,  76 }, {  49,  53,  92 },
+  {  49,  57,  78 }, {  49,  57,  92 }, {  49,  76,  88 }, {  49,  76,  92 },
+  {  49,  78,  88 }, {  49,  78,  92 }, {  49,  88,  92 }, {  50,  51,  58 },
+  {  50,  51,  75 }, {  50,  51,  93 }, {  50,  54,  79 }, {  50,  54,  89 },
+  {  50,  58,  79 }, {  50,  58,  93 }, {  50,  75,  89 }, {  50,  75,  93 },
+  {  50,  79,  89 }, {  50,  79,  93 }, {  50,  89,  93 }, {  51,  55,  80 },
+  {  51,  55,  90 }, {  51,  58,  80 }, {  51,  58,  93 }, {  51,  75,  90 },
+  {  51,  75,  93 }, {  51,  80,  90 }, {  51,  80,  93 }, {  51,  90,  93 },
+  {  52,  53,  61 }, {  52,  53,  76 }, {  52,  53,  94 }, {  52,  56,  81 },
+  {  52,  56,  91 }, {  52,  61,  81 }, {  52,  61,  94 }, {  52,  76,  91 },
+  {  52,  76,  94 }, {  52,  81,  91 }, {  52,  81,  94 }, {  52,  91,  94 },
+  {  53,  57,  82 }, {  53,  57,  92 }, {  53,  61,  82 }, {  53,  61,  94 },
+  {  53,  76,  92 }, {  53,  76,  94 }, {  53,  82,  92 }, {  53,  82,  94 },
+  {  53,  92,  94 }, {  54,  59,  62 }, {  54,  59,  77 }, {  54,  59,  95 },
+  {  54,  62,  79 }, {  54,  62,  95 }, {  54,  77,  89 }, {  54,  77,  95 },
+  {  54,  79,  89 }, {  54,  79,  95 }, {  54,  89,  95 }, {  55,  60,  63 },
+  {  55,  60,  78 }, {  55,  60,  96 }, {  55,  63,  80 }, {  55,  63,  96 },
+  {  55,  78,  90 }, {  55,  78,  96 }, {  55,  80,  90 }, {  55,  80,  96 },
+  {  55,  90,  96 }, {  56,  59,  64 }, {  56,  59,  77 }, {  56,  59,  97 },
+  {  56,  64,  81 }, {  56,  64,  97 }, {  56,  77,  91 }, {  56,  77,  97 },
+  {  56,  81,  91 }, {  56,  81,  97 }, {  56,  91,  97 }, {  57,  60,  65 },
+  {  57,  60,  78 }, {  57,  60,  98 }, {  57,  65,  82 }, {  57,  65,  98 },
+  {  57,  78,  92 }, {  57,  78,  98 }, {  57,  82,  92 }, {  57,  82,  98 },
+  {  57,  92,  98 }, {  58,  66,  67 }, {  58,  66,  79 }, {  58,  66,  99 },
+  {  58,  67,  80 }, {  58,  67,  99 }, {  58,  79,  93 }, {  58,  79,  99 },
+  {  58,  80,  93 }, {  58,  80,  99 }, {  58,  93,  99 }, {  59,  62,  83 },
+  {  59,  62,  95 }, {  59,  64,  83 }, {  59,  64,  97 }, {  59,  77,  95 },
+  {  59,  77,  97 }, {  59,  83,  95 }, {  59,  83,  97 }, {  59,  95,  97 },
+  {  60,  63,  84 }, {  60,  63,  96 }, {  60,  65,  84 }, {  60,  65,  98 },
+  {  60,  78,  96 }, {  60,  78,  98 }, {  60,  84,  96 }, {  60,  84,  98 },
+  {  60,  96,  98 }, {  61,  68,  69 }, {  61,  68,  81 }, {  61,  68, 100 },
+  {  61,  69,  82 }, {  61,  69, 100 }, {  61,  81,  94 }, {  61,  81, 100 },
+  {  61,  82,  94 }, {  61,  82, 100 }, {  61,  94, 100 }, {  62,  66,  70 },
+  {  62,  66,  79 }, {  62,  66, 101 }, {  62,  70,  83 }, {  62,  70, 101 },
+  {  62,  79,  95 }, {  62,  79, 101 }, {  62,  83,  95 }, {  62,  83, 101 },
+  {  62,  95, 101 }, {  63,  67,  71 }, {  63,  67,  80 }, {  63,  67, 102 },
+  {  63,  71,  84 }, {  63,  71, 102 }, {  63,  80,  96 }, {  63,  80, 102 },
+  {  63,  84,  96 }, {  63,  84, 102 }, {  63,  96, 102 }, {  64,  68,  72 },
+  {  64,  68,  81 }, {  64,  68, 103 }, {  64,  72,  83 }, {  64,  72, 103 },
+  {  64,  81,  97 }, {  64,  81, 103 }, {  64,  83,  97 }, {  64,  83, 103 },
+  {  64,  97, 103 }, {  65,  69,  73 }, {  65,  69,  82 }, {  65,  69, 104 },
+  {  65,  73,  84 }, {  65,  73, 104 }, {  65,  82,  98 }, {  65,  82, 104 },
+  {  65,  84,  98 }, {  65,  84, 104 }, {  65,  98, 104 }, {  66,  67,  85 },
+  {  66,  67,  99 }, {  66,  70,  85 }, {  66,  70, 101 }, {  66,  79,  99 },
+  {  66,  79, 101 }, {  66,  85,  99 }, {  66,  85, 101 }, {  66,  99, 101 },
+  {  67,  71,  85 }, {  67,  71, 102 }, {  67,  80,  99 }, {  67,  80, 102 },
+  {  67,  85,  99 }, {  67,  85, 102 }, {  67,  99, 102 }, {  68,  69,  86 },
+  {  68,  69, 100 }, {  68,  72,  86 }, {  68,  72, 103 }, {  68,  81, 100 },
+  {  68,  81, 103 }, {  68,  86, 100 }, {  68,  86, 103 }, {  68, 100, 103 },
+  {  69,  73,  86 }, {  69,  73, 104 }, {  69,  82, 100 }, {  69,  82, 104 },
+  {  69,  86, 100 }, {  69,  86, 104 }, {  69, 100, 104 }, {  70,  72,  74 },
+  {  70,  72,  83 }, {  70,  72, 105 }, {  70,  74,  85 }, {  70,  74, 105 },
+  {  70,  83, 101 }, {  70,  83, 105 }, {  70,  85, 101 }, {  70,  85, 105 },
+  {  70, 101, 105 }, {  71,  73,  74 }, {  71,  73,  84 }, {  71,  73, 106 },
+  {  71,  74,  85 }, {  71,  74, 106 }, {  71,  84, 102 }, {  71,  84, 106 },
+  {  71,  85, 102 }, {  71,  85, 106 }, {  71, 102, 106 }, {  72,  74,  86 },
+  {  72,  74, 105 }, {  72,  83, 103 }, {  72,  83, 105 }, {  72,  86, 103 },
+  {  72,  86, 105 }, {  72, 103, 105 }, {  73,  74,  86 }, {  73,  74, 106 },
+  {  73,  84, 104 }, {  73,  84, 106 }, {  73,  86, 104 }, {  73,  86, 106 },
+  {  73, 104, 106 }, {  74,  85, 105 }, {  74,  85, 106 }, {  74,  86, 105 },
+  {  74,  86, 106 }, {  74, 105, 106 }, {  75,  87,  88 }, {  75,  87,  89 },
+  {  75,  87, 107 }, {  75,  88,  90 }, {  75,  88, 107 }, {  75,  89,  93 },
+  {  75,  89, 107 }, {  75,  90,  93 }, {  75,  90, 107 }, {  75,  93, 107 },
+  {  76,  87,  88 }, {  76,  87,  91 }, {  76,  87, 108 }, {  76,  88,  92 },
+  {  76,  88, 108 }, {  76,  91,  94 }, {  76,  91, 108 }, {  76,  92,  94 },
+  {  76,  92, 108 }, {  76,  94, 108 }, {  77,  87,  89 }, {  77,  87,  91 },
+  {  77,  87, 109 }, {  77,  89,  95 }, {  77,  89, 109 }, {  77,  91,  97 },
+  {  77,  91, 109 }, {  77,  95,  97 }, {  77,  95, 109 }, {  77,  97, 109 },
+  {  78,  88,  90 }, {  78,  88,  92 }, {  78,  88, 110 }, {  78,  90,  96 },
+  {  78,  90, 110 }, {  78,  92,  98 }, {  78,  92, 110 }, {  78,  96,  98 },
+  {  78,  96, 110 }, {  78,  98, 110 }, {  79,  89,  93 }, {  79,  89,  95 },
+  {  79,  89, 111 }, {  79,  93,  99 }, {  79,  93, 111 }, {  79,  95, 101 },
+  {  79,  95, 111 }, {  79,  99, 101 }, {  79,  99, 111 }, {  79, 101, 111 },
+  {  80,  90,  93 }, {  80,  90,  96 }, {  80,  90, 112 }, {  80,  93,  99 },
+  {  80,  93, 112 }, {  80,  96, 102 }, {  80,  96, 112 }, {  80,  99, 102 },
+  {  80,  99, 112 }, {  80, 102, 112 }, {  81,  91,  94 }, {  81,  91,  97 },
+  {  81,  91, 113 }, {  81,  94, 100 }, {  81,  94, 113 }, {  81,  97, 103 },
+  {  81,  97, 113 }, {  81, 100, 103 }, {  81, 100, 113 }, {  81, 103, 113 },
+  {  82,  92,  94 }, {  82,  92,  98 }, {  82,  92, 114 }, {  82,  94, 100 },
+  {  82,  94, 114 }, {  82,  98, 104 }, {  82,  98, 114 }, {  82, 100, 104 },
+  {  82, 100, 114 }, {  82, 104, 114 }, {  83,  95,  97 }, {  83,  95, 101 },
+  {  83,  95, 115 }, {  83,  97, 103 }, {  83,  97, 115 }, {  83, 101, 105 },
+  {  83, 101, 115 }, {  83, 103, 105 }, {  83, 103, 115 }, {  83, 105, 115 },
+  {  84,  96,  98 }, {  84,  96, 102 }, {  84,  96, 116 }, {  84,  98, 104 },
+  {  84,  98, 116 }, {  84, 102, 106 }, {  84, 102, 116 }, {  84, 104, 106 },
+  {  84, 104, 116 }, {  84, 106, 116 }, {  85,  99, 101 }, {  85,  99, 102 },
+  {  85,  99, 117 }, {  85, 101, 105 }, {  85, 101, 117 }, {  85, 102, 106 },
+  {  85, 102, 117 }, {  85, 105, 106 }, {  85, 105, 117 }, {  85, 106, 117 },
+  {  86, 100, 103 }, {  86, 100, 104 }, {  86, 100, 118 }, {  86, 103, 105 },
+  {  86, 103, 118 }, {  86, 104, 106 }, {  86, 104, 118 }, {  86, 105, 106 },
+  {  86, 105, 118 }, {  86, 106, 118 }, {  87,  88, 107 }, {  87,  88, 108 },
+  {  87,  89, 107 }, {  87,  89, 109 }, {  87,  91, 108 }, {  87,  91, 109 },
+  {  87, 107, 108 }, {  87, 107, 109 }, {  87, 108, 109 }, {  88,  90, 107 },
+  {  88,  90, 110 }, {  88,  92, 108 }, {  88,  92, 110 }, {  88, 107, 108 },
+  {  88, 107, 110 }, {  88, 108, 110 }, {  89,  93, 107 }, {  89,  93, 111 },
+  {  89,  95, 109 }, {  89,  95, 111 }, {  89, 107, 109 }, {  89, 107, 111 },
+  {  89, 109, 111 }, {  90,  93, 107 }, {  90,  93, 112 }, {  90,  96, 110 },
+  {  90,  96, 112 }, {  90, 107, 110 }, {  90, 107, 112 }, {  90, 110, 112 },
+  {  91,  94, 108 }, {  91,  94, 113 }, {  91,  97, 109 }, {  91,  97, 113 },
+  {  91, 108, 109 }, {  91, 108, 113 }, {  91, 109, 113 }, {  92,  94, 108 },
+  {  92,  94, 114 }, {  92,  98, 110 }, {  92,  98, 114 }, {  92, 108, 110 },
+  {  92, 108, 114 }, {  92, 110, 114 }, {  93,  99, 111 }, {  93,  99, 112 },
+  {  93, 107, 111 }, {  93, 107, 112 }, {  93, 111, 112 }, {  94, 100, 113 },
+  {  94, 100, 114 }, {  94, 108, 113 }, {  94, 108, 114 }, {  94, 113, 114 },
+  {  95,  97, 109 }, {  95,  97, 115 }, {  95, 101, 111 }, {  95, 101, 115 },
+  {  95, 109, 111 }, {  95, 109, 115 }, {  95, 111, 115 }, {  96,  98, 110 },
+  {  96,  98, 116 }, {  96, 102, 112 }, {  96, 102, 116 }, {  96, 110, 112 },
+  {  96, 110, 116 }, {  96, 112, 116 }, {  97, 103, 113 }, {  97, 103, 115 },
+  {  97, 109, 113 }, {  97, 109, 115 }, {  97, 113, 115 }, {  98, 104, 114 },
+  {  98, 104, 116 }, {  98, 110, 114 }, {  98, 110, 116 }, {  98, 114, 116 },
+  {  99, 101, 111 }, {  99, 101, 117 }, {  99, 102, 112 }, {  99, 102, 117 },
+  {  99, 111, 112 }, {  99, 111, 117 }, {  99, 112, 117 }, { 100, 103, 113 },
+  { 100, 103, 118 }, { 100, 104, 114 }, { 100, 104, 118 }, { 100, 113, 114 },
+  { 100, 113, 118 }, { 100, 114, 118 }, { 101, 105, 115 }, { 101, 105, 117 },
+  { 101, 111, 115 }, { 101, 111, 117 }, { 101, 115, 117 }, { 102, 106, 116 },
+  { 102, 106, 117 }, { 102, 112, 116 }, { 102, 112, 117 }, { 102, 116, 117 },
+  { 103, 105, 115 }, { 103, 105, 118 }, { 103, 113, 115 }, { 103, 113, 118 },
+  { 103, 115, 118 }, { 104, 106, 116 }, { 104, 106, 118 }, { 104, 114, 116 },
+  { 104, 114, 118 }, { 104, 116, 118 }, { 105, 106, 117 }, { 105, 106, 118 },
+  { 105, 115, 117 }, { 105, 115, 118 }, { 105, 117, 118 }, { 106, 116, 117 },
+  { 106, 116, 118 }, { 106, 117, 118 }, { 107, 108, 109 }, { 107, 108, 110 },
+  { 107, 108, 119 }, { 107, 109, 111 }, { 107, 109, 119 }, { 107, 110, 112 },
+  { 107, 110, 119 }, { 107, 111, 112 }, { 107, 111, 119 }, { 107, 112, 119 },
+  { 108, 109, 113 }, { 108, 109, 119 }, { 108, 110, 114 }, { 108, 110, 119 },
+  { 108, 113, 114 }, { 108, 113, 119 }, { 108, 114, 119 }, { 109, 111, 115 },
+  { 109, 111, 119 }, { 109, 113, 115 }, { 109, 113, 119 }, { 109, 115, 119 },
+  { 110, 112, 116 }, { 110, 112, 119 }, { 110, 114, 116 }, { 110, 114, 119 },
+  { 110, 116, 119 }, { 111, 112, 117 }, { 111, 112, 119 }, { 111, 115, 117 },
+  { 111, 115, 119 }, { 111, 117, 119 }, { 112, 116, 117 }, { 112, 116, 119 },
+  { 112, 117, 119 }, { 113, 114, 118 }, { 113, 114, 119 }, { 113, 115, 118 },
+  { 113, 115, 119 }, { 113, 118, 119 }, { 114, 116, 118 }, { 114, 116, 119 },
+  { 114, 118, 119 }, { 115, 117, 118 }, { 115, 117, 119 }, { 115, 118, 119 },
+  { 116, 117, 118 }, { 116, 117, 119 }, { 116, 118, 119 }, { 117, 118, 119 }
+};
+
+static float edge_color_600[NUM_EDGE_600][4];
+static float face_color_600[NUM_FACE_600][4];
+static float face_color_trans_600[NUM_FACE_600][4];
+
+
+/* Add a rotation around the wx-plane to the matrix m. */
+static void rotatewx(float m[4][4], float phi)
+{
+  float c, s, u, v;
+  int i;
+
+  phi *= M_PI/180.0;
+  c = cos(phi);
+  s = sin(phi);
+  for (i=0; i<4; i++)
+  {
+    u = m[i][1];
+    v = m[i][2];
+    m[i][1] = c*u+s*v;
+    m[i][2] = -s*u+c*v;
+  }
+}
+
+
+/* Add a rotation around the wy-plane to the matrix m. */
+static void rotatewy(float m[4][4], float phi)
+{
+  float c, s, u, v;
+  int i;
+
+  phi *= M_PI/180.0;
+  c = cos(phi);
+  s = sin(phi);
+  for (i=0; i<4; i++)
+  {
+    u = m[i][0];
+    v = m[i][2];
+    m[i][0] = c*u-s*v;
+    m[i][2] = s*u+c*v;
+  }
+}
+
+
+/* Add a rotation around the wz-plane to the matrix m. */
+static void rotatewz(float m[4][4], float phi)
+{
+  float c, s, u, v;
+  int i;
+
+  phi *= M_PI/180.0;
+  c = cos(phi);
+  s = sin(phi);
+  for (i=0; i<4; i++)
+  {
+    u = m[i][0];
+    v = m[i][1];
+    m[i][0] = c*u+s*v;
+    m[i][1] = -s*u+c*v;
+  }
+}
+
+
+/* Add a rotation around the xy-plane to the matrix m. */
+static void rotatexy(float m[4][4], float phi)
+{
+  float c, s, u, v;
+  int i;
+
+  phi *= M_PI/180.0;
+  c = cos(phi);
+  s = sin(phi);
+  for (i=0; i<4; i++)
+  {
+    u = m[i][2];
+    v = m[i][3];
+    m[i][2] = c*u+s*v;
+    m[i][3] = -s*u+c*v;
+  }
+}
+
+
+/* Add a rotation around the xz-plane to the matrix m. */
+static void rotatexz(float m[4][4], float phi)
+{
+  float c, s, u, v;
+  int i;
+
+  phi *= M_PI/180.0;
+  c = cos(phi);
+  s = sin(phi);
+  for (i=0; i<4; i++)
+  {
+    u = m[i][1];
+    v = m[i][3];
+    m[i][1] = c*u-s*v;
+    m[i][3] = s*u+c*v;
+  }
+}
+
+
+/* Add a rotation around the yz-plane to the matrix m. */
+static void rotateyz(float m[4][4], float phi)
+{
+  float c, s, u, v;
+  int i;
+
+  phi *= M_PI/180.0;
+  c = cos(phi);
+  s = sin(phi);
+  for (i=0; i<4; i++)
+  {
+    u = m[i][0];
+    v = m[i][3];
+    m[i][0] = c*u-s*v;
+    m[i][3] = s*u+c*v;
+  }
+}
+
+
+/* Compute the rotation matrix m from the rotation angles. */
+static void rotateall(float m[4][4])
+{
+  int i, j;
+
+  for (i=0; i<4; i++)
+    for (j=0; j<4; j++)
+      m[i][j] = (i==j);
+  rotatewx(m,alpha);
+  rotatewy(m,beta);
+  rotatewz(m,delta);
+  rotatexy(m,zeta);
+  rotatexz(m,eta);
+  rotateyz(m,theta);
+}
+
+
+/* Compute the normal vector of a plane based on three points in the plane. */
+static void normal(float *p, float *q, float *r, float *n)
+{
+  float u[3], v[3], t;
+
+  u[0] = q[0]-p[0];
+  u[1] = q[1]-p[1];
+  u[2] = q[2]-p[2];
+  v[0] = r[0]-p[0];
+  v[1] = r[1]-p[1];
+  v[2] = r[2]-p[2];
+  n[0] = u[1]*v[2]-u[2]*v[1];
+  n[1] = u[2]*v[0]-u[0]*v[2];
+  n[2] = u[0]*v[1]-u[1]*v[0];
+  t = sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);
+  n[0] /= t;
+  n[1] /= t;
+  n[2] /= t;
+}
+
+
+/* Project an array of vertices from 4d to 3d. */
+static void project(float vert[][4], float v[][4], int num)
+{
+  float m[4][4], s;
+  int i, j, k;
+
+  rotateall(m);
+
+  /* Project the vertices from 4d to 3d. */
+  for (i=0; i<num; i++)
+  {
+    for (j=0; j<4; j++)
+    {
+      s = 0.0;
+      for (k=0; k<4; k++)
+        s += m[j][k]*vert[i][k];
+      v[i][j] = s+offset4d[j];
+    }
+    if (projection_4d == DISP_4D_ORTHOGRAPHIC)
+    {
+      for (j=0; j<3; j++)
+        v[i][j] /= 2.0;
+      v[i][3] = 1.0;
+    }
+    else
+    {
+      for (j=0; j<4; j++)
+        v[i][j] /= v[i][3];
+    }
+  }
+
+  /* Move the projected vertices along the z-axis so that they become visible
+     in the viewport. */
+  for (i=0; i<num; i++)
+  {
+    for (j=0; j<4; j++)
+      v[i][j] += offset3d[j];
+  }
+}
+
+
+/* Draw a single polytope. */
+static void draw(ModeInfo *mi,
+                 float v[][4], int edge[][2], int num_edge, int face[],
+                 int num_face, int vert_per_face, float edge_color[][4],
+                 float face_color[][4], float face_color_trans[][4])
+{
+  int i, j;
+  float n[3];
+  static float red[4] = { 1.0, 0.0, 0.0, 1.0 };
+  static float red_trans[4] = { 1.0, 0.0, 0.0, 1.0 };
+
+  mi->polygon_count = 0;
+  if (display_mode == DISP_WIREFRAME)
+  {
+    if (color_mode == COLORS_SINGLE)
+      glColor4fv(red);
+    glBegin(GL_LINES);
+    for (i=0; i<num_edge; i++)
+    {
+      if (color_mode == COLORS_DEPTH)
+        glColor4fv(edge_color[i]);
+      glVertex4fv(v[edge[i][0]]);
+      glVertex4fv(v[edge[i][1]]);
+    }
+    glEnd();
+    mi->polygon_count = num_edge;
+  }
+  else
+  {
+    if (color_mode == COLORS_SINGLE)
+    {
+      red_trans[3] = face_color_trans[0][3]/2.0;
+      if (display_mode == DISP_TRANSPARENT)
+        glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,red_trans);
+      else
+        glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,red);
+    }
+    for (i=0; i<num_face; i++)
+    {
+      glBegin(GL_POLYGON);
+      if (color_mode == COLORS_DEPTH)
+      {
+        if (display_mode == DISP_TRANSPARENT)
+          glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,
+                       face_color_trans[i]);
+        else
+          glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,
+                       face_color[i]);
+      }
+      normal(v[face[i*vert_per_face]],v[face[i*vert_per_face+1]],
+             v[face[i*vert_per_face+2]],n);
+      glNormal3fv(n);
+      for (j=0; j<vert_per_face; j++)
+        glVertex4fv(v[face[i*vert_per_face+j]]);
+      glEnd();
+    }
+    mi->polygon_count = num_face;
+  }
+}
+
+
+/* Draw a 5-cell {3,3,3} projected into 3d. */
+static void cell_5(ModeInfo *mi)
+{
+  float v[NUM_VERT_5][4];
+
+  project(vert_5,v,NUM_VERT_5);
+  draw(mi, v,edge_5,NUM_EDGE_5,(int *)face_5,NUM_FACE_5,VERT_PER_FACE_5,
+       edge_color_5,face_color_5,face_color_trans_5);
+}
+
+
+/* Draw a 8-cell {4,3,3} projected into 3d. */
+static void cell_8(ModeInfo *mi)
+{
+  float v[NUM_VERT_8][4];
+
+  project(vert_8,v,NUM_VERT_8);
+  draw(mi,v,edge_8,NUM_EDGE_8,(int *)face_8,NUM_FACE_8,VERT_PER_FACE_8,
+       edge_color_8,face_color_8,face_color_trans_8);
+}
+
+
+/* Draw a 16-cell {3,3,4} projected into 3d. */
+static void cell_16(ModeInfo *mi)
+{
+  float v[NUM_VERT_16][4];
+
+  project(vert_16,v,NUM_VERT_16);
+  draw(mi,v,edge_16,NUM_EDGE_16,(int *)face_16,NUM_FACE_16,VERT_PER_FACE_16,
+       edge_color_16,face_color_16,face_color_trans_16);
+}
+
+
+/* Draw a 24-cell {3,4,3} projected into 3d. */
+static void cell_24(ModeInfo *mi)
+{
+  float v[NUM_VERT_24][4];
+
+  project(vert_24,v,NUM_VERT_24);
+  draw(mi,v,edge_24,NUM_EDGE_24,(int *)face_24,NUM_FACE_24,VERT_PER_FACE_24,
+       edge_color_24,face_color_24,face_color_trans_24);
+}
+
+
+/* Draw a 120-cell {5,3,3} projected into 3d. */
+static void cell_120(ModeInfo *mi)
+{
+  float v[NUM_VERT_120][4];
+
+  project(vert_120,v,NUM_VERT_120);
+  draw(mi,
+       v,edge_120,NUM_EDGE_120,(int *)face_120,NUM_FACE_120,VERT_PER_FACE_120,
+       edge_color_120,face_color_120,face_color_trans_120);
+}
+
+
+/* Draw a 600-cell {3,3,5} projected into 3d. */
+static void cell_600(ModeInfo *mi)
+{
+  float v[NUM_VERT_600][4];
+
+  project(vert_600,v,NUM_VERT_600);
+  draw(mi,
+       v,edge_600,NUM_EDGE_600,(int *)face_600,NUM_FACE_600,VERT_PER_FACE_600,
+       edge_color_600,face_color_600,face_color_trans_600);
+}
+
+
+/* Compute a color based on the w-depth of a point. */
+static void color(float depth, float alpha, float min, float max,
+                  float color[4])
+{
+  double d, t;
+  int s;
+
+  d = (depth-min)/(max-min);
+  s = floor(d*4.0);
+  t = d*4.0-s;
+  if (s < 0)
+    s += 6;
+  if (s >= 6)
+    s -= 6;
+  switch (s)
+  {
+    case 0:
+      color[0] = 1.0;
+      color[1] = t;
+      color[2] = 0.0;
+      break;
+    case 1:
+      color[0] = 1.0-t;
+      color[1] = 1.0;
+      color[2] = 0.0;
+      break;
+    case 2:
+      color[0] = 0.0;
+      color[1] = 1.0;
+      color[2] = t;
+      break;
+    case 3:
+      color[0] = 0.0;
+      color[1] = 1.0-t;
+      color[2] = 1.0;
+      break;
+    case 4:
+      color[0] = t;
+      color[1] = 0.0;
+      color[2] = 1.0;
+      break;
+    case 5:
+      color[0] = 1.0;
+      color[1] = 0.0;
+      color[2] = 1.0-t;
+      break;
+  }
+  color[3] = alpha;
+}
+
+
+/* Set the colors of a single polytope's edges and faces. */
+static void colors(float vert[][4], int edge[][2], int num_edge, int face[],
+                   int num_face, int vert_per_face, float edge_color[][4],
+                   float face_color[][4], float face_color_trans[][4],
+                   float alpha, float min_edge_depth, float max_edge_depth,
+                   float min_face_depth, float max_face_depth)
+{
+  int i, j;
+  float depth;
+
+  for (i=0; i<num_edge; i++)
+  {
+    depth = (vert[edge[i][0]][3]+vert[edge[i][1]][3])/2.0;
+    color(depth,1.0,min_edge_depth,max_edge_depth,edge_color[i]);
+  }
+  for (i=0; i<num_face; i++)
+  {
+    depth = 0.0;
+    for (j=0; j<vert_per_face; j++)
+      depth += vert[face[i*vert_per_face+j]][3];
+    depth /= vert_per_face;
+    color(depth,1.0,min_face_depth,max_face_depth,face_color[i]);
+    color(depth,alpha,min_face_depth,max_face_depth,face_color_trans[i]);
+  }
+}
+
+
+/* Set the colors of the polytopes' edges and faces. */
+static void set_colors(void)
+{
+  /* 5-cell. */
+  colors(vert_5,edge_5,NUM_EDGE_5,(int *)face_5,NUM_FACE_5,
+         VERT_PER_FACE_5,edge_color_5,face_color_5,face_color_trans_5,
+         0.5,MIN_EDGE_DEPTH_5,MAX_EDGE_DEPTH_5,MIN_FACE_DEPTH_5,
+         MAX_FACE_DEPTH_5);
+
+  /* 8-cell. */
+  colors(vert_8,edge_8,NUM_EDGE_8,(int *)face_8,NUM_FACE_8,
+         VERT_PER_FACE_8,edge_color_8,face_color_8,face_color_trans_8,
+         0.4,MIN_EDGE_DEPTH_8,MAX_EDGE_DEPTH_8,MIN_FACE_DEPTH_8,
+         MAX_FACE_DEPTH_8);
+
+  /* 16-cell. */
+  colors(vert_16,edge_16,NUM_EDGE_16,(int *)face_16,NUM_FACE_16,
+         VERT_PER_FACE_16,edge_color_16,face_color_16,face_color_trans_16,
+         0.25,MIN_EDGE_DEPTH_16,MAX_EDGE_DEPTH_16,MIN_FACE_DEPTH_16,
+         MAX_FACE_DEPTH_16);
+
+  /* 24-cell. */
+  colors(vert_24,edge_24,NUM_EDGE_24,(int *)face_24,NUM_FACE_24,
+         VERT_PER_FACE_24,edge_color_24,face_color_24,face_color_trans_24,
+         0.25,MIN_EDGE_DEPTH_24,MAX_EDGE_DEPTH_24,MIN_FACE_DEPTH_24,
+         MAX_FACE_DEPTH_24);
+
+  /* 120-cell. */
+  colors(vert_120,edge_120,NUM_EDGE_120,(int *)face_120,NUM_FACE_120,
+         VERT_PER_FACE_120,edge_color_120,face_color_120,face_color_trans_120,
+         0.15,MIN_EDGE_DEPTH_120,MAX_EDGE_DEPTH_120,MIN_FACE_DEPTH_120,
+         MAX_FACE_DEPTH_120);
+
+  /* 600-cell. */
+  colors(vert_600,edge_600,NUM_EDGE_600,(int *)face_600,NUM_FACE_600,
+         VERT_PER_FACE_600,edge_color_600,face_color_600,face_color_trans_600,
+         0.06,MIN_EDGE_DEPTH_600,MAX_EDGE_DEPTH_600,MIN_FACE_DEPTH_600,
+         MAX_FACE_DEPTH_600);
+}
+
+
+static void init(ModeInfo *mi)
+{
+  static float light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
+  static float light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
+  static float light_specular[] = { 0.0, 0.0, 0.0, 1.0 };
+  static float light_position[] = { 0.0, 0.0, 1.0, 0.0 };
+  static float mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
+
+  set_colors();
+
+  alpha = 0.0;
+  beta = 0.0;
+  delta = 0.0;
+  zeta = 0.0;
+  eta = 0.0;
+  theta = 0.0;
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  if (projection_3d == DISP_3D_PERSPECTIVE)
+    gluPerspective(60.0,1.0,0.1,100.0);
+  else
+    glOrtho(-1.0,1.0,-1.0,1.0,0.1,100.0);;
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+
+  if (display_mode == DISP_WIREFRAME)
+  {
+    glDisable(GL_DEPTH_TEST);
+    glDisable(GL_LIGHTING);
+    glDisable(GL_LIGHT0);
+    glDisable(GL_BLEND);
+  }
+  else if (display_mode == DISP_SURFACE)
+  {
+    glEnable(GL_DEPTH_TEST);
+    glDepthFunc(GL_LESS);
+    glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);
+    glEnable(GL_LIGHTING);
+    glEnable(GL_LIGHT0);
+    glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
+    glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
+    glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);
+    glLightfv(GL_LIGHT0,GL_POSITION,light_position);
+    glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular);
+    glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,0.0);
+    glDepthMask(GL_TRUE);
+    glDisable(GL_BLEND);
+  }
+  else if (display_mode == DISP_TRANSPARENT)
+  {
+    glDisable(GL_DEPTH_TEST);
+    glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);
+    glEnable(GL_LIGHTING);
+    glEnable(GL_LIGHT0);
+    glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
+    glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
+    glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);
+    glLightfv(GL_LIGHT0,GL_POSITION,light_position);
+    glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular);
+    glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,0.0);
+    glDepthMask(GL_FALSE);
+    glEnable(GL_BLEND);
+    glBlendFunc(GL_SRC_ALPHA,GL_ONE);
+  }
+  else
+  {
+    glDisable(GL_DEPTH_TEST);
+    glDisable(GL_LIGHTING);
+    glDisable(GL_LIGHT0);
+    glDisable(GL_BLEND);
+  }
+}
+
+
+/* Redisplay the polytopes. */
+static void display_polytopes(ModeInfo *mi)
+{
+  alpha += speed_wx;
+  if (alpha >= 360.0)
+    alpha -= 360.0;
+  beta += speed_wy;
+  if (beta >= 360.0)
+    beta -= 360.0;
+  delta += speed_wz;
+  if (delta >= 360.0)
+    delta -= 360.0;
+  zeta += speed_xy;
+  if (zeta >= 360.0)
+    zeta -= 360.0;
+  eta += speed_xz;
+  if (eta >= 360.0)
+    eta -= 360.0;
+  theta += speed_yz;
+  if (theta >= 360.0)
+    theta -= 360.0;
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  if (projection_3d == DISP_3D_ORTHOGRAPHIC)
+  {
+    if (aspect >= 1.0)
+      glOrtho(-aspect,aspect,-1.0,1.0,0.1,100.0);
+    else
+      glOrtho(-1.0,1.0,-1.0/aspect,1.0/aspect,0.1,100.0);
+  }
+  else
+  {
+    gluPerspective(60.0,aspect,0.1,100.0);
+  }
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+
+  {
+    static int tick = 0;
+    static int p;
+
+    if (tick == 0)
+      {
+        if (polytope == POLYTOPE_RANDOM)
+          p = random() % (POLYTOPE_LAST_CELL+1);
+        else
+          p = polytope;
+      }
+    if (++tick > 1000) tick = 0;
+
+    if (p == POLYTOPE_5_CELL)
+      cell_5(mi);
+    else if (p == POLYTOPE_8_CELL)
+      cell_8(mi);
+    else if (p == POLYTOPE_16_CELL)
+      cell_16(mi);
+    else if (p == POLYTOPE_24_CELL)
+      cell_24(mi);
+    else if (p == POLYTOPE_120_CELL)
+      cell_120(mi);
+    else if (p == POLYTOPE_600_CELL)
+      cell_600(mi);
+    else
+      abort();
+  }
+}
+
+
+void reshape_polytopes(ModeInfo * mi, int width, int height)
+{
+  polytopesstruct *hp = &poly[MI_SCREEN(mi)];
+
+  hp->WindW = (GLint)width;
+  hp->WindH = (GLint)height;
+  glViewport(0,0,width,height);
+  aspect = (GLfloat)width/(GLfloat)height;
+}
+
+
+/*
+ *-----------------------------------------------------------------------------
+ *-----------------------------------------------------------------------------
+ *    Xlock hooks.
+ *-----------------------------------------------------------------------------
+ *-----------------------------------------------------------------------------
+ */
+
+/*
+ *-----------------------------------------------------------------------------
+ *    Initialize polytopes.  Called each time the window changes.
+ *-----------------------------------------------------------------------------
+ */
+
+void init_polytopes(ModeInfo * mi)
+{
+  polytopesstruct *hp;
+
+  if (poly == NULL)
+  {
+    poly = (polytopesstruct *)calloc(MI_NUM_SCREENS(mi),
+                                     sizeof(polytopesstruct));
+    if (poly == NULL)
+      return;
+  }
+  hp = &poly[MI_SCREEN(mi)];
+
+  if ((hp->glx_context = init_GL(mi)) != NULL)
+  {
+    reshape_polytopes(mi,MI_WIDTH(mi),MI_HEIGHT(mi));
+    glDrawBuffer(GL_BACK);
+    init(mi);
+  }
+  else
+  {
+    MI_CLEARWINDOW(mi);
+  }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ *    Called by the mainline code periodically to update the display.
+ *-----------------------------------------------------------------------------
+ */
+void draw_polytopes(ModeInfo * mi)
+{
+  Display         *display = MI_DISPLAY(mi);
+  Window          window = MI_WINDOW(mi);
+  polytopesstruct *hp;
+
+  if (poly == NULL)
+    return;
+  hp = &poly[MI_SCREEN(mi)];
+
+  MI_IS_DRAWN(mi) = True;
+  if (!hp->glx_context)
+    return;
+
+  glXMakeCurrent(display,window,*(hp->glx_context));
+
+  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+  glLoadIdentity();
+
+  display_polytopes(mi);
+
+  if (MI_IS_FPS(mi))
+    do_fps (mi);
+
+  glFlush();
+
+  glXSwapBuffers(display,window);
+}
+
+
+/*
+ *-----------------------------------------------------------------------------
+ *    The display is being taken away from us.  Free up malloc'ed 
+ *      memory and X resources that we've alloc'ed.  Only called
+ *      once, we must zap everything for every screen.
+ *-----------------------------------------------------------------------------
+ */
+
+void release_polytopes(ModeInfo * mi)
+{
+  if (poly != NULL)
+  {
+    int screen;
+
+    for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++)
+    {
+      polytopesstruct *hp = &poly[screen];
+
+      if (hp->glx_context)
+        hp->glx_context = (GLXContext *)NULL;
+    }
+    (void) free((void *)poly);
+    poly = (polytopesstruct *)NULL;
+  }
+  FreeAllGL(mi);
+}
+
+void change_polytopes(ModeInfo * mi)
+{
+  polytopesstruct *hp = &poly[MI_SCREEN(mi)];
+
+  if (!hp->glx_context)
+    return;
+
+  glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(hp->glx_context));
+  init(mi);
+}
+
+#endif /* USE_GL */
diff --git a/hacks/glx/polytopes.man b/hacks/glx/polytopes.man
new file mode 100644 (file)
index 0000000..71d2aae
--- /dev/null
@@ -0,0 +1,196 @@
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+polytopes - Draws one of the six regular 4d polytopes rotating in 4d.
+.SH SYNOPSIS
+.B polytopes
+[\-display \fIhost:display.screen\fP]
+[\-install]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fIusecs\fP]
+[\-fps]
+[\-5-cell]
+[\-8-cell]
+[\-16-cell]
+[\-24-cell]
+[\-120-cell]
+[\-600-cell]
+[\-mesh]
+[\-surface]
+[\-transparent]
+[\-single-color]
+[\-depth-colors]
+[\-perspective-3d]
+[\-orthographic-3d]
+[\-perspective-4d]
+[\-orthographic-4d]
+[\-speed-wx \fIfloat\fP]
+[\-speed-wy \fIfloat\fP]
+[\-speed-wz \fIfloat\fP]
+[\-speed-xy \fIfloat\fP]
+[\-speed-xz \fIfloat\fP]
+[\-speed-yz \fIfloat\fP]
+.SH DESCRIPTION
+The \fIpolytopes\fP program shows one of the six regular 4d polytopes
+(5-cell, 8-cell, 16-cell, 24-cell, 120-cell, or 600-cell) rotating in
+4d.  The program projects the 4d polytope to 3d using either a
+perspective or an orthographic projection.  The projected 3d polytope
+can then be projected to the screen either perspectively or
+orthographically.  There are three display modes for the polytope:
+mesh (wireframe), solid, or transparent.  Furthermore, the colors with
+which the polytope is drawn can be set to either single color or to a
+coloring according to the 4d "depth" (the w coordinate) of the
+polytope in its unrotated position.  In the first case, the polytope
+is drawn in red.  This coloring combined with transparency gives a
+nice visual effect of the structure of the polytope.  The second mode
+draws the polytope with a fully saturated color wheel in which the
+edges or faces are colored accoring to their average 4d "depth".  This
+mode is best combined with the wireframe mode, where it allows you to
+see how different parts of the polytope are moved to the "inside" of
+the projected polytope in 3d.  Of course, in 4d the cells, faces, and
+edges of the polytope all have the same distance from the center of
+the polytope.  Only the projection creates the appearance that some of
+the cells lie "inside" the figure in 3d.
+.SH OPTIONS
+.I polytopes
+accepts the following options:
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-install
+Install a private colormap for the window.
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use.  Legal values are the name of a visual
+class, or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-delay \fImicroseconds\fP
+How much of a delay should be introduced between steps of the
+animation.  Default 25000, or 1/40th second.
+.PP
+The following six options are mutually exclusive.  They determine
+which polytope is displayed.
+.TP 8
+.B \-5-cell
+Display the 5-cell.  The 5-cell is the 4d analogon of a regular
+tetrahedron in 3d.  It has 5 regular tetrahedra as its cells, 10
+equilateral triangles as faces, 10 edges, and 5 vertices.
+.TP 8
+.B \-8-cell
+Display the 8-cell (a.k.a. hypercube or tessaract).  The 8-cell is the
+4d analogon of a cube in 3d.  It has 8 cubes as its cells, 24 squares
+as faces, 32 edges, and 16 vertices.
+.TP 8
+.B \-16-cell
+Display the 16-cell.  The 16-cell is the 4d analogon of an octahedron
+in 3d.  It has 16 regular tetrahedra as its cells, 32 equilateral
+triangles as faces, 24 edges, and 8 vertices.
+.TP 8
+.B \-24-cell
+Display the 24-cell.  The 24-cell has no 3d analogon.  It has 24
+regular octahedra as its cells, 96 equilateral triangles as faces, 96
+edges, and 24 vertices.
+.TP 8
+.B \-120-cell
+Display the 120-cell.  The 120-cell has no 3d analogon.  It has 120
+regular dodecahedra as its cells, 720 regular pentagons as faces, 1200
+edges, and 600 vertices.
+.TP 8
+.B \-600-cell
+Display the 600-cell.  The 600-cell has no 3d analogon.  It has 600
+regular tetrahedra as its cells, 1200 equilateral triangles as faces,
+720 edges, and 120 vertices.
+.PP
+The following three options are mutually exclusive.  They determine
+how the polytope is displayed.
+.TP 8
+.B \-mesh
+Display the polytope as a wireframe mesh (default).
+.TP 8
+.B \-surface
+Display the polytope as a solid object.
+.TP 8
+.B \-transparent
+Display the polytope as a transparent object.
+.PP
+The following two options are mutually exclusive.  They determine how
+to color the polytope.
+.TP 8
+.B \-single-color
+Display the polytope in red.
+.TP 8
+.B \-depth-colors
+Display the polytope with a fully saturated color wheel in which the
+edges or faces are colored accoring to their average 4d "depth", i.e.,
+the w coordinate of the polytope in its unrotated position (default).
+.PP
+The following two options are mutually exclusive.  They determine how
+the polytope is projected from 3d to 2d (i.e., to the screen).
+.TP 8
+.B \-perspective-3d
+Project the polytope from 3d to 2d using a perspective projection
+(default).
+.TP 8
+.B \-orthographic-3d
+Project the polytope from 3d to 2d using an orthographic projection.
+.PP
+The following two options are mutually exclusive.  They determine how
+the polytope is projected from 4d to 3d.
+.TP 8
+.B \-perspective-4d
+Project the polytope from 4d to 3d using a perspective projection
+(default).
+.TP 8
+.B \-orthographic-4d
+Project the polytope from 4d to 3d using an orthographic projection.
+.PP
+The following six options determine the rotation speed of the polytope
+around the six possible hyperplanes.  The rotation speed is measured
+in degrees per frame.  The speeds should be set to relatively small
+values, e.g., less than 4 in magnitude.
+.TP 8
+.B \-speed-xw \fIfloat\fP
+Rotation speed around the wx plane (default: 1.1).
+.TP 8
+.B \-speed-xy \fIfloat\fP
+Rotation speed around the wy plane (default: 1.3).
+.TP 8
+.B \-speed-wz \fIfloat\fP
+Rotation speed around the wz plane (default: 1.5).
+.TP 8
+.B \-speed-xy \fIfloat\fP
+Rotation speed around the xy plane (default: 1.7).
+.TP 8
+.B \-speed-xz \fIfloat\fP
+Rotation speed around the xz plane (default: 1.9).
+.TP 8
+.B \-speed-yz \fIfloat\fP
+Rotation speed around the yz plane (default: 2.1).
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2003 by Carsten Steger.  Permission to use, copy,
+modify, distribute, and sell this software and its documentation for
+any purpose is hereby granted without fee, provided that the above
+copyright notice appear in all copies and that both that copyright
+notice and this permission notice appear in supporting documentation.
+No representations are made about the suitability of this software for
+any purpose.  It is provided "as is" without express or implied
+warranty.
+.SH AUTHOR
+Carsten Steger <carsten@mirsanmir.org>, 10-aug-2003.
index 0e99abbe26ee0aa911bedf9e4e99b003cb996a6c..f4535670bf7250c0d1ebd70326b1b07da55a8fd4 100644 (file)
@@ -266,7 +266,7 @@ void Create_Texture(ModeInfo *mi, const char *filename)
     {
       XImage *ximage = xpm_file_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi),
                                            MI_COLORMAP (mi), filename);
     {
       XImage *ximage = xpm_file_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi),
                                            MI_COLORMAP (mi), filename);
-      image  = ximage->data;
+      image  = (GLubyte *) ximage->data;
       width  = ximage->width;
       height = ximage->height;
       format = GL_RGBA;
       width  = ximage->width;
       height = ximage->height;
       format = GL_RGBA;
@@ -301,7 +301,7 @@ void Create_Texture(ModeInfo *mi, const char *filename)
                                  GL_UNSIGNED_BYTE, image);
       if (status)
         {
                                  GL_UNSIGNED_BYTE, image);
       if (status)
         {
-          const char *s = gluErrorString (status);
+          const char *s = (char *) gluErrorString (status);
           fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                    progname, width, height,
                    (s ? s : "(unknown)"));
           fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                    progname, width, height,
                    (s ? s : "(unknown)"));
index ba14cc7be888a03cbc4dde3f4d29edaf1b2170c7..7862ea725e4921f75a7b8cb5ce499f340f6d91ae 100644 (file)
@@ -92,14 +92,16 @@ static Queenscreen *qs = NULL;
 #define QUEEN 1
 #define MINBOARD 5
 #define MAXBOARD 10
 #define QUEEN 1
 #define MINBOARD 5
 #define MAXBOARD 10
-#define COLORSETS 3
+#define COLORSETS 5
 
 /* definition of white/black colors */
 GLfloat colors[COLORSETS][2][3] = 
   { 
 
 /* definition of white/black colors */
 GLfloat colors[COLORSETS][2][3] = 
   { 
+    {{0.43, 0.54, 0.76}, {0.8, 0.8, 0.8}},
     {{0.5, 0.7, 0.9}, {0.2, 0.3, 0.6}},
     {{0.53725490196, 0.360784313725, 0.521568627451}, {0.6, 0.6, 0.6}},
     {{0.5, 0.7, 0.9}, {0.2, 0.3, 0.6}},
     {{0.53725490196, 0.360784313725, 0.521568627451}, {0.6, 0.6, 0.6}},
-    {{1.0, 0.5, 0.0}, {0.5, 0.5, 0.5}},
+    {{0.15, 0.77, 0.54}, {0.5, 0.5, 0.5}},
+    {{0.9, 0.45, 0.0}, {0.5, 0.5, 0.5}},
   };
 
 int board[MAXBOARD][MAXBOARD];
   };
 
 int board[MAXBOARD][MAXBOARD];
@@ -207,13 +209,36 @@ int findSolution(int row, int col) {
 /** driver for finding solution */
 void go(void) { while(!findSolution(0, random()%BOARDSIZE)); }
 
 /** driver for finding solution */
 void go(void) { while(!findSolution(0, random()%BOARDSIZE)); }
 
+/* lighting variables */
+GLfloat front_shininess[] = {80.0};
+GLfloat front_specular[] = {0.5, 0.5, 0.5, 1.0};
+GLfloat ambient[] = {0.5, 0.5, 0.5, 1.0};
+GLfloat ambient2[] = {0.1, 0.1, 0.1, 1.0};
+GLfloat diffuse[] = {0.7, 0.7, 0.7, 1.0};
+GLfloat position0[] = {0.0, 7.0, 0.0, 1.0};
+GLfloat position1[] = {8.0, 7.0, 8.0, 1.0};
+GLfloat lmodel_ambient[] = {0.6, 0.6, 0.6, 1.0};
+GLfloat lmodel_twoside[] = {GL_TRUE};
+
 /* configure lighting */
 void setup_lights(void) {
 /* configure lighting */
 void setup_lights(void) {
-  GLfloat position[] = { 4.0, 8.0, 4.0, 1.0 };
 
 
+  /* setup twoside lighting */
+  glLightfv(GL_LIGHT0, GL_AMBIENT, ambient2);
+  glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
+  glLightfv(GL_LIGHT0, GL_POSITION, position0);
+  glLightfv(GL_LIGHT1, GL_AMBIENT, ambient2);
+  glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
+  glLightfv(GL_LIGHT1, GL_POSITION, position1);
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHTING);
-  glLightfv(GL_LIGHT0, GL_POSITION, position);
   glEnable(GL_LIGHT0);
   glEnable(GL_LIGHT0);
+  glEnable(GL_LIGHT1);
+
+  /* setup material properties */
+  glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess);
+  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular);
+
+  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 }
 
 /* return alpha value for fading */
 }
 
 /* return alpha value for fading */
@@ -228,7 +253,7 @@ void drawPieces(void) {
   for(i = 0; i < BOARDSIZE; ++i) {
     for(j = 0; j < BOARDSIZE; ++j) {
       if(board[i][j]) {
   for(i = 0; i < BOARDSIZE; ++i) {
     for(j = 0; j < BOARDSIZE; ++j) {
       if(board[i][j]) {
-       glColor3fv(colors[colorset][i%2]);
+       glColor3fv(colors[colorset][i%2]);      
        glCallList(QUEEN);
       }
       
        glCallList(QUEEN);
       }
       
@@ -239,6 +264,53 @@ void drawPieces(void) {
   }
 }
 
   }
 }
 
+/** reflectionboard */
+void draw_reflections(void) {
+  int i, j;
+
+  glEnable(GL_STENCIL_TEST);
+  glStencilFunc(GL_ALWAYS, 1, 1);
+  glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
+  glColorMask(0,0,0,0);
+  glDisable(GL_CULL_FACE);
+
+  glDisable(GL_DEPTH_TEST);
+  glBegin(GL_QUADS);
+
+  /* only draw white squares */
+  for(i = 0; i < BOARDSIZE; ++i) {
+    for(j = (BOARDSIZE+i) % 2; j < BOARDSIZE; j += 2) {
+      glVertex3f(i, 0.0, j + 1.0);
+      glVertex3f(i + 1.0, 0.0, j + 1.0);
+      glVertex3f(i + 1.0, 0.0, j);
+      glVertex3f(i, 0.0, j);
+    }
+  }
+  glEnd();
+  glEnable(GL_DEPTH_TEST);
+
+  glColorMask(1, 1, 1, 1);
+  glStencilFunc(GL_EQUAL, 1, 1);
+  glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
+  
+  glPushMatrix(); 
+  glScalef(1.0, -1.0, 1.0);
+  glTranslatef(0.5, 0.001, 0.5);
+  glLightfv(GL_LIGHT0, GL_POSITION, position0);
+  glLightfv(GL_LIGHT1, GL_POSITION, position1);
+  drawPieces();
+  glPopMatrix();
+  glDisable(GL_STENCIL_TEST);
+
+  /* replace lights */
+  glLightfv(GL_LIGHT0, GL_POSITION, position0);
+  glLightfv(GL_LIGHT1, GL_POSITION, position1);
+
+  glEnable(GL_CULL_FACE);
+  glCullFace(GL_BACK);
+  glColorMask(1,1,1,1);
+}
+
 /* draw board */
 void drawBoard(void) {
   int i, j;
 /* draw board */
 void drawBoard(void) {
   int i, j;
@@ -248,19 +320,15 @@ void drawBoard(void) {
   for(i = 0; i < BOARDSIZE; ++i)
     for(j = 0; j < BOARDSIZE; ++j) {
       int par = (i-j+BOARDSIZE)%2;
   for(i = 0; i < BOARDSIZE; ++i)
     for(j = 0; j < BOARDSIZE; ++j) {
       int par = (i-j+BOARDSIZE)%2;
-      glColor3fv(colors[colorset][par]);
+      glColor4f(colors[colorset][par][0],
+               colors[colorset][par][1],
+               colors[colorset][par][2],
+               0.60);
       glNormal3f(0.0, 1.0, 0.0);
       glVertex3f(i, 0.0, j + 1.0);
       glVertex3f(i + 1.0, 0.0, j + 1.0);
       glVertex3f(i + 1.0, 0.0, j);
       glVertex3f(i, 0.0, j);
       glNormal3f(0.0, 1.0, 0.0);
       glVertex3f(i, 0.0, j + 1.0);
       glVertex3f(i + 1.0, 0.0, j + 1.0);
       glVertex3f(i + 1.0, 0.0, j);
       glVertex3f(i, 0.0, j);
-
-      /* draw the bottom, too */
-      glNormal3f(0.0, -1.0, 0.0);
-      glVertex3f(i, 0.0, j);
-      glVertex3f(i + 1.0, 0.0, j);
-      glVertex3f(i + 1.0, 0.0, j + 1.0);
-      glVertex3f(i, 0.0, j + 1.0);
     }
 
   glEnd();
     }
 
   glEnd();
@@ -274,7 +342,12 @@ void display(Queenscreen *c) {
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
 
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
 
-  glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.8/(0.01+findAlpha()));
+  glEnable(GL_LIGHTING);
+  glEnable(GL_COLOR_MATERIAL);
+  glLightfv(GL_LIGHT0, GL_POSITION, position0);
+  glLightfv(GL_LIGHT1, GL_POSITION, position1);
+  glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0/(0.01+findAlpha()));
+  glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.0/(0.01+findAlpha()));
 
   /** setup perspectif */
   glTranslatef(0.0, 0.0, -1.5*BOARDSIZE);
 
   /** setup perspectif */
   glTranslatef(0.0, 0.0, -1.5*BOARDSIZE);
@@ -283,11 +356,22 @@ void display(Queenscreen *c) {
   glRotatef(theta*100, 0.0, 1.0, 0.0);
   glTranslatef(-0.5*BOARDSIZE, 0.0, -0.5*BOARDSIZE);
 
   glRotatef(theta*100, 0.0, 1.0, 0.0);
   glTranslatef(-0.5*BOARDSIZE, 0.0, -0.5*BOARDSIZE);
 
+  /* draw reflections */
+  draw_reflections();
+  glEnable(GL_BLEND);
   drawBoard();
   drawBoard();
-  glTranslatef(0.5, 0.01, 0.5);  
+  glDisable(GL_BLEND);
+
+  position1[0] = BOARDSIZE+2.0;
+  position1[2] = BOARDSIZE+2.0;
+  glLightfv(GL_LIGHT0, GL_POSITION, position0);
+  glLightfv(GL_LIGHT1, GL_POSITION, position1);
+
+  glTranslatef(0.5, 0.0, 0.5);
   drawPieces();
 
   drawPieces();
 
-  if (!c->button_down_p)
+  /* rotate camera */
+  if(!c->button_down_p)
     theta += .002;
 
   /* zero out board, find new solution of size MINBOARD <= i <= MAXBOARD */
     theta += .002;
 
   /* zero out board, find new solution of size MINBOARD <= i <= MAXBOARD */
@@ -366,7 +450,7 @@ void init_queens(ModeInfo *mi) {
     MI_CLEARWINDOW(mi);
 
   glClearColor(0.0, 0.0, 0.0, 0.0);
     MI_CLEARWINDOW(mi);
 
   glClearColor(0.0, 0.0, 0.0, 0.0);
-  glNewList(1, GL_COMPILE);
+  glNewList(QUEEN, GL_COMPILE);
   draw_model(schunks, spidermodel, 24);
   glEndList();
   
   draw_model(schunks, spidermodel, 24);
   glEndList();
   
@@ -379,6 +463,7 @@ void init_queens(ModeInfo *mi) {
     setup_lights();
     glEnable(GL_DEPTH_TEST);
     clearbits |= GL_DEPTH_BUFFER_BIT;
     setup_lights();
     glEnable(GL_DEPTH_TEST);
     clearbits |= GL_DEPTH_BUFFER_BIT;
+    clearbits |= GL_STENCIL_BUFFER_BIT;
     glEnable(GL_CULL_FACE);
     glCullFace(GL_BACK);
   }
     glEnable(GL_CULL_FACE);
     glCullFace(GL_BACK);
   }
index ad77d8c4d5b118060d79227da130f90cfbaed100..442bcb05d2ddbb74a727eba55c382e1efa586429 100644 (file)
@@ -74,16 +74,25 @@ static const char sccsid[] = "@(#)sballs.c  5.02 2001/03/10 xlockmore";
 
 #if defined( USE_XPM ) || defined( USE_XPMINC ) || defined( HAVE_XPM )
 /* USE_XPM & USE_XPMINC in xlock mode ; HAVE_XPM in xscreensaver mode */
 
 #if defined( USE_XPM ) || defined( USE_XPMINC ) || defined( HAVE_XPM )
 /* USE_XPM & USE_XPMINC in xlock mode ; HAVE_XPM in xscreensaver mode */
-#include "xpm-ximage.h"
-#define I_HAVE_XPM
-
-#ifdef STANDALONE
-#include "../images/sball.xpm"
-#include "../images/sball-bg.xpm"
-#else /* !STANDALONE */
-#include "pixmaps/sball.xpm"
-#include "pixmaps/sball-bg.xpm"
-#endif /* !STANDALONE */
+# include "xpm-ximage.h"
+# define I_HAVE_XPM
+
+# ifdef STANDALONE
+
+#  ifdef __GNUC__
+   __extension__ /* don't warn about "string length is greater than the length
+                    ISO C89 compilers are required to support" when including
+                    the following XPM file... */
+#  endif
+#  include "../images/sball.xpm"
+#  ifdef __GNUC__
+   __extension__
+#  endif
+#  include "../images/sball-bg.xpm"
+# else /* !STANDALONE */
+#  include "pixmaps/sball.xpm"
+#  include "pixmaps/sball-bg.xpm"
+# endif /* !STANDALONE */
 #endif /* HAVE_XPM */
 
 /* Manage option vars */
 #endif /* HAVE_XPM */
 
 /* Manage option vars */
index 6832bf4117bc0d48f34acad2a58f71ac3a0edf3b..33e73ab03f9318af5d9bb557ce9b6ca1c8948e88 100644 (file)
@@ -473,7 +473,7 @@ pinit(void)
                                GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData);
     if (status)
       {
                                GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData);
     if (status)
       {
-        const char *s = gluErrorString (status);
+        const char *s = (char *) gluErrorString (status);
         fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                  progname, WoodTextureWidth, WoodTextureHeight,
                  (s ? s : "(unknown)"));
         fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n",
                  progname, WoodTextureWidth, WoodTextureHeight,
                  (s ? s : "(unknown)"));
index 1f27a7ebf26e1e67d635dd573b616974a3ede196..3853007f449f2afd4bf731fc687bf7b03f0b6fdb 100644 (file)
@@ -898,7 +898,9 @@ draw_sws (ModeInfo *mi)
             }
 
           if (alignment >= 0)
             }
 
           if (alignment >= 0)
-            xoff = 1.0 - (glutStrokeLength(GLUT_FONT, line) * sc->font_scale);
+            xoff = 1.0 - (glutStrokeLength(GLUT_FONT,
+                                           (unsigned char *) line)
+                          * sc->font_scale);
           if (alignment == 0)
             xoff /= 2;
 
           if (alignment == 0)
             xoff /= 2;
 
index a524e7659adb6ed55495592577e1176e08503fb7..37c38eebc516f72df3ae536d83cc18c646244c74 100644 (file)
@@ -165,6 +165,7 @@ xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap,
 #undef countof
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
 #undef countof
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
+#if 0
 static Bool
 bigendian (void)
 {
 static Bool
 bigendian (void)
 {
@@ -172,6 +173,7 @@ bigendian (void)
   u.i = 1;
   return !u.c[0];
 }
   u.i = 1;
   return !u.c[0];
 }
+#endif
 
 
 /* The libxpm version of this function...
 
 
 /* The libxpm version of this function...
@@ -267,9 +269,15 @@ xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap,
        things as necessary) OpenGL pretends everything is client-side, so
        we need to pack things in the right order for the client machine.
      */
        things as necessary) OpenGL pretends everything is client-side, so
        we need to pack things in the right order for the client machine.
      */
+#if 0
+    /* #### Cherub says that the little-endian case must be taken on MacOSX,
+            or else the colors/alpha are the wrong way around.  How can
+            that be the case?
+     */
     if (bigendian())
       rpos = 24, gpos = 16, bpos =  8, apos =  0;
     else
     if (bigendian())
       rpos = 24, gpos = 16, bpos =  8, apos =  0;
     else
+#endif
       rpos =  0, gpos =  8, bpos = 16, apos = 24;
 
     for (y = 0; y < xpm_image.height; y++)
       rpos =  0, gpos =  8, bpos = 16, apos = 24;
 
     for (y = 0; y < xpm_image.height; y++)
index 4a17ba36f114d7f6bd1b0bafc7a8929511f84cce..0f0747d17035ea1975115d1f25fb2c317968ee55 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997, 1998
+/* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997, 1998, 2003
  *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
 
 #define stipple_width  16
 #define stipple_height 4
 
 #define stipple_width  16
 #define stipple_height 4
-static char stipple_bits[] = { 0x55, 0x55, 0xee, 0xee, 0x55, 0x55, 0xba, 0xbb};
+static unsigned char stipple_bits[] = {
+  0x55, 0x55, 0xee, 0xee, 0x55, 0x55, 0xba, 0xbb};
 
 #define cross_weave_width  16
 #define cross_weave_height 16
 
 #define cross_weave_width  16
 #define cross_weave_height 16
-static char cross_weave_bits[] = {
+static unsigned char cross_weave_bits[] = {
    0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88,
    0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22,
    0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22};
 
 #define dimple1_width 16
 #define dimple1_height 16
    0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88,
    0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22,
    0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22};
 
 #define dimple1_width 16
 #define dimple1_height 16
-static char dimple1_bits[] = {
+static unsigned char dimple1_bits[] = {
    0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
    0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
    0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00};
 
 #define dimple3_width 16
 #define dimple3_height 16
    0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
    0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
    0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00};
 
 #define dimple3_width 16
 #define dimple3_height 16
-static char dimple3_bits[] = {
+static unsigned char dimple3_bits[] = {
    0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
@@ -110,7 +111,8 @@ init_greynetic (Display *dpy, Window window)
 
   i = 0;
 #define BITS(n,w,h) \
 
   i = 0;
 #define BITS(n,w,h) \
-  pixmaps [i++] = XCreatePixmapFromBitmapData (dpy, window, n, w, h, 1, 0, 1)
+  pixmaps [i++] = \
+    XCreatePixmapFromBitmapData (dpy, window, (char *) n, w, h, 1, 0, 1)
 
   BITS (stipple_bits, stipple_width, stipple_height);
   BITS (cross_weave_bits, cross_weave_width, cross_weave_height);
 
   BITS (stipple_bits, stipple_width, stipple_height);
   BITS (cross_weave_bits, cross_weave_width, cross_weave_height);
index 6c5ca973d4a70b81c68574f89700ff543d5e387c..89f7081239502d128605d67e3bc1e235f4e26cb2 100644 (file)
@@ -9,9 +9,9 @@
  * implied warranty.
  *
  * Description:
  * implied warranty.
  *
  * Description:
- * 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.
+ * Draws the gravitational force in each point on the screen seen
+ * through a halftone dot pattern. The force is calculated from a set
+ * of moving mass points. View it from a distance for best effect.
  */
 
 #include <math.h>
  */
 
 #include <math.h>
index 7cab38d68b531bd635b6723b28cf7d6ea29db3a2..2c002b54b994a4523a51efdc486aa5df9a2949bd 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1993, 1995, 1996, 1997, 1998, 1999
+/* xscreensaver, Copyright (c) 1993, 1995, 1996, 1997, 1998, 1999, 2003
  *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -396,7 +396,7 @@ run_circles (Display *dpy, Window window)
 
       if (cycle_p && cycle_delay)
        {
 
       if (cycle_p && cycle_delay)
        {
-         int i = 0;
+          i = 0;
          while (i < d)
            {
              rotate_colors (dpy, cmap, colors, ncolors, direction);
          while (i < d)
            {
              rotate_colors (dpy, cmap, colors, ncolors, direction);
index 57c2aa454661aba448c7ba31b49e0b2a2bae30eb..97f4c38235b0e45cb39d121fb96096fbb09a6ea7 100644 (file)
@@ -1,6 +1,6 @@
 #define atari_width 17
 #define atari_height 14
 #define atari_width 17
 #define atari_height 14
-static char atari_bits[] = {
+static unsigned char atari_bits[] = {
  0x30,0x00,0x00,0x4a,0x00,0x00,0x80,0x00,0x00,0x09,0x01,0x00,0xc4,0x07,0x00,
  0xc0,0x07,0x00,0xf0,0x1f,0x00,0xf8,0x3f,0x00,0xd8,0x3f,0x00,0xfc,0x7f,0x00,
  0xfc,0x7b,0x00,0xf8,0x3b,0x00,0xf8,0x3d,0x00,0xf0,0x1f,0x00};
  0x30,0x00,0x00,0x4a,0x00,0x00,0x80,0x00,0x00,0x09,0x01,0x00,0xc4,0x07,0x00,
  0xc0,0x07,0x00,0xf0,0x1f,0x00,0xf8,0x3f,0x00,0xd8,0x3f,0x00,0xfc,0x7f,0x00,
  0xfc,0x7b,0x00,0xf8,0x3b,0x00,0xf8,0x3d,0x00,0xf0,0x1f,0x00};
index 6c5cc2c95df7190652b795bcb4aed208dbe08865..4ca07c7eca3f49155105f6fe21a32529d8a76656 100644 (file)
@@ -1,5 +1,5 @@
 /* XPM */
 /* XPM */
-static char * envImage_xpm[] = {
+static char * blocktube_xpm[] = {
 "256 256 61 1",
 "      c None",
 ".     c #060606",
 "256 256 61 1",
 "      c None",
 ".     c #060606",
index c6532765f3376311dafb4a94ce491421c90f7f4e..76aba4a605047ae35621571708bb7f9ec5e70fe4 100644 (file)
@@ -1,6 +1,6 @@
 #define macbomb_width 448
 #define macbomb_height 126
 #define macbomb_width 448
 #define macbomb_height 126
-static char macbomb_bits[] = {
+static unsigned char macbomb_bits[] = {
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
index add8a7ddb84610473270db820767a42add840019..2650ad27cf483ac2dafe6d76f2c1a93c354332b8 100644 (file)
@@ -1132,7 +1132,6 @@ init_juggle(ModeInfo * mi)
        }
        if (pattern == NULL && patternindex == NULL) {
          /* pattern list needs indexing */
        }
        if (pattern == NULL && patternindex == NULL) {
          /* pattern list needs indexing */
-         int i;
          int nelements = sizeof(portfolio)/sizeof(patternstruct);
          int maxballs;
          int numpat = 0;
          int nelements = sizeof(portfolio)/sizeof(patternstruct);
          int maxballs;
          int numpat = 0;
index b7004851d85aab09641235987fc35539dfc3b7be..fa908c06385355c6c0a5f0e44b5aea9cd8e7541b 100644 (file)
@@ -68,7 +68,7 @@ XrmOptionDescRec options [] = {
        {0,0,0,0}
 };
 
        {0,0,0,0}
 };
 
-const char colors[96]=
+const unsigned char colors[96]=
        {0,0,255, 0,51,255, 0,102,255, 0,153,255, 0,204,255,
        0,255,255,0,255,204, 0,255,153, 0,255,102, 0,255,51,
        0,255,0, 51,255,0, 102,255,0, 153,255,0, 204,255,0,
        {0,0,255, 0,51,255, 0,102,255, 0,153,255, 0,204,255,
        0,255,255,0,255,204, 0,255,153, 0,255,102, 0,255,51,
        0,255,0, 51,255,0, 102,255,0, 153,255,0, 204,255,0,
index 9efb19e80bec89674ad7de29605a9f2fc0b5a737..cc8047936b79cfc6224c0978ca6d73c0d6c0e136 100644 (file)
@@ -225,7 +225,7 @@ static void Initialize( Display *pDisplay, Window Win, GC *pGC, XImage **ppImage
 
        /* Find the preferred bits-per-pixel. (jwz) */
        {
 
        /* Find the preferred bits-per-pixel. (jwz) */
        {
-               int i, pfvc = 0;
+               int pfvc = 0;
                XPixmapFormatValues *pfv = XListPixmapFormats( pDisplay, &pfvc );
                for( i=0; i<pfvc; i++ )
                        if( pfv[ i ].depth == XWinAttribs.depth )
                XPixmapFormatValues *pfv = XListPixmapFormats( pDisplay, &pfvc );
                for( i=0; i<pfvc; i++ )
                        if( pfv[ i ].depth == XWinAttribs.depth )
index 0b8f7900076873a8efa05b5124eebeaf7fda0643..3d1fbe12d0e9ef0b087229700c4a234720148cd5 100644 (file)
@@ -21,7 +21,7 @@ phosphor - simulates an old terminal with long-sustain phosphor
 [\-ticks \fIint\fP] [\-delay \fIusecs\fP] [\-program \fIcommand\fP]
 .SH DESCRIPTION
 The \fIphosphor\fP program draws text on the screen in a very large 
 [\-ticks \fIint\fP] [\-delay \fIusecs\fP] [\-program \fIcommand\fP]
 .SH DESCRIPTION
 The \fIphosphor\fP program draws text on the screen in a very large 
-pixellated font that looks like an old low resolution dumb tty.  The
+pixelated font that looks like an old low resolution dumb tty.  The
 pixels flare and fade out as if the phosphor was very long-sustain.
 .SH OPTIONS
 .I phosphor
 pixels flare and fade out as if the phosphor was very long-sustain.
 .SH OPTIONS
 .I phosphor
@@ -41,7 +41,7 @@ Specify which visual to use.  Legal values are the name of a visual class,
 or the id number (decimal or hex) of a specific visual.
 .TP 8
 .B \-font \fIfont-name\fP
 or the id number (decimal or hex) of a specific visual.
 .TP 8
 .B \-font \fIfont-name\fP
-The X font to use.  Phosphor can take any font and scale it up to pixellate
+The X font to use.  Phosphor can take any font and scale it up to pixelate
 it.  The default is \fIfixed\fP.
 .TP 8
 .B \-scale \fIint\fP
 it.  The default is \fIfixed\fP.
 .TP 8
 .B \-scale \fIint\fP
index e380c2711ff35fb3ad3afef57221e707019b006c..071786a0511f85b05b16b54063cb190b1b49755a 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1995, 1997, 1998, 1999
+/* xscreensaver, Copyright (c) 1992, 1995, 1997, 1998, 1999, 2003
  *  Jamie Zawinski <jwz@jwz.org>
  *
  *  reaction/diffusion textures
  *  Jamie Zawinski <jwz@jwz.org>
  *
  *  reaction/diffusion textures
@@ -139,10 +139,10 @@ pixack_frame(char *pix_buf)
   if (!(frame%epoch_time)) {
     int s;
     if (0 != frame) {
   if (!(frame%epoch_time)) {
     int s;
     if (0 != frame) {
-      int t = epoch_time / 500;
-      if (t > 15)
-       t = 15;
-      sleep(t);
+      int tt = epoch_time / 500;
+      if (tt > 15)
+       tt = 15;
+      sleep(tt);
     }
          
     for (i = 0; i < npix; i++) {
     }
          
     for (i = 0; i < npix; i++) {
@@ -379,7 +379,7 @@ screenhack (Display *dpy, Window win)
   double array_x, array_y;
   double array_dx, array_dy;
   int w2;
   double array_x, array_y;
   double array_dx, array_dy;
   int w2;
-  char *p;
+  char *pd;
   int vdepth;
   int npix;
 #ifdef HAVE_XSHM_EXTENSION
   int vdepth;
   int npix;
 #ifdef HAVE_XSHM_EXTENSION
@@ -497,8 +497,8 @@ screenhack (Display *dpy, Window win)
     }
   }
 
     }
   }
 
-  p = malloc(npix * (pdepth == 1 ? 1 : (pdepth / 8)));
-  if (!p) {
+  pd = malloc(npix * (pdepth == 1 ? 1 : (pdepth / 8)));
+  if (!pd) {
     fprintf(stderr, "not enough memory for %d pixels.\n", npix);
     exit(1);
   }
     fprintf(stderr, "not enough memory for %d pixels.\n", npix);
     exit(1);
   }
@@ -514,8 +514,8 @@ screenhack (Display *dpy, Window win)
        use_shm = False;
       else
        {
        use_shm = False;
       else
        {
-         free(p);
-         p = image->data;
+         free(pd);
+         pd = image->data;
        }
     }
 #endif /* HAVE_XSHM_EXTENSION */
        }
     }
 #endif /* HAVE_XSHM_EXTENSION */
@@ -523,7 +523,7 @@ screenhack (Display *dpy, Window win)
   if (!image)
     {
       image = XCreateImage(dpy, xgwa.visual, vdepth,
   if (!image)
     {
       image = XCreateImage(dpy, xgwa.visual, vdepth,
-                          ZPixmap, 0, p,
+                          ZPixmap, 0, pd,
                           width, height, 8, 0);
     }
 
                           width, height, 8, 0);
     }
 
@@ -531,7 +531,7 @@ screenhack (Display *dpy, Window win)
     Bool bump = False;
 
     int i, j;
     Bool bump = False;
 
     int i, j;
-    pixack_frame(p);
+    pixack_frame(pd);
     for (i = 0; i < array_width; i += width)
       for (j = 0; j < array_height; j += height)
 #ifdef HAVE_XSHM_EXTENSION
     for (i = 0; i < array_width; i += width)
       for (j = 0; j < array_height; j += height)
 #ifdef HAVE_XSHM_EXTENSION
index 9f2ed3e2320210f54189c7a9b49cdfe73e08d359..e35b696b46d3cd7f5ab72af32c4b987d19f0ed8f 100644 (file)
@@ -1,6 +1,6 @@
 .TH XScreenSaver 1 "" "X Version 11"
 .SH NAME
 .TH XScreenSaver 1 "" "X Version 11"
 .SH NAME
-shadebobs - oscilating vapor trails.
+shadebobs - oscillating vapor trails.
 .SH SYNOPSIS
 .B shadebobs
 [\-display \fIhost:display.screen\fP]
 .SH SYNOPSIS
 .B shadebobs
 [\-display \fIhost:display.screen\fP]
@@ -12,7 +12,7 @@ shadebobs - oscilating vapor trails.
 [\-delay \fInumber\fP]
 [\-cycles \fInumber\fP]
 .SH DESCRIPTION
 [\-delay \fInumber\fP]
 [\-cycles \fInumber\fP]
 .SH DESCRIPTION
-This draws smoothly-shaded oscilating oval patterns, that look something
+This draws smoothly-shaded oscillating oval patterns, that look something
 like vapor trails or neon tubes.
 .SH OPTIONS
 .TP 8
 like vapor trails or neon tubes.
 .SH OPTIONS
 .TP 8
index dde3a21a5936da401ef191753ed345557d72d877..ae08b2ca8a6e3f9d6a79f690230f0d1e774d90cb 100644 (file)
@@ -98,7 +98,7 @@ init_slide (Display *dpy, Window window)
        for(i = 0; i < max; i++)
          {
            long rd, gd, bd;
        for(i = 0; i < max; i++)
          {
            long rd, gd, bd;
-           unsigned long d;
+           unsigned long dd;
            if (!fg_ok)
              {
                rd = (all[i].red   >> 8) - (fgc.red   >> 8);
            if (!fg_ok)
              {
                rd = (all[i].red   >> 8) - (fgc.red   >> 8);
@@ -107,12 +107,12 @@ init_slide (Display *dpy, Window window)
                if (rd < 0) rd = -rd;
                if (gd < 0) gd = -gd;
                if (bd < 0) bd = -bd;
                if (rd < 0) rd = -rd;
                if (gd < 0) gd = -gd;
                if (bd < 0) bd = -bd;
-               d = (rd << 1) + (gd << 2) + bd;
-               if (d < fgd)
+               dd = (rd << 1) + (gd << 2) + bd;
+               if (dd < fgd)
                  {
                  {
-                   fgd = d;
+                   fgd = dd;
                    fg = all[i].pixel;
                    fg = all[i].pixel;
-                   if (d == 0)
+                   if (dd == 0)
                      fg_ok = True;
                  }
              }
                      fg_ok = True;
                  }
              }
@@ -125,12 +125,12 @@ init_slide (Display *dpy, Window window)
                if (rd < 0) rd = -rd;
                if (gd < 0) gd = -gd;
                if (bd < 0) bd = -bd;
                if (rd < 0) rd = -rd;
                if (gd < 0) gd = -gd;
                if (bd < 0) bd = -bd;
-               d = (rd << 1) + (gd << 2) + bd;
-               if (d < bgd)
+               dd = (rd << 1) + (gd << 2) + bd;
+               if (dd < bgd)
                  {
                  {
-                   bgd = d;
+                   bgd = dd;
                    bg = all[i].pixel;
                    bg = all[i].pixel;
-                   if (d == 0)
+                   if (dd == 0)
                      bg_ok = True;
                  }
              }
                      bg_ok = True;
                  }
              }
index 0df716b6028b992ccb12c836ee9d556403716e27..add3d6f1442bfe06997a9986221b123940449903 100644 (file)
@@ -38,7 +38,7 @@
  * software for any purpose.  It is provided "as is" without express or 
  * implied warranty.
  *
  * software for any purpose.  It is provided "as is" without express or 
  * implied warranty.
  *
- * $Revision: 1.24 $
+ * $Revision: 1.25 $
  *
  * Version 1.0 April 27, 1998.
  * - Initial version
  *
  * Version 1.0 April 27, 1998.
  * - Initial version
@@ -1117,7 +1117,7 @@ getping(sonar_info *si, ping_info *pi)
     /* Local Variables */
 
     struct sockaddr from;
     /* Local Variables */
 
     struct sockaddr from;
-    int fromlen;
+    unsigned int fromlen;
     int result;
     u_char packet[1024];
     struct timeval now;
     int result;
     u_char packet[1024];
     struct timeval now;
@@ -1926,8 +1926,8 @@ parse_mode (Bool ping_works_p)
         }
 
 #ifdef HAVE_PING
         }
 
 #ifdef HAVE_PING
-      if ((4 == sscanf (token, "%d.%d.%d/%d %c",    &n0,&n1,&n2,    &m,&d)) ||
-          (5 == sscanf (token, "%d.%d.%d.%d/%d %c", &n0,&n1,&n2,&n3,&m,&d)))
+      if ((4 == sscanf (token, "%u.%u.%u/%u %c",    &n0,&n1,&n2,    &m,&d)) ||
+          (5 == sscanf (token, "%u.%u.%u.%u/%u %c", &n0,&n1,&n2,&n3,&m,&d)))
         {
           /* subnet: A.B.C.D/M
              subnet: A.B.C/M
         {
           /* subnet: A.B.C.D/M
              subnet: A.B.C/M
@@ -1935,7 +1935,7 @@ parse_mode (Bool ping_works_p)
           unsigned long ip = (n0 << 24) | (n1 << 16) | (n2 << 8) | n3;
           new = subnetHostsList(ip, m);
         }
           unsigned long ip = (n0 << 24) | (n1 << 16) | (n2 << 8) | n3;
           new = subnetHostsList(ip, m);
         }
-      else if (4 == sscanf (token, "%d.%d.%d.%d %c", &n0, &n1, &n2, &n3, &d))
+      else if (4 == sscanf (token, "%u.%u.%u.%u %c", &n0, &n1, &n2, &n3, &d))
         {
           /* IP: A.B.C.D
            */
         {
           /* IP: A.B.C.D
            */
@@ -1945,7 +1945,7 @@ parse_mode (Bool ping_works_p)
         {
           new = subnetHostsList(0, 24);
         }
         {
           new = subnetHostsList(0, 24);
         }
-      else if (1 == sscanf (token, "subnet/%d %c", &m, &dummy))
+      else if (1 == sscanf (token, "subnet/%u %c", &m, &dummy))
         {
           new = subnetHostsList(0, m);
         }
         {
           new = subnetHostsList(0, m);
         }
index c913cef45803db5a80edc979747420c7bb187623..22f6cec6d60a2234ece3d724273d0d8bccef11e2 100755 (executable)
@@ -53,7 +53,7 @@ use bytes;  # Larry can take Unicode and shove it up his ass sideways.
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.103 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.104 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 my $copyright = "WebCollage $version, Copyright (c) 1999-2002" .
     " Jamie Zawinski <jwz\@jwz.org>\n" .
     "            http://www.jwz.org/xscreensaver/\n";
 my $copyright = "WebCollage $version, Copyright (c) 1999-2002" .
     " Jamie Zawinski <jwz\@jwz.org>\n" .
     "            http://www.jwz.org/xscreensaver/\n";
@@ -337,6 +337,11 @@ sub get_document_1 {
       print S $hdrs;
       my $http = <S> || "";
 
       print S $hdrs;
       my $http = <S> || "";
 
+      # Kludge: the Yahoo Random Link is now returning as its first
+      # line "Status: 301" instead of "HTTP/1.0 301 Found".  Fix it...
+      #
+      $http =~ s@^Status:\s+(\d+)\b@HTTP/1.0 $1@i;
+
       $_  = $http;
       s/[\r\n]+$//s;
       LOG ($verbose_http, "  <== $_");
       $_  = $http;
       s/[\r\n]+$//s;
       LOG ($verbose_http, "  <== $_");
@@ -422,6 +427,7 @@ sub get_document {
 
     if ( $http =~ m@^HTTP/[0-9.]+ 30[123]@ ) {
       $_ = $head;
 
     if ( $http =~ m@^HTTP/[0-9.]+ 30[123]@ ) {
       $_ = $head;
+
       my ( $location ) = m@^location:[ \t]*(.*)$@im;
       if ( $location ) {
         $location =~ s/[\r\n]$//;
       my ( $location ) = m@^location:[ \t]*(.*)$@im;
       if ( $location ) {
         $location =~ s/[\r\n]$//;
@@ -982,7 +988,7 @@ sub pick_image_from_pages {
 ############################################################################
 
 # yahoorand
 ############################################################################
 
 # yahoorand
-my $yahoo_random_link = "http://random.yahoo.com/bin/ryl";
+my $yahoo_random_link = "http://random.yahoo.com/fast/ryl";
 
 
 # Picks a random page; picks a random image on that page;
 
 
 # Picks a random page; picks a random image on that page;
index 7c88a932b8e9b34dabb31cd1b33915a9794269e4..99fef88b679fa2280ed9c91979301e34b4ce3010 100644 (file)
@@ -1,5 +1,5 @@
 /* webcollage-helper --- scales and pastes one image into another
 /* webcollage-helper --- scales and pastes one image into another
- * xscreensaver, Copyright (c) 2002 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 2002, 2003 Jamie Zawinski <jwz@jwz.org>
  *
  * 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
@@ -302,7 +302,9 @@ add_jpeg_comment (struct jpeg_compress_struct *cinfo)
     "\r\n";
   char comment[sizeof(fmt) + 100];
   strftime (comment, sizeof(comment)-1, fmt, tm);
     "\r\n";
   char comment[sizeof(fmt) + 100];
   strftime (comment, sizeof(comment)-1, fmt, tm);
-  jpeg_write_marker (cinfo, JPEG_COM, comment, strlen (comment));
+  jpeg_write_marker (cinfo, JPEG_COM,
+                     (unsigned char *) comment,
+                     strlen (comment));
 }
 
 
 }
 
 
index 12d31ffef519a10e73872545b0fe98311809b0e4..64907a7b5b9d186fd6717f83a65fa89d0926b02f 100644 (file)
@@ -329,7 +329,6 @@ xlockmore_screenhack (Display *dpy, Window window,
        goto MONO;
       else
        {
        goto MONO;
       else
        {
-         int i;
          mi.pixels = (unsigned long *)
            calloc (mi.npixels, sizeof (*mi.pixels));
          for (i = 0; i < mi.npixels; i++)
          mi.pixels = (unsigned long *)
            calloc (mi.npixels, sizeof (*mi.pixels));
          for (i = 0; i < mi.npixels; i++)
index dacf312c6549e3e5d9d7449f736aeee69f3dc695..f16cf3c3be6329f0e40132a5773244ed4a4521f5 100644 (file)
@@ -259,8 +259,8 @@ init_trace (m_state *state)
   if (!s)
     goto FAIL;
 
   if (!s)
     goto FAIL;
 
-  state->tracing = (char *) malloc (strlen (s) + 1);
-  s3 = state->tracing;
+  state->tracing = (signed char *) malloc (strlen (s) + 1);
+  s3 = (char *) state->tracing;
 
   for (s2 = s; *s2; s2++)
     if (*s2 >= '0' && *s2 <= '9')
 
   for (s2 = s; *s2; s2++)
     if (*s2 >= '0' && *s2 <= '9')
@@ -270,7 +270,7 @@ init_trace (m_state *state)
   if (s3 == (char *) state->tracing)
     goto FAIL;
 
   if (s3 == (char *) state->tracing)
     goto FAIL;
 
-  for (i = 0; i < strlen(state->tracing); i++)
+  for (i = 0; i < strlen((char *) state->tracing); i++)
     state->tracing[i] = -state->tracing[i];
 
   state->glyph_map = decimal_encoding;
     state->tracing[i] = -state->tracing[i];
 
   state->glyph_map = decimal_encoding;
@@ -556,7 +556,7 @@ redraw_cells (m_state *state, Bool active)
 
         if ((state->mode == TRACEA2 || state->mode == TRACEB2) && active)
           {
 
         if ((state->mode == TRACEA2 || state->mode == TRACEB2) && active)
           {
-            int xx = x % strlen(state->tracing);
+            int xx = x % strlen((char *) state->tracing);
             Bool dead_p = state->tracing[xx] > 0;
 
             if (y == 0 && x == xx)
             Bool dead_p = state->tracing[xx] > 0;
 
             if (y == 0 && x == xx)
@@ -1110,9 +1110,9 @@ hack_text (m_state *state)
           "\n"
           "RRF-CONTROL> ",
 
           "\n"
           "RRF-CONTROL> ",
 
-          "\001disable grid nodes 21 - 40\n",
+          "\001disable grid nodes 21 - 48\n",
 
 
-          "\002Warning: Disabling nodes 21-40 will disconnect sector 11 "
+          "\002Warning: Disabling nodes 21-48 will disconnect sector 11 "
           "(27 nodes)\n"
           "\n"
           "\002         ARE YOU SURE? (y/n) ",
           "(27 nodes)\n"
           "\n"
           "\002         ARE YOU SURE? (y/n) ",
@@ -1142,7 +1142,7 @@ hack_text (m_state *state)
 
         typing_delay = False;
         long_delay = False;
 
         typing_delay = False;
         long_delay = False;
-        for (j = 21; j <= 40; j++)
+        for (j = 21; j <= 48; j++)
           {
             char buf[100];
             sprintf (buf, "\002Grid Node %d offline...\n", j);
           {
             char buf[100];
             sprintf (buf, "\002Grid Node %d offline...\n", j);
@@ -1236,7 +1236,7 @@ roll_state (m_state *state)
       {
         Bool any = False;
         int i;
       {
         Bool any = False;
         int i;
-        for (i = 0; i < strlen(state->tracing); i++)
+        for (i = 0; i < strlen((char *) state->tracing); i++)
           if (state->tracing[i] < 0) any = True;
 
         if (!any)
           if (state->tracing[i] < 0) any = True;
 
         if (!any)
@@ -1252,7 +1252,7 @@ roll_state (m_state *state)
           }
         else if ((random() % 20) == 0)  /* how fast numbers are discovered */
           {
           }
         else if ((random() % 20) == 0)  /* how fast numbers are discovered */
           {
-            int x = random() % strlen(state->tracing);
+            int x = random() % strlen((char *) state->tracing);
             if (state->tracing[x] < 0)
               state->tracing[x] = -state->tracing[x];
           }
             if (state->tracing[x] < 0)
               state->tracing[x] = -state->tracing[x];
           }
@@ -1264,7 +1264,7 @@ roll_state (m_state *state)
         /* reversed logic from TRACEA2 */
         Bool any = False;
         int i;
         /* reversed logic from TRACEA2 */
         Bool any = False;
         int i;
-        for (i = 0; i < strlen(state->tracing); i++)
+        for (i = 0; i < strlen((char *) state->tracing); i++)
           if (state->tracing[i] > 0) any = True;
 
         if ((random() % 15) == 0) {
           if (state->tracing[i] > 0) any = True;
 
         if ((random() % 15) == 0) {
@@ -1272,7 +1272,7 @@ roll_state (m_state *state)
             state->mode = SYSTEMFAILURE;
           else
             {
             state->mode = SYSTEMFAILURE;
           else
             {
-              int x = random() % strlen(state->tracing);
+              int x = random() % strlen((char *) state->tracing);
               if (state->tracing[x] < 0)
                 state->tracing[x] = -state->tracing[x];
             }
               if (state->tracing[x] < 0)
                 state->tracing[x] = -state->tracing[x];
             }
@@ -1353,9 +1353,9 @@ hack_matrix (m_state *state)
       int i = random() % (state->grid_width / 2);
       while (--i > 0)
         {
       int i = random() % (state->grid_width / 2);
       while (--i > 0)
         {
-          int x = random() % state->grid_width;
-          int y = random() % state->grid_height;
-          m_cell *cell = &state->cells[state->grid_width * y + x];
+          int yy = random() % state->grid_height;
+          int xx = random() % state->grid_width;
+          m_cell *cell = &state->cells[state->grid_width * yy + xx];
           if (cell->glyph && cell->glow == 0)
             {
               cell->glow = random() % 10;
           if (cell->glyph && cell->glow == 0)
             {
               cell->glow = random() % 10;
index 4d740a0df4da9adc0bccb25a6aedfd4340f6cb08..15fc96d28deb8355ea61843d9564d310886a94fb 100644 (file)
@@ -65,7 +65,7 @@ XrmOptionDescRec options [] = {
        {0,0,0,0}
 };
 
        {0,0,0,0}
 };
 
-static char colors[768];
+static unsigned char colors[768];
 
 static Display *dpy;
 static Window win;
 
 static Display *dpy;
 static Window win;
index 223ceab48bf0f2d66ec99fe92c10a0c85733c945..045f2d9ffd6f8617e687a85fec2fc0657fc0e41b 100644 (file)
@@ -114,6 +114,13 @@ char*        progname;
 XtAppContext app;
 XrmDatabase  db;
 char*        progclass = XSUBLIM_NAME;
 XtAppContext app;
 XrmDatabase  db;
 char*        progclass = XSUBLIM_NAME;
+
+# ifdef __GNUC__
+  __extension__   /* don't warn about "string length is greater than the
+                     length ISO C89 compilers are required to support"
+                     in the following string constant... */
+# endif
+
 char*        defaults[] =
 {
        ".background:                     #000000",
 char*        defaults[] =
 {
        ".background:                     #000000",
@@ -250,7 +257,7 @@ static Window xsublim_Ss_GetWindow(Display* ss_Display)
        Window        win_Parent;
        Window*       win_Child;
        Window        win_Win;
        Window        win_Parent;
        Window*       win_Child;
        Window        win_Win;
-       int           child_Count;
+       unsigned int  child_Count;
        int           child_Index;
        Atom          prop_Type;
        int           prop_Format;
        int           child_Index;
        Atom          prop_Type;
        int           prop_Format;
index c509c246dc7a6d6f0d37e6d8f39edd0559f7a3cb..7e4299121126d0b0c114bb5f8d4dc512cf70e3f3 100644 (file)
@@ -1,4 +1,4 @@
-# Auto-generated: Mon Jun 23 16:14:14 PDT 2003
+# Auto-generated: Thu Aug 14 02:52:12 PDT 2003
 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
@@ -8,6 +8,7 @@ driver/xscreensaver-demo.glade
 driver/xscreensaver-demo.glade2
 hacks/config/anemone.xml
 hacks/config/ant.xml
 driver/xscreensaver-demo.glade2
 hacks/config/anemone.xml
 hacks/config/ant.xml
+hacks/config/antspotlight.xml
 hacks/config/apollonian.xml
 hacks/config/atlantis.xml
 hacks/config/attraction.xml
 hacks/config/apollonian.xml
 hacks/config/atlantis.xml
 hacks/config/attraction.xml
@@ -52,8 +53,10 @@ hacks/config/eruption.xml
 hacks/config/euler2d.xml
 hacks/config/extrusion.xml
 hacks/config/fadeplot.xml
 hacks/config/euler2d.xml
 hacks/config/extrusion.xml
 hacks/config/fadeplot.xml
+hacks/config/fireflies.xml
 hacks/config/flag.xml
 hacks/config/flame.xml
 hacks/config/flag.xml
 hacks/config/flame.xml
+hacks/config/flipflop.xml
 hacks/config/flipscreen3d.xml
 hacks/config/flow.xml
 hacks/config/fluidballs.xml
 hacks/config/flipscreen3d.xml
 hacks/config/flow.xml
 hacks/config/fluidballs.xml
@@ -120,6 +123,7 @@ hacks/config/phosphor.xml
 hacks/config/piecewise.xml
 hacks/config/pipes.xml
 hacks/config/polyominoes.xml
 hacks/config/piecewise.xml
 hacks/config/pipes.xml
 hacks/config/polyominoes.xml
+hacks/config/polytopes.xml
 hacks/config/popsquares.xml
 hacks/config/pulsar.xml
 hacks/config/pyro.xml
 hacks/config/popsquares.xml
 hacks/config/pulsar.xml
 hacks/config/pyro.xml
index 1ec86c657f40e4e144d80b0b13e8bf00718704da..f068153cd8674a922f1cf067e23d8c7e471f1f00 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -2,16 +2,17 @@
 # Copyright (C) 2002 Free Software Foundation, Inc.
 # maintainer: Christophe Merlet (RedFox) <christophe@merlet.net>, 2002.
 # Sun G11n <gnome_int_l10n@ireland.sun.com>, 2002.
 # Copyright (C) 2002 Free Software Foundation, Inc.
 # maintainer: Christophe Merlet (RedFox) <christophe@merlet.net>, 2002.
 # Sun G11n <gnome_int_l10n@ireland.sun.com>, 2002.
+# Eric Lassauge <lassauge@mail.dotcom.fr>, 2003.
 #
 msgid ""
 msgstr ""
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: xscreensaver 4.01\n"
+"Project-Id-Version: xscreensaver 4.11\n"
 "POT-Creation-Date: 2002-06-18 21:56+0200\n"
 "PO-Revision-Date: 2002-07-28 01:03+0200\n"
 "POT-Creation-Date: 2002-06-18 21:56+0200\n"
 "PO-Revision-Date: 2002-07-28 01:03+0200\n"
-"Last-Translator: Christophe Merlet (RedFox) <christophe@merlet.net>\n"
+"Last-Translator: Eric Lassauge <lassauge@mail.dotcom.fr>\n"
 "Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
 "MIME-Version: 1.0\n"
 "Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: driver/demo-Gtk-conf.c:729
 "Content-Transfer-Encoding: 8bit\n"
 
 #: driver/demo-Gtk-conf.c:729
@@ -20,17 +21,17 @@ msgstr "Parcourir... "
 
 #: driver/demo-Gtk-conf.c:1021
 msgid "Select file."
 
 #: driver/demo-Gtk-conf.c:1021
 msgid "Select file."
-msgstr "Sélectionnez un fichier."
+msgstr "Sélectionnez un fichier."
 
 #: driver/demo-Gtk-support.c:121
 #, c-format
 msgid "Couldn't find pixmap file: %s"
 
 #: driver/demo-Gtk-support.c:121
 #, c-format
 msgid "Couldn't find pixmap file: %s"
-msgstr "Impossible de trouver le fichier d'image : %s"
+msgstr "Impossible de trouver le fichier d'image : %s"
 
 #: driver/demo-Gtk-support.c:130
 #, c-format
 msgid "Error loading pixmap file: %s"
 
 #: driver/demo-Gtk-support.c:130
 #, c-format
 msgid "Error loading pixmap file: %s"
-msgstr "Erreur lors du chargement du fichier d'image : %s"
+msgstr "Erreur lors du chargement du fichier d'image : %s"
 
 #: driver/demo-Gtk-widgets.c:155 driver/xscreensaver-demo.glade.h:89
 #: driver/xscreensaver-demo.glade2.h:43
 
 #: driver/demo-Gtk-widgets.c:155 driver/xscreensaver-demo.glade.h:89
 #: driver/xscreensaver-demo.glade2.h:43
@@ -44,39 +45,41 @@ msgstr "_Fichier"
 #: driver/demo-Gtk-widgets.c:196 driver/xscreensaver-demo.glade.h:93
 #: driver/xscreensaver-demo.glade2.h:48
 msgid "_Blank Screen Now"
 #: driver/demo-Gtk-widgets.c:196 driver/xscreensaver-demo.glade.h:93
 #: driver/xscreensaver-demo.glade2.h:48
 msgid "_Blank Screen Now"
-msgstr "_Économiser l'écran maintenant"
+msgstr "_Economiser l'écran maintenant"
 
 #: driver/demo-Gtk-widgets.c:205 driver/xscreensaver-demo.glade.h:2
 msgid ""
 "Activate the XScreenSaver daemon now (locking the screen if so configured.)"
 
 #: driver/demo-Gtk-widgets.c:205 driver/xscreensaver-demo.glade.h:2
 msgid ""
 "Activate the XScreenSaver daemon now (locking the screen if so configured.)"
-msgstr ""
+msgstr "Activer le démon XScreenSaver (blocage de l'écran si c'est configuré)."
 
 #: driver/demo-Gtk-widgets.c:209 driver/xscreensaver-demo.glade.h:97
 #: driver/xscreensaver-demo.glade2.h:58
 msgid "_Lock Screen Now"
 
 #: driver/demo-Gtk-widgets.c:209 driver/xscreensaver-demo.glade.h:97
 #: driver/xscreensaver-demo.glade2.h:58
 msgid "_Lock Screen Now"
-msgstr "_Verrouiller l'écran maintenant"
+msgstr "_Verrouiller l'écran maintenant"
 
 #: driver/demo-Gtk-widgets.c:218 driver/xscreensaver-demo.glade.h:51
 msgid "Lock the screen now (even if \"Lock Screen\" is unchecked.)"
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:218 driver/xscreensaver-demo.glade.h:51
 msgid "Lock the screen now (even if \"Lock Screen\" is unchecked.)"
 msgstr ""
+"Verrouille l'écran maintenant (même si \"Verrouiller l'écran\" n'est pas "
+"validé)."
 
 #: driver/demo-Gtk-widgets.c:222 driver/xscreensaver-demo.glade.h:96
 #: driver/xscreensaver-demo.glade2.h:56
 msgid "_Kill Daemon"
 
 #: driver/demo-Gtk-widgets.c:222 driver/xscreensaver-demo.glade.h:96
 #: driver/xscreensaver-demo.glade2.h:56
 msgid "_Kill Daemon"
-msgstr "_Tuer le demon"
+msgstr "_Tuer le démon"
 
 #: driver/demo-Gtk-widgets.c:231 driver/xscreensaver-demo.glade.h:71
 msgid "Tell the running XScreenSaver daemon to exit."
 
 #: driver/demo-Gtk-widgets.c:231 driver/xscreensaver-demo.glade.h:71
 msgid "Tell the running XScreenSaver daemon to exit."
-msgstr ""
+msgstr "Demande au démon courant de XScreenSaver de se terminer."
 
 #: driver/demo-Gtk-widgets.c:235 driver/xscreensaver-demo.glade.h:98
 #: driver/xscreensaver-demo.glade2.h:64
 msgid "_Restart Daemon"
 
 #: driver/demo-Gtk-widgets.c:235 driver/xscreensaver-demo.glade.h:98
 #: driver/xscreensaver-demo.glade2.h:64
 msgid "_Restart Daemon"
-msgstr "_Redemarrer le demon"
+msgstr "_Redémarrer le démon"
 
 #: driver/demo-Gtk-widgets.c:244 driver/xscreensaver-demo.glade.h:49
 msgid "Kill and re-launch the XScreenSaver daemon."
 
 #: driver/demo-Gtk-widgets.c:244 driver/xscreensaver-demo.glade.h:49
 msgid "Kill and re-launch the XScreenSaver daemon."
-msgstr ""
+msgstr "Tue et re-lance le démon XScreenSaver."
 
 #: driver/demo-Gtk-widgets.c:257 driver/xscreensaver-demo.glade.h:95
 msgid "_Exit"
 
 #: driver/demo-Gtk-widgets.c:257 driver/xscreensaver-demo.glade.h:95
 msgid "_Exit"
@@ -87,6 +90,8 @@ msgid ""
 "Exit the xscreensaver-demo program (but leave the XScreenSaver daemon "
 "running in the background.)"
 msgstr ""
 "Exit the xscreensaver-demo program (but leave the XScreenSaver daemon "
 "running in the background.)"
 msgstr ""
+"Sort du programme xscreensaver-demo (mais laisse le démon XScreenSaver actif "
+"en arrière-plan)."
 
 #: driver/demo-Gtk-widgets.c:270 driver/xscreensaver-demo.glade2.h:55
 msgid "_Help"
 
 #: driver/demo-Gtk-widgets.c:270 driver/xscreensaver-demo.glade2.h:55
 msgid "_Help"
@@ -95,11 +100,11 @@ msgstr "_Aide"
 #: driver/demo-Gtk-widgets.c:290 driver/xscreensaver-demo.glade.h:92
 #: driver/xscreensaver-demo.glade2.h:44
 msgid "_About..."
 #: driver/demo-Gtk-widgets.c:290 driver/xscreensaver-demo.glade.h:92
 #: driver/xscreensaver-demo.glade2.h:44
 msgid "_About..."
-msgstr "À _propos..."
+msgstr "A _propos..."
 
 #: driver/demo-Gtk-widgets.c:299 driver/xscreensaver-demo.glade.h:30
 msgid "Display version information."
 
 #: driver/demo-Gtk-widgets.c:299 driver/xscreensaver-demo.glade.h:30
 msgid "Display version information."
-msgstr ""
+msgstr "Affiche les informations de version"
 
 #: driver/demo-Gtk-widgets.c:303 driver/xscreensaver-demo.glade.h:94
 #: driver/xscreensaver-demo.glade2.h:53
 
 #: driver/demo-Gtk-widgets.c:303 driver/xscreensaver-demo.glade.h:94
 #: driver/xscreensaver-demo.glade2.h:53
@@ -108,32 +113,30 @@ msgstr "_Documentation..."
 
 #: driver/demo-Gtk-widgets.c:312 driver/xscreensaver-demo.glade.h:38
 msgid "Go to the documentation on the XScreenSaver web page."
 
 #: driver/demo-Gtk-widgets.c:312 driver/xscreensaver-demo.glade.h:38
 msgid "Go to the documentation on the XScreenSaver web page."
-msgstr ""
+msgstr "Visite la page web de documentation de XScreenSaver."
 
 #: driver/demo-Gtk-widgets.c:342 driver/xscreensaver-demo.glade.h:18
 
 #: driver/demo-Gtk-widgets.c:342 driver/xscreensaver-demo.glade.h:18
-#, fuzzy
 msgid "Cycle After"
 msgid "Cycle After"
-msgstr "Eau claire"
+msgstr "Changement au bout de"
 
 #: driver/demo-Gtk-widgets.c:364 driver/xscreensaver-demo.glade.h:78
 #: driver/xscreensaver-demo.glade2.h:42
 msgid "Whether a password should be required to un-blank the screen."
 
 #: driver/demo-Gtk-widgets.c:364 driver/xscreensaver-demo.glade.h:78
 #: driver/xscreensaver-demo.glade2.h:42
 msgid "Whether a password should be required to un-blank the screen."
-msgstr ""
+msgstr "Un mot de passe est-il requis pour débloquer l'écran."
 
 #: driver/demo-Gtk-widgets.c:366 driver/xscreensaver-demo.glade.h:50
 msgid "Lock Screen After"
 
 #: driver/demo-Gtk-widgets.c:366 driver/xscreensaver-demo.glade.h:50
 msgid "Lock Screen After"
-msgstr ""
+msgstr "Verrouiller l'écran après"
 
 #: driver/demo-Gtk-widgets.c:374 driver/xscreensaver-demo.glade.h:8
 
 #: driver/demo-Gtk-widgets.c:374 driver/xscreensaver-demo.glade.h:8
-#, fuzzy
 msgid "Blank After"
 msgid "Blank After"
-msgstr "Explosion"
+msgstr "Économiser l'écran après"
 
 #: driver/demo-Gtk-widgets.c:397 driver/demo-Gtk-widgets.c:447
 #: driver/demo-Gtk-widgets.c:461 driver/demo-Gtk-widgets.c:1010
 #: driver/xscreensaver-demo.glade.h:43 driver/xscreensaver-demo.glade2.h:26
 msgid "How long before the monitor goes completely black."
 
 #: driver/demo-Gtk-widgets.c:397 driver/demo-Gtk-widgets.c:447
 #: driver/demo-Gtk-widgets.c:461 driver/demo-Gtk-widgets.c:1010
 #: driver/xscreensaver-demo.glade.h:43 driver/xscreensaver-demo.glade2.h:26
 msgid "How long before the monitor goes completely black."
-msgstr ""
+msgstr "Durée avant que le moniteur passe complètement au noir."
 
 #: driver/demo-Gtk-widgets.c:401 driver/demo-Gtk-widgets.c:413
 #: driver/demo-Gtk-widgets.c:425 driver/demo-Gtk-widgets.c:1014
 
 #: driver/demo-Gtk-widgets.c:401 driver/demo-Gtk-widgets.c:413
 #: driver/demo-Gtk-widgets.c:425 driver/demo-Gtk-widgets.c:1014
@@ -145,55 +148,57 @@ msgstr "minutes"
 #: driver/demo-Gtk-widgets.c:476 driver/demo-Gtk.c:2661
 #: driver/xscreensaver-demo.glade.h:58
 msgid "Preview"
 #: driver/demo-Gtk-widgets.c:476 driver/demo-Gtk.c:2661
 #: driver/xscreensaver-demo.glade.h:58
 msgid "Preview"
-msgstr ""
+msgstr "Aperçu"
 
 #: driver/demo-Gtk-widgets.c:484 driver/xscreensaver-demo.glade.h:21
 msgid ""
 "Demo the selected screen saver in full-screen mode (click the mouse to "
 "return.)"
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:484 driver/xscreensaver-demo.glade.h:21
 msgid ""
 "Demo the selected screen saver in full-screen mode (click the mouse to "
 "return.)"
 msgstr ""
+"Démo de l'économiseur d'écran sélectionné en mode plein-écran (cliquer avec "
+"la souris pour en sortir.)"
 
 #: driver/demo-Gtk-widgets.c:486 driver/xscreensaver-demo.glade.h:65
 msgid "Settings..."
 
 #: driver/demo-Gtk-widgets.c:486 driver/xscreensaver-demo.glade.h:65
 msgid "Settings..."
-msgstr "Reglages..."
+msgstr "Réglages..."
 
 #: driver/demo-Gtk-widgets.c:494 driver/xscreensaver-demo.glade.h:17
 msgid "Customization and explanation of the selected screen saver."
 
 #: driver/demo-Gtk-widgets.c:494 driver/xscreensaver-demo.glade.h:17
 msgid "Customization and explanation of the selected screen saver."
-msgstr ""
+msgstr "Configuration et explications pour l'économiseur d'écran sélectionné."
 
 #: driver/demo-Gtk-widgets.c:515 driver/xscreensaver-demo.glade.h:52
 msgid "Mode:"
 
 #: driver/demo-Gtk-widgets.c:515 driver/xscreensaver-demo.glade.h:52
 msgid "Mode:"
-msgstr "Mode :"
+msgstr "Mode :"
 
 #: driver/demo-Gtk-widgets.c:533 driver/xscreensaver-demo.glade.h:25
 #: driver/xscreensaver-demo.glade2.h:14
 msgid "Disable Screen Saver"
 
 #: driver/demo-Gtk-widgets.c:533 driver/xscreensaver-demo.glade.h:25
 #: driver/xscreensaver-demo.glade2.h:14
 msgid "Disable Screen Saver"
-msgstr "Désactiver l'économiseur d'acran"
+msgstr "Désactiver l'économiseur d'écran"
 
 #: driver/demo-Gtk-widgets.c:536 driver/xscreensaver-demo.glade.h:9
 #: driver/xscreensaver-demo.glade2.h:5
 msgid "Blank Screen Only"
 
 #: driver/demo-Gtk-widgets.c:536 driver/xscreensaver-demo.glade.h:9
 #: driver/xscreensaver-demo.glade2.h:5
 msgid "Blank Screen Only"
-msgstr ""
+msgstr "Économiser l'écran uniquement"
 
 #: driver/demo-Gtk-widgets.c:539 driver/xscreensaver-demo.glade.h:56
 #: driver/xscreensaver-demo.glade2.h:32
 msgid "Only One Screen Saver"
 
 #: driver/demo-Gtk-widgets.c:539 driver/xscreensaver-demo.glade.h:56
 #: driver/xscreensaver-demo.glade2.h:32
 msgid "Only One Screen Saver"
-msgstr "Seulement un économiseur d'écran"
+msgstr "Seulement un économiseur d'écran"
 
 #: driver/demo-Gtk-widgets.c:542 driver/xscreensaver-demo.glade.h:60
 #: driver/xscreensaver-demo.glade2.h:35
 msgid "Random Screen Saver"
 
 #: driver/demo-Gtk-widgets.c:542 driver/xscreensaver-demo.glade.h:60
 #: driver/xscreensaver-demo.glade2.h:35
 msgid "Random Screen Saver"
-msgstr "Économiseur d'écran aléatoire"
+msgstr "Économiseur d'écran aléatoire"
 
 #: driver/demo-Gtk-widgets.c:565 driver/demo-Gtk.c:2034
 #: driver/xscreensaver-demo.glade.h:75
 msgid "Use"
 
 #: driver/demo-Gtk-widgets.c:565 driver/demo-Gtk.c:2034
 #: driver/xscreensaver-demo.glade.h:75
 msgid "Use"
-msgstr ""
+msgstr "Choisis"
 
 #: driver/demo-Gtk-widgets.c:585 driver/demo-Gtk.c:2044
 #: driver/xscreensaver-demo.glade.h:63
 msgid "Screen Saver"
 
 #: driver/demo-Gtk-widgets.c:585 driver/demo-Gtk.c:2044
 #: driver/xscreensaver-demo.glade.h:63
 msgid "Screen Saver"
-msgstr "Économiseur d'écran"
+msgstr "Économiseur d'écran"
 
 #: driver/demo-Gtk-widgets.c:638 driver/xscreensaver-demo.glade.h:91
 msgid "\\/"
 
 #: driver/demo-Gtk-widgets.c:638 driver/xscreensaver-demo.glade.h:91
 msgid "\\/"
@@ -204,6 +209,8 @@ msgid ""
 "Run the next screen saver in the list in full-screen mode (click the mouse "
 "to return.)"
 msgstr ""
 "Run the next screen saver in the list in full-screen mode (click the mouse "
 "to return.)"
 msgstr ""
+"Lance l'économiseur d'écran suivant dans la liste en mode plein-écran "
+"(cliquer la souris pour revenir.)"
 
 #: driver/demo-Gtk-widgets.c:648
 msgid "/\\"
 
 #: driver/demo-Gtk-widgets.c:648
 msgid "/\\"
@@ -214,6 +221,8 @@ msgid ""
 "Run the previous screen saver in the list in full-screen mode (click the "
 "mouse to return.)"
 msgstr ""
 "Run the previous screen saver in the list in full-screen mode (click the "
 "mouse to return.)"
 msgstr ""
+"Lance l'économiseur d'écran précédent dans la liste en mode plein-écran "
+"(cliquer la souris pour revenir.)"
 
 #: driver/demo-Gtk-widgets.c:658 driver/demo-Gtk-widgets.c:1601
 #: driver/xscreensaver-demo.glade.h:22 driver/xscreensaver-demo.glade2.h:11
 
 #: driver/demo-Gtk-widgets.c:658 driver/demo-Gtk-widgets.c:1601
 #: driver/xscreensaver-demo.glade.h:22 driver/xscreensaver-demo.glade2.h:11
@@ -227,79 +236,87 @@ msgstr "Modes d'affichage"
 #: driver/demo-Gtk-widgets.c:701 driver/xscreensaver-demo.glade.h:23
 #: driver/xscreensaver-demo.glade2.h:12
 msgid "Diagnostics"
 #: driver/demo-Gtk-widgets.c:701 driver/xscreensaver-demo.glade.h:23
 #: driver/xscreensaver-demo.glade2.h:12
 msgid "Diagnostics"
-msgstr "Diagnostics"
+msgstr "Diagnostiques"
 
 #: driver/demo-Gtk-widgets.c:745 driver/xscreensaver-demo.glade.h:80
 msgid "Whether the daemon should print lots of debugging information."
 
 #: driver/demo-Gtk-widgets.c:745 driver/xscreensaver-demo.glade.h:80
 msgid "Whether the daemon should print lots of debugging information."
-msgstr ""
+msgstr "Le démon doit-il afficher beaucoup d'informations de mise au point."
 
 #: driver/demo-Gtk-widgets.c:747 driver/xscreensaver-demo.glade.h:76
 msgid "Verbose Diagnostics"
 
 #: driver/demo-Gtk-widgets.c:747 driver/xscreensaver-demo.glade.h:76
 msgid "Verbose Diagnostics"
-msgstr ""
+msgstr "Diagnostiques verbeux"
 
 #: driver/demo-Gtk-widgets.c:762 driver/xscreensaver-demo.glade.h:79
 msgid ""
 "Whether any error output of the display modes should be redirected to the "
 "screen."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:762 driver/xscreensaver-demo.glade.h:79
 msgid ""
 "Whether any error output of the display modes should be redirected to the "
 "screen."
 msgstr ""
+"Les messages d'erreur des modes d'affichages doivent-ils être redirigés vers "
+"l'écran."
 
 #: driver/demo-Gtk-widgets.c:764 driver/xscreensaver-demo.glade.h:29
 
 #: driver/demo-Gtk-widgets.c:764 driver/xscreensaver-demo.glade.h:29
-#, fuzzy
 msgid "Display Subprocess Errors"
 msgid "Display Subprocess Errors"
-msgstr "Afficher le viseur"
+msgstr "Afficher les erreurs des sous-processus"
 
 #: driver/demo-Gtk-widgets.c:779 driver/xscreensaver-demo.glade.h:87
 msgid ""
 "Whether the splash screen (with the version number and `Help' button) should "
 "be momentarily displayed when the daemon first starts up."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:779 driver/xscreensaver-demo.glade.h:87
 msgid ""
 "Whether the splash screen (with the version number and `Help' button) should "
 "be momentarily displayed when the daemon first starts up."
 msgstr ""
+"L'écran de démarrage (avec le numéro de version et le bouton 'Aide') doit-il "
+"être affiché momentanément au premier démarrage du démon."
 
 #: driver/demo-Gtk-widgets.c:781 driver/xscreensaver-demo.glade.h:28
 msgid "Display Splash Screen at Startup"
 
 #: driver/demo-Gtk-widgets.c:781 driver/xscreensaver-demo.glade.h:28
 msgid "Display Splash Screen at Startup"
-msgstr ""
+msgstr "Afficher l'écran de démarrage"
 
 #: driver/demo-Gtk-widgets.c:790 driver/xscreensaver-demo.glade.h:15
 #: driver/xscreensaver-demo.glade2.h:8
 msgid "Colormaps"
 
 #: driver/demo-Gtk-widgets.c:790 driver/xscreensaver-demo.glade.h:15
 #: driver/xscreensaver-demo.glade2.h:8
 msgid "Colormaps"
-msgstr "Palette de couleurs"
+msgstr "Palettes de couleurs"
 
 #: driver/demo-Gtk-widgets.c:834 driver/xscreensaver-demo.glade.h:88
 msgid ""
 "Whether to install a private colormap when running in 8-bit mode on the "
 "default Visual."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:834 driver/xscreensaver-demo.glade.h:88
 msgid ""
 "Whether to install a private colormap when running in 8-bit mode on the "
 "default Visual."
 msgstr ""
+"Faut-il installer une palette de couleurs privée en mode 8-bits pour le "
+"visuel par défaut"
 
 #: driver/demo-Gtk-widgets.c:836 driver/xscreensaver-demo.glade.h:48
 msgid "Install Colormap"
 
 #: driver/demo-Gtk-widgets.c:836 driver/xscreensaver-demo.glade.h:48
 msgid "Install Colormap"
-msgstr ""
+msgstr "Installer une palette de couleur"
 
 #: driver/demo-Gtk-widgets.c:859 driver/xscreensaver-demo.glade.h:86
 msgid ""
 "Whether the screen should slowly fade to black when the screen saver "
 "activates."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:859 driver/xscreensaver-demo.glade.h:86
 msgid ""
 "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"
 
 #: driver/demo-Gtk-widgets.c:861 driver/xscreensaver-demo.glade.h:36
 msgid "Fade To Black When Blanking"
 
 #: driver/demo-Gtk-widgets.c:861 driver/xscreensaver-demo.glade.h:36
 msgid "Fade To Black When Blanking"
-msgstr ""
+msgstr "Fondu au noir lors du verrouillage"
 
 #: driver/demo-Gtk-widgets.c:876 driver/xscreensaver-demo.glade.h:85
 msgid ""
 "Whether the screen should slowly fade in from black when the screen saver "
 "deactivates."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:876 driver/xscreensaver-demo.glade.h:85
 msgid ""
 "Whether the screen should slowly fade in from black when the screen saver "
 "deactivates."
 msgstr ""
+"L'écran doit-il fondre lentement depuis le noir quand l'économiseur d'écran "
+"se désactive"
 
 #: driver/demo-Gtk-widgets.c:878 driver/xscreensaver-demo.glade.h:35
 msgid "Fade From Black When Unblanking"
 
 #: driver/demo-Gtk-widgets.c:878 driver/xscreensaver-demo.glade.h:35
 msgid "Fade From Black When Unblanking"
-msgstr ""
+msgstr "Fondu depuis le noir lors du dé-verrouillage"
 
 #: driver/demo-Gtk-widgets.c:904 driver/xscreensaver-demo.glade.h:34
 msgid "Fade Duration"
 
 #: driver/demo-Gtk-widgets.c:904 driver/xscreensaver-demo.glade.h:34
 msgid "Fade Duration"
-msgstr "Durée du fondu"
+msgstr "Durée du fondu"
 
 #: driver/demo-Gtk-widgets.c:922 driver/xscreensaver-demo.glade.h:44
 msgid "How long it should take for the screen to fade in and out."
 
 #: driver/demo-Gtk-widgets.c:922 driver/xscreensaver-demo.glade.h:44
 msgid "How long it should take for the screen to fade in and out."
-msgstr ""
+msgstr "Combien de temps doivent durer les fondus avec le noir."
 
 #: driver/demo-Gtk-widgets.c:926 driver/xscreensaver-demo.glade.h:100
 #: driver/xscreensaver-demo.glade2.h:73
 
 #: driver/demo-Gtk-widgets.c:926 driver/xscreensaver-demo.glade.h:100
 #: driver/xscreensaver-demo.glade2.h:73
@@ -309,75 +326,80 @@ msgstr "secondes"
 #: driver/demo-Gtk-widgets.c:936 driver/xscreensaver-demo.glade.h:27
 #: driver/xscreensaver-demo.glade2.h:15
 msgid "Display Power Management"
 #: driver/demo-Gtk-widgets.c:936 driver/xscreensaver-demo.glade.h:27
 #: driver/xscreensaver-demo.glade2.h:15
 msgid "Display Power Management"
-msgstr ""
+msgstr "Gestion d'alimentation de l'écran"
 
 #: driver/demo-Gtk-widgets.c:980 driver/xscreensaver-demo.glade.h:84
 msgid "Whether the monitor should be powered down after a while."
 
 #: driver/demo-Gtk-widgets.c:980 driver/xscreensaver-demo.glade.h:84
 msgid "Whether the monitor should be powered down after a while."
-msgstr ""
+msgstr "Le moniteur doit-il passer en économie d'énergie au bout d'un moment."
 
 #: driver/demo-Gtk-widgets.c:982 driver/xscreensaver-demo.glade.h:57
 msgid "Power Management Enabled"
 
 #: driver/demo-Gtk-widgets.c:982 driver/xscreensaver-demo.glade.h:57
 msgid "Power Management Enabled"
-msgstr ""
+msgstr "Gestion d'alimentation de l'écran autorisée"
 
 #: driver/demo-Gtk-widgets.c:1050 driver/xscreensaver-demo.glade.h:55
 msgid "Off After"
 
 #: driver/demo-Gtk-widgets.c:1050 driver/xscreensaver-demo.glade.h:55
 msgid "Off After"
-msgstr ""
+msgstr "Extinction après"
 
 #: driver/demo-Gtk-widgets.c:1063 driver/xscreensaver-demo.glade.h:70
 msgid "Suspend After"
 
 #: driver/demo-Gtk-widgets.c:1063 driver/xscreensaver-demo.glade.h:70
 msgid "Suspend After"
-msgstr ""
+msgstr "Suspension après"
 
 #: driver/demo-Gtk-widgets.c:1076 driver/xscreensaver-demo.glade.h:68
 msgid "Standby After"
 
 #: driver/demo-Gtk-widgets.c:1076 driver/xscreensaver-demo.glade.h:68
 msgid "Standby After"
-msgstr ""
+msgstr "En attente après"
 
 #: driver/demo-Gtk-widgets.c:1099 driver/xscreensaver-demo.glade.h:45
 msgid "How long until the monitor goes into power-saving mode."
 
 #: driver/demo-Gtk-widgets.c:1099 driver/xscreensaver-demo.glade.h:45
 msgid "How long until the monitor goes into power-saving mode."
-msgstr ""
+msgstr "Durée avant que le moniteur passe en mode d'économie d'énergie."
 
 #: driver/demo-Gtk-widgets.c:1113 driver/xscreensaver-demo.glade.h:46
 msgid "How long until the monitor powers down."
 
 #: driver/demo-Gtk-widgets.c:1113 driver/xscreensaver-demo.glade.h:46
 msgid "How long until the monitor powers down."
-msgstr ""
+msgstr "Durée avant que le moniteur coupe l'alimentation."
 
 #: driver/demo-Gtk-widgets.c:1117 driver/xscreensaver-demo.glade.h:47
 #: driver/xscreensaver-demo.glade2.h:27
 msgid "Image Manipulation"
 
 #: driver/demo-Gtk-widgets.c:1117 driver/xscreensaver-demo.glade.h:47
 #: driver/xscreensaver-demo.glade2.h:27
 msgid "Image Manipulation"
-msgstr ""
+msgstr "Manipulation d'images"
 
 #: driver/demo-Gtk-widgets.c:1161 driver/xscreensaver-demo.glade.h:81
 msgid ""
 "Whether the image-manipulating modes should be allowed to operate on an "
 "image of your desktop."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:1161 driver/xscreensaver-demo.glade.h:81
 msgid ""
 "Whether the image-manipulating modes should be allowed to operate on an "
 "image of your desktop."
 msgstr ""
+"Les modes qui manipulent des images sont-ils autorisé à utiliser une image "
+"de votre bureau."
 
 #: driver/demo-Gtk-widgets.c:1163 driver/xscreensaver-demo.glade.h:39
 
 #: driver/demo-Gtk-widgets.c:1163 driver/xscreensaver-demo.glade.h:39
-#, fuzzy
 msgid "Grab Desktop Images"
 msgid "Grab Desktop Images"
-msgstr "Capturer l'écran"
+msgstr "Capturer l'image du bureau"
 
 #: driver/demo-Gtk-widgets.c:1178 driver/xscreensaver-demo.glade.h:82
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one)."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:1178 driver/xscreensaver-demo.glade.h:82
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one)."
 msgstr ""
+"Les modes qui manipulent des images sont-ils autorisé à utiliser des images "
+"capturées par l'entrée vidéo du système (si il y en a une)."
 
 #: driver/demo-Gtk-widgets.c:1180 driver/xscreensaver-demo.glade.h:40
 msgid "Grab Video Frames"
 
 #: driver/demo-Gtk-widgets.c:1180 driver/xscreensaver-demo.glade.h:40
 msgid "Grab Video Frames"
-msgstr ""
+msgstr "Capturer des trames vidéo"
 
 #: driver/demo-Gtk-widgets.c:1195 driver/xscreensaver-demo.glade.h:83
 msgid ""
 "Whether the image-manipulating modes should operate on random images loaded "
 "from disk."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:1195 driver/xscreensaver-demo.glade.h:83
 msgid ""
 "Whether the image-manipulating modes should operate on random images loaded "
 "from disk."
 msgstr ""
+"Les modes qui manipulent des images sont-ils autorisé à utiliser des images "
+"chargées aléatoirement depuis le disque."
 
 #: driver/demo-Gtk-widgets.c:1197 driver/xscreensaver-demo.glade.h:12
 msgid "Choose Random Image:"
 
 #: driver/demo-Gtk-widgets.c:1197 driver/xscreensaver-demo.glade.h:12
 msgid "Choose Random Image:"
-msgstr ""
+msgstr "Choisir une image aléatoire :"
 
 #: driver/demo-Gtk-widgets.c:1230 driver/xscreensaver-demo.glade.h:73
 msgid "The directory from which images will be randomly chosen."
 
 #: driver/demo-Gtk-widgets.c:1230 driver/xscreensaver-demo.glade.h:73
 msgid "The directory from which images will be randomly chosen."
-msgstr ""
+msgstr "Répertoire source des images aléatoires."
 
 #: driver/demo-Gtk-widgets.c:1232 driver/xscreensaver-demo.glade.h:10
 msgid "Browse"
 
 #: driver/demo-Gtk-widgets.c:1232 driver/xscreensaver-demo.glade.h:10
 msgid "Browse"
@@ -386,16 +408,16 @@ msgstr "Parcourir"
 #: driver/demo-Gtk-widgets.c:1240 driver/demo-Gtk-widgets.c:1593
 #: driver/xscreensaver-demo.glade.h:3 driver/xscreensaver-demo.glade2.h:2
 msgid "Advanced"
 #: driver/demo-Gtk-widgets.c:1240 driver/demo-Gtk-widgets.c:1593
 #: driver/xscreensaver-demo.glade.h:3 driver/xscreensaver-demo.glade2.h:2
 msgid "Advanced"
-msgstr "Avancée"
+msgstr "Avancé"
 
 #: driver/demo-Gtk-widgets.c:1438 driver/xscreensaver-demo.glade.h:90
 msgid "XScreenSaver: Mode-Specific Settings"
 
 #: driver/demo-Gtk-widgets.c:1438 driver/xscreensaver-demo.glade.h:90
 msgid "XScreenSaver: Mode-Specific Settings"
-msgstr ""
+msgstr "XScreenSaver: réglages spécifiques au mode"
 
 #: driver/demo-Gtk-widgets.c:1460 driver/xscreensaver-demo.glade.h:64
 #: driver/xscreensaver-demo.glade2.h:36
 msgid "Settings"
 
 #: driver/demo-Gtk-widgets.c:1460 driver/xscreensaver-demo.glade.h:64
 #: driver/xscreensaver-demo.glade2.h:36
 msgid "Settings"
-msgstr "Réglages"
+msgstr "Réglages"
 
 #: driver/demo-Gtk-widgets.c:1489 driver/xscreensaver-demo.glade.h:66
 #: driver/xscreensaver-demo.glade2.h:38
 
 #: driver/demo-Gtk-widgets.c:1489 driver/xscreensaver-demo.glade.h:66
 #: driver/xscreensaver-demo.glade2.h:38
@@ -404,39 +426,38 @@ msgstr "Standard"
 
 #: driver/demo-Gtk-widgets.c:1526 driver/xscreensaver-demo.glade.h:77
 msgid "Visual:"
 
 #: driver/demo-Gtk-widgets.c:1526 driver/xscreensaver-demo.glade.h:77
 msgid "Visual:"
-msgstr "Visuel :"
+msgstr "Visuel :"
 
 #: driver/demo-Gtk-widgets.c:1544 driver/demo-Gtk-widgets.c:1567
 #: driver/demo-Gtk.c:1479 driver/demo-Gtk.c:2680
 #: driver/xscreensaver-demo.glade.h:5 driver/xscreensaver-demo.glade2.h:3
 
 #: driver/demo-Gtk-widgets.c:1544 driver/demo-Gtk-widgets.c:1567
 #: driver/demo-Gtk.c:1479 driver/demo-Gtk.c:2680
 #: driver/xscreensaver-demo.glade.h:5 driver/xscreensaver-demo.glade2.h:3
-#, fuzzy
 msgid "Any"
 msgid "Any"
-msgstr "Fourmis"
+msgstr "Tous"
 
 #: driver/demo-Gtk-widgets.c:1545 driver/xscreensaver-demo.glade.h:7
 #: driver/xscreensaver-demo.glade2.h:4
 msgid "Best"
 
 #: driver/demo-Gtk-widgets.c:1545 driver/xscreensaver-demo.glade.h:7
 #: driver/xscreensaver-demo.glade2.h:4
 msgid "Best"
-msgstr ""
+msgstr "Le meilleur"
 
 #: driver/demo-Gtk-widgets.c:1546 driver/xscreensaver-demo.glade.h:19
 #: driver/xscreensaver-demo.glade2.h:9
 msgid "Default"
 
 #: driver/demo-Gtk-widgets.c:1546 driver/xscreensaver-demo.glade.h:19
 #: driver/xscreensaver-demo.glade2.h:9
 msgid "Default"
-msgstr ""
+msgstr "Par défaut"
 
 #: driver/demo-Gtk-widgets.c:1547 driver/xscreensaver-demo.glade.h:20
 #: driver/xscreensaver-demo.glade2.h:10
 msgid "Default-N"
 
 #: driver/demo-Gtk-widgets.c:1547 driver/xscreensaver-demo.glade.h:20
 #: driver/xscreensaver-demo.glade2.h:10
 msgid "Default-N"
-msgstr ""
+msgstr "Défault-N"
 
 #: driver/demo-Gtk-widgets.c:1548 driver/xscreensaver-demo.glade.h:37
 #: driver/xscreensaver-demo.glade2.h:21
 msgid "GL"
 
 #: driver/demo-Gtk-widgets.c:1548 driver/xscreensaver-demo.glade.h:37
 #: driver/xscreensaver-demo.glade2.h:21
 msgid "GL"
-msgstr ""
+msgstr "OpenGL"
 
 #: driver/demo-Gtk-widgets.c:1549 driver/xscreensaver-demo.glade.h:74
 #: driver/xscreensaver-demo.glade2.h:41
 msgid "TrueColor"
 
 #: driver/demo-Gtk-widgets.c:1549 driver/xscreensaver-demo.glade.h:74
 #: driver/xscreensaver-demo.glade2.h:41
 msgid "TrueColor"
-msgstr "Couleurs réelles"
+msgstr "Couleurs vraies"
 
 #: driver/demo-Gtk-widgets.c:1550 driver/xscreensaver-demo.glade.h:59
 #: driver/xscreensaver-demo.glade2.h:34
 
 #: driver/demo-Gtk-widgets.c:1550 driver/xscreensaver-demo.glade.h:59
 #: driver/xscreensaver-demo.glade2.h:34
@@ -445,9 +466,8 @@ msgstr "Pseudo couleurs"
 
 #: driver/demo-Gtk-widgets.c:1551 driver/xscreensaver-demo.glade.h:69
 #: driver/xscreensaver-demo.glade2.h:39
 
 #: driver/demo-Gtk-widgets.c:1551 driver/xscreensaver-demo.glade.h:69
 #: driver/xscreensaver-demo.glade2.h:39
-#, fuzzy
 msgid "StaticGray"
 msgid "StaticGray"
-msgstr "Escaliers"
+msgstr "StaticGray"
 
 #: driver/demo-Gtk-widgets.c:1552 driver/xscreensaver-demo.glade.h:42
 #: driver/xscreensaver-demo.glade2.h:25
 
 #: driver/demo-Gtk-widgets.c:1552 driver/xscreensaver-demo.glade.h:42
 #: driver/xscreensaver-demo.glade2.h:25
@@ -456,9 +476,8 @@ msgstr "Niveaux de gris"
 
 #: driver/demo-Gtk-widgets.c:1553 driver/xscreensaver-demo.glade.h:24
 #: driver/xscreensaver-demo.glade2.h:13
 
 #: driver/demo-Gtk-widgets.c:1553 driver/xscreensaver-demo.glade.h:24
 #: driver/xscreensaver-demo.glade2.h:13
-#, fuzzy
 msgid "DirectColor"
 msgid "DirectColor"
-msgstr "Répertoire d'images"
+msgstr "Couleurs directes"
 
 #: driver/demo-Gtk-widgets.c:1554 driver/xscreensaver-demo.glade.h:14
 #: driver/xscreensaver-demo.glade2.h:7
 
 #: driver/demo-Gtk-widgets.c:1554 driver/xscreensaver-demo.glade.h:14
 #: driver/xscreensaver-demo.glade2.h:7
@@ -473,41 +492,44 @@ msgstr "Gris"
 #: driver/demo-Gtk-widgets.c:1556 driver/xscreensaver-demo.glade.h:53
 #: driver/xscreensaver-demo.glade2.h:29
 msgid "Mono"
 #: driver/demo-Gtk-widgets.c:1556 driver/xscreensaver-demo.glade.h:53
 #: driver/xscreensaver-demo.glade2.h:29
 msgid "Mono"
-msgstr ""
+msgstr "Monochrome"
 
 #: driver/demo-Gtk-widgets.c:1566 driver/xscreensaver-demo.glade.h:72
 msgid ""
 "The X visual type that this demo will require.  If that visual is available "
 "it will be used, otherwise, this demo will not be run."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:1566 driver/xscreensaver-demo.glade.h:72
 msgid ""
 "The X visual type that this demo will require.  If that visual is available "
 "it will be used, otherwise, this demo will not be run."
 msgstr ""
+"Le visuel X11 nécessaire pour cette démo. S'il est disponible il sera "
+"utilisé, sinon cette démo ne fonctionnera pas."
 
 #: driver/demo-Gtk-widgets.c:1569 driver/xscreensaver-demo.glade.h:16
 msgid "Command Line:"
 
 #: driver/demo-Gtk-widgets.c:1569 driver/xscreensaver-demo.glade.h:16
 msgid "Command Line:"
-msgstr ""
+msgstr "Ligne de commande :"
 
 #: driver/demo-Gtk-widgets.c:1641 driver/xscreensaver-demo.glade.h:31
 msgid "Documentation..."
 
 #: driver/demo-Gtk-widgets.c:1641 driver/xscreensaver-demo.glade.h:31
 msgid "Documentation..."
-msgstr ""
+msgstr "Documentation..."
 
 #: driver/demo-Gtk-widgets.c:1649 driver/xscreensaver-demo.glade.h:13
 msgid "Click here to read the manual for this display mode, if it has one."
 msgstr ""
 
 #: driver/demo-Gtk-widgets.c:1649 driver/xscreensaver-demo.glade.h:13
 msgid "Click here to read the manual for this display mode, if it has one."
 msgstr ""
+"Cliquer ici pour lire le manuel de ce mode d'affichage, s'il en possède un."
 
 #: driver/demo-Gtk-widgets.c:1674 driver/xscreensaver-demo.glade.h:4
 msgid "Advanced >>"
 
 #: driver/demo-Gtk-widgets.c:1674 driver/xscreensaver-demo.glade.h:4
 msgid "Advanced >>"
-msgstr ""
+msgstr "Avancé >>"
 
 #: driver/demo-Gtk-widgets.c:1682 driver/xscreensaver-demo.glade.h:32
 msgid "Edit the command line directly."
 
 #: driver/demo-Gtk-widgets.c:1682 driver/xscreensaver-demo.glade.h:32
 msgid "Edit the command line directly."
-msgstr ""
+msgstr "Editer directement la ligne de commande."
 
 #: driver/demo-Gtk-widgets.c:1684 driver/xscreensaver-demo.glade.h:67
 msgid "Standard <<"
 
 #: driver/demo-Gtk-widgets.c:1684 driver/xscreensaver-demo.glade.h:67
 msgid "Standard <<"
-msgstr ""
+msgstr "Standard <<"
 
 #: driver/demo-Gtk-widgets.c:1692 driver/xscreensaver-demo.glade.h:6
 msgid "Back to the graphical configuration options."
 
 #: driver/demo-Gtk-widgets.c:1692 driver/xscreensaver-demo.glade.h:6
 msgid "Back to the graphical configuration options."
-msgstr ""
+msgstr "Retour aux options de configuration graphique."
 
 #: driver/demo-Gtk-widgets.c:1703 driver/demo-Gtk.c:688
 #: driver/xscreensaver-demo.glade.h:54
 
 #: driver/demo-Gtk-widgets.c:1703 driver/demo-Gtk.c:688
 #: driver/xscreensaver-demo.glade.h:54
@@ -521,6 +543,8 @@ msgstr "Annuler"
 #: driver/demo-Gtk.c:601
 msgid "For updates, check http://www.jwz.org/xscreensaver/"
 msgstr ""
 #: driver/demo-Gtk.c:601
 msgid "For updates, check http://www.jwz.org/xscreensaver/"
 msgstr ""
+"Pour les mises à jour, voir «http://www.jwz.org/xscreensaver/»\n"
+"Traductions par Eric Lassauge «http://lassauge.free.fr/xscreensaver/»"
 
 #: driver/demo-Gtk.c:608
 #, c-format
 
 #: driver/demo-Gtk.c:608
 #, c-format
@@ -529,7 +553,7 @@ msgstr ""
 
 #: driver/demo-Gtk.c:610
 #, c-format
 
 #: driver/demo-Gtk.c:610
 #, c-format
-msgid "Copyright  1991-2002 %s"
+msgid "Copyright © 1991-2002 %s"
 msgstr ""
 
 #: driver/demo-Gtk.c:726
 msgstr ""
 
 #: driver/demo-Gtk.c:726
@@ -538,6 +562,9 @@ msgid ""
 "\n"
 "No Help URL has been specified.\n"
 msgstr ""
 "\n"
 "No Help URL has been specified.\n"
 msgstr ""
+"Erreur :\n"
+"\n"
+"Aucune URL d'aide spécifiée.\n"
 
 #: driver/demo-Gtk.c:812
 msgid ""
 
 #: driver/demo-Gtk.c:812
 msgid ""
@@ -546,6 +573,9 @@ msgid ""
 "The xscreensaver daemon did not start up properly.\n"
 "\n"
 msgstr ""
 "The xscreensaver daemon did not start up properly.\n"
 "\n"
 msgstr ""
+"Erreur :\n"
+"\n"
+"Le démon xscreensaver ne démarre pas correctement.\n"
 
 #: driver/demo-Gtk.c:818
 msgid ""
 
 #: driver/demo-Gtk.c:818
 msgid ""
@@ -565,10 +595,26 @@ msgid ""
 "You shouldn't run X as root. Instead, you should log in as a\n"
 "normal user, and `su' as necessary."
 msgstr ""
 "You shouldn't run X as root. Instead, you should log in as a\n"
 "normal user, and `su' as necessary."
 msgstr ""
+"Vous lancez ce programme en temps qu'administrateur. Ceci signifie\n"
+"que xscreensaver est incapable de contacter le serveur X car le\n"
+"contrôle d'accès est actif. Essayez de lancer cette commande :\n"
+"\n"
+"                        xhost +localhost\n"
+"\n"
+"puis sélectionnez 'Fichier / Relancer le démon'.\n"
+"\n"
+"Notez bien que inactiver le contrôle d'accès permettra à quiconque\n"
+"connecté à cette machine d'accéder à votre écran, ce qui peut être\n"
+"considéré comme un problème de sécurité. Lisez le manuel et la FAQ\n"
+"de xscreensaver pour plus d'information.\n"
+"\n"
+"Vous ne devriez pas lancer X en tant qu'administrateur. En lieu et\n"
+"place il faut se connecter en tant qu'utilisateur normal et utiliser\n"
+"'su' si nécessaire."
 
 #: driver/demo-Gtk.c:834
 msgid "Please check your $PATH and permissions."
 
 #: driver/demo-Gtk.c:834
 msgid "Please check your $PATH and permissions."
-msgstr ""
+msgstr "Vérifiez votre $PATH et les permissions."
 
 #: driver/demo-Gtk.c:869
 msgid ""
 
 #: driver/demo-Gtk.c:869
 msgid ""
@@ -576,6 +622,9 @@ msgid ""
 "\n"
 "Couldn't determine init file name!\n"
 msgstr ""
 "\n"
 "Couldn't determine init file name!\n"
 msgstr ""
+"Erreur :\n"
+"\n"
+"Impossible de déterminer le nom du fichier d'init !\n"
 
 #: driver/demo-Gtk.c:874
 #, c-format
 
 #: driver/demo-Gtk.c:874
 #, c-format
@@ -584,6 +633,9 @@ msgid ""
 "\n"
 "Couldn't write %s\n"
 msgstr ""
 "\n"
 "Couldn't write %s\n"
 msgstr ""
+"Erreur :\n"
+"\n"
+"Impossible d'écrire dans %s.\n"
 
 #: driver/demo-Gtk.c:933
 msgid ""
 
 #: driver/demo-Gtk.c:933
 msgid ""
@@ -591,6 +643,9 @@ msgid ""
 "\n"
 "no `manualCommand' resource set."
 msgstr ""
 "\n"
 "no `manualCommand' resource set."
 msgstr ""
+"Erreur :\n"
+"\n"
+"La ressource «manualCommand» n'est pas renseignée."
 
 #: driver/demo-Gtk.c:1114
 #, c-format
 
 #: driver/demo-Gtk.c:1114
 #, c-format
@@ -599,6 +654,9 @@ msgid ""
 "\n"
 "Unparsable time format: \"%s\"\n"
 msgstr ""
 "\n"
 "Unparsable time format: \"%s\"\n"
 msgstr ""
+"Erreur :\n"
+"\n"
+"Le format «%s» pour l'heure n'est pas exploitable.\n"
 
 #: driver/demo-Gtk.c:1779
 #, c-format
 
 #: driver/demo-Gtk.c:1779
 #, c-format
@@ -607,23 +665,25 @@ msgid ""
 "\n"
 "Directory does not exist: \"%s\"\n"
 msgstr ""
 "\n"
 "Directory does not exist: \"%s\"\n"
 msgstr ""
+"Erreur :\n"
+"\n"
+"Répertoire «%s» inexistant.\n"
 
 #: driver/demo-Gtk.c:2376
 msgid "Descriptions not available: no XML support compiled in."
 
 #: driver/demo-Gtk.c:2376
 msgid "Descriptions not available: no XML support compiled in."
-msgstr ""
+msgstr "Descriptions indisponibles: pas de support XML compilé."
 
 #: driver/demo-Gtk.c:2381
 msgid "No description available."
 msgstr "Aucune description disponible."
 
 #: driver/demo-Gtk.c:2632
 
 #: driver/demo-Gtk.c:2381
 msgid "No description available."
 msgstr "Aucune description disponible."
 
 #: driver/demo-Gtk.c:2632
-#, fuzzy
 msgid "Blank Screen"
 msgid "Blank Screen"
-msgstr "Capturer l'écran"
+msgstr "Verrouiller l'écran"
 
 #: driver/demo-Gtk.c:2638
 msgid "Screen Saver Disabled"
 
 #: driver/demo-Gtk.c:2638
 msgid "Screen Saver Disabled"
-msgstr "Économiseur d'écran désactivé"
+msgstr "Économiseur d'écran inhibé"
 
 #: driver/demo-Gtk.c:2798
 #, c-format
 
 #: driver/demo-Gtk.c:2798
 #, c-format
@@ -632,14 +692,17 @@ msgid ""
 "\n"
 "file \"%s\" has changed, reloading.\n"
 msgstr ""
 "\n"
 "file \"%s\" has changed, reloading.\n"
 msgstr ""
+"Attention :\n"
+"\n"
+"Le fichier \"%s\" a changé, rechargement.\n"
 
 #: driver/demo-Gtk.c:2875
 msgid "No Preview"
 
 #: driver/demo-Gtk.c:2875
 msgid "No Preview"
-msgstr ""
+msgstr "Pas d'aperçu"
 
 #: driver/demo-Gtk.c:2875
 msgid "Available"
 
 #: driver/demo-Gtk.c:2875
 msgid "Available"
-msgstr ""
+msgstr "Disponible"
 
 #: driver/demo-Gtk.c:3543
 #, c-format
 
 #: driver/demo-Gtk.c:3543
 #, c-format
@@ -649,6 +712,10 @@ msgid ""
 "The XScreenSaver daemon doesn't seem to be running\n"
 "on display \"%s\".  Launch it now?"
 msgstr ""
 "The XScreenSaver daemon doesn't seem to be running\n"
 "on display \"%s\".  Launch it now?"
 msgstr ""
+"Attention :\n"
+"\n"
+"Le démon XScreenSaver n'est pas actif pour l'écran \"%s\". Lancement "
+"maintenant ?"
 
 #: driver/demo-Gtk.c:3553
 #, c-format
 
 #: driver/demo-Gtk.c:3553
 #, c-format
@@ -700,15 +767,15 @@ msgstr ""
 #: driver/demo-Gtk.c:3999
 #, c-format
 msgid "%s: unknown option: %s\n"
 #: driver/demo-Gtk.c:3999
 #, c-format
 msgid "%s: unknown option: %s\n"
-msgstr ""
+msgstr "%s: option inconnue: «%s»\n"
 
 #: driver/screensaver-properties.desktop.in.h:1
 msgid "Configure the settings of the screensaver."
 
 #: driver/screensaver-properties.desktop.in.h:1
 msgid "Configure the settings of the screensaver."
-msgstr "Configurer l'économiseur d'écran"
+msgstr "Configurer les paramètres de l'économiseur d'écran"
 
 #: driver/screensaver-properties.desktop.in.h:2
 msgid "Screensaver"
 
 #: driver/screensaver-properties.desktop.in.h:2
 msgid "Screensaver"
-msgstr "Économiseur d'écran"
+msgstr "Économiseur d'écran"
 
 #: driver/xscreensaver-demo.glade.h:1
 msgid "/\");"
 
 #: driver/xscreensaver-demo.glade.h:1
 msgid "/\");"
@@ -720,72 +787,71 @@ msgstr "*"
 
 #: driver/xscreensaver-demo.glade2.h:6
 msgid "Choose _Random Image:"
 
 #: driver/xscreensaver-demo.glade2.h:6
 msgid "Choose _Random Image:"
-msgstr ""
+msgstr "Choisir une image _Aléatoire :"
 
 #: driver/xscreensaver-demo.glade2.h:16
 
 #: driver/xscreensaver-demo.glade2.h:16
-#, fuzzy
 msgid "Display Subprocess _Errors"
 msgid "Display Subprocess _Errors"
-msgstr "Afficher le viseur"
+msgstr "Afficher les erreurs des sous-process"
 
 #: driver/xscreensaver-demo.glade2.h:17
 msgid "Display _Splash Screen at Startup"
 
 #: driver/xscreensaver-demo.glade2.h:17
 msgid "Display _Splash Screen at Startup"
-msgstr ""
+msgstr "Afficher l'écran de _Démarrage"
 
 #: driver/xscreensaver-demo.glade2.h:18
 msgid "F_ade Duration"
 
 #: driver/xscreensaver-demo.glade2.h:18
 msgid "F_ade Duration"
-msgstr "_Durée du fondu"
+msgstr "Durée du _fondu"
 
 #: driver/xscreensaver-demo.glade2.h:19
 msgid "Fade from Black When _Unblanking"
 
 #: driver/xscreensaver-demo.glade2.h:19
 msgid "Fade from Black When _Unblanking"
-msgstr ""
+msgstr "Fondu depuis le noir lors du dé-verrouillage"
 
 #: driver/xscreensaver-demo.glade2.h:20
 msgid "Fade to Black when _Blanking"
 
 #: driver/xscreensaver-demo.glade2.h:20
 msgid "Fade to Black when _Blanking"
-msgstr ""
+msgstr "Fondu au noir lors du _verrouillage"
 
 #: driver/xscreensaver-demo.glade2.h:22
 
 #: driver/xscreensaver-demo.glade2.h:22
-#, fuzzy
 msgid "Grab Desktop _Images"
 msgid "Grab Desktop _Images"
-msgstr "Capturer l'écran"
+msgstr "Capturer des _images du bureau"
 
 #: driver/xscreensaver-demo.glade2.h:23
 msgid "Grab _Video Frames"
 
 #: driver/xscreensaver-demo.glade2.h:23
 msgid "Grab _Video Frames"
-msgstr ""
+msgstr "Captures des trames _vidéo"
 
 #: driver/xscreensaver-demo.glade2.h:28
 msgid "Install _Colormap"
 
 #: driver/xscreensaver-demo.glade2.h:28
 msgid "Install _Colormap"
-msgstr ""
+msgstr "Installer la palette de _couleurs"
 
 #: driver/xscreensaver-demo.glade2.h:30
 msgid ""
 "No Preview\n"
 "Available"
 msgstr ""
 
 #: driver/xscreensaver-demo.glade2.h:30
 msgid ""
 "No Preview\n"
 "Available"
 msgstr ""
+"Pas d'aperçu\n"
+"Disponible"
 
 #: driver/xscreensaver-demo.glade2.h:33
 msgid "Preview of screen saver"
 
 #: driver/xscreensaver-demo.glade2.h:33
 msgid "Preview of screen saver"
-msgstr ""
+msgstr "Aperçu de l'économiseur d'écran"
 
 #: driver/xscreensaver-demo.glade2.h:37
 msgid "Stand_by After"
 
 #: driver/xscreensaver-demo.glade2.h:37
 msgid "Stand_by After"
-msgstr ""
+msgstr "Blo_cage après"
 
 #: driver/xscreensaver-demo.glade2.h:40
 msgid "Sus_pend After"
 
 #: driver/xscreensaver-demo.glade2.h:40
 msgid "Sus_pend After"
-msgstr ""
+msgstr "Sus_pend après"
 
 #: driver/xscreensaver-demo.glade2.h:45
 msgid "_Advanced"
 
 #: driver/xscreensaver-demo.glade2.h:45
 msgid "_Advanced"
-msgstr "_Avancée"
+msgstr "_Avancé"
 
 #: driver/xscreensaver-demo.glade2.h:46
 msgid "_Advanced >>"
 
 #: driver/xscreensaver-demo.glade2.h:46
 msgid "_Advanced >>"
-msgstr "_Avancée >>"
+msgstr "_Avancé >>"
 
 #: driver/xscreensaver-demo.glade2.h:47
 
 #: driver/xscreensaver-demo.glade2.h:47
-#, fuzzy
 msgid "_Blank After"
 msgid "_Blank After"
-msgstr "Explosion"
+msgstr "_Verrouillage après"
 
 #: driver/xscreensaver-demo.glade2.h:49
 msgid "_Browse"
 
 #: driver/xscreensaver-demo.glade2.h:49
 msgid "_Browse"
@@ -793,12 +859,11 @@ msgstr "_Parcourir"
 
 #: driver/xscreensaver-demo.glade2.h:50
 msgid "_Command Line:"
 
 #: driver/xscreensaver-demo.glade2.h:50
 msgid "_Command Line:"
-msgstr "_Ligne de commande :"
+msgstr "_Ligne de commande :"
 
 #: driver/xscreensaver-demo.glade2.h:51
 
 #: driver/xscreensaver-demo.glade2.h:51
-#, fuzzy
 msgid "_Cycle After"
 msgid "_Cycle After"
-msgstr "Eau claire"
+msgstr "_Changement au bout de"
 
 #: driver/xscreensaver-demo.glade2.h:52
 msgid "_Display Modes"
 
 #: driver/xscreensaver-demo.glade2.h:52
 msgid "_Display Modes"
@@ -806,43 +871,44 @@ msgstr "_Modes d'affichage"
 
 #: driver/xscreensaver-demo.glade2.h:57
 msgid "_Lock Screen After"
 
 #: driver/xscreensaver-demo.glade2.h:57
 msgid "_Lock Screen After"
-msgstr ""
+msgstr "_Verrouillage de l'écran après"
 
 #: driver/xscreensaver-demo.glade2.h:59
 msgid "_Mode:"
 
 #: driver/xscreensaver-demo.glade2.h:59
 msgid "_Mode:"
-msgstr ""
+msgstr "_Mode :"
 
 #: driver/xscreensaver-demo.glade2.h:60
 msgid "_Off After"
 
 #: driver/xscreensaver-demo.glade2.h:60
 msgid "_Off After"
-msgstr ""
+msgstr "Coup_ure après"
 
 #: driver/xscreensaver-demo.glade2.h:61
 msgid "_Power Management Enabled"
 
 #: driver/xscreensaver-demo.glade2.h:61
 msgid "_Power Management Enabled"
-msgstr ""
+msgstr "_Gestion d'alimentation de l'écran"
 
 #: driver/xscreensaver-demo.glade2.h:62
 msgid "_Preview"
 
 #: driver/xscreensaver-demo.glade2.h:62
 msgid "_Preview"
-msgstr ""
+msgstr "_Aperçu"
 
 #: driver/xscreensaver-demo.glade2.h:63
 msgid "_Quit"
 
 #: driver/xscreensaver-demo.glade2.h:63
 msgid "_Quit"
-msgstr ""
+msgstr "_Quitte"
 
 #: driver/xscreensaver-demo.glade2.h:65
 msgid "_Settings..."
 
 #: driver/xscreensaver-demo.glade2.h:65
 msgid "_Settings..."
-msgstr ""
+msgstr "_Paramètres..."
 
 #: driver/xscreensaver-demo.glade2.h:66
 msgid "_Standard <<"
 
 #: driver/xscreensaver-demo.glade2.h:66
 msgid "_Standard <<"
-msgstr ""
+msgstr "_Standard <<"
 
 #: driver/xscreensaver-demo.glade2.h:67
 
 #: driver/xscreensaver-demo.glade2.h:67
+#, fuzzy
 msgid "_Verbose Dialognostics"
 msgid "_Verbose Dialognostics"
-msgstr ""
+msgstr "Diagnostiques _verbeux"
 
 #: driver/xscreensaver-demo.glade2.h:68
 msgid "_Visual:"
 
 #: driver/xscreensaver-demo.glade2.h:68
 msgid "_Visual:"
-msgstr ""
+msgstr "_Visuels :"
 
 #: driver/xscreensaver-demo.glade2.h:69
 msgid "dialog1"
 
 #: driver/xscreensaver-demo.glade2.h:69
 msgid "dialog1"
@@ -850,20 +916,19 @@ msgstr "dialog1"
 
 #: driver/xscreensaver-demo.glade2.h:71
 msgid "no preview"
 
 #: driver/xscreensaver-demo.glade2.h:71
 msgid "no preview"
-msgstr "pas d'aperçu"
+msgstr "pas d'aperçu"
 
 #: driver/xscreensaver-demo.glade2.h:72
 msgid "preview"
 
 #: driver/xscreensaver-demo.glade2.h:72
 msgid "preview"
-msgstr "aperçu"
+msgstr "aperçu"
 
 #: hacks/config/anemone.xml.h:1
 
 #: hacks/config/anemone.xml.h:1
-#, fuzzy
 msgid "Anemone"
 msgid "Anemone"
-msgstr "Démon"
+msgstr "Anémone"
 
 #: hacks/config/anemone.xml.h:2
 msgid "Arms"
 
 #: hacks/config/anemone.xml.h:2
 msgid "Arms"
-msgstr ""
+msgstr "Bras"
 
 #: hacks/config/anemone.xml.h:3 hacks/config/ant.xml.h:5
 #: hacks/config/apollonian.xml.h:5 hacks/config/atlantis.xml.h:4
 
 #: hacks/config/anemone.xml.h:3 hacks/config/ant.xml.h:5
 #: hacks/config/apollonian.xml.h:5 hacks/config/atlantis.xml.h:4
@@ -1077,7 +1142,7 @@ msgstr "Nombre de couleurs"
 #: hacks/config/xmatrix.xml.h:14 hacks/config/xmountains.xml.h:4
 #: hacks/config/xrayswarm.xml.h:3 hacks/config/zoom.xml.h:6
 msgid "Slow"
 #: hacks/config/xmatrix.xml.h:14 hacks/config/xmountains.xml.h:4
 #: hacks/config/xrayswarm.xml.h:3 hacks/config/zoom.xml.h:6
 msgid "Slow"
-msgstr "Lente"
+msgstr "Lent(e)"
 
 #: hacks/config/anemone.xml.h:8 hacks/config/ant.xml.h:16
 #: hacks/config/apollonian.xml.h:12 hacks/config/attraction.xml.h:28
 
 #: hacks/config/anemone.xml.h:8 hacks/config/ant.xml.h:16
 #: hacks/config/apollonian.xml.h:12 hacks/config/attraction.xml.h:28
@@ -1141,18 +1206,18 @@ msgstr "Vitesse"
 
 #: hacks/config/anemone.xml.h:9
 msgid "Tentacles"
 
 #: hacks/config/anemone.xml.h:9
 msgid "Tentacles"
-msgstr ""
+msgstr "Tentacules"
 
 #: hacks/config/anemone.xml.h:10 hacks/config/deluxe.xml.h:10
 #: hacks/config/lmorph.xml.h:13 hacks/config/starfish.xml.h:11
 #: hacks/config/thornbird.xml.h:9
 msgid "Thick"
 
 #: hacks/config/anemone.xml.h:10 hacks/config/deluxe.xml.h:10
 #: hacks/config/lmorph.xml.h:13 hacks/config/starfish.xml.h:11
 #: hacks/config/thornbird.xml.h:9
 msgid "Thick"
-msgstr "Épais"
+msgstr "Épais"
 
 #: hacks/config/anemone.xml.h:11 hacks/config/moire2.xml.h:8
 #: hacks/config/thornbird.xml.h:10
 msgid "Thickness"
 
 #: hacks/config/anemone.xml.h:11 hacks/config/moire2.xml.h:8
 #: hacks/config/thornbird.xml.h:10
 msgid "Thickness"
-msgstr "Épaisseur"
+msgstr "Épaisseur"
 
 #: hacks/config/anemone.xml.h:12 hacks/config/deluxe.xml.h:11
 #: hacks/config/lmorph.xml.h:14 hacks/config/starfish.xml.h:12
 
 #: hacks/config/anemone.xml.h:12 hacks/config/deluxe.xml.h:11
 #: hacks/config/lmorph.xml.h:14 hacks/config/starfish.xml.h:12
@@ -1204,10 +1269,10 @@ msgid ""
 "Written by David Bagley."
 msgstr ""
 "Un automate cellulaire qui est en fait une machine de Turing "
 "Written by David Bagley."
 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."
+"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é. àrit "
+"par David Bagley."
 
 #: hacks/config/ant.xml.h:2
 msgid "Ant"
 
 #: hacks/config/ant.xml.h:2
 msgid "Ant"
@@ -1223,7 +1288,7 @@ msgstr "Nombre de fourmis"
 
 #: hacks/config/ant.xml.h:6
 msgid "Four Sided Cells"
 
 #: hacks/config/ant.xml.h:6
 msgid "Four Sided Cells"
-msgstr "Cellules à 4 côtés"
+msgstr "Cellules à 4 côtés"
 
 #: hacks/config/ant.xml.h:7 hacks/config/attraction.xml.h:13
 #: hacks/config/cubenetic.xml.h:11 hacks/config/demon.xml.h:5
 
 #: hacks/config/ant.xml.h:7 hacks/config/attraction.xml.h:13
 #: hacks/config/cubenetic.xml.h:11 hacks/config/demon.xml.h:5
@@ -1237,23 +1302,23 @@ msgstr "Cellules à 4 côtés"
 #: hacks/config/rubik.xml.h:4 hacks/config/sierpinski.xml.h:3
 #: hacks/config/slip.xml.h:3
 msgid "Large"
 #: hacks/config/rubik.xml.h:4 hacks/config/sierpinski.xml.h:3
 #: hacks/config/slip.xml.h:3
 msgid "Large"
-msgstr "Importante"
+msgstr "Important(e)"
 
 #: hacks/config/ant.xml.h:9
 msgid "Nine Sided Cells"
 
 #: hacks/config/ant.xml.h:9
 msgid "Nine Sided Cells"
-msgstr "Cellules à 9 côtés"
+msgstr "Cellules à 8 côtés"
 
 #: hacks/config/ant.xml.h:11
 msgid "Random Cell Shape"
 
 #: hacks/config/ant.xml.h:11
 msgid "Random Cell Shape"
-msgstr "Forme de cellule aléatoire"
+msgstr "Forme de cellule aléatoire"
 
 #: hacks/config/ant.xml.h:12 hacks/config/speedmine.xml.h:11
 msgid "Sharp Turns"
 
 #: hacks/config/ant.xml.h:12 hacks/config/speedmine.xml.h:11
 msgid "Sharp Turns"
-msgstr "Virages serrés"
+msgstr "Virages serrés"
 
 #: hacks/config/ant.xml.h:13
 msgid "Six Sided Cells"
 
 #: hacks/config/ant.xml.h:13
 msgid "Six Sided Cells"
-msgstr "Cellules à 6 côtés"
+msgstr "Cellules à 6 côtés"
 
 #: hacks/config/ant.xml.h:15 hacks/config/attraction.xml.h:27
 #: hacks/config/cubenetic.xml.h:23 hacks/config/demon.xml.h:9
 
 #: hacks/config/ant.xml.h:15 hacks/config/attraction.xml.h:27
 #: hacks/config/cubenetic.xml.h:23 hacks/config/demon.xml.h:9
@@ -1271,7 +1336,7 @@ msgstr "Faible"
 
 #: hacks/config/ant.xml.h:17
 msgid "Three Sided Cells"
 
 #: hacks/config/ant.xml.h:17
 msgid "Three Sided Cells"
-msgstr "Cellules à 3 côtés"
+msgstr "Cellules à 3 côtés"
 
 #: hacks/config/ant.xml.h:18 hacks/config/demon.xml.h:12
 #: hacks/config/discrete.xml.h:10 hacks/config/fadeplot.xml.h:11
 
 #: hacks/config/ant.xml.h:18 hacks/config/demon.xml.h:12
 #: hacks/config/discrete.xml.h:10 hacks/config/fadeplot.xml.h:11
@@ -1280,7 +1345,7 @@ msgstr "Cellules à 3 côtés"
 #: hacks/config/rubik.xml.h:12 hacks/config/sierpinski.xml.h:11
 #: hacks/config/slip.xml.h:11
 msgid "Timeout"
 #: hacks/config/rubik.xml.h:12 hacks/config/sierpinski.xml.h:11
 #: hacks/config/slip.xml.h:11
 msgid "Timeout"
-msgstr "Délai"
+msgstr "Délai"
 
 #: hacks/config/ant.xml.h:19
 msgid "Truchet Lines"
 
 #: hacks/config/ant.xml.h:19
 msgid "Truchet Lines"
@@ -1288,7 +1353,7 @@ msgstr "Lignes de Truchet"
 
 #: hacks/config/ant.xml.h:20
 msgid "Twelve Sided Cells"
 
 #: hacks/config/ant.xml.h:20
 msgid "Twelve Sided Cells"
-msgstr "Cellules à 12 côtés"
+msgstr "Cellules à 12 côtés"
 
 #: hacks/config/apollonian.xml.h:1
 msgid "Apollonian"
 
 #: hacks/config/apollonian.xml.h:1
 msgid "Apollonian"
@@ -1304,22 +1369,21 @@ msgstr "Profondeur"
 
 #: hacks/config/apollonian.xml.h:4
 msgid "Draw Labels"
 
 #: hacks/config/apollonian.xml.h:4
 msgid "Draw Labels"
-msgstr "Dessiner des étiquettes"
+msgstr "Afficher les étiquettes"
 
 #: hacks/config/apollonian.xml.h:6
 msgid "Include Alternate Geometries"
 
 #: hacks/config/apollonian.xml.h:6
 msgid "Include Alternate Geometries"
-msgstr "Inclure les géométries alternatives"
+msgstr "Inclure les géométries alternatives"
 
 #: hacks/config/apollonian.xml.h:9
 msgid ""
 "Packs a large circle with smaller circles, demonstrating the Descartes "
 "Circle Theorem. Written by Allan R. Wilks and David Bagley."
 msgstr ""
 
 #: hacks/config/apollonian.xml.h:9
 msgid ""
 "Packs a large circle with smaller circles, demonstrating the Descartes "
 "Circle Theorem. Written by Allan R. Wilks and David Bagley."
 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."
+"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."
 
 #: hacks/config/apollonian.xml.h:10
 
 #: hacks/config/apollonian.xml.h:10
-#, fuzzy
 msgid "Shallow"
 msgstr "Creux"
 
 msgid "Shallow"
 msgstr "Creux"
 
@@ -1337,11 +1401,11 @@ msgstr "Eau claire"
 
 #: hacks/config/atlantis.xml.h:5
 msgid "Flat Background"
 
 #: hacks/config/atlantis.xml.h:5
 msgid "Flat Background"
-msgstr "Arrière-plan plat"
+msgstr "Arrière-plan uni"
 
 #: hacks/config/atlantis.xml.h:6
 msgid "Gradient Background"
 
 #: hacks/config/atlantis.xml.h:6
 msgid "Gradient Background"
-msgstr "Arrière-plan dégradé"
+msgstr "Arrière-plan dégradé"
 
 #: hacks/config/atlantis.xml.h:7
 msgid "Number of Sharks"
 
 #: hacks/config/atlantis.xml.h:7
 msgid "Number of Sharks"
@@ -1349,7 +1413,7 @@ msgstr "Nombre de requins"
 
 #: hacks/config/atlantis.xml.h:8
 msgid "Shark Proximity"
 
 #: hacks/config/atlantis.xml.h:8
 msgid "Shark Proximity"
-msgstr "Proximité des requins"
+msgstr "Comportement des requins"
 
 #: hacks/config/atlantis.xml.h:9
 msgid "Shark Speed"
 
 #: hacks/config/atlantis.xml.h:9
 msgid "Shark Speed"
@@ -1377,7 +1441,7 @@ msgstr "Eau miroitante"
 #: hacks/config/sproingies.xml.h:4 hacks/config/stairs.xml.h:2
 #: hacks/config/starwars.xml.h:11 hacks/config/superquadrics.xml.h:6
 msgid "Show Frames-per-Second"
 #: hacks/config/sproingies.xml.h:4 hacks/config/stairs.xml.h:2
 #: hacks/config/starwars.xml.h:11 hacks/config/superquadrics.xml.h:6
 msgid "Show Frames-per-Second"
-msgstr "Afficher images par seconde"
+msgstr "Afficher images par seconde (FPS)"
 
 #: hacks/config/atlantis.xml.h:12
 msgid "Shy"
 
 #: hacks/config/atlantis.xml.h:12
 msgid "Shy"
@@ -1401,9 +1465,9 @@ msgid ""
 "dolphins, and whales. The swimming motions are great. Originally written by "
 "Mark Kilgard."
 msgstr ""
 "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 "
+"Voici un aquarium grand format: une animation GL avec des requins, des "
 "dauphins et des baleines. Les mouvements de nage sont magnifiques. "
 "dauphins et des baleines. Les mouvements de nage sont magnifiques. "
-"Initialement écrit par Mark Kilgard."
+"Initialement écrit par Mark Kilgard."
 
 #: hacks/config/atlantis.xml.h:16
 msgid "Whale Speed"
 
 #: hacks/config/atlantis.xml.h:16
 msgid "Whale Speed"
@@ -1434,7 +1498,7 @@ msgstr "Nombre de balles"
 
 #: hacks/config/attraction.xml.h:3
 msgid "Ball Mass"
 
 #: hacks/config/attraction.xml.h:3
 msgid "Ball Mass"
-msgstr "Masse de balles"
+msgstr "Masse des balles"
 
 #: hacks/config/attraction.xml.h:4 hacks/config/fluidballs.xml.h:2
 msgid "Balls"
 
 #: hacks/config/attraction.xml.h:4 hacks/config/fluidballs.xml.h:2
 msgid "Balls"
@@ -1452,7 +1516,7 @@ msgstr "Contraste des couleurs"
 
 #: hacks/config/attraction.xml.h:7
 msgid "Environmental Viscosity"
 
 #: hacks/config/attraction.xml.h:7
 msgid "Environmental Viscosity"
-msgstr "Viscosité environnementale"
+msgstr "Viscosité environnementale"
 
 #: hacks/config/attraction.xml.h:9
 msgid "Filled Splines"
 
 #: hacks/config/attraction.xml.h:9
 msgid "Filled Splines"
@@ -1472,15 +1536,15 @@ msgstr "Rayons pleins"
 #: hacks/config/t3d.xml.h:7 hacks/config/twang.xml.h:5
 #: hacks/config/wander.xml.h:8
 msgid "High"
 #: hacks/config/t3d.xml.h:7 hacks/config/twang.xml.h:5
 #: hacks/config/wander.xml.h:8
 msgid "High"
-msgstr "Haute"
+msgstr "Haut(e)"
 
 #: hacks/config/attraction.xml.h:11
 msgid "Ignore Screen Edges"
 
 #: hacks/config/attraction.xml.h:11
 msgid "Ignore Screen Edges"
-msgstr "Ignorer les bords de l'écran"
+msgstr "Ignorer les bords de l'écran"
 
 #: hacks/config/attraction.xml.h:12
 msgid "Inward"
 
 #: hacks/config/attraction.xml.h:12
 msgid "Inward"
-msgstr "Intérieur"
+msgstr "Intérieur"
 
 #: hacks/config/attraction.xml.h:14
 msgid ""
 
 #: hacks/config/attraction.xml.h:14
 msgid ""
@@ -1495,16 +1559,16 @@ msgid ""
 "edge of the screen. It looks quite chaotic. Written by Jamie Zawinski, based "
 "on Lisp code by John Pezaris."
 msgstr ""
 "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 "
+"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 "
 "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 "
+"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
 "John Pezaris."
 
 #: hacks/config/attraction.xml.h:15 hacks/config/deluxe.xml.h:5
@@ -1524,7 +1588,7 @@ msgstr "Lignes"
 #: hacks/config/spheremonics.xml.h:7 hacks/config/wander.xml.h:10
 #: hacks/config/whirlwindwarp.xml.h:3
 msgid "Long"
 #: hacks/config/spheremonics.xml.h:7 hacks/config/wander.xml.h:10
 #: hacks/config/whirlwindwarp.xml.h:3
 msgid "Long"
-msgstr "Long"
+msgstr "Long(ue)"
 
 #: hacks/config/attraction.xml.h:17 hacks/config/ccurve.xml.h:10
 #: hacks/config/cubenetic.xml.h:12 hacks/config/euler2d.xml.h:7
 
 #: hacks/config/attraction.xml.h:17 hacks/config/ccurve.xml.h:10
 #: hacks/config/cubenetic.xml.h:12 hacks/config/euler2d.xml.h:7
@@ -1540,7 +1604,7 @@ msgstr "Long"
 #: hacks/config/t3d.xml.h:8 hacks/config/twang.xml.h:7
 #: hacks/config/wander.xml.h:11
 msgid "Low"
 #: hacks/config/t3d.xml.h:8 hacks/config/twang.xml.h:7
 #: hacks/config/wander.xml.h:11
 msgid "Low"
-msgstr "Bas"
+msgstr "Bas(se)"
 
 #: hacks/config/attraction.xml.h:20
 msgid "Orbital Mode"
 
 #: hacks/config/attraction.xml.h:20
 msgid "Orbital Mode"
@@ -1548,7 +1612,7 @@ msgstr "Mode orbital"
 
 #: hacks/config/attraction.xml.h:21
 msgid "Outward"
 
 #: hacks/config/attraction.xml.h:21
 msgid "Outward"
-msgstr "Extérieur"
+msgstr "Extérieur"
 
 #: hacks/config/attraction.xml.h:22
 msgid "Polygons"
 
 #: hacks/config/attraction.xml.h:22
 msgid "Polygons"
@@ -1560,7 +1624,7 @@ msgstr "Rayon"
 
 #: hacks/config/attraction.xml.h:24
 msgid "Repulsion Threshold"
 
 #: hacks/config/attraction.xml.h:24
 msgid "Repulsion Threshold"
-msgstr "Seuil de répulsion"
+msgstr "Seuil de répulsion"
 
 #: hacks/config/attraction.xml.h:25 hacks/config/braid.xml.h:10
 #: hacks/config/cynosure.xml.h:8 hacks/config/drift.xml.h:11
 
 #: hacks/config/attraction.xml.h:25 hacks/config/braid.xml.h:10
 #: hacks/config/cynosure.xml.h:8 hacks/config/drift.xml.h:11
@@ -1572,22 +1636,20 @@ msgstr "Seuil de répulsion"
 #: hacks/config/sierpinski3d.xml.h:5 hacks/config/spheremonics.xml.h:17
 #: hacks/config/wander.xml.h:12 hacks/config/whirlwindwarp.xml.h:6
 msgid "Short"
 #: hacks/config/sierpinski3d.xml.h:5 hacks/config/spheremonics.xml.h:17
 #: hacks/config/wander.xml.h:12 hacks/config/whirlwindwarp.xml.h:6
 msgid "Short"
-msgstr "Court"
+msgstr "Court(e)"
 
 #: hacks/config/attraction.xml.h:29
 
 #: hacks/config/attraction.xml.h:29
-#, fuzzy
 msgid "Splines"
 msgstr "Rayons"
 
 #: hacks/config/attraction.xml.h:30
 msgid "Splines"
 msgstr "Rayons"
 
 #: hacks/config/attraction.xml.h:30
-#, fuzzy
 msgid "Tails"
 msgstr "Queues"
 
 #: hacks/config/attraction.xml.h:31 hacks/config/euler2d.xml.h:16
 #: hacks/config/juggle.xml.h:9
 msgid "Trail Length"
 msgid "Tails"
 msgstr "Queues"
 
 #: hacks/config/attraction.xml.h:31 hacks/config/euler2d.xml.h:16
 #: hacks/config/juggle.xml.h:9
 msgid "Trail Length"
-msgstr "Longueur de la traînée"
+msgstr "Longueur de la traînée"
 
 #: hacks/config/blaster.xml.h:1
 msgid "Blaster"
 
 #: hacks/config/blaster.xml.h:1
 msgid "Blaster"
@@ -1599,8 +1661,8 @@ msgid ""
 "colored circles) doing battle in front of a moving star field. Written by "
 "Jonathan Lin."
 msgstr ""
 "colored circles) doing battle in front of a moving star field. Written by "
 "Jonathan Lin."
 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 "
+"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."
 
 #: hacks/config/blaster.xml.h:5 hacks/config/penetrate.xml.h:4
 "par Jonathan Lin."
 
 #: hacks/config/blaster.xml.h:5 hacks/config/penetrate.xml.h:4
@@ -1613,19 +1675,17 @@ msgstr "Robots"
 
 #: hacks/config/blaster.xml.h:10
 msgid "Stars"
 
 #: hacks/config/blaster.xml.h:10
 msgid "Stars"
-msgstr "Étoiles"
+msgstr "Étoiles"
 
 #: hacks/config/blitspin.xml.h:1
 
 #: hacks/config/blitspin.xml.h:1
-#, fuzzy
 msgid "90 deg Rotation Speed"
 msgid "90 deg Rotation Speed"
-msgstr "Rotation"
+msgstr "Vitesse de rotation à 90°"
 
 #: hacks/config/blitspin.xml.h:2
 msgid "Bitmap to rotate"
 
 #: hacks/config/blitspin.xml.h:2
 msgid "Bitmap to rotate"
-msgstr "Bitmap à pivoter"
+msgstr "Image à pivoter"
 
 #: hacks/config/blitspin.xml.h:3
 
 #: hacks/config/blitspin.xml.h:3
-#, fuzzy
 msgid "BlitSpin"
 msgstr "RotationBitmap"
 
 msgid "BlitSpin"
 msgstr "RotationBitmap"
 
@@ -1635,7 +1695,7 @@ msgstr "Vitesse de rotation floue"
 
 #: hacks/config/blitspin.xml.h:6
 msgid "Grab Screen"
 
 #: hacks/config/blitspin.xml.h:6
 msgid "Grab Screen"
-msgstr "Capturer l'écran"
+msgstr "Capturer l'écran"
 
 #: hacks/config/blitspin.xml.h:8
 msgid ""
 
 #: hacks/config/blitspin.xml.h:8
 msgid ""
@@ -1649,15 +1709,15 @@ msgid ""
 "provide the image to use, as an XBM or XPM file, or tell it to grab a screen "
 "image and rotate that."
 msgstr ""
 "provide the image to use, as an XBM or XPM file, or tell it to grab a screen "
 "image and rotate that."
 msgstr ""
-"Le ''hack'' RotationBitmap 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 "
+"Le mode RotationBitmap 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 "
 "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 "
+"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."
 
 #: hacks/config/bouboule.xml.h:1
 "pivoter."
 
 #: hacks/config/bouboule.xml.h:1
@@ -1666,7 +1726,7 @@ msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgid "Do Red/Blue 3D seperation"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgid "Do Red/Blue 3D seperation"
-msgstr "Séparation rouge/bleu 3D"
+msgstr "Séparation rouge/bleu 3D"
 
 #: hacks/config/bouboule.xml.h:7
 msgid "Number of Spots"
 
 #: hacks/config/bouboule.xml.h:7
 msgid "Number of Spots"
@@ -1677,8 +1737,8 @@ msgid ""
 "This draws what looks like a spinning, deforming baloon with varying-sized "
 "spots painted on its invisible surface. Written by Jeremie Petit."
 msgstr ""
 "This draws what looks like a spinning, deforming baloon with varying-sized "
 "spots painted on its invisible surface. Written by Jeremie Petit."
 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."
+"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."
 
 #: hacks/config/boxed.xml.h:1 hacks/config/gears.xml.h:1
 #: hacks/config/gflux.xml.h:1 hacks/config/pyro.xml.h:1
 
 #: hacks/config/boxed.xml.h:1 hacks/config/gears.xml.h:1
 #: hacks/config/gflux.xml.h:1 hacks/config/pyro.xml.h:1
@@ -1689,14 +1749,14 @@ msgstr "Vitesse d'animation"
 
 #: hacks/config/boxed.xml.h:2
 msgid "Boxed"
 
 #: hacks/config/boxed.xml.h:2
 msgid "Boxed"
-msgstr "En boîte"
+msgstr "En boîte"
 
 #: hacks/config/boxed.xml.h:3
 msgid ""
 "Draws a box full of 3D bouncing balls that explode. Written by Sander van "
 "Grieken."
 msgstr ""
 
 #: hacks/config/boxed.xml.h:3
 msgid ""
 "Draws a box full of 3D bouncing balls that explode. Written by Sander van "
 "Grieken."
 msgstr ""
-"Dessine une boîte remplie de balles 3D qui explosent. Écrit par Sander van "
+"Dessine une boîte remplie de balles 3D qui explosent. Écrit par Sander van "
 "Grieken."
 
 #: hacks/config/braid.xml.h:1
 "Grieken."
 
 #: hacks/config/braid.xml.h:1
@@ -1708,8 +1768,8 @@ msgid ""
 "Draws random color-cycling inter-braided concentric circles. Written by John "
 "Neil."
 msgstr ""
 "Draws random color-cycling inter-braided concentric circles. Written by John "
 "Neil."
 msgstr ""
-"Dessine des cercles concentriques aléatoires entrelacés, avec des cycles de "
-"couleurs. Écrit par John Neil."
+"Dessine des cercles concentriques aléatoires entrelacés, avec des cycles de "
+"couleurs. Écrit par John Neil."
 
 #: hacks/config/braid.xml.h:3 hacks/config/bsod.xml.h:8
 #: hacks/config/ccurve.xml.h:7 hacks/config/coral.xml.h:6
 
 #: hacks/config/braid.xml.h:3 hacks/config/bsod.xml.h:8
 #: hacks/config/ccurve.xml.h:7 hacks/config/coral.xml.h:6
@@ -1729,12 +1789,12 @@ msgstr ""
 #: hacks/config/vidwhacker.xml.h:3 hacks/config/wander.xml.h:7
 #: hacks/config/xspirograph.xml.h:3
 msgid "Duration"
 #: hacks/config/vidwhacker.xml.h:3 hacks/config/wander.xml.h:7
 #: hacks/config/xspirograph.xml.h:3
 msgid "Duration"
-msgstr "Durée"
+msgstr "Durée"
 
 #: hacks/config/braid.xml.h:5 hacks/config/epicycle.xml.h:7
 #: hacks/config/nerverot.xml.h:12
 msgid "Line Thickness"
 
 #: hacks/config/braid.xml.h:5 hacks/config/epicycle.xml.h:7
 #: hacks/config/nerverot.xml.h:12
 msgid "Line Thickness"
-msgstr "Épaisseur de ligne"
+msgstr "Épaisseur de ligne"
 
 #: hacks/config/braid.xml.h:8
 msgid "Max Rings"
 
 #: hacks/config/braid.xml.h:8
 msgid "Max Rings"
@@ -1771,13 +1831,13 @@ msgid ""
 "emulation, this hack simulates popular screen savers from a number of less "
 "robust operating systems. Written by Jamie Zawinski."
 msgstr ""
 "emulation, this hack simulates popular screen savers from a number of less "
 "robust operating systems. Written by Jamie Zawinski."
 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."
+"BSOD signifie «Blue Screen of Deaths» (é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."
 
 #: hacks/config/bsod.xml.h:9
 msgid "Mac Bomb"
 
 #: hacks/config/bsod.xml.h:9
 msgid "Mac Bomb"
-msgstr ""
+msgstr "Bombe Mac"
 
 #: hacks/config/bsod.xml.h:10
 msgid "MacsBug"
 
 #: hacks/config/bsod.xml.h:10
 msgid "MacsBug"
@@ -1793,7 +1853,7 @@ msgstr "SCO"
 
 #: hacks/config/bsod.xml.h:13
 msgid "Sad Mac"
 
 #: hacks/config/bsod.xml.h:13
 msgid "Sad Mac"
-msgstr ""
+msgstr "Mac Triste"
 
 #: hacks/config/bsod.xml.h:14
 msgid "Solaris"
 
 #: hacks/config/bsod.xml.h:14
 msgid "Solaris"
@@ -1804,8 +1864,9 @@ msgid "Sparc Linux"
 msgstr "Sparc Linux"
 
 #: hacks/config/bsod.xml.h:16
 msgstr "Sparc Linux"
 
 #: hacks/config/bsod.xml.h:16
+#, fuzzy
 msgid "Windows"
 msgid "Windows"
-msgstr "Windows"
+msgstr "Windows NT"
 
 #: hacks/config/bsod.xml.h:17
 msgid "Windows 2000"
 
 #: hacks/config/bsod.xml.h:17
 msgid "Windows 2000"
@@ -1825,7 +1886,7 @@ msgid ""
 "the screen, with nice specular reflections. Written by Richard Jones."
 msgstr ""
 "Dessine un flux de bulles 3D ondulantes, qui montent vers le haut de "
 "the screen, with nice specular reflections. Written by Richard Jones."
 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."
 
 #: hacks/config/bubbles.xml.h:1 hacks/config/xfishtank.xml.h:2
 msgid "Bubbles"
 
 #: hacks/config/bubbles.xml.h:1 hacks/config/xfishtank.xml.h:2
 msgid "Bubbles"
@@ -1849,7 +1910,7 @@ msgstr "Les bulles existent en 3 dimensions"
 
 #: hacks/config/bubbles.xml.h:6
 msgid "Don't hide bubbles when they pop"
 
 #: hacks/config/bubbles.xml.h:6
 msgid "Don't hide bubbles when they pop"
-msgstr "Ne pas masquer les bulles lorsqu'elles éclatent"
+msgstr "Ne pas masquer les bulles lorsqu'elles éclatent"
 
 #: hacks/config/bubbles.xml.h:7
 msgid "Draw circles instead of pixmap bubbles"
 
 #: hacks/config/bubbles.xml.h:7
 msgid "Draw circles instead of pixmap bubbles"
@@ -1857,7 +1918,7 @@ msgstr "Tracer des cercles au lieu de bulles pixmap"
 
 #: hacks/config/bubbles.xml.h:9
 msgid "Leave Trails"
 
 #: hacks/config/bubbles.xml.h:9
 msgid "Leave Trails"
-msgstr "Laisser des traînées"
+msgstr "Laisser des traînées"
 
 #: hacks/config/bubbles.xml.h:12
 msgid ""
 
 #: hacks/config/bubbles.xml.h:12
 msgid ""
@@ -1866,9 +1927,9 @@ msgid ""
 "form larger bubbles, which eventually pop. Written by James Macnicol."
 msgstr ""
 "Simule le type de formation de bulles qui se produit lorsque de l'eau entre "
 "form larger bubbles, which eventually pop. Written by James Macnicol."
 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 "
+"en ébullition: de petites bulles apparaissent et, lorsqu'elles se "
 "rapprochent, elles se combinent pour former de plus grandes bulles, qui "
 "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."
 
 #: hacks/config/bumps.xml.h:1
 msgid ""
 
 #: hacks/config/bumps.xml.h:1
 msgid ""
@@ -1876,10 +1937,10 @@ msgid ""
 "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."
 msgstr ""
 "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."
 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, "
+"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 "
 "il met en 3 dimensions une section variable du bureau, en fonction de "
-"l'intensité des couleurs. Écrit par Shane Smit."
+"l'intensité des couleurs. Écrit par Shane Smit."
 
 #: hacks/config/bumps.xml.h:2
 msgid "Bumps"
 
 #: hacks/config/bumps.xml.h:2
 msgid "Bumps"
@@ -1894,8 +1955,8 @@ msgid ""
 "This draws Escher's ``Impossible Cage,'' a 3d analog of a moebius strip, and "
 "rotates it in three dimensions. Written by Marcelo Vianna."
 msgstr ""
 "This draws Escher's ``Impossible Cage,'' a 3d analog of a moebius strip, and "
 "rotates it in three dimensions. Written by Marcelo Vianna."
 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."
 
 #: hacks/config/ccurve.xml.h:1
 msgid "0 seconds"
 
 #: hacks/config/ccurve.xml.h:1
 msgid "0 seconds"
@@ -1915,26 +1976,26 @@ msgstr "Courbe C"
 
 #: hacks/config/ccurve.xml.h:5
 msgid "Delay"
 
 #: hacks/config/ccurve.xml.h:5
 msgid "Delay"
-msgstr "Délai"
+msgstr "Délai"
 
 #: 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:3
 msgid "Density"
 
 #: 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:3
 msgid "Density"
-msgstr "Densité"
+msgstr "Densité"
 
 #: hacks/config/ccurve.xml.h:8
 msgid ""
 "Generates self-similar linear fractals, including the classic ``C Curve.'' "
 "Written by Rick Campbell."
 msgstr ""
 
 #: hacks/config/ccurve.xml.h:8
 msgid ""
 "Generates self-similar linear fractals, including the classic ``C Curve.'' "
 "Written by Rick Campbell."
 msgstr ""
-"Génère des fractales linéaires auto-similaires, notamment la fameuse "
-"''courbe C''. Écrit par Rick Campbell."
+"Génère des fractales linéaires auto-similaires, notamment la fameuse «courbe "
+"C». Écrit par Rick Campbell."
 
 #: hacks/config/circuit.xml.h:1
 msgid "Animates a number of 3D electronic components. Written by Ben Buxton."
 
 #: 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."
+msgstr "Anime plusieurs composants électroniques 3D. Écrit par Ben Buxton."
 
 #: hacks/config/circuit.xml.h:2
 msgid "Circuit"
 
 #: hacks/config/circuit.xml.h:2
 msgid "Circuit"
@@ -1943,7 +2004,7 @@ msgstr "Circuit"
 #: hacks/config/circuit.xml.h:3 hacks/config/gflux.xml.h:4
 #: hacks/config/pulsar.xml.h:2
 msgid "Directional Lighting"
 #: hacks/config/circuit.xml.h:3 hacks/config/gflux.xml.h:4
 #: hacks/config/pulsar.xml.h:2
 msgid "Directional Lighting"
-msgstr "Éclairage directionnel"
+msgstr "Éclairage directionnel"
 
 #: hacks/config/circuit.xml.h:5
 msgid "Flat Coloring"
 
 #: hacks/config/circuit.xml.h:5
 msgid "Flat Coloring"
@@ -1955,7 +2016,7 @@ msgstr "Parties"
 
 #: hacks/config/circuit.xml.h:7 hacks/config/flipscreen3d.xml.h:4
 msgid "Rotate"
 
 #: hacks/config/circuit.xml.h:7 hacks/config/flipscreen3d.xml.h:4
 msgid "Rotate"
-msgstr "Rotation"
+msgstr "Rotation globale"
 
 #: hacks/config/circuit.xml.h:8
 msgid "Rotation Speed"
 
 #: hacks/config/circuit.xml.h:8
 msgid "Rotation Speed"
@@ -1964,7 +2025,7 @@ msgstr "Vitesse de rotation"
 #: hacks/config/circuit.xml.h:12 hacks/config/dangerball.xml.h:9
 #: hacks/config/engine.xml.h:7
 msgid "Spin"
 #: hacks/config/circuit.xml.h:12 hacks/config/dangerball.xml.h:9
 #: hacks/config/engine.xml.h:7
 msgid "Spin"
-msgstr "Vrille"
+msgstr "Rotation des objets"
 
 #: hacks/config/compass.xml.h:1
 msgid "Compass"
 
 #: hacks/config/compass.xml.h:1
 msgid "Compass"
@@ -1981,8 +2042,8 @@ msgid ""
 "This draws a compass, with all elements spinning about randomly, for that "
 "``lost and nauseous'' feeling. Written by Jamie Zawinski."
 msgstr ""
 "This draws a compass, with all elements spinning about randomly, for that "
 "``lost and nauseous'' feeling. Written by Jamie Zawinski."
 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."
+"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."
 
 #: hacks/config/coral.xml.h:1 hacks/config/deco.xml.h:1
 #: hacks/config/helix.xml.h:1 hacks/config/imsmap.xml.h:1
 
 #: hacks/config/coral.xml.h:1 hacks/config/deco.xml.h:1
 #: hacks/config/helix.xml.h:1 hacks/config/imsmap.xml.h:1
@@ -2048,13 +2109,13 @@ 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."
 msgstr ""
 "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."
 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."
+"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."
 
 #: hacks/config/crystal.xml.h:1
 msgid "Center on Screen"
 
 #: hacks/config/crystal.xml.h:1
 msgid "Center on Screen"
-msgstr "Centré sur l'écran"
+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:3
 
 #: hacks/config/crystal.xml.h:2 hacks/config/deluxe.xml.h:1
 #: hacks/config/fadeplot.xml.h:1 hacks/config/flow.xml.h:3
@@ -2087,41 +2148,37 @@ msgstr "Dessiner une grille"
 
 #: hacks/config/crystal.xml.h:7
 msgid "Horizontal Symmetries"
 
 #: hacks/config/crystal.xml.h:7
 msgid "Horizontal Symmetries"
-msgstr "Symétries horizontales"
+msgstr "Symétries horizontales"
 
 #: 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."
 msgstr ""
 
 #: 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."
 msgstr ""
-"Polygones animés, semblables à un kaléidoscope (plus semblables que le hack "
-"'kaleid', en fait.) Par Jouk Jansen."
+"Polygones animés, semblables à un kaléidoscope (plus semblables à un "
+"kaléïdoscope que le hack «kaleid», en fait.) Par Jouk Jansen."
 
 #: hacks/config/crystal.xml.h:14
 msgid "Vertical Symmetries"
 
 #: hacks/config/crystal.xml.h:14
 msgid "Vertical Symmetries"
-msgstr "Symétries verticales"
+msgstr "Symétries verticales"
 
 #: hacks/config/cubenetic.xml.h:1
 msgid "Boxes"
 
 #: hacks/config/cubenetic.xml.h:1
 msgid "Boxes"
-msgstr "Boîtes"
+msgstr "Boîtes"
 
 #: hacks/config/cubenetic.xml.h:2
 
 #: hacks/config/cubenetic.xml.h:2
-#, fuzzy
 msgid "Cubenetic"
 msgstr "Rectangles de couleur"
 
 #: hacks/config/cubenetic.xml.h:3
 msgid "Cubenetic"
 msgstr "Rectangles de couleur"
 
 #: hacks/config/cubenetic.xml.h:3
-#, fuzzy
 msgid "Display Solid Colors"
 msgid "Display Solid Colors"
-msgstr "Afficher les secondes"
+msgstr "Afficher des couleurs unies"
 
 #: hacks/config/cubenetic.xml.h:4
 
 #: hacks/config/cubenetic.xml.h:4
-#, fuzzy
 msgid "Display Surface Patterns"
 msgid "Display Surface Patterns"
-msgstr "Afficher les étoiles"
+msgstr "Afficher les modèles de surface"
 
 #: hacks/config/cubenetic.xml.h:5
 
 #: hacks/config/cubenetic.xml.h:5
-#, fuzzy
 msgid "Display Wireframe"
 msgstr "Fil de fer"
 
 msgid "Display Wireframe"
 msgstr "Fil de fer"
 
@@ -2197,9 +2254,8 @@ msgstr ""
 #: hacks/config/gltext.xml.h:17 hacks/config/lavalite.xml.h:30
 #: hacks/config/menger.xml.h:20 hacks/config/molecule.xml.h:25
 #: hacks/config/spheremonics.xml.h:25 hacks/config/wander.xml.h:15
 #: hacks/config/gltext.xml.h:17 hacks/config/lavalite.xml.h:30
 #: hacks/config/menger.xml.h:20 hacks/config/molecule.xml.h:25
 #: hacks/config/spheremonics.xml.h:25 hacks/config/wander.xml.h:15
-#, fuzzy
 msgid "Wander"
 msgid "Wander"
-msgstr "Errance"
+msgstr "Déplacement"
 
 #: hacks/config/cynosure.xml.h:1
 msgid ""
 
 #: hacks/config/cynosure.xml.h:1
 msgid ""
@@ -2208,10 +2264,10 @@ msgid ""
 "clone. That clone was discovered by Jamie Zawinski, and ported to C for "
 "inclusion here."
 msgstr ""
 "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."
+"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"
 
 #: hacks/config/cynosure.xml.h:2
 msgid "Cynosure"
@@ -2226,11 +2282,10 @@ msgid ""
 "Draws a ball that periodically extrudes many random spikes. Ouch! Written by "
 "Jamie Zawinski."
 msgstr ""
 "Draws a ball that periodically extrudes many random spikes. Ouch! Written by "
 "Jamie Zawinski."
 msgstr ""
-"Dessine une balle qui se hérisse régulièrement de nombreux picots "
-"aléatoires. Ouille ! Écrit par Jamie Zawinski."
+"Dessine une balle qui se hérisse régulièrement de nombreux picots "
+"aléatoires. Ouille ! Écrit par Jamie Zawinski."
 
 #: hacks/config/dangerball.xml.h:7
 
 #: hacks/config/dangerball.xml.h:7
-#, fuzzy
 msgid "Spike Count"
 msgstr "Nombre de picots"
 
 msgid "Spike Count"
 msgstr "Nombre de picots"
 
@@ -2239,13 +2294,12 @@ msgid "Spike Growth"
 msgstr "Croissance des picots"
 
 #: hacks/config/decayscreen.xml.h:1
 msgstr "Croissance des picots"
 
 #: hacks/config/decayscreen.xml.h:1
-#, fuzzy
 msgid "DecayScreen"
 msgid "DecayScreen"
-msgstr "Écran fondu"
+msgstr "Écran fondu"
 
 #: hacks/config/decayscreen.xml.h:3
 msgid "Fuzzy Melt"
 
 #: hacks/config/decayscreen.xml.h:3
 msgid "Fuzzy Melt"
-msgstr "Fondu brouillé"
+msgstr "Fondu brouillé"
 
 #: hacks/config/decayscreen.xml.h:4
 msgid "Melt Away From Center"
 
 #: hacks/config/decayscreen.xml.h:4
 msgid "Melt Away From Center"
@@ -2264,12 +2318,10 @@ msgid "Melt Down, Right"
 msgstr "Fondu vers le bas et la droite"
 
 #: hacks/config/decayscreen.xml.h:8
 msgstr "Fondu vers le bas et la droite"
 
 #: hacks/config/decayscreen.xml.h:8
-#, fuzzy
 msgid "Melt Left"
 msgstr "Fondu vers la gauche"
 
 #: hacks/config/decayscreen.xml.h:9
 msgid "Melt Left"
 msgstr "Fondu vers la gauche"
 
 #: hacks/config/decayscreen.xml.h:9
-#, fuzzy
 msgid "Melt Right"
 msgstr "Fondu vers la droite"
 
 msgid "Melt Right"
 msgstr "Fondu vers la droite"
 
@@ -2294,19 +2346,19 @@ msgid "Melty Melt"
 msgstr "Fondu fondu"
 
 #: hacks/config/decayscreen.xml.h:15
 msgstr "Fondu fondu"
 
 #: hacks/config/decayscreen.xml.h:15
-#, fuzzy
 msgid "Random Melt Style"
 msgid "Random Melt Style"
-msgstr "Fondu aléatoire"
+msgstr "Fondu aléatoire"
 
 #: hacks/config/decayscreen.xml.h:16
 msgid "Shuffle Melt"
 
 #: hacks/config/decayscreen.xml.h:16
 msgid "Shuffle Melt"
-msgstr "Fondu mélangé"
+msgstr "Fondu mélangé"
 
 #: hacks/config/decayscreen.xml.h:19
 msgid "Stretchy Melt"
 
 #: hacks/config/decayscreen.xml.h:19
 msgid "Stretchy Melt"
-msgstr "Fondu étendu"
+msgstr "Fondu étendu"
 
 #: hacks/config/decayscreen.xml.h:20
 
 #: hacks/config/decayscreen.xml.h:20
+#, fuzzy
 msgid ""
 "This takes an image and makes it melt. You've no doubt seen this effect "
 "before, but no screensaver would really be complete without it. It works "
 msgid ""
 "This takes an image and makes it melt. You've no doubt seen this effect "
 "before, but no screensaver would really be complete without it. It works "
@@ -2314,15 +2366,15 @@ msgid ""
 "after the screen saver is off, seek medical attention. Written by David Wald "
 "and Vivek Khera."
 msgstr ""
 "after the screen saver is off, seek medical attention. Written by David Wald "
 "and Vivek Khera."
 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 "
+"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."
 
 #: hacks/config/deco.xml.h:3
 msgid "Deco"
 "David Wald et Vivek Khera."
 
 #: hacks/config/deco.xml.h:3
 msgid "Deco"
-msgstr "Déco"
+msgstr "Déco"
 
 #: hacks/config/deco.xml.h:6 hacks/config/menger.xml.h:5
 #: hacks/config/sierpinski3d.xml.h:4
 
 #: hacks/config/deco.xml.h:6 hacks/config/menger.xml.h:5
 #: hacks/config/sierpinski3d.xml.h:4
@@ -2340,10 +2392,10 @@ msgid ""
 "ugly enough to peel paint.'') Written by Jamie Zawinski, inspired by Java "
 "code by Michael Bayne."
 msgstr ""
 "ugly enough to peel paint.'') Written by Jamie Zawinski, inspired by Java "
 "code by Michael Bayne."
 msgstr ""
-"Subdivise et colore des rectangles de manière aléatoire. Ça 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."
+"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."
 
 #: hacks/config/deco.xml.h:11 hacks/config/rd-bomb.xml.h:23
 #: hacks/config/whirlygig.xml.h:7 hacks/config/xearth.xml.h:33
 
 #: hacks/config/deco.xml.h:11 hacks/config/rd-bomb.xml.h:23
 #: hacks/config/whirlygig.xml.h:7 hacks/config/xearth.xml.h:33
@@ -2362,23 +2414,22 @@ msgid ""
 "this be both: fast, and flicker-free. Yet another reason X sucks. Written by "
 "Jamie Zawinski."
 msgstr ""
 "this be both: fast, and flicker-free. Yet another reason X sucks. Written by "
 "Jamie Zawinski."
 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 "
+"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. "
 "de le rendre rapide sans scintillement. Encore un mauvais point pour X. "
-"Écrit par Jamie Zawinski."
+"Écrit par Jamie Zawinski."
 
 #: hacks/config/deluxe.xml.h:13
 msgid "Transparency"
 msgstr "Transparence"
 
 #: hacks/config/demon.xml.h:1
 
 #: hacks/config/deluxe.xml.h:13
 msgid "Transparency"
 msgstr "Transparence"
 
 #: hacks/config/demon.xml.h:1
-#, fuzzy
 msgid ""
 "A cellular automaton that starts with a random field, and organizes it into "
 "stripes and spirals. Written by David Bagley."
 msgstr ""
 msgid ""
 "A cellular automaton that starts with a random field, and organizes it into "
 "stripes and spirals. Written by David Bagley."
 msgstr ""
-"Automate cellulaire qui commence par un champ aléatoire et s'organise en "
-"bandes et spirales. Écrit par David Bagley."
+"Automate cellulaire qui commence par un champ aléatoire et s'organise en "
+"bandes et spirales. Écrit par David Bagley."
 
 #: hacks/config/demon.xml.h:2 hacks/config/petri.xml.h:1
 msgid "Cell Size"
 
 #: hacks/config/demon.xml.h:2 hacks/config/petri.xml.h:1
 msgid "Cell Size"
@@ -2386,11 +2437,11 @@ msgstr "Taille de cellule"
 
 #: hacks/config/demon.xml.h:3
 msgid "Demon"
 
 #: hacks/config/demon.xml.h:3
 msgid "Demon"
-msgstr "Démon"
+msgstr "Démon"
 
 #: hacks/config/demon.xml.h:11
 msgid "States"
 
 #: hacks/config/demon.xml.h:11
 msgid "States"
-msgstr "États"
+msgstr "États"
 
 #: hacks/config/discrete.xml.h:1
 msgid "Discrete"
 
 #: hacks/config/discrete.xml.h:1
 msgid "Discrete"
@@ -2401,8 +2452,8 @@ msgid ""
 "More ``discrete map'' systems, including new variants of Hopalong and Julia, "
 "and a few others. Written by Tim Auckland."
 msgstr ""
 "More ``discrete map'' systems, including new variants of Hopalong and Julia, "
 "and a few others. Written by Tim Auckland."
 msgstr ""
-"Autres systèmes de ''cartes discrètes'', comprenant de nouvelles variantes "
-"de Hopalong et Julia, ainsi que quelques autres. Écrit par Tim Auckland."
+"Autres systèmes de «cartes discrètes», comprenant de nouvelles variantes de "
+"Hopalong et Julia, ainsi que quelques autres. Écrit par Tim Auckland."
 
 #: hacks/config/distort.xml.h:1
 msgid "Black Hole"
 
 #: hacks/config/distort.xml.h:1
 msgid "Black Hole"
@@ -2435,7 +2486,7 @@ msgstr "Normal"
 
 #: hacks/config/distort.xml.h:10
 msgid "Reflect"
 
 #: hacks/config/distort.xml.h:10
 msgid "Reflect"
-msgstr "Réfléchir"
+msgstr "Réfléchir"
 
 #: hacks/config/distort.xml.h:14
 msgid "Swamp Thing"
 
 #: hacks/config/distort.xml.h:14
 msgid "Swamp Thing"
@@ -2447,15 +2498,15 @@ msgid ""
 "wander around the screen, magnifying whatever is underneath. Written by "
 "Jonas Munsin."
 msgstr ""
 "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."
+"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:15
 #: 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"
 
 #: hacks/config/distort.xml.h:16 hacks/config/moire.xml.h:12
 #: hacks/config/rd-bomb.xml.h:21 hacks/config/ripples.xml.h:15
 #: hacks/config/rotzoomer.xml.h:10 hacks/config/swirl.xml.h:10
 #: hacks/config/twang.xml.h:15 hacks/config/xflame.xml.h:7
 msgid "Use Shared Memory"
-msgstr "Utiliser une mémoire partagée"
+msgstr "Utiliser une mémoire partagée"
 
 #: hacks/config/distort.xml.h:17
 msgid "Vortex"
 
 #: hacks/config/distort.xml.h:17
 msgid "Vortex"
@@ -2463,16 +2514,15 @@ msgstr "Vortex"
 
 #: hacks/config/drift.xml.h:1
 msgid "Drift"
 
 #: hacks/config/drift.xml.h:1
 msgid "Drift"
-msgstr "Dérive"
+msgstr "Dérive"
 
 #: hacks/config/drift.xml.h:4
 
 #: hacks/config/drift.xml.h:4
-#, fuzzy
 msgid "Fractal Growth"
 msgstr "Croissance fractale"
 
 #: hacks/config/drift.xml.h:5
 msgid "High Dimensional Sphere"
 msgid "Fractal Growth"
 msgstr "Croissance fractale"
 
 #: hacks/config/drift.xml.h:5
 msgid "High Dimensional Sphere"
-msgstr "Sphère dimensionnelle"
+msgstr "Sphère dimensionnelle"
 
 #: hacks/config/drift.xml.h:6
 msgid ""
 
 #: hacks/config/drift.xml.h:6
 msgid ""
@@ -2480,9 +2530,8 @@ msgid ""
 "cosmic flames?'' Another fine hack from the Scott Draves collection of fine "
 "hacks."
 msgstr ""
 "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 ."
+"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"
 
 #: hacks/config/drift.xml.h:7
 msgid "Lissojous Figures"
@@ -2490,7 +2539,7 @@ msgstr "Figures Lissojous"
 
 #: hacks/config/electricsheep.xml.h:1
 msgid "ElectricSheep"
 
 #: hacks/config/electricsheep.xml.h:1
 msgid "ElectricSheep"
-msgstr "Mouton électrique"
+msgstr "Mouton électrique"
 
 #: hacks/config/electricsheep.xml.h:2
 msgid ""
 
 #: hacks/config/electricsheep.xml.h:2
 msgid ""
@@ -2510,17 +2559,17 @@ msgid ""
 msgstr ""
 
 #: hacks/config/endgame.xml.h:2
 msgstr ""
 
 #: hacks/config/endgame.xml.h:2
-#, fuzzy
 msgid "Endgame"
 msgid "Endgame"
-msgstr "Moteur"
+msgstr "Fin de jeux"
 
 #: hacks/config/engine.xml.h:1
 
 #: hacks/config/engine.xml.h:1
+#, fuzzy
 msgid ""
 "Draws a simple four-stroke engine that floats around the screen. Written by "
 "Ben Buxton."
 msgstr ""
 msgid ""
 "Draws a simple four-stroke engine that floats around the screen. Written by "
 "Ben Buxton."
 msgstr ""
-"Dessine un simple moteur à quatre temps qui flotte sur l'écran. Écrit par "
-"Ben Buxton."
+"Dessine un simple moteur à quatre temps qui flotte sur l'écran. Écrit par "
+"Ben Buxton et Ed Beroset."
 
 #: hacks/config/engine.xml.h:2
 msgid "Engine"
 
 #: hacks/config/engine.xml.h:2
 msgid "Engine"
@@ -2528,24 +2577,23 @@ msgstr "Moteur"
 
 #: hacks/config/epicycle.xml.h:4
 msgid "Epicycle"
 
 #: hacks/config/epicycle.xml.h:4
 msgid "Epicycle"
-msgstr "Épicycle"
+msgstr "Épicycle"
 
 #: hacks/config/epicycle.xml.h:6
 msgid "Harmonics"
 msgstr "Harmoniques"
 
 #: hacks/config/epicycle.xml.h:12
 
 #: hacks/config/epicycle.xml.h:6
 msgid "Harmonics"
 msgstr "Harmoniques"
 
 #: hacks/config/epicycle.xml.h:12
-#, fuzzy
 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 "
 "planetary motion. Written by James Youngman."
 msgstr ""
 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 "
 "planetary motion. Written by James Youngman."
 msgstr ""
-"Ce programme dessine le chemin tracé par un point sur le bord d'un cercle. "
+"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 "
 "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."
+"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."
 
 #: hacks/config/euler2d.xml.h:2
 msgid "Euler2d"
 
 #: hacks/config/euler2d.xml.h:2
 msgid "Euler2d"
@@ -2564,7 +2612,7 @@ msgid ""
 "Simulates two dimensional Incompressible Inviscid Fluid Flow. Written by "
 "Stephen Montgomery-Smith."
 msgstr ""
 "Simulates two dimensional Incompressible Inviscid Fluid Flow. Written by "
 "Stephen Montgomery-Smith."
 msgstr ""
-"Simule un flux fluide non-visqueux incompressible bidimensionnel. Écrit par "
+"Simule un flux fluide non-visqueux incompressible bidimensionnel. Écrit par "
 "Stephen Montgomery-Smith."
 
 #: hacks/config/extrusion.xml.h:1
 "Stephen Montgomery-Smith."
 
 #: hacks/config/extrusion.xml.h:1
@@ -2573,9 +2621,9 @@ msgid ""
 "inside out. Created by David Konerding from the samples that come with the "
 "GL Extrusion library by Linas Vepstas."
 msgstr ""
 "inside out. Created by David Konerding from the samples that come with the "
 "GL Extrusion library by Linas Vepstas."
 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."
+"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."
 
 #: hacks/config/extrusion.xml.h:2
 msgid "Extrusion"
 
 #: hacks/config/extrusion.xml.h:2
 msgid "Extrusion"
@@ -2583,43 +2631,39 @@ msgstr "Extrusion"
 
 #: hacks/config/extrusion.xml.h:4
 msgid "Helix 2"
 
 #: hacks/config/extrusion.xml.h:4
 msgid "Helix 2"
-msgstr "Hélice 2"
+msgstr "Hélice 2"
 
 #: hacks/config/extrusion.xml.h:5
 msgid "Helix 3"
 
 #: hacks/config/extrusion.xml.h:5
 msgid "Helix 3"
-msgstr "Hélice 3"
+msgstr "Hélice 3"
 
 #: hacks/config/extrusion.xml.h:6
 msgid "Helix 4"
 
 #: hacks/config/extrusion.xml.h:6
 msgid "Helix 4"
-msgstr "Hélice 4"
+msgstr "Hélice 4"
 
 #: hacks/config/extrusion.xml.h:7
 
 #: hacks/config/extrusion.xml.h:7
-#, fuzzy
 msgid "Join Offset"
 msgid "Join Offset"
-msgstr "Joindre décalage"
+msgstr "Décalage de jointure"
 
 #: hacks/config/extrusion.xml.h:8
 msgid "Random Object"
 
 #: hacks/config/extrusion.xml.h:8
 msgid "Random Object"
-msgstr "Objet aléatoire"
+msgstr "Objet aléatoire"
 
 #: hacks/config/extrusion.xml.h:9
 
 #: hacks/config/extrusion.xml.h:9
-#, fuzzy
 msgid "Screw"
 msgid "Screw"
-msgstr "Visser"
+msgstr "Vis"
 
 #: hacks/config/extrusion.xml.h:14
 msgid "Taper"
 
 #: hacks/config/extrusion.xml.h:14
 msgid "Taper"
-msgstr "Effiler"
+msgstr "Pic"
 
 #: hacks/config/extrusion.xml.h:15
 
 #: hacks/config/extrusion.xml.h:15
-#, fuzzy
 msgid "Texture Image"
 msgid "Texture Image"
-msgstr "Texture"
+msgstr "Image de texture"
 
 #: hacks/config/extrusion.xml.h:16
 
 #: hacks/config/extrusion.xml.h:16
-#, fuzzy
 msgid "Twistoid"
 msgid "Twistoid"
-msgstr "Torsion"
+msgstr "Twistoïd"
 
 #: hacks/config/extrusion.xml.h:17 hacks/config/glplanet.xml.h:9
 #: hacks/config/pulsar.xml.h:19
 
 #: hacks/config/extrusion.xml.h:17 hacks/config/glplanet.xml.h:9
 #: hacks/config/pulsar.xml.h:19
@@ -2628,19 +2672,17 @@ msgstr "Utiliser les couleurs en aplat"
 
 #: hacks/config/extrusion.xml.h:18 hacks/config/glplanet.xml.h:10
 msgid "Use Lighting"
 
 #: hacks/config/extrusion.xml.h:18 hacks/config/glplanet.xml.h:10
 msgid "Use Lighting"
-msgstr "Utiliser l'éclairage"
+msgstr "Utiliser l'éclairage"
 
 #: hacks/config/fadeplot.xml.h:2
 
 #: hacks/config/fadeplot.xml.h:2
-#, fuzzy
 msgid ""
 "Draws what looks like a waving ribbon following a sinusoidal path. Written "
 "by Bas van Gaalen and Charles Vidal."
 msgstr ""
 msgid ""
 "Draws what looks like a waving ribbon following a sinusoidal path. Written "
 "by Bas van Gaalen and Charles Vidal."
 msgstr ""
-"Dessine une sorte de ruban ondulant suivant un chemin sinusoïdal. Écrit par "
+"Dessine une sorte de ruban ondulant suivant un chemin sinusoïdal. Écrit par "
 "Bas van Gaalen et Charles Vidal."
 
 #: hacks/config/fadeplot.xml.h:3
 "Bas van Gaalen et Charles Vidal."
 
 #: hacks/config/fadeplot.xml.h:3
-#, fuzzy
 msgid "FadePlot"
 msgstr "FadePlot"
 
 msgid "FadePlot"
 msgstr "FadePlot"
 
@@ -2664,11 +2706,11 @@ msgid ""
 "``Bob,'' but you can replace the text or the image with a command-line "
 "option. Written by Charles Vidal and Jamie Zawinski."
 msgstr ""
 "``Bob,'' but you can replace the text or the image with a command-line "
 "option. Written by Charles Vidal and Jamie Zawinski."
 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."
+"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."
 
 #: hacks/config/flame.xml.h:1 hacks/config/jigsaw.xml.h:1
 #: hacks/config/maze.xml.h:1 hacks/config/rotzoomer.xml.h:1
 
 #: hacks/config/flame.xml.h:1 hacks/config/jigsaw.xml.h:1
 #: hacks/config/maze.xml.h:1 hacks/config/rotzoomer.xml.h:1
@@ -2682,11 +2724,11 @@ msgstr "10 secondes"
 
 #: hacks/config/flame.xml.h:3
 msgid "Another iterative fractal generator. Written by Scott Draves."
 
 #: 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."
+msgstr "Un autre générateur fractal itératif. Écrit par Scott Draves."
 
 #: hacks/config/flame.xml.h:4
 msgid "Complexity"
 
 #: hacks/config/flame.xml.h:4
 msgid "Complexity"
-msgstr "Complexité"
+msgstr "Complexité"
 
 #: hacks/config/flame.xml.h:8
 msgid "Flame"
 
 #: hacks/config/flame.xml.h:8
 msgid "Flame"
@@ -2697,9 +2739,8 @@ msgid "Number of Fractals"
 msgstr "Nombre de fractales"
 
 #: hacks/config/flipscreen3d.xml.h:2
 msgstr "Nombre de fractales"
 
 #: hacks/config/flipscreen3d.xml.h:2
-#, fuzzy
 msgid "Flipscreen3d"
 msgid "Flipscreen3d"
-msgstr "Écran retourné 3D"
+msgstr "Écran retourné 3D"
 
 #: hacks/config/flipscreen3d.xml.h:3
 msgid ""
 
 #: hacks/config/flipscreen3d.xml.h:3
 msgid ""
@@ -2716,8 +2757,8 @@ msgid ""
 "Another series of strange attractors: a flowing series of points, making "
 "strange rotational shapes. Written by Jeff Butterworth."
 msgstr ""
 "Another series of strange attractors: a flowing series of points, making "
 "strange rotational shapes. Written by Jeff Butterworth."
 msgstr ""
-"Une autre série d'attracteurs étranges : une série flottante de points, "
-"constituant d'étranges formes rotatives. Écrit par Jeff Butterworth."
+"Une autre série d'attracteurs étranges : une série flottante de points, "
+"constituant d'étranges formes rotatives. Écrit par Jeff Butterworth."
 
 #: hacks/config/flow.xml.h:5
 msgid "Flow"
 
 #: hacks/config/flow.xml.h:5
 msgid "Flow"
@@ -2729,7 +2770,7 @@ msgstr "Geler des abeilles"
 
 #: hacks/config/flow.xml.h:10
 msgid "Ride a Trained Bee"
 
 #: hacks/config/flow.xml.h:10
 msgid "Ride a Trained Bee"
-msgstr "Utiliser une abeille dressée"
+msgstr "Utiliser une abeille dressée"
 
 #: hacks/config/flow.xml.h:11
 msgid "Rotate Around Attractor"
 
 #: hacks/config/flow.xml.h:11
 msgid "Rotate Around Attractor"
@@ -2737,7 +2778,7 @@ msgstr "Tourner autour de l'attracteur"
 
 #: hacks/config/flow.xml.h:12
 msgid "Show Bounding Box"
 
 #: hacks/config/flow.xml.h:12
 msgid "Show Bounding Box"
-msgstr "Afficher une boîte bondissante"
+msgstr "Afficher une boîte bondissante"
 
 #: hacks/config/flow.xml.h:14
 msgid "Slow Bees with Antifreeze"
 
 #: hacks/config/flow.xml.h:14
 msgid "Slow Bees with Antifreeze"
@@ -2745,41 +2786,42 @@ msgstr "Ralentir les abeilles avec de l'antigel"
 
 #: hacks/config/flow.xml.h:19
 msgid "Zoom In and Out"
 
 #: hacks/config/flow.xml.h:19
 msgid "Zoom In and Out"
-msgstr "Zoom avant et arrière"
+msgstr "Zoom avant et arrière"
 
 #: hacks/config/fluidballs.xml.h:1
 msgid "Ball Size"
 msgstr "Taille des balles"
 
 #: hacks/config/fluidballs.xml.h:5
 
 #: hacks/config/fluidballs.xml.h:1
 msgid "Ball Size"
 msgstr "Taille des balles"
 
 #: hacks/config/fluidballs.xml.h:5
-#, fuzzy
 msgid "FluidBalls"
 msgid "FluidBalls"
-msgstr "Balles"
+msgstr "Balles fluides"
 
 #: hacks/config/fluidballs.xml.h:6
 
 #: hacks/config/fluidballs.xml.h:6
+#, fuzzy
 msgid "Freefall"
 msgid "Freefall"
-msgstr ""
+msgstr "Chute libre"
 
 #: hacks/config/fluidballs.xml.h:7 hacks/config/twang.xml.h:4
 msgid "Friction"
 msgstr "Friction"
 
 #: hacks/config/fluidballs.xml.h:8
 
 #: hacks/config/fluidballs.xml.h:7 hacks/config/twang.xml.h:4
 msgid "Friction"
 msgstr "Friction"
 
 #: hacks/config/fluidballs.xml.h:8
+#, fuzzy
 msgid "Glass"
 msgid "Glass"
-msgstr ""
+msgstr "Classique"
 
 #: hacks/config/fluidballs.xml.h:9 hacks/config/qix.xml.h:9
 #: hacks/config/speedmine.xml.h:4
 msgid "Gravity"
 
 #: hacks/config/fluidballs.xml.h:9 hacks/config/qix.xml.h:9
 #: hacks/config/speedmine.xml.h:4
 msgid "Gravity"
-msgstr "Gravité"
+msgstr "Gravité"
 
 #: hacks/config/fluidballs.xml.h:10
 msgid "Hurricane"
 
 #: hacks/config/fluidballs.xml.h:10
 msgid "Hurricane"
-msgstr ""
+msgstr "Ouragan"
 
 #: hacks/config/fluidballs.xml.h:11
 msgid "Jupiter"
 
 #: hacks/config/fluidballs.xml.h:11
 msgid "Jupiter"
-msgstr ""
+msgstr "Jupiter"
 
 #: hacks/config/fluidballs.xml.h:14
 msgid ""
 
 #: hacks/config/fluidballs.xml.h:14
 msgid ""
@@ -2790,14 +2832,12 @@ msgid ""
 msgstr ""
 
 #: hacks/config/fluidballs.xml.h:15
 msgstr ""
 
 #: hacks/config/fluidballs.xml.h:15
-#, fuzzy
 msgid "Sandpaper"
 msgid "Sandpaper"
-msgstr "Errance"
+msgstr "Papier abrasif"
 
 #: hacks/config/fluidballs.xml.h:16
 
 #: hacks/config/fluidballs.xml.h:16
-#, fuzzy
 msgid "Shake Box"
 msgid "Shake Box"
-msgstr "ShadeBobs"
+msgstr "Remuer la boîte"
 
 #: hacks/config/fluidballs.xml.h:21 hacks/config/glforestfire.xml.h:16
 msgid "Still"
 
 #: hacks/config/fluidballs.xml.h:21 hacks/config/glforestfire.xml.h:16
 msgid "Still"
@@ -2805,7 +2845,7 @@ msgstr "Tranquille"
 
 #: hacks/config/fluidballs.xml.h:22
 msgid "Various Ball Sizes"
 
 #: hacks/config/fluidballs.xml.h:22
 msgid "Various Ball Sizes"
-msgstr ""
+msgstr "Taille des balles variée"
 
 #: hacks/config/fluidballs.xml.h:23
 msgid "Wind"
 
 #: hacks/config/fluidballs.xml.h:23
 msgid "Wind"
@@ -2813,15 +2853,15 @@ msgstr "Vent"
 
 #: hacks/config/forest.xml.h:2 hacks/config/glforestfire.xml.h:6
 msgid "Forest"
 
 #: hacks/config/forest.xml.h:2 hacks/config/glforestfire.xml.h:6
 msgid "Forest"
-msgstr "Forêt"
+msgstr "Forêt"
 
 #: hacks/config/forest.xml.h:7
 msgid ""
 "This draws fractal trees. Written by Peter Baumung. Everybody loves "
 "fractals, right?"
 msgstr ""
 
 #: hacks/config/forest.xml.h:7
 msgid ""
 "This draws fractal trees. Written by Peter Baumung. Everybody loves "
 "fractals, right?"
 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. Tout le monde aime les "
+"fractales, n'est-ce pas ?"
 
 #: hacks/config/galaxy.xml.h:4
 msgid "Galaxy"
 
 #: hacks/config/galaxy.xml.h:4
 msgid "Galaxy"
@@ -2842,7 +2882,7 @@ msgid ""
 "Siegmund."
 msgstr ""
 "Dessine des galaxies tournoyantes, qui entrent en collision et dispersent "
 "Siegmund."
 msgstr ""
 "Dessine des galaxies tournoyantes, qui entrent en collision et dispersent "
-"leurs étoiles aux quatre vents (en quelque sorte). Initialement un programme "
+"leurs étoiles aux quatre vents (en quelque sorte). Initialement un programme "
 "Amiga d'Uli Siegmund."
 
 #: hacks/config/gears.xml.h:3
 "Amiga d'Uli Siegmund."
 
 #: hacks/config/gears.xml.h:3
@@ -2851,11 +2891,11 @@ msgstr "Engrenages"
 
 #: hacks/config/gears.xml.h:4
 msgid "Planetary Gear System"
 
 #: hacks/config/gears.xml.h:4
 msgid "Planetary Gear System"
-msgstr "Train d'engrenages planétaires"
+msgstr "Train d'engrenages planétaires"
 
 #: hacks/config/gears.xml.h:5 hacks/config/goop.xml.h:9
 msgid "Rotational Speed"
 
 #: hacks/config/gears.xml.h:5 hacks/config/goop.xml.h:9
 msgid "Rotational Speed"
-msgstr "Vitesse drotationnel"
+msgstr "Vitesse de rotation"
 
 #: hacks/config/gears.xml.h:9
 msgid ""
 
 #: hacks/config/gears.xml.h:9
 msgid ""
@@ -2863,16 +2903,16 @@ msgid ""
 "dimensions. Another GL hack, by Danny Sung, Brian Paul, Ed Mackey, and Jamie "
 "Zawinski."
 msgstr ""
 "dimensions. Another GL hack, by Danny Sung, Brian Paul, Ed Mackey, and Jamie "
 "Zawinski."
 msgstr ""
-"Dessine des engrenages qui s'emboîtent et pivotent en trois dimensions. Un "
+"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."
 
 #: hacks/config/gears.xml.h:10
 msgid "Three Gear System"
 "autre hack GL de Danny Sung, Brian Paul, Ed Mackey et Jamie Zawinski."
 
 #: hacks/config/gears.xml.h:10
 msgid "Three Gear System"
-msgstr "Système à trois engrenages"
+msgstr "Système à trois engrenages"
 
 #: hacks/config/gflux.xml.h:2
 msgid "Checkerboard"
 
 #: hacks/config/gflux.xml.h:2
 msgid "Checkerboard"
-msgstr "Échiquier"
+msgstr "Échiquier"
 
 #: hacks/config/gflux.xml.h:5
 msgid ""
 
 #: hacks/config/gflux.xml.h:5
 msgid ""
@@ -2880,25 +2920,23 @@ msgid ""
 "Josiah Pease."
 msgstr ""
 "Dessine des vagues ondulantes sur une grille en rotation en utilisant GL. "
 "Josiah Pease."
 msgstr ""
 "Dessine des vagues ondulantes sur une grille en rotation en utilisant GL. "
-"Écrit par Josiah Pease."
+"Écrit par Josiah Pease."
 
 #: hacks/config/gflux.xml.h:7
 msgid "Flat Lighting"
 
 #: hacks/config/gflux.xml.h:7
 msgid "Flat Lighting"
-msgstr "Éclairage plat"
+msgstr "Éclairage plat"
 
 #: hacks/config/gflux.xml.h:8
 msgid "GFlux"
 msgstr "GFlux"
 
 #: hacks/config/gflux.xml.h:9
 
 #: hacks/config/gflux.xml.h:8
 msgid "GFlux"
 msgstr "GFlux"
 
 #: hacks/config/gflux.xml.h:9
-#, fuzzy
 msgid "Mesh Density"
 msgid "Mesh Density"
-msgstr "Densité de maille"
+msgstr "Densité de maille"
 
 #: hacks/config/gflux.xml.h:10
 
 #: hacks/config/gflux.xml.h:10
-#, fuzzy
 msgid "Screen Image"
 msgid "Screen Image"
-msgstr "Image écran"
+msgstr "Image écran"
 
 #: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:18
 msgid "Wave Speed"
 
 #: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:18
 msgid "Wave Speed"
@@ -2914,7 +2952,7 @@ msgstr "Grille en fil de fer"
 
 #: hacks/config/glforestfire.xml.h:2
 msgid "Desert"
 
 #: hacks/config/glforestfire.xml.h:2
 msgid "Desert"
-msgstr "Désert"
+msgstr "Désert"
 
 #: hacks/config/glforestfire.xml.h:3
 msgid ""
 
 #: hacks/config/glforestfire.xml.h:3
 msgid ""
@@ -2928,12 +2966,10 @@ msgid "Fog"
 msgstr "Brouillard"
 
 #: hacks/config/glforestfire.xml.h:7
 msgstr "Brouillard"
 
 #: hacks/config/glforestfire.xml.h:7
-#, fuzzy
 msgid "GLForestFire"
 msgid "GLForestFire"
-msgstr "Feu de forêt GL"
+msgstr "Feu de forêt GL"
 
 #: hacks/config/glforestfire.xml.h:8
 
 #: hacks/config/glforestfire.xml.h:8
-#, fuzzy
 msgid "Huge Fire"
 msgstr "Grand incendie"
 
 msgid "Huge Fire"
 msgstr "Grand incendie"
 
@@ -2965,14 +3001,14 @@ msgid ""
 "wrap any texture around the sphere, e.g., the planetary textures that come "
 "with `ssystem'."
 msgstr ""
 "wrap any texture around the sphere, e.g., the planetary textures that come "
 "with `ssystem'."
 msgstr ""
-"Dessine une planète qui rebondit dans l'espace. Écrit par David Konerding. "
-"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'."
+"Dessine une planète qui rebondit dans l'espace. Écrit par David Konerding. "
+"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»."
 
 #: hacks/config/glplanet.xml.h:3
 msgid "GLPlanet"
 
 #: hacks/config/glplanet.xml.h:3
 msgid "GLPlanet"
-msgstr "Planète GL"
+msgstr "Planète GL"
 
 #: hacks/config/glplanet.xml.h:4
 msgid "Image File"
 
 #: hacks/config/glplanet.xml.h:4
 msgid "Image File"
@@ -2991,7 +3027,7 @@ msgid ""
 "Draws a simulation of the Rubik's Snake puzzle. Written by Jamie Wilkinson, "
 "Andrew Bennetts, and Peter Aylett."
 msgstr ""
 "Draws a simulation of the Rubik's Snake puzzle. Written by Jamie Wilkinson, "
 "Andrew Bennetts, and Peter Aylett."
 msgstr ""
-"Dessine une simulation du serpent Rubik. Écrit par Jamie Wilkinson, Andrew "
+"Dessine une simulation du serpent Rubik. Écrit par Jamie Wilkinson, Andrew "
 "Bennetts et Peter Aylett."
 
 #: hacks/config/glsnake.xml.h:6
 "Bennetts et Peter Aylett."
 
 #: hacks/config/glsnake.xml.h:6
@@ -2999,32 +3035,28 @@ msgid "GlSnake"
 msgstr "Serpent GL"
 
 #: hacks/config/glsnake.xml.h:7
 msgstr "Serpent GL"
 
 #: hacks/config/glsnake.xml.h:7
-#, fuzzy
 msgid "Loose"
 msgid "Loose"
-msgstr "Étendu"
+msgstr "Étendu"
 
 #: hacks/config/glsnake.xml.h:8
 
 #: hacks/config/glsnake.xml.h:8
-#, fuzzy
 msgid "Packing"
 msgstr "En boule"
 
 #: hacks/config/glsnake.xml.h:9
 msgid "Packing"
 msgstr "En boule"
 
 #: hacks/config/glsnake.xml.h:9
-#, fuzzy
 msgid "Scary Colors"
 msgstr "Couleurs effrayantes"
 
 #: hacks/config/glsnake.xml.h:11
 msgid "Show Labels"
 msgid "Scary Colors"
 msgstr "Couleurs effrayantes"
 
 #: hacks/config/glsnake.xml.h:11
 msgid "Show Labels"
-msgstr "Afficher les étiquettes"
+msgstr "Afficher les étiquettes"
 
 #: hacks/config/glsnake.xml.h:14
 
 #: hacks/config/glsnake.xml.h:14
-#, fuzzy
 msgid "Tight"
 msgid "Tight"
-msgstr "Serré"
+msgstr "Serré"
 
 #: hacks/config/glsnake.xml.h:15 hacks/config/rocks.xml.h:13
 msgid "Velocity"
 
 #: hacks/config/glsnake.xml.h:15 hacks/config/rocks.xml.h:13
 msgid "Velocity"
-msgstr "Vélocité"
+msgstr "Vélocité"
 
 #: hacks/config/glsnake.xml.h:17
 msgid "Y Rotation"
 
 #: hacks/config/glsnake.xml.h:17
 msgid "Y Rotation"
@@ -3040,7 +3072,7 @@ msgid ""
 "Jamie Zawinski."
 msgstr ""
 "Affiche quelques lignes de texte qui tournoient dans une police 3D unie. "
 "Jamie Zawinski."
 msgstr ""
 "Affiche quelques lignes de texte qui tournoient dans une police 3D unie. "
-"Écrit par Jamie Zawinski."
+"Écrit par Jamie Zawinski."
 
 #: hacks/config/gltext.xml.h:4
 msgid "GLText"
 
 #: hacks/config/gltext.xml.h:4
 msgid "GLText"
@@ -3062,16 +3094,15 @@ msgstr ""
 
 #: hacks/config/goop.xml.h:1
 msgid "Additive Colors (reflected light)"
 
 #: hacks/config/goop.xml.h:1
 msgid "Additive Colors (reflected light)"
-msgstr "Couleurs additives (lumière réfléchie)"
+msgstr "Couleurs additives (lumière réfléchie)"
 
 #: hacks/config/goop.xml.h:2
 
 #: hacks/config/goop.xml.h:2
-#, fuzzy
 msgid "Blob Count"
 msgstr "Nombre de taches"
 
 #: hacks/config/goop.xml.h:3
 msgid "Elasticity"
 msgid "Blob Count"
 msgstr "Nombre de taches"
 
 #: hacks/config/goop.xml.h:3
 msgid "Elasticity"
-msgstr "Élasticité"
+msgstr "Élasticité"
 
 #: hacks/config/goop.xml.h:5
 msgid "Goop"
 
 #: hacks/config/goop.xml.h:5
 msgid "Goop"
@@ -3087,7 +3118,7 @@ msgstr "Vitesse limite"
 
 #: hacks/config/goop.xml.h:13
 msgid "Subtractive Colors (transmitted light)"
 
 #: hacks/config/goop.xml.h:13
 msgid "Subtractive Colors (transmitted light)"
-msgstr "Couleurs soustractives (lumière transmise)"
+msgstr "Couleurs soustractives (lumière transmise)"
 
 #: hacks/config/goop.xml.h:14
 msgid ""
 
 #: hacks/config/goop.xml.h:14
 msgid ""
@@ -3099,47 +3130,43 @@ msgid ""
 "effect in real life by having several layers plastic with colored oil "
 "between them. Written by Jamie Zawinski."
 msgstr ""
 "effect in real life by having several layers plastic with colored oil "
 "between them. Written by Jamie Zawinski."
 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 "
+"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 "
 "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 "
-"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."
+"couleurs fusionnent. Écrit par Jamie Zawinski. 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. "
+"Écrit par Jamie Zawinski."
 
 #: hacks/config/goop.xml.h:15
 
 #: hacks/config/goop.xml.h:15
-#, fuzzy
 msgid "Transparent Blobs"
 msgstr "Taches transparentes"
 
 #: hacks/config/goop.xml.h:16
 msgid "Transparent Blobs"
 msgstr "Taches transparentes"
 
 #: hacks/config/goop.xml.h:16
-#, fuzzy
 msgid "XOR Blobs"
 msgstr "Taches XOR"
 
 #: hacks/config/grav.xml.h:3
 msgid "Grav"
 msgid "XOR Blobs"
 msgstr "Taches XOR"
 
 #: hacks/config/grav.xml.h:3
 msgid "Grav"
-msgstr "Gravité"
+msgstr "Gravité"
 
 #: hacks/config/grav.xml.h:6
 
 #: hacks/config/grav.xml.h:6
-#, fuzzy
 msgid "Object Trails"
 msgid "Object Trails"
-msgstr "Traînées d'objets"
+msgstr "Traînées d'objets"
 
 #: hacks/config/grav.xml.h:7
 
 #: hacks/config/grav.xml.h:7
-#, fuzzy
 msgid "Orbital Decay"
 msgid "Orbital Decay"
-msgstr "Désintégration orbitale"
+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 "
 "looks kind of like a cloud-chamber photograph. Written by Greg Bowering."
 msgstr ""
 
 #: 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."
 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."
+"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."
 
 #: hacks/config/greynetic.xml.h:2
 msgid "Greynetic"
 
 #: hacks/config/greynetic.xml.h:2
 msgid "Greynetic"
@@ -3149,13 +3176,12 @@ msgstr "Rectangles de couleur"
 msgid ""
 "This draws random colored and stippled rectangles. Written by Jamie Zawinski."
 msgstr ""
 msgid ""
 "This draws random colored and stippled rectangles. Written by Jamie Zawinski."
 msgstr ""
-"Dessine des rectangles colorés et pointillés de manière aléatoire. Écrit par "
+"Dessine des rectangles colorés et pointillés de manière aléatoire. Écrit par "
 "Jamie Zawinski."
 
 #: hacks/config/halo.xml.h:1
 "Jamie Zawinski."
 
 #: hacks/config/halo.xml.h:1
-#, fuzzy
 msgid "Animate Circles"
 msgid "Animate Circles"
-msgstr "Cercles animés"
+msgstr "Cercles animés"
 
 #: hacks/config/halo.xml.h:3
 msgid "Halo"
 
 #: hacks/config/halo.xml.h:3
 msgid "Halo"
@@ -3167,7 +3193,7 @@ msgstr "Nombre de cercles"
 
 #: hacks/config/halo.xml.h:7 hacks/config/imsmap.xml.h:11
 msgid "Random Mode"
 
 #: hacks/config/halo.xml.h:7 hacks/config/imsmap.xml.h:11
 msgid "Random Mode"
-msgstr "Mode aléatoire"
+msgstr "Mode aléatoire"
 
 #: hacks/config/halo.xml.h:8
 msgid "Seuss Mode"
 
 #: hacks/config/halo.xml.h:8
 msgid "Seuss Mode"
@@ -3179,19 +3205,19 @@ msgid ""
 "also animate the control-points, but that takes a lot of CPU and bandwidth. "
 "Written by Jamie Zawinski."
 msgstr ""
 "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."
+"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"
 
 #: hacks/config/helix.xml.h:4
 msgid "Helix"
-msgstr "Hélice"
+msgstr "Hélix"
 
 #: hacks/config/helix.xml.h:5
 msgid ""
 "This repeatedly generates spirally string-art-ish patterns. Written by Jamie "
 "Zawinski."
 
 #: 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."
+msgstr "Génère de nombreux motifs en spirale. Écrit par Jamie Zawinski."
 
 #: hacks/config/hopalong.xml.h:3
 msgid "EJK1"
 
 #: hacks/config/hopalong.xml.h:3
 msgid "EJK1"
@@ -3219,7 +3245,7 @@ msgstr "EJK6"
 
 #: hacks/config/hopalong.xml.h:11
 msgid "Hopalong"
 
 #: hacks/config/hopalong.xml.h:11
 msgid "Hopalong"
-msgstr "Cercles psychédéliques"
+msgstr "Cercles psychédéliques"
 
 #: hacks/config/hopalong.xml.h:12
 msgid "Jong"
 
 #: hacks/config/hopalong.xml.h:12
 msgid "Jong"
@@ -3246,9 +3272,9 @@ msgid ""
 "This draws lacy fractal patterns, based on iteration in the imaginary plane, "
 "from a 1986 Scientific American article. Mostly written by Patrick Naughton."
 msgstr ""
 "This draws lacy fractal patterns, based on iteration in the imaginary plane, "
 "from a 1986 Scientific American article. Mostly written by Patrick Naughton."
 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."
+"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."
 
 #: hacks/config/hyperball.xml.h:1 hacks/config/hypercube.xml.h:1
 msgid "Far"
 
 #: hacks/config/hyperball.xml.h:1 hacks/config/hypercube.xml.h:1
 msgid "Far"
@@ -3264,9 +3290,9 @@ msgid ""
 "projection of the sequence of 3D objects which are the projections of the 4D "
 "analog to the dodecahedron. Written by Joe Keane."
 msgstr ""
 "projection of the sequence of 3D objects which are the projections of the 4D "
 "analog to the dodecahedron. Written by Joe Keane."
 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'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."
 
 #: hacks/config/hyperball.xml.h:7 hacks/config/hypercube.xml.h:6
 msgid "Near"
 
 #: hacks/config/hyperball.xml.h:7 hacks/config/hypercube.xml.h:6
 msgid "Near"
@@ -3315,35 +3341,34 @@ msgid ""
 "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."
 msgstr ""
 "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."
 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 "
-"lignes, chacune touchant les deux autres ; un cube est composé de six "
-"carrés,  chacun touchant les quatre autres et un hypercube est composé de "
+"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 "
+"lignes, chacune touchant les deux autres; un cube est composé de six "
+"carrés,  chacun touchant les quatre autres et un hypercube est composé de "
 "huit cubes,  chacun touchant les six autres. Pour visualiser la rotation "
 "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."
+"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."
 
 #: hacks/config/ifs.xml.h:2
 msgid "IFS"
 
 #: hacks/config/ifs.xml.h:2
 msgid "IFS"
-msgstr "SFI"
+msgstr "IFS"
 
 #: hacks/config/ifs.xml.h:7
 
 #: hacks/config/ifs.xml.h:7
-#, fuzzy
 msgid ""
 "This one draws spinning, colliding iterated-function-system images. Written "
 "by Massimino Pascal."
 msgstr ""
 msgid ""
 "This one draws spinning, colliding iterated-function-system images. Written "
 "by Massimino Pascal."
 msgstr ""
-"Dessine des images de système de fonctions itérées, qui tournent et entrent "
-"en collision. Écrit par Massimino Pascal."
+"Dessine des images de système de fonctions itérées, qui tournent et entrent "
+"en collision. Écrit par Massimino Pascal."
 
 #: hacks/config/imsmap.xml.h:3
 msgid "Brightness Gradients"
 
 #: hacks/config/imsmap.xml.h:3
 msgid "Brightness Gradients"
-msgstr "Dégradés de luminosité"
+msgstr "Dégradés de luminosité"
 
 #: hacks/config/imsmap.xml.h:7
 msgid "Hue Gradients"
 
 #: hacks/config/imsmap.xml.h:7
 msgid "Hue Gradients"
-msgstr "Dégradés de teinte"
+msgstr "Dégradés de teinte"
 
 #: hacks/config/imsmap.xml.h:8
 msgid "IMSmap"
 
 #: hacks/config/imsmap.xml.h:8
 msgid "IMSmap"
@@ -3351,7 +3376,7 @@ msgstr "IMSmap"
 
 #: hacks/config/imsmap.xml.h:12
 msgid "Saturation Gradients"
 
 #: hacks/config/imsmap.xml.h:12
 msgid "Saturation Gradients"
-msgstr "Dégradés de saturation"
+msgstr "Dégradés de saturation"
 
 #: hacks/config/imsmap.xml.h:14
 msgid ""
 
 #: hacks/config/imsmap.xml.h:14
 msgid ""
@@ -3366,17 +3391,17 @@ msgid ""
 "to generate images that look like heat-maps or CAT-scans. Written by Juergen "
 "Nickelsen and Jamie Zawinski."
 msgstr ""
 "to generate images that look like heat-maps or CAT-scans. Written by Juergen "
 "Nickelsen and Jamie Zawinski."
 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 "
-"points sur le bord de l'image et à leur attribuer une ''élévation'' "
-"aléatoire. Ensuite, il trouve le point situé entre eux et lui attribue une "
-"valeur qui correspond à la moyenne des quatre autres, plus un petit décalage "
-"aléatoire. 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."
+"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 "
+"points sur le bord de l'image et à leur attribuer une 'élévation' aléatoire. "
+"Ensuite, il trouve le point situé entre eux et lui attribue une valeur qui "
+"correspond à la moyenne des quatre autres, plus un petit décalage aléatoire. "
+"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."
 
 #: hacks/config/interference.xml.h:1
 msgid "Anim Speed"
 
 #: hacks/config/interference.xml.h:1
 msgid "Anim Speed"
@@ -3388,14 +3413,14 @@ msgid ""
 "waves, and allowing them to interfere with each other as their origins move. "
 "Written by Hannu Mallat."
 msgstr ""
 "waves, and allowing them to interfere with each other as their origins move. "
 "Written by Hannu Mallat."
 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 "
+"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:7
 msgid "Interference"
 "Mallat."
 
 #: hacks/config/interference.xml.h:7
 msgid "Interference"
-msgstr "Interférences"
+msgstr "Interférences"
 
 #: hacks/config/interference.xml.h:10 hacks/config/t3d.xml.h:9
 #: hacks/config/xearth.xml.h:11 hacks/config/zoom.xml.h:5
 
 #: hacks/config/interference.xml.h:10 hacks/config/t3d.xml.h:9
 #: hacks/config/xearth.xml.h:11 hacks/config/zoom.xml.h:5
@@ -3416,7 +3441,7 @@ msgstr "Puzzle"
 
 #: hacks/config/jigsaw.xml.h:6
 msgid "Solved Duration"
 
 #: hacks/config/jigsaw.xml.h:6
 msgid "Solved Duration"
-msgstr "Durée de résolution"
+msgstr "Durée de résolution"
 
 #: hacks/config/jigsaw.xml.h:8
 msgid ""
 
 #: hacks/config/jigsaw.xml.h:8
 msgid ""
@@ -3427,20 +3452,20 @@ msgid ""
 "sometimes pretty hard to guess what the image is going to look like once the "
 "puzzle is solved. Written by Jamie Zawinski."
 msgstr ""
 "sometimes pretty hard to guess what the image is going to look like once the "
 "puzzle is solved. Written by Jamie Zawinski."
 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 "
+"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 "
 "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."
 
 #: hacks/config/juggle.xml.h:1
 msgid "Checkered Balls"
 
 #: hacks/config/juggle.xml.h:1
 msgid "Checkered Balls"
-msgstr "Balles à damiers"
+msgstr "Balles à damiers"
 
 #: hacks/config/juggle.xml.h:2
 msgid "Draws a juggling stick-man. Written by Tim Auckland."
 
 #: hacks/config/juggle.xml.h:2
 msgid "Draws a juggling stick-man. Written by Tim Auckland."
-msgstr "Dessine un bonhomme jongleur. Écrit par Tim Auckland."
+msgstr "Dessine un bonhomme jongleur. Écrit par Tim Auckland."
 
 #: hacks/config/juggle.xml.h:4
 msgid "Juggle"
 
 #: hacks/config/juggle.xml.h:4
 msgid "Juggle"
@@ -3452,7 +3477,7 @@ msgstr "Aucun"
 
 #: hacks/config/julia.xml.h:3 hacks/config/rorschach.xml.h:4
 msgid "Iterations"
 
 #: hacks/config/julia.xml.h:3 hacks/config/rorschach.xml.h:4
 msgid "Iterations"
-msgstr "Itérations"
+msgstr "Itérations"
 
 #: hacks/config/julia.xml.h:4
 msgid "Julia"
 
 #: hacks/config/julia.xml.h:4
 msgid "Julia"
@@ -3467,12 +3492,12 @@ msgid ""
 "the image, which indicates the control point from which the rest of the "
 "image was generated. Written by Sean McCullough."
 msgstr ""
 "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."
+"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
 msgid ""
 
 #: hacks/config/kaleidescope.xml.h:1
 msgid ""
@@ -3481,15 +3506,15 @@ msgid ""
 "think it needs more solids, or perhaps just brighter colors. More variations "
 "in the rotational speed might help, too."
 msgstr ""
 "think it needs more solids, or perhaps just brighter colors. More variations "
 "in the rotational speed might help, too."
 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 "
+"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 "
 "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."
+"rotation seraient aussi appréciables."
 
 #: hacks/config/kaleidescope.xml.h:4
 msgid "Kaleidescope"
 
 #: hacks/config/kaleidescope.xml.h:4
 msgid "Kaleidescope"
-msgstr "Kaleïdoscope"
+msgstr "Kaleïdoscope"
 
 #: hacks/config/kaleidescope.xml.h:6 hacks/config/qix.xml.h:18
 msgid "Segments"
 
 #: hacks/config/kaleidescope.xml.h:6 hacks/config/qix.xml.h:18
 msgid "Segments"
@@ -3497,11 +3522,11 @@ msgstr "Segments"
 
 #: hacks/config/kaleidescope.xml.h:9
 msgid "Symmetry"
 
 #: hacks/config/kaleidescope.xml.h:9
 msgid "Symmetry"
-msgstr "Symétrie"
+msgstr "Symétrie"
 
 #: hacks/config/kaleidescope.xml.h:10
 msgid "Trails"
 
 #: hacks/config/kaleidescope.xml.h:10
 msgid "Trails"
-msgstr "Traînées"
+msgstr "Traînées"
 
 #: hacks/config/kumppa.xml.h:5
 msgid "Kumppa"
 
 #: hacks/config/kumppa.xml.h:5
 msgid "Kumppa"
@@ -3509,15 +3534,15 @@ msgstr "Kumppa"
 
 #: hacks/config/kumppa.xml.h:7
 msgid "Randomize"
 
 #: hacks/config/kumppa.xml.h:7
 msgid "Randomize"
-msgstr "Aléatoire"
+msgstr "Aléatoire"
 
 #: hacks/config/kumppa.xml.h:10
 msgid ""
 "Spiraling, spinning, and very, very fast splashes of color rush toward the "
 "screen. Written by Teemu Suutari."
 msgstr ""
 
 #: hacks/config/kumppa.xml.h:10
 msgid ""
 "Spiraling, spinning, and very, very fast splashes of color rush toward the "
 "screen. Written by Teemu Suutari."
 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."
+"Des taches de couleur très, très rapides foncent vers l'écran en tournoyant "
+"et en formant des spirales. Écrit par Teemu Suutari."
 
 #: hacks/config/lament.xml.h:1
 msgid ""
 
 #: hacks/config/lament.xml.h:1
 msgid ""
@@ -3525,9 +3550,9 @@ msgid ""
 "Requires OpenGL, and a machine with fast hardware support for texture maps. "
 "Warning: occasionally opens doors. Written by Jamie Zawinski."
 msgstr ""
 "Requires OpenGL, and a machine with fast hardware support for texture maps. "
 "Warning: occasionally opens doors. Written by Jamie Zawinski."
 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. Attension : risque d'ouvrir des portes. Écrit par Jamie "
+"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. Attension : risque d'ouvrir des portes. Écrit par Jamie "
 "Zawinski."
 
 #: hacks/config/lament.xml.h:3
 "Zawinski."
 
 #: hacks/config/lament.xml.h:3
@@ -3543,8 +3568,8 @@ msgid ""
 "Moving radiating lines, that look vaguely like scanning laser beams. Written "
 "by Pascal Pensa. (Frankie say: relax.)"
 msgstr ""
 "Moving radiating lines, that look vaguely like scanning laser beams. Written "
 "by Pascal Pensa. (Frankie say: relax.)"
 msgstr ""
-"Lignes de radiation animées, qui ressemblent vaguement à des faisceaux laser "
-"de lecture. Écrit par Pascal Pensa. (Frankie a dit : relax.)"
+"Lignes de radiation animées, qui ressemblent vaguement à des faisceaux "
+"laser . Écrit par Pascal Pensa. (Frankie a dit : relax.)"
 
 #: hacks/config/lavalite.xml.h:2
 msgid "10"
 
 #: hacks/config/lavalite.xml.h:2
 msgid "10"
@@ -3552,15 +3577,15 @@ msgstr "10"
 
 #: hacks/config/lavalite.xml.h:3
 msgid "Activity"
 
 #: hacks/config/lavalite.xml.h:3
 msgid "Activity"
-msgstr ""
+msgstr "Activité"
 
 #: hacks/config/lavalite.xml.h:4
 msgid "Classic Lavalite"
 
 #: hacks/config/lavalite.xml.h:4
 msgid "Classic Lavalite"
-msgstr ""
+msgstr "Lavalite classique"
 
 #: hacks/config/lavalite.xml.h:5
 msgid "Cone Lavalite"
 
 #: hacks/config/lavalite.xml.h:5
 msgid "Cone Lavalite"
-msgstr ""
+msgstr "Lavalite conique"
 
 #: hacks/config/lavalite.xml.h:8
 msgid ""
 
 #: hacks/config/lavalite.xml.h:8
 msgid ""
@@ -3576,49 +3601,47 @@ msgstr ""
 
 #: hacks/config/lavalite.xml.h:9
 msgid "Faceted"
 
 #: hacks/config/lavalite.xml.h:9
 msgid "Faceted"
-msgstr ""
+msgstr "A facette"
 
 #: hacks/config/lavalite.xml.h:11
 msgid "Giant Lavalite"
 
 #: hacks/config/lavalite.xml.h:11
 msgid "Giant Lavalite"
-msgstr ""
+msgstr "Lavalite géante"
 
 #: hacks/config/lavalite.xml.h:13
 msgid "LavaLite"
 
 #: hacks/config/lavalite.xml.h:13
 msgid "LavaLite"
-msgstr ""
+msgstr "LavaLite"
 
 #: hacks/config/lavalite.xml.h:15
 
 #: hacks/config/lavalite.xml.h:15
-#, fuzzy
 msgid "Max Blobs"
 msgid "Max Blobs"
-msgstr "Taches opaques"
+msgstr "Maximum de blobs"
 
 #: hacks/config/lavalite.xml.h:16
 
 #: hacks/config/lavalite.xml.h:16
-#, fuzzy
 msgid "Random Lamp Style"
 msgid "Random Lamp Style"
-msgstr "Fondu aléatoire"
+msgstr "Style de lampe aléatoire"
 
 #: hacks/config/lavalite.xml.h:17 hacks/config/spheremonics.xml.h:9
 msgid "Resolution"
 
 #: hacks/config/lavalite.xml.h:17 hacks/config/spheremonics.xml.h:9
 msgid "Resolution"
-msgstr "Résolution"
+msgstr "Résolution"
 
 #: hacks/config/lavalite.xml.h:18
 msgid "Rocket Lavalite"
 
 #: hacks/config/lavalite.xml.h:18
 msgid "Rocket Lavalite"
-msgstr ""
+msgstr "Lavalite roquette"
 
 #: hacks/config/lavalite.xml.h:27
 msgid "Smooth"
 
 #: hacks/config/lavalite.xml.h:27
 msgid "Smooth"
-msgstr ""
+msgstr "Lisse"
 
 #: hacks/config/lightning.xml.h:2
 msgid "Lightning"
 
 #: hacks/config/lightning.xml.h:2
 msgid "Lightning"
-msgstr "Éclairs"
+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 ""
 
 #: 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."
+"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"
 
 #: hacks/config/lisa.xml.h:4
 msgid "Lisa"
@@ -3626,7 +3649,7 @@ msgstr "Lisa"
 
 #: hacks/config/lisa.xml.h:10
 msgid "Steps"
 
 #: hacks/config/lisa.xml.h:10
 msgid "Steps"
-msgstr "Étapes"
+msgstr "Étapes"
 
 #: hacks/config/lisa.xml.h:11
 msgid ""
 
 #: hacks/config/lisa.xml.h:11
 msgid ""
@@ -3635,8 +3658,8 @@ msgid ""
 "was one of these."
 msgstr ""
 "Trace des boucles de Lissajous, par Caleb Cullen. Vous vous souvenez de "
 "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."
+"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:1
 msgid ""
 
 #: hacks/config/lissie.xml.h:1
 msgid ""
@@ -3644,7 +3667,7 @@ msgid ""
 "along a path. Written by Alexander Jolk."
 msgstr ""
 "Une autre figure de Lissajous. Elle trace la progression de formes "
 "along a path. Written by Alexander Jolk."
 msgstr ""
 "Une autre figure de Lissajous. Elle trace la progression de formes "
-"circulaires le long d'un chemin. Écrit par Alexander Jolk."
+"circulaires le long d'un chemin. Écrit par Alexander Jolk."
 
 #: hacks/config/lissie.xml.h:5
 msgid "Lissie"
 
 #: hacks/config/lissie.xml.h:5
 msgid "Lissie"
@@ -3652,15 +3675,15 @@ msgstr "Lissajous"
 
 #: hacks/config/lmorph.xml.h:1
 msgid "Closed Figures"
 
 #: hacks/config/lmorph.xml.h:1
 msgid "Closed Figures"
-msgstr "Figures fermées"
+msgstr "Figures fermées"
 
 #: hacks/config/lmorph.xml.h:2
 msgid "Control Points"
 
 #: hacks/config/lmorph.xml.h:2
 msgid "Control Points"
-msgstr "Points de contrôle"
+msgstr "Points de contrôle"
 
 #: hacks/config/lmorph.xml.h:4
 msgid "Interpolation Steps"
 
 #: hacks/config/lmorph.xml.h:4
 msgid "Interpolation Steps"
-msgstr "Étapes d'interpolation"
+msgstr "Étapes d'interpolation"
 
 #: hacks/config/lmorph.xml.h:5
 msgid "LMorph"
 
 #: hacks/config/lmorph.xml.h:5
 msgid "LMorph"
@@ -3680,14 +3703,14 @@ msgstr "Figures ouvertes"
 
 #: hacks/config/lmorph.xml.h:10
 msgid "Open and Closed Figures"
 
 #: hacks/config/lmorph.xml.h:10
 msgid "Open and Closed Figures"
-msgstr "Figures ouvertes et fermées"
+msgstr "Figures ouvertes et fermées"
 
 #: 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."
 msgstr ""
 
 #: 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."
 msgstr ""
-"Génère des dessins en trait aléatoires et crée des morphings. Écrit par "
+"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
 "Sverre H. Huseby et Glenn T. Lines."
 
 #: hacks/config/loop.xml.h:3
@@ -3700,11 +3723,11 @@ msgid ""
 "Written by David Bagley."
 msgstr ""
 "Produit des colonies en forme de boucles qui se reproduisent, vieillissent "
 "Written by David Bagley."
 msgstr ""
 "Produit des colonies en forme de boucles qui se reproduisent, vieillissent "
-"et meurent. Écrit par David Bagley."
+"et meurent. Écrit par David Bagley."
 
 #: hacks/config/maze.xml.h:3
 msgid "Backtracking Generator"
 
 #: hacks/config/maze.xml.h:3
 msgid "Backtracking Generator"
-msgstr "Générateur de retour en arrière"
+msgstr "Générateur de retour en arrière"
 
 #: hacks/config/maze.xml.h:5 hacks/config/slidescreen.xml.h:3
 msgid "Grid Size"
 
 #: hacks/config/maze.xml.h:5 hacks/config/slidescreen.xml.h:3
 msgid "Grid Size"
@@ -3720,7 +3743,7 @@ msgstr "Ignorer la direction de la sortie"
 
 #: hacks/config/maze.xml.h:8
 msgid "Joining Generator"
 
 #: hacks/config/maze.xml.h:8
 msgid "Joining Generator"
-msgstr "Générateur de fusion"
+msgstr "Générateur de fusion"
 
 #: hacks/config/maze.xml.h:9
 msgid "Maze"
 
 #: hacks/config/maze.xml.h:9
 msgid "Maze"
@@ -3728,23 +3751,23 @@ msgstr "Labyrinthe"
 
 #: hacks/config/maze.xml.h:10
 msgid "Post-Solve Delay"
 
 #: hacks/config/maze.xml.h:10
 msgid "Post-Solve Delay"
-msgstr "Délai post-résolution"
+msgstr "Délai post-résolution"
 
 #: hacks/config/maze.xml.h:11
 msgid "Pre-Solve Delay"
 
 #: hacks/config/maze.xml.h:11
 msgid "Pre-Solve Delay"
-msgstr "Délai pré-résolution"
+msgstr "Délai pré-résolution"
 
 #: hacks/config/maze.xml.h:12
 msgid "Random Generator"
 
 #: hacks/config/maze.xml.h:12
 msgid "Random Generator"
-msgstr "Générateur aléatoire"
+msgstr "Générateur aléatoire"
 
 #: hacks/config/maze.xml.h:13
 msgid "Seeding Generator"
 
 #: hacks/config/maze.xml.h:13
 msgid "Seeding Generator"
-msgstr "Générateur d'ensemencement"
+msgstr "Générateur d'ensemencement"
 
 #: hacks/config/maze.xml.h:15
 msgid "Solve Speed"
 
 #: hacks/config/maze.xml.h:15
 msgid "Solve Speed"
-msgstr "Vitesse de résolution"
+msgstr "Vitesse de résolution"
 
 #: hacks/config/maze.xml.h:16
 msgid ""
 
 #: hacks/config/maze.xml.h:16
 msgid ""
@@ -3752,9 +3775,9 @@ msgid ""
 "generates a random maze, then solves it with visual feedback. Originally by "
 "Jim Randell; modified by a cast of thousands."
 msgstr ""
 "generates a random maze, then solves it with visual feedback. Originally by "
 "Jim Randell; modified by a cast of thousands."
 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 "
+"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/menger.xml.h:6
 "gens."
 
 #: hacks/config/menger.xml.h:6
@@ -3767,8 +3790,8 @@ msgid ""
 "cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
 "by Jamie Zawinski."
 msgstr ""
 "cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
 "by Jamie Zawinski."
 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 "
+"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."
 
 #: hacks/config/moebius.xml.h:1
 "Zawinski."
 
 #: hacks/config/moebius.xml.h:1
@@ -3776,9 +3799,8 @@ 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 ""
 "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."
+"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"
 
 #: hacks/config/moebius.xml.h:2
 msgid "Draw Ants"
@@ -3786,7 +3808,7 @@ msgstr "Dessiner des fournis"
 
 #: hacks/config/moebius.xml.h:4
 msgid "Mesh Floor"
 
 #: hacks/config/moebius.xml.h:4
 msgid "Mesh Floor"
-msgstr "Sol grillagé"
+msgstr "Sol grillagé"
 
 #: hacks/config/moebius.xml.h:5
 msgid "Moebius"
 
 #: hacks/config/moebius.xml.h:5
 msgid "Moebius"
@@ -3806,7 +3828,7 @@ msgstr "Moirage"
 
 #: hacks/config/moire.xml.h:8 hacks/config/rorschach.xml.h:6
 msgid "Offset"
 
 #: hacks/config/moire.xml.h:8 hacks/config/rorschach.xml.h:6
 msgid "Offset"
-msgstr "Décalage"
+msgstr "Décalage"
 
 #: hacks/config/moire.xml.h:10
 msgid ""
 
 #: hacks/config/moire.xml.h:10
 msgid ""
@@ -3818,13 +3840,13 @@ msgid ""
 "just a pair of loops and a handful of arithmetic, giving it a high ``display "
 "hack metric''."
 msgstr ""
 "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 "
+"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 "
 "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."
+"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 ""
 
 #: hacks/config/moire2.xml.h:1
 msgid ""
@@ -3834,11 +3856,11 @@ msgid ""
 "another, causing the interference lines to ``spray.'' Written by Jamie "
 "Zawinski."
 msgstr ""
 "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."
+"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/moire2.xml.h:4
 msgid "Moire2"
 
 #: hacks/config/moire2.xml.h:4
 msgid "Moire2"
@@ -3846,7 +3868,7 @@ msgstr "Moirage2"
 
 #: hacks/config/molecule.xml.h:3
 msgid "Describe Molecule"
 
 #: hacks/config/molecule.xml.h:3
 msgid "Describe Molecule"
-msgstr "Décrire la molécule"
+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"
@@ -3866,17 +3888,17 @@ msgid ""
 "are built in, and it can also read PDB (Protein Data Base) files as input. "
 "Written by Jamie Zawinski."
 msgstr ""
 "are built in, and it can also read PDB (Protein Data Base) files as input. "
 "Written by Jamie Zawinski."
 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."
+"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."
 
 #: hacks/config/molecule.xml.h:11
 msgid "Label Atoms"
 
 #: hacks/config/molecule.xml.h:11
 msgid "Label Atoms"
-msgstr "Étiqueter les atomes"
+msgstr "Étiqueter les atomes"
 
 #: hacks/config/molecule.xml.h:12
 msgid "Molecule"
 
 #: hacks/config/molecule.xml.h:12
 msgid "Molecule"
-msgstr "Molécule"
+msgstr "Molécule"
 
 #: hacks/config/molecule.xml.h:13
 msgid "PDB File"
 
 #: hacks/config/molecule.xml.h:13
 msgid "PDB File"
@@ -3887,8 +3909,8 @@ 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 ""
 "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 "
+"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:4
 "par ordinateur..."
 
 #: hacks/config/morph3d.xml.h:4
@@ -3900,7 +3922,7 @@ msgid ""
 "Generates random 3d plots that look vaguely mountainous. Written by Pascal "
 "Pensa."
 msgstr ""
 "Generates random 3d plots that look vaguely mountainous. Written by Pascal "
 "Pensa."
 msgstr ""
-"Génère des graphiques 3D aléatoires d'apparence vaguement montagneuse. Écrit "
+"Génère des graphiques 3D aléatoires d'apparence vaguement montagneuse. Écrit "
 "par Pascal Pensa."
 
 #: hacks/config/mountain.xml.h:5
 "par Pascal Pensa."
 
 #: hacks/config/mountain.xml.h:5
@@ -3914,10 +3936,10 @@ msgid ""
 "screenhack, some 35 years later. The number of lines of enclosing code has "
 "increased substantially, however. This version is by Tim Showalter."
 msgstr ""
 "screenhack, some 35 years later. The number of lines of enclosing code has "
 "increased substantially, however. This version is by Tim Showalter."
 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."
+"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."
 
 #: hacks/config/munch.xml.h:5
 msgid "Munch"
 
 #: hacks/config/munch.xml.h:5
 msgid "Munch"
@@ -3952,12 +3974,12 @@ msgid ""
 "Draws different shapes composed of nervously vibrating squiggles, as if seen "
 "through a camera operated by a monkey on crack. By Dan Bornstein."
 msgstr ""
 "Draws different shapes composed of nervously vibrating squiggles, as if seen "
 "through a camera operated by a monkey on crack. By Dan Bornstein."
 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."
+"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."
 
 #: hacks/config/nerverot.xml.h:10
 msgid "Frequent"
 
 #: hacks/config/nerverot.xml.h:10
 msgid "Frequent"
-msgstr "Fréquent"
+msgstr "Fréquent"
 
 #: hacks/config/nerverot.xml.h:16
 msgid "NerveRot"
 
 #: hacks/config/nerverot.xml.h:16
 msgid "NerveRot"
@@ -3965,7 +3987,7 @@ msgstr "NerveRot"
 
 #: hacks/config/nerverot.xml.h:17
 msgid "Nervousness"
 
 #: hacks/config/nerverot.xml.h:17
 msgid "Nervousness"
-msgstr "Nervosité"
+msgstr "Nervosité"
 
 #: hacks/config/nerverot.xml.h:18 hacks/config/pyro.xml.h:12
 msgid "Seldom"
 
 #: hacks/config/nerverot.xml.h:18 hacks/config/pyro.xml.h:12
 msgid "Seldom"
@@ -3982,9 +4004,9 @@ msgid ""
 "`zippy' or `fortune'. This was extracted from `xnlock' by Dan Heller. "
 "Colorized by Jamie Zawinski."
 msgstr ""
 "`zippy' or `fortune'. This was extracted from `xnlock' by Dan Heller. "
 "Colorized by Jamie Zawinski."
 msgstr ""
-"Un petit bonhomme avec un gros nez se promène sur l'écran en disant des "
+"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 ou d'un programme externe "
 "choses. Ce qu'il dit peut provenir d'un fichier ou d'un programme externe "
-"comme 'zippy' ou 'fortune'. Extrait de 'xnlock' par Dan Heller. Colorisé par "
+"comme 'zippy' ou 'fortune'. Extrait de 'xnlock' par Dan Heller. Colorisé par "
 "Jamie Zawinski."
 
 #: hacks/config/noseguy.xml.h:2
 "Jamie Zawinski."
 
 #: hacks/config/noseguy.xml.h:2
@@ -4014,7 +4036,7 @@ msgstr "Utiliser le texte ci-dessous"
 
 #: hacks/config/pedal.xml.h:7
 msgid "Pedal"
 
 #: hacks/config/pedal.xml.h:7
 msgid "Pedal"
-msgstr "Pédale"
+msgstr "Pédale"
 
 #: hacks/config/pedal.xml.h:8
 msgid ""
 
 #: hacks/config/pedal.xml.h:8
 msgid ""
@@ -4023,9 +4045,9 @@ msgid ""
 "an even/odd winding rule. Written by Dale Moore, based on some ancient PDP-"
 "11 code."
 msgstr ""
 "an even/odd winding rule. Written by Dale Moore, based on some ancient PDP-"
 "11 code."
 msgstr ""
-"Sorte de combinaison de spirographe/art pauvre. Génère un grand polygone "
+"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 "
 "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-"
+"une règle WIND_EVEN_ODD. Écrit par Dale Moore, basé sur un ancien code PDP-"
 "11."
 
 #: hacks/config/penetrate.xml.h:1
 "11."
 
 #: hacks/config/penetrate.xml.h:1
@@ -4038,7 +4060,7 @@ msgstr "Explosions"
 
 #: hacks/config/penetrate.xml.h:5
 msgid "Penetrate"
 
 #: hacks/config/penetrate.xml.h:5
 msgid "Penetrate"
-msgstr "Pénétrer"
+msgstr "Pénétrer"
 
 #: hacks/config/penetrate.xml.h:7
 msgid "Start badly, but learn"
 
 #: hacks/config/penetrate.xml.h:7
 msgid "Start badly, but learn"
@@ -4049,7 +4071,7 @@ msgid ""
 "This hack simulates the classic arcade game Missile Command. Written by Adam "
 "Miller."
 msgstr ""
 "This hack simulates the classic arcade game Missile Command. Written by Adam "
 "Miller."
 msgstr ""
-"Ce hack simule le jeu d'arcade classique Missile Command. Écrit par Adam "
+"Ce hack simule le jeu d'arcade classique Missile Command. Écrit par Adam "
 "Miller."
 
 #: hacks/config/penrose.xml.h:3
 "Miller."
 
 #: hacks/config/penrose.xml.h:3
@@ -4070,18 +4092,18 @@ msgid ""
 "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."
 msgstr ""
 "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."
 msgstr ""
-"Dessine des carreaux quasi-périodiques ; pensez aux implications pour la "
-"technologie moderne du formica. Écrit par Timo Korvola. 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 "
-"copyrightà l'encontre de Kimberly-Clark Corporation, qui, selon Penrose, a "
-"copié un motif qu'il avait créé (qui démontrait qu'un ''motif non répétitif "
-"pouvait exister dans la nature'') pour son papier toilette Kleenex à "
-"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."
+"Dessine des carreaux quasi-périodiques; pensez aux implications pour la "
+"technologie moderne du formica. Écrit par Timo Korvola. 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 "
+"copyright à l'encontre de Kimberly-Clark Corporation, qui, selon Penrose, a "
+"copié un motif qu'il avait créé (qui démontrait qu'un ''motif non répétitif "
+"pouvait exister dans la nature'') pour son papier toilette Kleenex à "
+"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."
 
 #: hacks/config/penrose.xml.h:9
 msgid "Penrose"
 
 #: hacks/config/penrose.xml.h:9
 msgid "Penrose"
@@ -4101,15 +4123,15 @@ msgstr "Diamant"
 
 #: hacks/config/petri.xml.h:6
 msgid "Fertility"
 
 #: hacks/config/petri.xml.h:6
 msgid "Fertility"
-msgstr "Fertilité"
+msgstr "Fertilité"
 
 #: hacks/config/petri.xml.h:12
 msgid "Maxium Lifespan"
 
 #: hacks/config/petri.xml.h:12
 msgid "Maxium Lifespan"
-msgstr "Durée de vie maximum"
+msgstr "Durée de vie maximum"
 
 #: hacks/config/petri.xml.h:13
 msgid "Maxium Rate of Death"
 
 #: hacks/config/petri.xml.h:13
 msgid "Maxium Rate of Death"
-msgstr "Taux de mortalité maximum"
+msgstr "Taux de mortalité maximum"
 
 #: hacks/config/petri.xml.h:14
 msgid "Maxium Rate of Growth"
 
 #: hacks/config/petri.xml.h:14
 msgid "Maxium Rate of Growth"
@@ -4117,11 +4139,11 @@ msgstr "Taux de croissance maximum"
 
 #: hacks/config/petri.xml.h:15
 msgid "Minium Lifespan"
 
 #: hacks/config/petri.xml.h:15
 msgid "Minium Lifespan"
-msgstr "Durée de vie minimum"
+msgstr "Durée de vie minimum"
 
 #: hacks/config/petri.xml.h:16
 msgid "Minium Rate of Death"
 
 #: hacks/config/petri.xml.h:16
 msgid "Minium Rate of Death"
-msgstr "Taux de mortalité minimum"
+msgstr "Taux de mortalité minimum"
 
 #: hacks/config/petri.xml.h:17
 msgid "Minium Rate of Growth"
 
 #: hacks/config/petri.xml.h:17
 msgid "Minium Rate of Growth"
@@ -4129,11 +4151,11 @@ msgstr "Taux de croissance minimum"
 
 #: hacks/config/petri.xml.h:18
 msgid "Mold Varieties"
 
 #: hacks/config/petri.xml.h:18
 msgid "Mold Varieties"
-msgstr "Variétés de moisissures"
+msgstr "Variétés de moisissures"
 
 #: hacks/config/petri.xml.h:19
 msgid "Offspring"
 
 #: hacks/config/petri.xml.h:19
 msgid "Offspring"
-msgstr "Progéniture"
+msgstr "Progéniture"
 
 #: hacks/config/petri.xml.h:20
 msgid "Petri"
 
 #: hacks/config/petri.xml.h:20
 msgid "Petri"
@@ -4149,7 +4171,7 @@ msgstr "Lentement"
 
 #: hacks/config/petri.xml.h:26
 msgid "Square"
 
 #: hacks/config/petri.xml.h:26
 msgid "Square"
-msgstr "Carré"
+msgstr "Carré"
 
 #: hacks/config/petri.xml.h:27
 msgid ""
 
 #: hacks/config/petri.xml.h:27
 msgid ""
@@ -4157,9 +4179,9 @@ msgid ""
 "circles overlap and leave spiral interference in their wake. Written by Dan "
 "Bornstein."
 msgstr ""
 "circles overlap and leave spiral interference in their wake. Written by Dan "
 "Bornstein."
 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."
+"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."
 
 #: hacks/config/phosphor.xml.h:1
 msgid ""
 
 #: hacks/config/phosphor.xml.h:1
 msgid ""
@@ -4168,8 +4190,8 @@ msgid ""
 "Written by Jamie Zawinski."
 msgstr ""
 "Dessine une simulation d'un vieux terminal, avec de grands pixels et du "
 "Written by Jamie Zawinski."
 msgstr ""
 "Dessine une simulation d'un vieux terminal, avec de grands pixels et du "
-"phosphore de longue durée. Il peut exécuter n'importe quel programme comme "
-"source du texte qu'il affiche. Écrit par Jamie Zawinski."
+"phosphore de longue durée. Il peut exécuter n'importe quel programme comme "
+"source du texte qu'il affiche. Écrit par Jamie Zawinski."
 
 #: hacks/config/phosphor.xml.h:2
 msgid "Fade"
 
 #: hacks/config/phosphor.xml.h:2
 msgid "Fade"
@@ -4181,19 +4203,19 @@ msgstr "Phosphore"
 
 #: hacks/config/phosphor.xml.h:5
 msgid "Scale"
 
 #: hacks/config/phosphor.xml.h:5
 msgid "Scale"
-msgstr "Échelle"
+msgstr "Échelle"
 
 #: hacks/config/pipes.xml.h:1
 msgid "Allow Tight Turns"
 
 #: hacks/config/pipes.xml.h:1
 msgid "Allow Tight Turns"
-msgstr "Autoriser des virages serrés"
+msgstr "Autoriser des virages serrés"
 
 #: hacks/config/pipes.xml.h:2
 msgid "Ball Joints"
 
 #: hacks/config/pipes.xml.h:2
 msgid "Ball Joints"
-msgstr "Raccords à boule"
+msgstr "Raccords à boule"
 
 #: hacks/config/pipes.xml.h:3
 msgid "Curved Pipes"
 
 #: hacks/config/pipes.xml.h:3
 msgid "Curved Pipes"
-msgstr "Canalisations courbées"
+msgstr "Canalisations courbées"
 
 #: hacks/config/pipes.xml.h:6
 msgid "Fisheye Lens"
 
 #: hacks/config/pipes.xml.h:6
 msgid "Fisheye Lens"
@@ -4208,8 +4230,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 ""
 "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."
+"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:9
 msgid "Lots"
 
 #: hacks/config/pipes.xml.h:9
 msgid "Lots"
@@ -4217,7 +4239,7 @@ msgstr "Lots"
 
 #: hacks/config/pipes.xml.h:11
 msgid "Number of Pipe Systems"
 
 #: hacks/config/pipes.xml.h:11
 msgid "Number of Pipe Systems"
-msgstr "Nombre de systèmes de canalisation"
+msgstr "Nombre de systèmes de canalisation"
 
 #: hacks/config/pipes.xml.h:12
 msgid "Pipe Fittings"
 
 #: hacks/config/pipes.xml.h:12
 msgid "Pipe Fittings"
@@ -4229,11 +4251,11 @@ msgstr "Canalisations"
 
 #: hacks/config/pipes.xml.h:17
 msgid "System Length"
 
 #: hacks/config/pipes.xml.h:17
 msgid "System Length"
-msgstr "Longueur du système"
+msgstr "Longueur du système"
 
 #: hacks/config/polyominoes.xml.h:3
 msgid "Identical Pieces"
 
 #: hacks/config/polyominoes.xml.h:3
 msgid "Identical Pieces"
-msgstr "Pièces identiques"
+msgstr "Pièces identiques"
 
 #: hacks/config/polyominoes.xml.h:7
 msgid "Polyominoes"
 
 #: hacks/config/polyominoes.xml.h:7
 msgid "Polyominoes"
@@ -4244,8 +4266,8 @@ msgid ""
 "Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
 "puzzle pieces. Written by Stephen Montgomery-Smith."
 msgstr ""
 "Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
 "puzzle pieces. Written by Stephen Montgomery-Smith."
 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."
+"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."
 
 #: hacks/config/pulsar.xml.h:1
 msgid "Anti-alias Lines"
 
 #: hacks/config/pulsar.xml.h:1
 msgid "Anti-alias Lines"
@@ -4257,14 +4279,14 @@ msgid ""
 "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."
 msgstr ""
 "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."
 msgstr ""
-"Dessine des plans en intersection en utilisant le mélange de valeurs alpha, "
+"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 "
 "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."
+"seconde'' pour que vous puissiez calculer la rapidité de votre carte "
+"graphique... Nécessite OpenGL. Écrit par David Konerding."
 
 #: hacks/config/pulsar.xml.h:4
 msgid "Enable Blending"
 
 #: hacks/config/pulsar.xml.h:4
 msgid "Enable Blending"
-msgstr "Activer le mélange"
+msgstr "Activer le mélange"
 
 #: hacks/config/pulsar.xml.h:5
 msgid "Enable Depth Buffer"
 
 #: hacks/config/pulsar.xml.h:5
 msgid "Enable Depth Buffer"
@@ -4276,7 +4298,7 @@ msgstr "Activer le brouillard"
 
 #: hacks/config/pulsar.xml.h:7
 msgid "Enable Lighting"
 
 #: hacks/config/pulsar.xml.h:7
 msgid "Enable Lighting"
-msgstr "Activer l'éclairage"
+msgstr "Activer l'éclairage"
 
 #: hacks/config/pulsar.xml.h:8
 msgid "Enable Texture Filtering"
 
 #: hacks/config/pulsar.xml.h:8
 msgid "Enable Texture Filtering"
@@ -4312,7 +4334,7 @@ msgstr "Production d'explosions"
 
 #: hacks/config/pyro.xml.h:6
 msgid "Launch Frequency"
 
 #: hacks/config/pyro.xml.h:6
 msgid "Launch Frequency"
-msgstr "Fréquence de lancement"
+msgstr "Fréquence de lancement"
 
 #: hacks/config/pyro.xml.h:8
 msgid "Often"
 
 #: hacks/config/pyro.xml.h:8
 msgid "Often"
@@ -4320,7 +4342,7 @@ msgstr "Souvent"
 
 #: hacks/config/pyro.xml.h:9
 msgid "Particle Density"
 
 #: hacks/config/pyro.xml.h:9
 msgid "Particle Density"
-msgstr "Densité des particules"
+msgstr "Densité des particules"
 
 #: hacks/config/pyro.xml.h:10
 msgid "Pyro"
 
 #: hacks/config/pyro.xml.h:10
 msgid "Pyro"
@@ -4330,7 +4352,7 @@ msgstr "Pyro"
 msgid ""
 "Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski."
 msgstr ""
 msgid ""
 "Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski."
 msgstr ""
-"Pyro dessine des feux d'artifices en explosion. Bla bla. Écrit par Jamie "
+"Pyro dessine des feux d'artifices en explosion. Bla bla. Écrit par Jamie "
 "Zawinski."
 
 #: hacks/config/qix.xml.h:1
 "Zawinski."
 
 #: hacks/config/qix.xml.h:1
@@ -4347,7 +4369,7 @@ msgstr "Segments de ligne"
 
 #: hacks/config/qix.xml.h:12
 msgid "Linear Motion"
 
 #: hacks/config/qix.xml.h:12
 msgid "Linear Motion"
-msgstr "Mouvement linéaire"
+msgstr "Mouvement linéaire"
 
 #: hacks/config/qix.xml.h:15
 msgid "Max Size"
 
 #: hacks/config/qix.xml.h:15
 msgid "Max Size"
@@ -4359,7 +4381,7 @@ msgstr "Qix"
 
 #: hacks/config/qix.xml.h:17
 msgid "Random Motion"
 
 #: hacks/config/qix.xml.h:17
 msgid "Random Motion"
-msgstr "Mouvement aléatoire"
+msgstr "Mouvement aléatoire"
 
 #: hacks/config/qix.xml.h:23
 msgid "Subtractive Colors"
 
 #: hacks/config/qix.xml.h:23
 msgid "Subtractive Colors"
@@ -4372,10 +4394,10 @@ msgid ""
 "to produce all sorts of different presentations: line segments, filled "
 "polygons, overlapping translucent areas... Written by Jamie Zawinski."
 msgstr ""
 "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 "
+"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."
 
 #: hacks/config/qix.xml.h:25
 "par Jamie Zawinski."
 
 #: hacks/config/qix.xml.h:25
@@ -4384,7 +4406,7 @@ msgstr "Transparent"
 
 #: hacks/config/queens.xml.h:2
 msgid "Queens"
 
 #: hacks/config/queens.xml.h:2
 msgid "Queens"
-msgstr ""
+msgstr "Reines"
 
 #: hacks/config/queens.xml.h:5
 msgid ""
 
 #: hacks/config/queens.xml.h:5
 msgid ""
@@ -4413,17 +4435,17 @@ msgid ""
 "of growing square-like shapes that, once they overtake each other, react in "
 "unpredictable ways. ``RD'' stands for reaction-diffusion."
 msgstr ""
 "of growing square-like shapes that, once they overtake each other, react in "
 "unpredictable ways. ``RD'' stands for reaction-diffusion."
 msgstr ""
-"Une autre variation du programme 'Bomb' de Scott Draves. Dessine une grille "
-"de formes carrées croissantes qui, une fois qu'elles se rejoignent, "
-"réagissent de façon imprévisible. ''RD'' signifie réaction-diffusion."
+"Une autre variation du programme «Bomb» de Scott Draves. Dessine une grille "
+"de formes carrées croissantes qui, une fois qu'elles se rejoignent, "
+"réagissent de façon imprévisible. 'RD' signifie réaction-diffusion."
 
 #: hacks/config/rd-bomb.xml.h:8
 msgid "Epoch"
 
 #: hacks/config/rd-bomb.xml.h:8
 msgid "Epoch"
-msgstr "Époque"
+msgstr "Époque"
 
 #: hacks/config/rd-bomb.xml.h:10
 msgid "Fill Screen"
 
 #: hacks/config/rd-bomb.xml.h:10
 msgid "Fill Screen"
-msgstr "Remplir l'écran"
+msgstr "Remplir l'écran"
 
 #: hacks/config/rd-bomb.xml.h:14
 msgid "RD-Bomb"
 
 #: hacks/config/rd-bomb.xml.h:14
 msgid "RD-Bomb"
@@ -4431,7 +4453,7 @@ msgstr "Bombe RD"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgid "Reaction/Difusion"
 
 #: hacks/config/rd-bomb.xml.h:15
 msgid "Reaction/Difusion"
-msgstr "Réaction/Diffusion"
+msgstr "Réaction/Diffusion"
 
 #: hacks/config/rd-bomb.xml.h:16
 msgid "Seed Radius"
 
 #: hacks/config/rd-bomb.xml.h:16
 msgid "Seed Radius"
@@ -4439,11 +4461,11 @@ msgstr "Rayon du germe"
 
 #: hacks/config/rd-bomb.xml.h:19 hacks/config/twang.xml.h:12
 msgid "Tile Size"
 
 #: hacks/config/rd-bomb.xml.h:19 hacks/config/twang.xml.h:12
 msgid "Tile Size"
-msgstr "Taille des mosaïques"
+msgstr "Taille des mosaïques"
 
 #: hacks/config/rd-bomb.xml.h:22
 msgid "Wander Speed"
 
 #: hacks/config/rd-bomb.xml.h:22
 msgid "Wander Speed"
-msgstr "Vitesse de déplacement"
+msgstr "Vitesse de déplacement"
 
 #: hacks/config/ripples.xml.h:1
 msgid "Big Drops"
 
 #: hacks/config/ripples.xml.h:1
 msgid "Big Drops"
@@ -4459,19 +4481,19 @@ msgstr "Bruine"
 
 #: hacks/config/ripples.xml.h:5
 msgid "Grab Screen Image"
 
 #: hacks/config/ripples.xml.h:5
 msgid "Grab Screen Image"
-msgstr "Capturer l'écran"
+msgstr "Capturer l'écran"
 
 #: hacks/config/ripples.xml.h:6
 msgid "Lighting Effect"
 
 #: hacks/config/ripples.xml.h:6
 msgid "Lighting Effect"
-msgstr "Effet d'éclairage"
+msgstr "Effet d'éclairage"
 
 #: hacks/config/ripples.xml.h:8
 msgid "Moving Splashes"
 
 #: hacks/config/ripples.xml.h:8
 msgid "Moving Splashes"
-msgstr "Éclaboussures mobiles"
+msgstr "Éclaboussures mobiles"
 
 #: hacks/config/ripples.xml.h:9
 msgid "Psychedelic Colors"
 
 #: hacks/config/ripples.xml.h:9
 msgid "Psychedelic Colors"
-msgstr "Couleurs psychédéliques"
+msgstr "Couleurs psychédéliques"
 
 #: hacks/config/ripples.xml.h:10
 msgid "Ripples"
 
 #: hacks/config/ripples.xml.h:10
 msgid "Ripples"
@@ -4483,7 +4505,7 @@ msgstr "Petites gouttes"
 
 #: hacks/config/ripples.xml.h:13
 msgid "Storm"
 
 #: hacks/config/ripples.xml.h:13
 msgid "Storm"
-msgstr "Tempête"
+msgstr "Tempète"
 
 #: hacks/config/ripples.xml.h:14
 msgid ""
 
 #: hacks/config/ripples.xml.h:14
 msgid ""
@@ -4491,9 +4513,9 @@ msgid ""
 "water option, it manipulates your desktop image to look like something is "
 "dripping into it. Written by Tom Hammersley."
 msgstr ""
 "water option, it manipulates your desktop image to look like something is "
 "dripping into it. Written by Tom Hammersley."
 msgstr ""
-"Dessine des motifs d'interférences ondulants qui ressemblent à des "
-"éclaboussures d'eau. Avec l'option -eau, manipule votre image bureau pour "
-"que quelque chose ait l'air de l'éclabousser. Écrit par Tom Hammersley."
+"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."
 
 #: hacks/config/rocks.xml.h:7
 msgid "Rocks"
 
 #: hacks/config/rocks.xml.h:7
 msgid "Rocks"
@@ -4504,7 +4526,6 @@ msgid "Rotation"
 msgstr "Rotation"
 
 #: hacks/config/rocks.xml.h:10
 msgstr "Rotation"
 
 #: hacks/config/rocks.xml.h:10
-#, fuzzy
 msgid "Steering"
 msgstr "Direction"
 
 msgid "Steering"
 msgstr "Direction"
 
@@ -4514,9 +4535,9 @@ msgid ""
 "rotation and direction. It can also display 3D separations for red/blue "
 "glasses! Mostly written by Jamie Zawinski."
 msgstr ""
 "rotation and direction. It can also display 3D separations for red/blue "
 "glasses! Mostly written by Jamie Zawinski."
 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."
+"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."
 
 #: hacks/config/rorschach.xml.h:7
 msgid "Rorschach"
 
 #: hacks/config/rorschach.xml.h:7
 msgid "Rorschach"
@@ -4530,19 +4551,19 @@ msgid ""
 "neurotic tendencies which this program reveals are your own problem. Written "
 "by Jamie Zawinski."
 msgstr ""
 "neurotic tendencies which this program reveals are your own problem. Written "
 "by Jamie Zawinski."
 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 "
-"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."
+"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 "
+"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."
 
 #: hacks/config/rorschach.xml.h:10
 msgid "With X Symmetry"
 
 #: hacks/config/rorschach.xml.h:10
 msgid "With X Symmetry"
-msgstr "Avec symétrie X"
+msgstr "Avec symétrie X"
 
 #: hacks/config/rorschach.xml.h:11
 msgid "With Y Symmetry"
 
 #: hacks/config/rorschach.xml.h:11
 msgid "With Y Symmetry"
-msgstr "Avec symétrie Y"
+msgstr "Avec symétrie Y"
 
 #: hacks/config/rotor.xml.h:1
 msgid ""
 
 #: hacks/config/rotor.xml.h:1
 msgid ""
@@ -4567,7 +4588,7 @@ msgid ""
 "Creates a collage of rotated and scaled portions of the screen. Written by "
 "Claudio Matsuoka."
 msgstr ""
 "Creates a collage of rotated and scaled portions of the screen. Written by "
 "Claudio Matsuoka."
 msgstr ""
-"Crée un collage de portions pivotées et mises à l'échelle de l'écran. Écrit "
+"Crée un collage de portions pivotées et mises à l'échelle de l'écran. Écrit "
 "par Claudio Matsuoka."
 
 #: hacks/config/rotzoomer.xml.h:6
 "par Claudio Matsuoka."
 
 #: hacks/config/rotzoomer.xml.h:6
@@ -4595,8 +4616,8 @@ msgid ""
 "Draws a Rubik's Cube that rotates in three dimensions and repeatedly "
 "shuffles and solves itself. Another fine GL hack by Marcelo Vianna."
 msgstr ""
 "Draws a Rubik's Cube that rotates in three dimensions and repeatedly "
 "shuffles and solves itself. Another fine GL hack by Marcelo Vianna."
 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 et  se mélange et se "
+"résout sans cesse. Un autre beau hack GL de Marcelo Vianna."
 
 #: hacks/config/rubik.xml.h:5
 msgid "Rubik"
 
 #: hacks/config/rubik.xml.h:5
 msgid "Rubik"
@@ -4604,7 +4625,7 @@ msgstr "Rubik"
 
 #: hacks/config/rubik.xml.h:7
 msgid "Show Shuffling"
 
 #: hacks/config/rubik.xml.h:7
 msgid "Show Shuffling"
-msgstr "Afficher le mélange"
+msgstr "Afficher le mélange"
 
 #: hacks/config/sballs.xml.h:1
 msgid "Cube"
 
 #: hacks/config/sballs.xml.h:1
 msgid "Cube"
@@ -4612,27 +4633,22 @@ msgstr "Cube"
 
 #: hacks/config/sballs.xml.h:2
 msgid "Dodecahedron"
 
 #: hacks/config/sballs.xml.h:2
 msgid "Dodecahedron"
-msgstr "Dodécaèdre"
+msgstr "Dodécaèdre"
 
 #: hacks/config/sballs.xml.h:3
 
 #: hacks/config/sballs.xml.h:3
-#, fuzzy
 msgid ""
 "Draws an animation of textured balls spinning like crazy in GL. Requires "
 "OpenGL, and a machine with fast hardware support for texture maps. Written "
 "by Eric Lassauge &lt;lassauge@mail.dotcom.fr&gt;."
 msgstr ""
 msgid ""
 "Draws an animation of textured balls spinning like crazy in GL. Requires "
 "OpenGL, and a machine with fast hardware support for texture maps. Written "
 "by Eric Lassauge &lt;lassauge@mail.dotcom.fr&gt;."
 msgstr ""
-"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. Attension : risque d'ouvrir des portes. Écrit par Jamie "
-"Zawinski."
 
 #: hacks/config/sballs.xml.h:5
 msgid "Icosahedron"
 
 #: hacks/config/sballs.xml.h:5
 msgid "Icosahedron"
-msgstr "Icosaèdre"
+msgstr "Icosaèdre"
 
 #: hacks/config/sballs.xml.h:7
 msgid "Octahedron"
 
 #: hacks/config/sballs.xml.h:7
 msgid "Octahedron"
-msgstr "Octaèdre"
+msgstr "Octaèdre"
 
 #: hacks/config/sballs.xml.h:8
 msgid "Plane"
 
 #: hacks/config/sballs.xml.h:8
 msgid "Plane"
@@ -4644,7 +4660,7 @@ msgstr "Pyramide"
 
 #: hacks/config/sballs.xml.h:10
 msgid "Random"
 
 #: hacks/config/sballs.xml.h:10
 msgid "Random"
-msgstr "Aléatoire"
+msgstr "Aléatoire"
 
 #: hacks/config/sballs.xml.h:11
 msgid "Sballs"
 
 #: hacks/config/sballs.xml.h:11
 msgid "Sballs"
@@ -4652,11 +4668,11 @@ msgstr "Sballs"
 
 #: hacks/config/sballs.xml.h:15
 msgid "Star"
 
 #: hacks/config/sballs.xml.h:15
 msgid "Star"
-msgstr "Étoile"
+msgstr "Étoile"
 
 #: hacks/config/sballs.xml.h:16
 msgid "Tetrahedron"
 
 #: hacks/config/sballs.xml.h:16
 msgid "Tetrahedron"
-msgstr "Tétraèdre"
+msgstr "Tétraèdre"
 
 #: hacks/config/shadebobs.xml.h:7
 msgid "ShadeBobs"
 
 #: hacks/config/shadebobs.xml.h:7
 msgid "ShadeBobs"
@@ -4667,8 +4683,8 @@ msgid ""
 "This draws smoothly-shaded oscilating oval patterns, that look something "
 "like vapor trails or neon tubes. Written by Shane Smit."
 msgstr ""
 "This draws smoothly-shaded oscilating oval patterns, that look something "
 "like vapor trails or neon tubes. Written by Shane Smit."
 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."
+"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."
 
 #: hacks/config/sierpinski.xml.h:6
 msgid "Sierpinski"
 
 #: hacks/config/sierpinski.xml.h:6
 msgid "Sierpinski"
@@ -4679,8 +4695,8 @@ msgid ""
 "This draws the two-dimensional variant of the recursive Sierpinski triangle "
 "fractal. Written by Desmond Daignault."
 msgstr ""
 "This draws the two-dimensional variant of the recursive Sierpinski triangle "
 "fractal. Written by Desmond Daignault."
 msgstr ""
-"Dessine la variante bidimensionnelle de la fractale triangulaire récursive "
-"de Sierpinski. Écrit par Desmond Daignault."
+"Dessine la variante bidimensionnelle de la fractale triangulaire récursive "
+"de Sierpinski. Écrit par Desmond Daignault."
 
 #: hacks/config/sierpinski3d.xml.h:7
 msgid "Sierpinski3D"
 
 #: hacks/config/sierpinski3d.xml.h:7
 msgid "Sierpinski3D"
@@ -4691,8 +4707,8 @@ msgid ""
 "This draws the three-dimensional variant of the recursive Sierpinski "
 "triangle fractal, using GL. Written by Tim Robinson and Jamie Zawinski."
 msgstr ""
 "This draws the three-dimensional variant of the recursive Sierpinski "
 "triangle fractal, using GL. Written by Tim Robinson and Jamie Zawinski."
 msgstr ""
-"Dessine la variante tridimensionnelle de la fractale triangulaire récursive "
-"de Sierpinski, à l'aide de GL. Écrit par Tim Robinson et Jamie Zawinski."
+"Dessine la variante tridimensionnelle de la fractale triangulaire récursive "
+"de Sierpinski, à l'aide de GL. Écrit par Tim Robinson et Jamie Zawinski."
 
 #: hacks/config/slidescreen.xml.h:1 hacks/config/twang.xml.h:1
 #: hacks/config/zoom.xml.h:1
 
 #: hacks/config/slidescreen.xml.h:1 hacks/config/twang.xml.h:1
 #: hacks/config/zoom.xml.h:1
@@ -4705,7 +4721,7 @@ msgstr "Vitesse de glissement"
 
 #: hacks/config/slidescreen.xml.h:5
 msgid "SlideScreen"
 
 #: hacks/config/slidescreen.xml.h:5
 msgid "SlideScreen"
-msgstr "Glissement d'écran"
+msgstr "Glissement d'écran"
 
 #: hacks/config/slidescreen.xml.h:8
 msgid ""
 
 #: hacks/config/slidescreen.xml.h:8
 msgid ""
@@ -4715,10 +4731,10 @@ msgid ""
 "those puzzles, but watching one permute itself is more amusing. Written by "
 "Jamie Zawinski."
 msgstr ""
 "those puzzles, but watching one permute itself is more amusing. Written by "
 "Jamie Zawinski."
 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."
+"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."
 
 #: hacks/config/slip.xml.h:6
 msgid "Slip"
 
 #: hacks/config/slip.xml.h:6
 msgid "Slip"
@@ -4734,21 +4750,21 @@ msgid ""
 "desktop to chew on. Originally written by Scott Draves; whacked on by Jamie "
 "Zawinski."
 msgstr ""
 "desktop to chew on. Originally written by Scott Draves; whacked on by Jamie "
 "Zawinski."
 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 "
+"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 "
 "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 "
+"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 "
 "touche personnelle) capturera l'image de votre bureau actuel pour la "
-"retourner. Initialement écrit par Scott Draves ; bouleversé par Jamie "
+"retourner. Initialement écrit par Scott Draves ; bouleversé par Jamie "
 "Zawinski."
 
 #: hacks/config/sonar.xml.h:1
 msgid "Ping Subnet"
 "Zawinski."
 
 #: hacks/config/sonar.xml.h:1
 msgid "Ping Subnet"
-msgstr "Sous-réseau ping"
+msgstr "Sous-réseau ping"
 
 #: hacks/config/sonar.xml.h:2
 msgid "Simulation Team Members"
 
 #: hacks/config/sonar.xml.h:2
 msgid "Simulation Team Members"
-msgstr "Membres de l'équipe de simulation"
+msgstr "Membres de l'équipe de simulation"
 
 #: hacks/config/sonar.xml.h:3
 msgid "Sonar"
 
 #: hacks/config/sonar.xml.h:3
 msgid "Sonar"
@@ -4756,11 +4772,11 @@ msgstr "Sonar"
 
 #: hacks/config/sonar.xml.h:4
 msgid "Team A Name"
 
 #: hacks/config/sonar.xml.h:4
 msgid "Team A Name"
-msgstr "Nom de l'équipe A"
+msgstr "Nom de l'équipe A"
 
 #: hacks/config/sonar.xml.h:5
 msgid "Team B Name"
 
 #: hacks/config/sonar.xml.h:5
 msgid "Team B Name"
-msgstr "Nom de l'équipe B"
+msgstr "Nom de l'équipe B"
 
 #: hacks/config/sonar.xml.h:6
 msgid ""
 
 #: hacks/config/sonar.xml.h:6
 msgid ""
@@ -4771,13 +4787,13 @@ msgid ""
 "make it monitor other sources of data, too. (Processes? Active network "
 "connections? CPU usage per user?) Written by Stephen Martin."
 msgstr ""
 "make it monitor other sources of data, too. (Processes? Active network "
 "connections? CPU usage per user?) Written by Stephen Martin."
 msgstr ""
-"Ce programme dessine une simulation d'un écran de sonar. Écrit par défaut, "
-"il affiche un assortiment aléatoire de ''trucs'' à l'écran, mais, s'il est "
-"compilé correctement, il peut effectuer un ping sur votre réseau local et "
-"calculer  la proximité des autres hôtes du réseau par rapport à vous. Il "
-"serait facile de lui faire aussi surveiller d'autres sources de données. "
-"(Processus ? Connexions au réseau actif ? Utilisation du processeur par "
-"utilisateur ?) Écrit par Stephen Martin."
+"Ce programme dessine une simulation d'un écran de sonar. Écrit par défaut, "
+"il affiche un assortiment aléatoire de 'trucs' à l'écran, mais, s'il est "
+"compilé correctement, il peut effectuer un ping sur votre réseau local et "
+"calculer  la proximité des autres hôtes du réseau par rapport à vous. Il "
+"serait facile de lui faire aussi surveiller d'autres sources de données. "
+"(Processus ? Connexions au réseau actif ? Utilisation du processeur par "
+"utilisateur ?) Écrit par Stephen Martin."
 
 #: hacks/config/sonar.xml.h:7
 msgid "vs."
 
 #: hacks/config/sonar.xml.h:7
 msgid "vs."
@@ -4785,7 +4801,7 @@ msgstr "contre"
 
 #: hacks/config/speedmine.xml.h:1
 msgid "Allow Wall Collisions"
 
 #: hacks/config/speedmine.xml.h:1
 msgid "Allow Wall Collisions"
-msgstr "Éviter les collisions avec le mur"
+msgstr "Éviter les collisions avec le mur"
 
 #: hacks/config/speedmine.xml.h:2
 msgid "Display Crosshair"
 
 #: hacks/config/speedmine.xml.h:2
 msgid "Display Crosshair"
@@ -4793,7 +4809,7 @@ msgstr "Afficher le viseur"
 
 #: hacks/config/speedmine.xml.h:7
 msgid "Max Velocity"
 
 #: hacks/config/speedmine.xml.h:7
 msgid "Max Velocity"
-msgstr "Vélocité max."
+msgstr "Vélocité max."
 
 #: hacks/config/speedmine.xml.h:8
 msgid "Mine Shaft"
 
 #: hacks/config/speedmine.xml.h:8
 msgid "Mine Shaft"
@@ -4801,7 +4817,7 @@ msgstr "Puits de mine"
 
 #: hacks/config/speedmine.xml.h:9
 msgid "Present Bonuses"
 
 #: hacks/config/speedmine.xml.h:9
 msgid "Present Bonuses"
-msgstr "Bonus présents"
+msgstr "Bonus présents"
 
 #: hacks/config/speedmine.xml.h:10
 msgid "Rocky Walls"
 
 #: hacks/config/speedmine.xml.h:10
 msgid "Rocky Walls"
@@ -4813,7 +4829,7 @@ msgid ""
 "by Conrad Parker."
 msgstr ""
 "Simule la descente dans un puits de mine rocheux ou affiche un ver funky "
 "by Conrad Parker."
 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."
 
 #: hacks/config/speedmine.xml.h:16
 msgid "SpeedMine"
 
 #: hacks/config/speedmine.xml.h:16
 msgid "SpeedMine"
@@ -4821,7 +4837,7 @@ msgstr "SpeedMine"
 
 #: hacks/config/speedmine.xml.h:17
 msgid "Thrust"
 
 #: hacks/config/speedmine.xml.h:17
 msgid "Thrust"
-msgstr "Poussée"
+msgstr "Poussée"
 
 #: hacks/config/speedmine.xml.h:19 hacks/config/worm.xml.h:10
 msgid "Worm"
 
 #: hacks/config/speedmine.xml.h:19 hacks/config/worm.xml.h:10
 msgid "Worm"
@@ -4833,13 +4849,13 @@ msgid ""
 "shaded spheres in multiple colors. This hack traces its lineage back to Tom "
 "Duff in 1982."
 msgstr ""
 "shaded spheres in multiple colors. This hack traces its lineage back to Tom "
 "Duff in 1982."
 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 "
+"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."
 
 #: hacks/config/sphere.xml.h:7
 msgid "Sphere"
 "1982."
 
 #: hacks/config/sphere.xml.h:7
 msgid "Sphere"
-msgstr "Sphère"
+msgstr "Sphère"
 
 #: hacks/config/sphereEversion.xml.h:1
 msgid "SphereEversion"
 
 #: hacks/config/sphereEversion.xml.h:1
 msgid "SphereEversion"
@@ -4861,9 +4877,8 @@ msgid "Smoothed Lines"
 msgstr ""
 
 #: hacks/config/spheremonics.xml.h:23
 msgstr ""
 
 #: hacks/config/spheremonics.xml.h:23
-#, fuzzy
 msgid "Spheremonics"
 msgid "Spheremonics"
-msgstr "Harmoniques"
+msgstr ""
 
 #: hacks/config/spheremonics.xml.h:24
 msgid ""
 
 #: hacks/config/spheremonics.xml.h:24
 msgid ""
@@ -4883,7 +4898,7 @@ msgid ""
 "means moire; interference patterns, of course."
 msgstr ""
 "Motifs circulaires mobiles, par Peter Schmitzberger. Les motifs circulaires "
 "means moire; interference patterns, of course."
 msgstr ""
 "Motifs circulaires mobiles, par Peter Schmitzberger. Les motifs circulaires "
-"mobiles sont synonymes de moiré ; des motifs d'interférences, évidemment."
+"mobiles sont synonymes de moiré ; des motifs d'interférences, évidemment."
 
 #: hacks/config/spiral.xml.h:11
 msgid "Spiral"
 
 #: hacks/config/spiral.xml.h:11
 msgid "Spiral"
@@ -4894,8 +4909,8 @@ msgid ""
 "Draws a spotlight scanning across a black screen, illumnating the underlying "
 "desktop when it passes. Written by Rick Schultz."
 msgstr ""
 "Draws a spotlight scanning across a black screen, illumnating the underlying "
 "desktop when it passes. Written by Rick Schultz."
 msgstr ""
-"Trace un faisceau lumineux qui parcourt un écran noir et illumine le bureau "
-"sous-jacent. Écrit par Rick Schultz."
+"Trace un faisceau lumineux qui parcourt un écran noir et illumine le bureau "
+"sous-jacent. Écrit par Rick Schultz."
 
 #: hacks/config/spotlight.xml.h:6
 msgid "Spotlight"
 
 #: hacks/config/spotlight.xml.h:6
 msgid "Spotlight"
@@ -4903,7 +4918,7 @@ msgstr "Faisceau lumineux"
 
 #: hacks/config/sproingies.xml.h:3
 msgid "Q-Bert meets Marble Madness! Written by Ed Mackey."
 
 #: 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."
+msgstr "La rencontre de Q-Bert et de Marble Madness ! Écrit par Ed Mackey."
 
 #: hacks/config/sproingies.xml.h:9
 msgid "Sproingies"
 
 #: hacks/config/sproingies.xml.h:9
 msgid "Sproingies"
@@ -4916,12 +4931,12 @@ msgid ""
 "Jeff Epler."
 msgstr ""
 "Dessine un ensemble d'automates qui interagissent et produisent des spirales "
 "Jeff Epler."
 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."
+"carrées. Les spirales grandissent jusqu'à ce qu'elles heurtent un obstacle, "
+"qu'elles contournent. Écrit par Jeff Epler."
 
 #: hacks/config/squiral.xml.h:5
 msgid "Handedness"
 
 #: hacks/config/squiral.xml.h:5
 msgid "Handedness"
-msgstr "Chiralité"
+msgstr "Sens de rotation"
 
 #: hacks/config/squiral.xml.h:7
 msgid "Left"
 
 #: hacks/config/squiral.xml.h:7
 msgid "Left"
@@ -4929,7 +4944,7 @@ msgstr "Gauche"
 
 #: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:8
 msgid "Randomness"
 
 #: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:8
 msgid "Randomness"
-msgstr "Aléatoire"
+msgstr "Aléatoire"
 
 #: hacks/config/squiral.xml.h:12
 msgid "Right"
 
 #: hacks/config/squiral.xml.h:12
 msgid "Right"
@@ -4937,7 +4952,7 @@ msgstr "Droite"
 
 #: hacks/config/squiral.xml.h:17
 msgid "Squiral"
 
 #: hacks/config/squiral.xml.h:17
 msgid "Squiral"
-msgstr "Spirale carrées"
+msgstr "Spirale carrées"
 
 #: hacks/config/ssystem.xml.h:1
 msgid "SSystem"
 
 #: hacks/config/ssystem.xml.h:1
 msgid "SSystem"
@@ -4968,12 +4983,12 @@ msgid ""
 "by Marcelo Vianna's third Escher GL hack, this one draws an ``infinite'' "
 "staircase."
 msgstr ""
 "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''."
+"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"
 
 #: hacks/config/starfish.xml.h:1
 msgid "Color Gradients"
-msgstr "Dégradés de couleur"
+msgstr "Dégradés de couleur"
 
 #: hacks/config/starfish.xml.h:7
 msgid "Pulsating Blob"
 
 #: hacks/config/starfish.xml.h:7
 msgid "Pulsating Blob"
@@ -4981,7 +4996,7 @@ msgstr "Tache pulsatile"
 
 #: hacks/config/starfish.xml.h:10
 msgid "Starfish"
 
 #: hacks/config/starfish.xml.h:10
 msgid "Starfish"
-msgstr "Étoile de mer"
+msgstr "Étoile de mer"
 
 #: hacks/config/starfish.xml.h:13
 msgid ""
 
 #: hacks/config/starfish.xml.h:13
 msgid ""
@@ -4990,10 +5005,10 @@ msgid ""
 "to lay down a field of colors, which are then cycled. The motion is very "
 "organic. Written by Jamie Zawinski."
 msgstr ""
 "to lay down a field of colors, which are then cycled. The motion is very "
 "organic. Written by Jamie Zawinski."
 msgstr ""
-"Génère une séquence de motifs ondulants en forme d'étoiles qui pulsent, "
+"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 "
 "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."
+"créer un champ de couleurs, qui présente des cycles. Le mouvement est très "
+"organique. Écrit par Jamie Zawinski."
 
 #: hacks/config/starwars.xml.h:2
 msgid "Anti-aliased Lines"
 
 #: hacks/config/starwars.xml.h:2
 msgid "Anti-aliased Lines"
@@ -5001,7 +5016,7 @@ msgstr "Lignes anti-alias"
 
 #: hacks/config/starwars.xml.h:3
 msgid "Centered Text"
 
 #: hacks/config/starwars.xml.h:3
 msgid "Centered Text"
-msgstr "Texte centré"
+msgstr "Texte centré"
 
 #: hacks/config/starwars.xml.h:4
 msgid ""
 
 #: hacks/config/starwars.xml.h:4
 msgid ""
@@ -5009,8 +5024,8 @@ msgid ""
 "a star field, like at the beginning of the movie of the same name. Written "
 "by Jamie Zawinski and Claudio Matauoka."
 msgstr ""
 "a star field, like at the beginning of the movie of the same name. Written "
 "by Jamie Zawinski and Claudio Matauoka."
 msgstr ""
-"Fait défiler lentement un texte en diagonale sur un champ stellaire, comme "
-"au début du film du même nom. Écrit par Jamie Zawinski et Claudio Matauoka."
+"Fait défiler lentement un texte en diagonale sur un champ stellaire, comme "
+"au début du film du même nom. Écrit par Jamie Zawinski et Claudio Matauoka."
 
 #: hacks/config/starwars.xml.h:5
 msgid "Fade Out"
 
 #: hacks/config/starwars.xml.h:5
 msgid "Fade Out"
@@ -5018,11 +5033,11 @@ msgstr "Fondu au noir"
 
 #: hacks/config/starwars.xml.h:7
 msgid "Flush Left Text"
 
 #: hacks/config/starwars.xml.h:7
 msgid "Flush Left Text"
-msgstr "Décaler le texte vers la gauche"
+msgstr "Décaler le texte vers la gauche"
 
 #: hacks/config/starwars.xml.h:8
 msgid "Flush Right Text"
 
 #: hacks/config/starwars.xml.h:8
 msgid "Flush Right Text"
-msgstr "Décaler le texte vers la droite"
+msgstr "Décaler le texte vers la droite"
 
 #: hacks/config/starwars.xml.h:9
 msgid "Font Point Size"
 
 #: hacks/config/starwars.xml.h:9
 msgid "Font Point Size"
@@ -5030,11 +5045,11 @@ msgstr "Taille de police"
 
 #: hacks/config/starwars.xml.h:10
 msgid "Scroll Speed"
 
 #: hacks/config/starwars.xml.h:10
 msgid "Scroll Speed"
-msgstr "Vitesse de défilement"
+msgstr "Vitesse de défilement"
 
 #: hacks/config/starwars.xml.h:13
 msgid "Star Rotation Speed"
 
 #: hacks/config/starwars.xml.h:13
 msgid "Star Rotation Speed"
-msgstr "Vitesse de rotation des étoiles"
+msgstr "Vitesse de rotation des étoiles"
 
 #: hacks/config/starwars.xml.h:14
 msgid "StarWars"
 
 #: hacks/config/starwars.xml.h:14
 msgid "StarWars"
@@ -5050,11 +5065,11 @@ msgstr "Lignes de texte"
 
 #: hacks/config/starwars.xml.h:18
 msgid "Thick Lines"
 
 #: hacks/config/starwars.xml.h:18
 msgid "Thick Lines"
-msgstr "Lignes épaisses"
+msgstr "Lignes épaisses"
 
 #: hacks/config/starwars.xml.h:19
 msgid "Wrap Long Lines"
 
 #: hacks/config/starwars.xml.h:19
 msgid "Wrap Long Lines"
-msgstr "Retour à la ligne"
+msgstr "Retour à la ligne"
 
 #: hacks/config/stonerview.xml.h:1
 msgid ""
 
 #: hacks/config/stonerview.xml.h:1
 msgid ""
@@ -5062,13 +5077,13 @@ msgid ""
 "patterns. Written by Andrew Plotkin, based on SGI's `electropaint' "
 "screensaver."
 msgstr ""
 "patterns. Written by Andrew Plotkin, based on SGI's `electropaint' "
 "screensaver."
 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 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."
 
 #: hacks/config/stonerview.xml.h:3
 msgid "StonerView"
 
 #: hacks/config/stonerview.xml.h:3
 msgid "StonerView"
-msgstr "Spirale psyché"
+msgstr "Spirale psyché"
 
 #: hacks/config/strange.xml.h:1
 msgid "Curviness"
 
 #: hacks/config/strange.xml.h:1
 msgid "Curviness"
@@ -5076,7 +5091,7 @@ msgstr "Courbure"
 
 #: hacks/config/strange.xml.h:9
 msgid "Strange"
 
 #: hacks/config/strange.xml.h:9
 msgid "Strange"
-msgstr "Étrange"
+msgstr "Étrange"
 
 #: hacks/config/strange.xml.h:10
 msgid ""
 
 #: hacks/config/strange.xml.h:10
 msgid ""
@@ -5084,9 +5099,9 @@ msgid ""
 "field of dots that swoops and twists around. The motion is very nice. "
 "Written by Massimino Pascal."
 msgstr ""
 "field of dots that swoops and twists around. The motion is very nice. "
 "Written by Massimino Pascal."
 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."
+"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."
 
 #: hacks/config/superquadrics.xml.h:2
 msgid ""
 
 #: hacks/config/superquadrics.xml.h:2
 msgid ""
@@ -5094,10 +5109,10 @@ msgid ""
 "on a Commodore 64 in 1987, as a 320x200 black and white wireframe. Now it is "
 "GL and has specular reflections."
 msgstr ""
 "on a Commodore 64 in 1987, as a 320x200 black and white wireframe. Now it is "
 "GL and has specular reflections."
 msgstr ""
-"Ed Mackey déclare avoir écrit la première version de ce programme en langage "
+"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 "
 "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."
+"320x200 noir et blanc. Il est désormais en GL et présente des réflexions "
+"spéculaires."
 
 #: hacks/config/superquadrics.xml.h:10
 msgid "Superquadrics"
 
 #: hacks/config/superquadrics.xml.h:10
 msgid "Superquadrics"
@@ -5110,9 +5125,9 @@ msgid ""
 "There is also a cool Java applet of a similar concept."
 msgstr ""
 "Autre motifs fluides et tourbillonnants. Cette version est de M. Dobie et R. "
 "There is also a cool Java applet of a similar concept."
 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é "
+"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 "
 "FlowFazer. Il existe aussi une chouette applet Java avec un concept "
-"apparenté."
+"apparenté."
 
 #: hacks/config/swirl.xml.h:8
 msgid "Swirl"
 
 #: hacks/config/swirl.xml.h:8
 msgid "Swirl"
@@ -5120,7 +5135,7 @@ msgstr "Tourbillon"
 
 #: hacks/config/t3d.xml.h:1
 msgid "0 deg"
 
 #: hacks/config/t3d.xml.h:1
 msgid "0 deg"
-msgstr ""
+msgstr ""
 
 #: hacks/config/t3d.xml.h:2
 msgid "5 Minute Tick Marks"
 
 #: hacks/config/t3d.xml.h:2
 msgid "5 Minute Tick Marks"
@@ -5128,7 +5143,7 @@ msgstr "Marques toutes les 5 minutes"
 
 #: hacks/config/t3d.xml.h:3
 msgid "90 deg"
 
 #: hacks/config/t3d.xml.h:3
 msgid "90 deg"
-msgstr ""
+msgstr "90°"
 
 #: hacks/config/t3d.xml.h:4
 msgid "Bigger"
 
 #: hacks/config/t3d.xml.h:4
 msgid "Bigger"
@@ -5155,15 +5170,14 @@ msgid ""
 "This draws a working analog clock composed of floating, throbbing bubbles. "
 "Written by Bernd Paysan."
 msgstr ""
 "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."
+"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:17
 
 #: hacks/config/t3d.xml.h:16
 msgid "Turn Side-to-Side"
 msgstr "Retourner"
 
 #: hacks/config/t3d.xml.h:17
-#, fuzzy
 msgid "Wobbliness"
 msgstr "Oscillation"
 
 msgid "Wobbliness"
 msgstr "Oscillation"
 
@@ -5172,7 +5186,7 @@ msgid ""
 "Displays a view of the ``Bird in a Thornbush'' fractal. Written by Tim "
 "Auckland."
 msgstr ""
 "Displays a view of the ``Bird in a Thornbush'' fractal. Written by Tim "
 "Auckland."
 msgstr ""
-"Affiche la fractale de l' ''oiseau dans un buisson épineux''. Écrit par Tim "
+"Affiche la fractale de l'«oiseau dans un buisson épineux». Écrit par Tim "
 "Auckland."
 
 #: hacks/config/thornbird.xml.h:6
 "Auckland."
 
 #: hacks/config/thornbird.xml.h:6
@@ -5181,15 +5195,15 @@ msgstr "Points"
 
 #: hacks/config/thornbird.xml.h:12
 msgid "Thornbird"
 
 #: hacks/config/thornbird.xml.h:12
 msgid "Thornbird"
-msgstr "Buisson épineux"
+msgstr "Buisson épineux"
 
 #: hacks/config/triangle.xml.h:2
 msgid ""
 "Generates random mountain ranges using iterative subdivision of triangles. "
 "Written by Tobias Gloth."
 msgstr ""
 
 #: hacks/config/triangle.xml.h:2
 msgid ""
 "Generates random mountain ranges using iterative subdivision of triangles. "
 "Written by Tobias Gloth."
 msgstr ""
-"Génère des chaînes de montagne aléatoires en utilisant la subdivision "
-"itérative de triangles. Écrit par Tobias Gloth."
+"Génère des chaînes de montagne aléatoires en utilisant la subdivision "
+"itérative de triangles. Écrit par Tobias Gloth."
 
 #: hacks/config/triangle.xml.h:7
 msgid "Triangle"
 
 #: hacks/config/triangle.xml.h:7
 msgid "Triangle"
@@ -5200,8 +5214,8 @@ msgid ""
 "This draws line- and arc-based Truchet patterns that tile the screen. "
 "Written by Adrian Likins."
 msgstr ""
 "This draws line- and arc-based Truchet patterns that tile the screen. "
 "Written by Adrian Likins."
 msgstr ""
-"Dessine des motifs de Truchet basés sur des lignes et des arcs, qui "
-"recouvrent l'écran. Écrit par Adrian Likins."
+"Dessine des motifs de Truchet basés sur des lignes et des arcs, qui "
+"recouvrent l'écran. Écrit par Adrian Likins."
 
 #: hacks/config/truchet.xml.h:5
 msgid "Truchet"
 
 #: hacks/config/truchet.xml.h:5
 msgid "Truchet"
@@ -5211,7 +5225,7 @@ msgstr "Truchet"
 msgid ""
 "Divides the screen into a grid, and plucks them. Written by Dan Bornstein."
 msgstr ""
 msgid ""
 "Divides the screen into a grid, and plucks them. Written by Dan Bornstein."
 msgstr ""
-"Divise l'écran en petits rectangles, qui sont ensuite enlevés. Écrit par Dan "
+"Divise l'écran en petits rectangles, qui sont ensuite enlevés. Écrit par Dan "
 "Bornstein."
 
 #: hacks/config/twang.xml.h:6
 "Bornstein."
 
 #: hacks/config/twang.xml.h:6
@@ -5219,12 +5233,10 @@ msgid "Jumpy"
 msgstr "Sautillant"
 
 #: hacks/config/twang.xml.h:11
 msgstr "Sautillant"
 
 #: hacks/config/twang.xml.h:11
-#, fuzzy
 msgid "Springiness"
 msgid "Springiness"
-msgstr "Flexibilité"
+msgstr "Flexibilité"
 
 #: hacks/config/twang.xml.h:13
 
 #: hacks/config/twang.xml.h:13
-#, fuzzy
 msgid "Transference"
 msgstr "Migration"
 
 msgid "Transference"
 msgstr "Migration"
 
@@ -5234,11 +5246,11 @@ msgstr "Twang"
 
 #: hacks/config/vermiculate.xml.h:1
 msgid "Draws squiggly worm-like paths. Written by Tyler Pierce."
 
 #: 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."
+msgstr "Trace des gribouillis vermiculés. Écrit par Tyler Pierce."
 
 #: hacks/config/vermiculate.xml.h:2
 msgid "Vermiculate"
 
 #: hacks/config/vermiculate.xml.h:2
 msgid "Vermiculate"
-msgstr "Vermiculé"
+msgstr "Vermiculé"
 
 #: hacks/config/vidwhacker.xml.h:2 hacks/config/webcollage.xml.h:2
 msgid "2 seconds"
 
 #: hacks/config/vidwhacker.xml.h:2 hacks/config/webcollage.xml.h:2
 msgid "2 seconds"
@@ -5246,7 +5258,7 @@ msgstr "2 secondes"
 
 #: hacks/config/vidwhacker.xml.h:4
 msgid "Image Directory"
 
 #: hacks/config/vidwhacker.xml.h:4
 msgid "Image Directory"
-msgstr "Répertoire d'images"
+msgstr "Répertoire d'images"
 
 #: hacks/config/vidwhacker.xml.h:5
 msgid ""
 
 #: hacks/config/vidwhacker.xml.h:5
 msgid ""
@@ -5257,12 +5269,12 @@ msgid ""
 "displays that image for a few seconds, and does it again. This works really "
 "well if you just feed broadcast television into it."
 msgstr ""
 "displays that image for a few seconds, and does it again. This works really "
 "well if you just feed broadcast television into it."
 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.) "
+"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 "
 "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."
 
 #: hacks/config/vidwhacker.xml.h:6
 msgid "VidWhacker"
 
 #: hacks/config/vidwhacker.xml.h:6
 msgid "VidWhacker"
@@ -5274,8 +5286,8 @@ msgid ""
 "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."
 msgstr ""
 "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."
 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 "
+"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."
 
 #: hacks/config/vines.xml.h:8
 "par Tracy Camp et David Hansen."
 
 #: hacks/config/vines.xml.h:8
@@ -5290,11 +5302,10 @@ msgstr "Dessiner des taches"
 msgid ""
 "Draws a colorful random-walk, in various forms. Written by Rick Campbell."
 msgstr ""
 msgid ""
 "Draws a colorful random-walk, in various forms. Written by Rick Campbell."
 msgstr ""
-"Dessine une promenade aléatoire colorée, sous plusieurs formes. Écrit par "
+"Dessine une promenade aléatoire colorée, sous plusieurs formes. Écrit par "
 "Rick Campbell."
 
 #: hacks/config/wander.xml.h:14
 "Rick Campbell."
 
 #: hacks/config/wander.xml.h:14
-#, fuzzy
 msgid "Sustain"
 msgstr "Conserver"
 
 msgid "Sustain"
 msgstr "Conserver"
 
@@ -5304,7 +5315,7 @@ msgstr "Fichier dictionnaire"
 
 #: hacks/config/webcollage.xml.h:5
 msgid "Overall Filter Program"
 
 #: hacks/config/webcollage.xml.h:5
 msgid "Overall Filter Program"
-msgstr "Programme de filtrage général"
+msgstr "Programme de filtrage général"
 
 #: hacks/config/webcollage.xml.h:6
 msgid "Per-Image Filter Program"
 
 #: hacks/config/webcollage.xml.h:6
 msgid "Per-Image Filter Program"
@@ -5320,18 +5331,18 @@ msgid ""
 "This is because most of the web is pictures of text. Which is pretty sad.) "
 "Written by Jamie Zawinski."
 msgstr ""
 "This is because most of the web is pictures of text. Which is pretty sad.) "
 "Written by Jamie Zawinski."
 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."
+"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."
 
 #: hacks/config/webcollage.xml.h:10
 msgid "URL Timeout"
 
 #: hacks/config/webcollage.xml.h:10
 msgid "URL Timeout"
-msgstr "Délai d'expiration de l'URL"
+msgstr "Délai d'expiration de l'URL"
 
 #: hacks/config/webcollage.xml.h:11
 msgid "WebCollage"
 
 #: hacks/config/webcollage.xml.h:11
 msgid "WebCollage"
@@ -5343,13 +5354,12 @@ msgid ""
 "strength of each forcefield changes continuously, and it is also switched on "
 "and off at random. By Paul 'Joey' Clark."
 msgstr ""
 "strength of each forcefield changes continuously, and it is also switched on "
 "and off at random. By Paul 'Joey' Clark."
 msgstr ""
-"Des étoiles flottantes sont influencées par un mélange de simples champs de "
+"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. "
 "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' "
+"Les champs sont également  activés et désactivés au hasard. Par Paul 'Joey' "
 "Clark."
 
 #: hacks/config/whirlwindwarp.xml.h:7
 "Clark."
 
 #: hacks/config/whirlwindwarp.xml.h:7
-#, fuzzy
 msgid "Trail Size"
 msgstr "Taille de la queue"
 
 msgid "Trail Size"
 msgstr "Taille de la queue"
 
@@ -5364,7 +5374,7 @@ msgstr "Amplitude"
 #: hacks/config/whirlygig.xml.h:2
 msgid "Draws zooming chains of sinusoidal spots. Written by Ashton Trey Belew."
 msgstr ""
 #: hacks/config/whirlygig.xml.h:2
 msgid "Draws zooming chains of sinusoidal spots. Written by Ashton Trey Belew."
 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."
 
 #: hacks/config/whirlygig.xml.h:5
 msgid "Whirlies"
 
 #: hacks/config/whirlygig.xml.h:5
 msgid "Whirlies"
@@ -5380,8 +5390,8 @@ msgid ""
 "screen. Written by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik "
 "Theiling."
 msgstr ""
 "screen. Written by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik "
 "Theiling."
 msgstr ""
-"Ancien hack xlock qui dessine des vers multicolores rampant sur l'écran. "
-"Écrit par Brad Taylor, Dave Lemke, Boris Putanec et Henrik Theiling."
+"Ancien hack xlock qui dessine des vers multicolores rampant sur l'écran. "
+"Écrit par Brad Taylor, Dave Lemke, Boris Putanec et Henrik Theiling."
 
 #: hacks/config/xaos.xml.h:1
 msgid "XaoS"
 
 #: hacks/config/xaos.xml.h:1
 msgid "XaoS"
@@ -5413,7 +5423,7 @@ msgstr "Afficher les secondes"
 
 #: hacks/config/xdaliclock.xml.h:5
 msgid "Huge Font"
 
 #: hacks/config/xdaliclock.xml.h:5
 msgid "Huge Font"
-msgstr "Très grande police"
+msgstr "Très grande police"
 
 #: hacks/config/xdaliclock.xml.h:6 hacks/config/xmatrix.xml.h:9
 msgid "Large Font"
 
 #: hacks/config/xdaliclock.xml.h:6 hacks/config/xmatrix.xml.h:9
 msgid "Large Font"
@@ -5453,7 +5463,7 @@ msgstr "Jour  Dim"
 
 #: hacks/config/xearth.xml.h:5
 msgid "Display Stars"
 
 #: hacks/config/xearth.xml.h:5
 msgid "Display Stars"
-msgstr "Afficher les étoiles"
+msgstr "Afficher les étoiles"
 
 #: hacks/config/xearth.xml.h:8
 msgid "Label Cities"
 
 #: hacks/config/xearth.xml.h:8
 msgid "Label Cities"
@@ -5461,11 +5471,11 @@ msgstr "Indiquer les villes"
 
 #: hacks/config/xearth.xml.h:9
 msgid "Lower Left"
 
 #: hacks/config/xearth.xml.h:9
 msgid "Lower Left"
-msgstr "Inférieur gauche"
+msgstr "Inférieur gauche"
 
 #: hacks/config/xearth.xml.h:10
 msgid "Lower Right"
 
 #: hacks/config/xearth.xml.h:10
 msgid "Lower Right"
-msgstr "Inférieur droit"
+msgstr "Inférieur droit"
 
 #: hacks/config/xearth.xml.h:13
 msgid "Mercator Projection"
 
 #: hacks/config/xearth.xml.h:13
 msgid "Mercator Projection"
@@ -5477,7 +5487,7 @@ msgstr "Nuit   Dim"
 
 #: hacks/config/xearth.xml.h:15
 msgid "No Stars"
 
 #: hacks/config/xearth.xml.h:15
 msgid "No Stars"
-msgstr "Pas d'étoiles"
+msgstr "Pas d'étoiles"
 
 #: hacks/config/xearth.xml.h:16
 msgid "North/South Rotation"
 
 #: hacks/config/xearth.xml.h:16
 msgid "North/South Rotation"
@@ -5489,11 +5499,11 @@ msgstr "Projection orthographique"
 
 #: hacks/config/xearth.xml.h:19
 msgid "Real Time"
 
 #: hacks/config/xearth.xml.h:19
 msgid "Real Time"
-msgstr "Temps réel"
+msgstr "Temps réel"
 
 #: hacks/config/xearth.xml.h:20
 msgid "Shaded Image"
 
 #: hacks/config/xearth.xml.h:20
 msgid "Shaded Image"
-msgstr "Image ombragée"
+msgstr "Image ombragée"
 
 #: hacks/config/xearth.xml.h:21
 msgid "Sharp"
 
 #: hacks/config/xearth.xml.h:21
 msgid "Sharp"
@@ -5513,11 +5523,11 @@ msgstr "Alignement temporel"
 
 #: hacks/config/xearth.xml.h:29
 msgid "Upper Left"
 
 #: hacks/config/xearth.xml.h:29
 msgid "Upper Left"
-msgstr "Supérieur gauche"
+msgstr "Supérieur gauche"
 
 #: hacks/config/xearth.xml.h:30
 msgid "Upper Right"
 
 #: hacks/config/xearth.xml.h:30
 msgid "Upper Right"
-msgstr "Supérieur droit"
+msgstr "Supérieur droit"
 
 #: hacks/config/xearth.xml.h:31
 msgid ""
 
 #: hacks/config/xearth.xml.h:31
 msgid ""
@@ -5560,13 +5570,13 @@ 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."
 msgstr ""
 "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."
 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 "
+"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."
 
 #: hacks/config/xflame.xml.h:3
 msgid "Enable Blooming"
 "nombreuses contributions."
 
 #: hacks/config/xflame.xml.h:3
 msgid "Enable Blooming"
-msgstr "Activer l'étendue"
+msgstr "Activer l'étendue"
 
 #: hacks/config/xflame.xml.h:8
 msgid "Xflame"
 
 #: hacks/config/xflame.xml.h:8
 msgid "Xflame"
@@ -5579,10 +5589,10 @@ msgid ""
 "Shining,'' you won't get it. Those who have describe this hack as "
 "``inspired.''"
 msgstr ""
 "Shining,'' you won't get it. Those who have describe this hack as "
 "``inspired.''"
 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é''."
+"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é»."
 
 #: hacks/config/xjack.xml.h:5
 msgid "Xjack"
 
 #: hacks/config/xjack.xml.h:5
 msgid "Xjack"
@@ -5594,9 +5604,9 @@ msgid ""
 "``Lyapunov exponent.'' It has a cool interactive mode, too. Written by Ron "
 "Record."
 msgstr ""
 "``Lyapunov exponent.'' It has a cool interactive mode, too. Written by Ron "
 "Record."
 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."
+"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."
 
 #: hacks/config/xlyap.xml.h:2
 msgid "Xlyap"
 
 #: hacks/config/xlyap.xml.h:2
 msgid "Xlyap"
@@ -5607,8 +5617,8 @@ msgid ""
 "A rendition of the text scrolls seen in the movie ``The Matrix.'' Written by "
 "Jamie Zawinski."
 msgstr ""
 "A rendition of the text scrolls seen in the movie ``The Matrix.'' Written by "
 "Jamie Zawinski."
 msgstr ""
-"Reproduction du texte qui défile à l'écran au début du film ''Matrix''. "
-"Écrit par Jamie Zawinski."
+"Reproduction du texte qui défile à l'écran au début du film «Matrix». Écrit "
+"par Jamie Zawinski."
 
 #: hacks/config/xmatrix.xml.h:2
 msgid "Binary Encoding"
 
 #: hacks/config/xmatrix.xml.h:2
 msgid "Binary Encoding"
@@ -5624,11 +5634,11 @@ msgstr "Complet"
 
 #: hacks/config/xmatrix.xml.h:7
 msgid "Genetic Encoding"
 
 #: hacks/config/xmatrix.xml.h:7
 msgid "Genetic Encoding"
-msgstr "Encodage génétique"
+msgstr "Encodage génétique"
 
 #: hacks/config/xmatrix.xml.h:8
 msgid "Hexadecimal Encoding"
 
 #: hacks/config/xmatrix.xml.h:8
 msgid "Hexadecimal Encoding"
-msgstr "Encodage hexadécimal"
+msgstr "Encodage hexadécimal"
 
 #: hacks/config/xmatrix.xml.h:10
 msgid "Matrix Encoding"
 
 #: hacks/config/xmatrix.xml.h:10
 msgid "Matrix Encoding"
@@ -5636,11 +5646,11 @@ msgstr "Encodage Matrix"
 
 #: hacks/config/xmatrix.xml.h:11
 msgid "Phone Number"
 
 #: hacks/config/xmatrix.xml.h:11
 msgid "Phone Number"
-msgstr "Numéro de téléphone"
+msgstr "Numéro de téléphone"
 
 #: hacks/config/xmatrix.xml.h:12
 msgid "Run Trace Program"
 
 #: hacks/config/xmatrix.xml.h:12
 msgid "Run Trace Program"
-msgstr "Exécuter le programme de suivi"
+msgstr "Exécuter le programme de suivi"
 
 #: hacks/config/xmatrix.xml.h:13
 msgid "Slider Algorithm"
 
 #: hacks/config/xmatrix.xml.h:13
 msgid "Slider Algorithm"
@@ -5656,11 +5666,11 @@ msgstr "Xmatrix"
 
 #: hacks/config/xmountains.xml.h:2
 msgid "Reflections"
 
 #: hacks/config/xmountains.xml.h:2
 msgid "Reflections"
-msgstr "Réflexions"
+msgstr "Réflexions"
 
 #: hacks/config/xmountains.xml.h:3
 msgid "Side View"
 
 #: hacks/config/xmountains.xml.h:3
 msgid "Side View"
-msgstr "Vue latérale"
+msgstr "Vue latérale"
 
 #: hacks/config/xmountains.xml.h:6
 msgid "Top View"
 
 #: hacks/config/xmountains.xml.h:6
 msgid "Top View"
@@ -5685,8 +5695,8 @@ msgid ""
 "Draws a few swarms of critters flying around the screen, with nicely faded "
 "color trails behind them. Written by Chris Leger."
 msgstr ""
 "Draws a few swarms of critters flying around the screen, with nicely faded "
 "color trails behind them. Written by Chris Leger."
 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."
+"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."
 
 #: hacks/config/xrayswarm.xml.h:5
 msgid "XRaySwarm"
 
 #: hacks/config/xrayswarm.xml.h:5
 msgid "XRaySwarm"
@@ -5711,7 +5721,7 @@ msgid ""
 "Simulates that pen-in-nested-plastic-gears toy from your childhood. By Rohit "
 "Singh."
 msgstr ""
 "Simulates that pen-in-nested-plastic-gears toy from your childhood. By Rohit "
 "Singh."
 msgstr ""
-"Simule le célèbre jouet de notre enfance, constitué d'un stylo logé dans un "
+"Simule le célèbre jouet de notre enfance, constitué d'un stylo logé dans un "
 "engrenage en plastique. Par Rohit Singh."
 
 #: hacks/config/xspirograph.xml.h:6
 "engrenage en plastique. Par Rohit Singh."
 
 #: hacks/config/xspirograph.xml.h:6
@@ -5720,20 +5730,19 @@ msgstr "XSpiroGraph"
 
 #: hacks/config/xteevee.xml.h:1
 msgid "Color Bars Enabled"
 
 #: hacks/config/xteevee.xml.h:1
 msgid "Color Bars Enabled"
-msgstr "Barres de couleur activées"
+msgstr "Barres de couleur activées"
 
 #: hacks/config/xteevee.xml.h:2
 
 #: hacks/config/xteevee.xml.h:2
-#, fuzzy
 msgid "Cycle Through Modes"
 msgid "Cycle Through Modes"
-msgstr "Cycle de modes"
+msgstr "Cycle à travers les modes"
 
 #: hacks/config/xteevee.xml.h:3
 msgid "Rolling Enabled"
 
 #: hacks/config/xteevee.xml.h:3
 msgid "Rolling Enabled"
-msgstr "Baladage activé"
+msgstr "Baladage activé"
 
 #: hacks/config/xteevee.xml.h:4
 msgid "Static Enabled"
 
 #: hacks/config/xteevee.xml.h:4
 msgid "Static Enabled"
-msgstr "Parasites activés"
+msgstr "Parasites activés"
 
 #: hacks/config/xteevee.xml.h:5
 msgid "XTeeVee"
 
 #: hacks/config/xteevee.xml.h:5
 msgid "XTeeVee"
@@ -5744,12 +5753,12 @@ msgid ""
 "XTeeVee simulates various television problems, including static, loss of "
 "vertical hold, and a test pattern. By Greg Knauss."
 msgstr ""
 "XTeeVee simulates various television problems, including static, loss of "
 "vertical hold, and a test pattern. By Greg Knauss."
 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."
+"XTeeVee simule différents problèmes de télévision comme les parasites, la "
+"perte de stabilité verticale et la mire. Par Greg Knauss."
 
 #: hacks/config/zoom.xml.h:3
 msgid "Lens Offset"
 
 #: hacks/config/zoom.xml.h:3
 msgid "Lens Offset"
-msgstr "Décalage lentille"
+msgstr "Décalage lentille"
 
 #: hacks/config/zoom.xml.h:4
 msgid "Lenses"
 
 #: hacks/config/zoom.xml.h:4
 msgid "Lenses"
@@ -5761,9 +5770,507 @@ msgid ""
 "option the result is like looking through many overlapping lenses rather "
 "than just a simple zoom. Written by James Macnicol."
 msgstr ""
 "option the result is like looking through many overlapping lenses rather "
 "than just a simple zoom. Written by James Macnicol."
 msgstr ""
-"Zoome sur une partie de l'écran et se déplace. Avec l'option - lentilles, le "
-"résultat ressemble à la superposition de lentilles plutôt qu'à un simple "
-"zoom. Écrit par James Macnicol."
+"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 "
+"zoom. Érit par James Macnicol."
+
+#~ msgid "reason: %s\n"
+#~ msgstr "Raison: %s\n"
+
+#~ msgid "Not"
+#~ msgstr "Non"
+
+#~ msgid "Installed"
+#~ msgstr "Installé"
+
+#~ msgid "Screensaver Preferences"
+#~ msgstr "Préférences Économiseur d'écran"
+
+#~ msgid "Change screensaver properties"
+#~ msgstr "Changer les propriétés de l'économiseur d'écran"
+
+#~ msgid "How long after the screen blanks until a password will be required."
+#~ msgstr "Durée entre le verrouillage et la nécessité d'un mot de passe"
+
+#~ msgid "How long before the screensaver activates."
+#~ msgstr "Combien de temps avant que l'économiseurs s'active."
+
+#~ msgid ""
+#~ "How long each display mode should run before choosing a new one (in "
+#~ "Random mode.)"
+#~ msgstr "Combien de temps avant le changement de mode (en mode Aléatoire)"
+
+#~ msgid "How long until the monitor goes completely black."
+#~ msgstr "Durée avant que le moniteur passe complètement au noir."
+
+#~ msgid ""
+#~ "Not\n"
+#~ "Installed"
+#~ msgstr ""
+#~ "Non\n"
+#~ "Installé"
+
+#~ msgid ""
+#~ "Whether the image-manipulating modes should operate on images captured "
+#~ "from the system's video input (if there is one.)"
+#~ msgstr ""
+#~ "Les modes qui manipulent des images sont-ils autorisé à utiliser des "
+#~ "images capturées par l'entrée vidéo du système (si il y en a une)."
+
+#~ msgid "not installed"
+#~ msgstr "non installé"
+
+#~ msgid "Rarely"
+#~ msgstr "Rarement"
+
+#~ msgid "Turn speed"
+#~ msgstr "Vitesse de rotation"
+
+#~ msgid "Withdraw freqency"
+#~ msgstr "Fréquence de retrait"
+
+#~ msgid "Draw Eyes"
+#~ msgstr "Dessiner les yeux"
+
+#~ msgid "Atunnel"
+#~ msgstr "Tunnel GL"
+
+#~ msgid "Use light"
+#~ msgstr "Utiliser l'éclairage"
+
+#~ msgid "Barcode"
+#~ msgstr "Code barre"
+
+#~ msgid "Barcode Clock (24 Hour)"
+#~ msgstr "Horloge code barre (24 Heures)"
+
+#~ msgid "Barcode Clock (AM/PM)"
+#~ msgstr "Horloge code barre (12 Heures)"
+
+#~ msgid "Scrolling Barcodes"
+#~ msgstr "Codes barre déroulants"
+
+#~ msgid "BlockTube"
+#~ msgstr "Tube de blocs"
+
+#~ msgid "Color Change Time"
+#~ msgstr "Durée de changement de couleur"
+
+#~ msgid "Color Hold Time"
+#~ msgstr "Durée de rétention de couleur"
+
+#~ msgid "Reflective Blocks"
+#~ msgstr "Blocs réfléchissants"
+
+#~ msgid "Solid Blocks"
+#~ msgstr "Blocs uniforme"
+
+#~ msgid "Beefy Cow"
+#~ msgstr "Vache normande"
+
+#~ msgid "Bounce Speed"
+#~ msgstr "Vitesse de rebond"
+
+#~ msgid "BouncingCow"
+#~ msgstr "Vache bondissante"
+
+#~ msgid "Herd"
+#~ msgstr "Troupeau"
+
+#~ msgid "Moo"
+#~ msgstr "Meuh"
+
+#~ msgid "Number of Cows"
+#~ msgstr "Nombre de vaches"
+
+#~ msgid "Wireframe Cow"
+#~ msgstr "Vache fil de fer"
+
+#~ msgid "Apple II"
+#~ msgstr "Apple II"
+
+#~ msgid "HPUX"
+#~ msgstr "HPUX"
+
+#~ msgid "Linux"
+#~ msgstr "Linux"
+
+#~ msgid "MacOS X"
+#~ msgstr "MacOS X"
+
+#~ msgid "OS/390"
+#~ msgstr "OS/390"
+
+#~ msgid "Windows 3.1"
+#~ msgstr "Windows 3.1"
+
+#~ msgid "Initial Density"
+#~ msgstr "Densité initiale"
+
+#~ msgid "Max Age"
+#~ msgstr "Age max."
+
+#~ msgid "Old"
+#~ msgstr "Vieux"
+
+#~ msgid "Young"
+#~ msgstr "Jeune"
+
+#~ msgid "CubeStorm"
+#~ msgstr "Tempète de cubes"
+
+#~ msgid "Motion Speed"
+#~ msgstr "Vitesse de déplacement"
+
+#~ msgid "Number of Cubes"
+#~ msgstr "Nombre de cubes"
+
+#~ msgid "Strut Thickness"
+#~ msgstr "Épaisseur"
+
+#~ msgid "Frame Rate"
+#~ msgstr "Vitesse"
+
+#~ msgid "Hide Sheep"
+#~ msgstr "Cache le mouton"
+
+#~ msgid "Megabytes of Local Sheep Storage"
+#~ msgstr "Mégaoctet de mémoire pour le mouton"
+
+#~ msgid "Nickname"
+#~ msgstr "Alias"
+
+#~ msgid "Repititions of each Sheep"
+#~ msgstr "Répétition de chaque mouton"
+
+#~ msgid "Audi Quattro (5 cylinders)"
+#~ msgstr "Audi Quattro (5 cylindres)"
+
+#~ msgid "BMW M3 (4 cylinders)"
+#~ msgstr "BMW M3 (4 cylindres)"
+
+#~ msgid "BMW M5 (6 cylinders)"
+#~ msgstr "BMW M5 (6 cylindres)"
+
+#~ msgid "Corvette Z06 (8 cylinders, V)"
+#~ msgstr "Corvette Z06 (8 cylindres en V)"
+
+#~ msgid "Dodge Viper (10 cylinders, V)"
+#~ msgstr "Dodge Viper (10 cylindres en V)"
+
+#~ msgid "Honda Insight (3 cylinders)"
+#~ msgstr "Honda Insight (3 cylindres)"
+
+#~ msgid "Jaguar XKE (12 cylinders, V)"
+#~ msgstr "Jaguar XKE (12 cylindres en V)"
+
+#~ msgid "Porsche 911 (6 cylinders, flat)"
+#~ msgstr "Porsche 911 (6 cylindres à plat)"
+
+#~ msgid "Random Engine"
+#~ msgstr "Engin aléatoire"
+
+#~ msgid "Show Engine Name"
+#~ msgstr "Montre le nom de l'engin"
+
+#~ msgid "Subaru XT (6 cylinders, V)"
+#~ msgstr "Subaru XT (6 cylindres en V)"
+
+#~ msgid "VW Beetle (4 cylinders, flat)"
+#~ msgstr "VW Beetle (4 cylindres à plat)"
+
+#~ msgid "Cooling factor"
+#~ msgstr "Facteur de refroidissement"
+
+#~ msgid "Eruption"
+#~ msgstr "Éruption"
+
+#~ msgid "Heat"
+#~ msgstr "Chaleur"
+
+#~ msgid "Inferno"
+#~ msgstr "Infernale"
+
+#~ msgid "Little"
+#~ msgstr "Peu"
+
+#~ msgid "Negative"
+#~ msgstr "Négative"
+
+#~ msgid "Number of Particles"
+#~ msgstr "Nombre de particules"
+
+#~ msgid "Pleasant"
+#~ msgstr "Plaisante"
+
+#~ msgid "Positive"
+#~ msgstr "Positive"
+
+#~ msgid "Clay"
+#~ msgstr "Argile"
+
+#~ msgid "Rubber"
+#~ msgstr "Caoutchouc"
+
+#~ msgid "Binary"
+#~ msgstr "Binaire"
+
+#~ msgid "Fire"
+#~ msgstr "Feu"
+
+#~ msgid "Flurry"
+#~ msgstr "Bourrasque"
+
+#~ msgid "Insane"
+#~ msgstr "Aliéné"
+
+#~ msgid "Psychedelic"
+#~ msgstr "Psychédélique"
+
+#~ msgid "RGB"
+#~ msgstr "RVB"
+
+#~ msgid "Water"
+#~ msgstr "Eau"
+
+#~ msgid "Air Speed"
+#~ msgstr "Vitesse de l'air"
+
+#~ msgid "Chrome Toasters"
+#~ msgstr "Grille-pain chromé"
+
+#~ msgid "Flying Toasters"
+#~ msgstr "Grille-pain volant"
+
+#~ msgid "Number of Slices"
+#~ msgstr "Nombre de tranches"
+
+#~ msgid "Number of Toasters"
+#~ msgstr "Nombre de grille-pains"
+
+#~ msgid "Solid Colors"
+#~ msgstr "Couleurs unies"
+
+#~ msgid "Swarm"
+#~ msgstr "Essaim"
+
+#~ msgid "Blur Smoothness"
+#~ msgstr "Douceur de flou"
+
+#~ msgid "GLBlur"
+#~ msgstr "Flou GL"
+
+#~ msgid "GLKnots"
+#~ msgstr "Noeuds GL"
+
+#~ 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."
+
+#~ msgid "Segmented"
+#~ msgstr "Segmenté"
+
+#~ msgid "Draw Glyphs"
+#~ msgstr "Dessiner des glyphes"
+
+#~ msgid "Draw Outlines"
+#~ msgstr "Dessiner en fil de fer"
+
+#~ msgid "Draw Solid Boxes"
+#~ msgstr "Dessiner sans texture"
+
+#~ msgid "GLMatrix"
+#~ msgstr "GLMatrix"
+
+#~ msgid "Glyph Density"
+#~ msgstr "Densité des glyphes"
+
+#~ msgid "Glyph Speed"
+#~ msgstr "Vitesse des glyphes"
+
+#~ msgid "Panning"
+#~ msgstr "Panoramique"
+
+#~ msgid "5 Minutes"
+#~ msgstr "5 minutes"
+
+#~ msgid "50%"
+#~ msgstr "50%"
+
+#~ msgid "Always show at least this much of the image:"
+#~ msgstr "Montre au moins ce nombre d'images :"
+
+#~ msgid "Crossfade Duration:"
+#~ msgstr "Durée du fondu :"
+
+#~ msgid "Frame Rate:"
+#~ msgstr "Vitesse d'affichage :"
+
+#~ msgid "GLSlideshow"
+#~ msgstr "Présentation GL"
+
+#~ msgid "Pan/Zoom Duration:"
+#~ msgstr "Durée Pan/Zoom :"
+
+#~ msgid "Time until loading a new image:"
+#~ msgstr "Temps avant le chargement d'une nouvelle image :"
+
+#~ msgid "Dot size"
+#~ msgstr "Taille des points"
+
+#~ msgid "Gravity points"
+#~ msgstr "Points de gravité"
+
+#~ msgid "Halftone"
+#~ msgstr "Tramage"
+
+#~ msgid "Maximum mass"
+#~ msgstr "Masse max."
+
+#~ msgid "Maximum speed"
+#~ msgstr "Vitesse max."
+
+#~ msgid "Minimum mass"
+#~ msgstr "Masse min."
+
+#~ msgid "Minimum speed"
+#~ msgstr "Vitesse min."
+
+#~ msgid "4D Hypertorus"
+#~ msgstr "Hypertore 4D"
+
+#~ msgid "Color Wheel"
+#~ msgstr "Roue des couleurs"
+
+#~ msgid "Display Speed"
+#~ msgstr "Vitesse d'affichage"
+
+#~ msgid "Orthographic 3d"
+#~ msgstr "Projection orthographique 3D"
+
+#~ msgid "Orthographic 4d"
+#~ msgstr "Projection orthographique 4D"
+
+#~ msgid "Perspective 3d"
+#~ msgstr "Perspective 3D"
+
+#~ msgid "Perspective 4d"
+#~ msgstr "Perspective 4D"
+
+#~ msgid "See-Through Bands"
+#~ msgstr "Eléments que l'on peut voir à travers"
+
+#~ msgid "Solid Object"
+#~ msgstr "Objets solides"
+
+#~ msgid "Transparent Surface"
+#~ msgstr "Surface transparente"
+
+#~ msgid "Two-Sided"
+#~ msgstr "2 faces"
+
+#~ msgid "WX Rotation Speed"
+#~ msgstr "Vitesse de rotation X"
+
+#~ msgid "WY Rotation Speed"
+#~ msgstr "Vitesse de rotation Y"
+
+#~ msgid "WZ Rotation Speed"
+#~ msgstr "Vitesse de rotation Z"
+
+#~ msgid "Wireframe Mesh"
+#~ msgstr "Fil de fer"
+
+#~ msgid "XY Rotation Speed"
+#~ msgstr "Vitesse de rotation XY"
+
+#~ msgid "XZ Rotation Speed"
+#~ msgstr "Vitesse de rotation XZ"
+
+#~ msgid "YZ Rotation Speed"
+#~ msgstr "Vitesse de rotation YZ"
+
+#~ msgid "Chrome"
+#~ msgstr "Chrome"
+
+#~ msgid "Clown barf"
+#~ msgstr "Rire de clown"
+
+#~ msgid "Cycle"
+#~ msgstr "Cycles"
+
+#~ msgid "Flower box"
+#~ msgstr "Boîte à fleurs"
+
+#~ msgid "Inertial damping"
+#~ msgstr "Atténuation inertielle"
+
+#~ msgid "JigglyPuff"
+#~ msgstr "JigglyPuff"
+
+#~ msgid "Rotation speed"
+#~ msgstr "Vitesse de rotation"
+
+#~ msgid "Sphere strength"
+#~ msgstr "Force de la sphère"
+
+#~ msgid "none"
+#~ msgstr "Aucun"
+
+#~ msgid "Wander Around the Screen"
+#~ msgstr "Déplacement centré sur l'écran"
+
+#~ msgid "Big"
+#~ msgstr "Élevé"
+
+#~ msgid "MetaBall Movement"
+#~ msgstr "Mouvement méta-balle"
+
+#~ msgid "MetaBall Radius"
+#~ msgstr "Rayon méta-balle"
+
+#~ msgid "MetaBalls"
+#~ msgstr "Méta-Balles"
+
+#~ msgid "Number of MetaBalls"
+#~ msgstr "Nombre de méta-balles"
+
+#~ msgid "Maximum radius"
+#~ msgstr "Rayon max."
+
+#~ msgid "Minimum radius"
+#~ msgstr "Rayon min."
+
+#~ msgid "Border"
+#~ msgstr "Bordure"
+
+#~ msgid "End color"
+#~ msgstr "Couleur finale"
+
+#~ msgid "Start color"
+#~ msgstr "Couleur initiale"
+
+#~ msgid "Subdivision"
+#~ msgstr "Subdivision"
+
+#~ msgid "Twitch"
+#~ msgstr "Mouvement convulsif"
+
+#~ msgid "Circle"
+#~ msgstr "Cercle"
+
+#~ msgid "Leave a trail"
+#~ msgstr "Laisser une traînée"
+
+#~ msgid "Linear"
+#~ msgstr "Linéaire"
+
+#~ msgid "Lissajous"
+#~ msgstr "Figures Lissojous"
+
+#~ msgid "Test"
+#~ msgstr "Test"
 
 
-#~ msgid "MacOS"
-#~ msgstr "MacOS"
+#~ msgid "Use Double Buffering"
+#~ msgstr "Double tampon"
index cf4fd92d7a2fcd5b6c686a9660c1ea1e57921f7c..3243c0b9d7b17de7c1afc4bac5f5f64a16d32c10 100644 (file)
@@ -70,7 +70,10 @@ draw_colorbars (Screen *screen, Visual *visual,
       int xx, yy;
       unsigned int bw, d;
       XGetGeometry (dpy, drawable,
       int xx, yy;
       unsigned int bw, d;
       XGetGeometry (dpy, drawable,
-                    &root, &xx, &yy, &width, &height, &bw, &d);
+                    &root, &xx, &yy,
+                    (unsigned int *) &width,
+                    (unsigned int *) &height,
+                    &bw, &d);
     }
 
   for (j = 0; j < sizeof(colors) / sizeof(*colors); j++)
     }
 
   for (j = 0; j < sizeof(colors) / sizeof(*colors); j++)
@@ -115,10 +118,11 @@ draw_colorbars (Screen *screen, Visual *visual,
     if (logo_map)
       {
         Window root;
     if (logo_map)
       {
         Window root;
-        int logo_width, logo_height;
-        int w = width;
-        int h = height * heights[0] / 100;
-        int x1, y1, bw, d;
+        unsigned int logo_width, logo_height;
+        unsigned int w = width;
+        unsigned int h = height * heights[0] / 100;
+        int x1, y1;
+        unsigned int bw, d;
         XGetGeometry (dpy, logo_map, &root, &x1, &y1,
                       &logo_width, &logo_height, &bw, &d);
         x1 = x + (w - logo_width) / 2;
         XGetGeometry (dpy, logo_map, &root, &x1, &y1,
                       &logo_width, &logo_height, &bw, &d);
         x1 = x + (w - logo_width) / 2;
index 92481b20292181a0da98844acc36ea286a2c233a..2c426be83e797329566c7304e2a819b68274c53b 100644 (file)
@@ -110,7 +110,7 @@ checkerboard (Screen *screen, Drawable drawable)
   XGCValues gcv;
   GC gc = XCreateGC (dpy, drawable, 0, &gcv);
   Colormap cmap;
   XGCValues gcv;
   GC gc = XCreateGC (dpy, drawable, 0, &gcv);
   Colormap cmap;
-  int win_width, win_height;
+  unsigned int win_width, win_height;
 
   fg.flags = bg.flags = DoRed|DoGreen|DoBlue;
   fg.red = fg.green = fg.blue = 0x0000;
 
   fg.flags = bg.flags = DoRed|DoGreen|DoBlue;
   fg.red = fg.green = fg.blue = 0x0000;
index 563fa6a720524bc90d1b4e10a41231ad6d751d74..a0cea806a2e662f01d0bd4b715738d0dad2cace2 100644 (file)
@@ -7,7 +7,7 @@
    http://www.jwz.org/xscreensaver/
  */
 
    http://www.jwz.org/xscreensaver/
  */
 
-static unsigned const char * const logo_180_xpm[] = {
+static const char * const logo_180_xpm[] = {
 "180 180 16 1",
 "      c None    m None",
 ")     c #FF0000 m #FFFFFF",
 "180 180 16 1",
 "      c None    m None",
 ")     c #FF0000 m #FFFFFF",
index eee542f72e0c5f070fc331cd05c52df5fe5087da..fb93ced0575819486d77aaa7a15156967d9088e0 100644 (file)
@@ -7,7 +7,7 @@
    http://www.jwz.org/xscreensaver/
  */
 
    http://www.jwz.org/xscreensaver/
  */
 
-static unsigned const char * const logo_50_xpm[] = {
+static const char * const logo_50_xpm[] = {
 "50 50 16 1",
 "      c None    m None",
 "&     c #FF0000 m #FFFFFF",
 "50 50 16 1",
 "      c None    m None",
 "&     c #FF0000 m #FFFFFF",
index 858c68c90951ce82b6188502478331fba6648526..b0d7205186a36a0afec2d803cdeccdc5b3887b41 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2001-2002 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2001-2002, 2003 Jamie Zawinski <jwz@jwz.org>
  *
  * 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
@@ -49,7 +49,7 @@ static const char hex[128] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 static XImage *
 parse_xpm_data (Display *dpy, Visual *visual, Colormap colormap, int depth,
                 unsigned long transparent_color,
 static XImage *
 parse_xpm_data (Display *dpy, Visual *visual, Colormap colormap, int depth,
                 unsigned long transparent_color,
-                unsigned const char * const * data,
+                const char * const * data,
                 int *width_ret, int *height_ret,
                 unsigned long **pixels_ret, int *npixels_ret,
                 unsigned char **mask_ret)
                 int *width_ret, int *height_ret,
                 unsigned long **pixels_ret, int *npixels_ret,
                 unsigned char **mask_ret)
@@ -90,7 +90,7 @@ parse_xpm_data (Display *dpy, Visual *visual, Colormap colormap, int depth,
 
   for (i = 0; i < ncolors; i++)
     {
 
   for (i = 0; i < ncolors; i++)
     {
-      const unsigned char *line = *data;
+      const char *line = *data;
       cmap[i].byte = *line++;
       while (*line)
         {
       cmap[i].byte = *line++;
       while (*line)
         {
@@ -175,10 +175,11 @@ parse_xpm_data (Display *dpy, Visual *visual, Colormap colormap, int depth,
       ximage->data = (char *) calloc (ximage->height, ximage->bytes_per_line);
       for (y = 0; y < h; y++)
         {
       ximage->data = (char *) calloc (ximage->height, ximage->bytes_per_line);
       for (y = 0; y < h; y++)
         {
-          const unsigned char *line = *data++;
+          const char *line = *data++;
           for (x = 0; x < w; x++)
             {
           for (x = 0; x < w; x++)
             {
-              int p = rmap[*line++];
+              int p = rmap[(int) *line];
+              line++;
               XPutPixel (ximage, x, y,
                          (p == 255 ? transparent_color : pixels[p]));
 
               XPutPixel (ximage, x, y,
                          (p == 255 ? transparent_color : pixels[p]));
 
index fc5cea13e7f7e9d25681e0c48452acbf240b2e02..980878204d78e657e0f11a8989051d8ff3228c52 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1997, 1998, 2001
+/* xscreensaver, Copyright (c) 1992, 1997, 1998, 2001, 2003
  *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -91,7 +91,7 @@ get_integer_resource (char *res_name, char *res_class)
 
   if (ss[0] == '0' && (ss[1] == 'x' || ss[1] == 'X'))  /* 0x: parse as hex */
     {
 
   if (ss[0] == '0' && (ss[1] == 'x' || ss[1] == 'X'))  /* 0x: parse as hex */
     {
-      if (1 == sscanf (ss+2, "%x %c", &val, &c))
+      if (1 == sscanf (ss+2, "%x %c", (unsigned int *) &val, &c))
        {
          free (s);
          return val;
        {
          free (s);
          return val;
index 53cd3519cebe86eb1c76be98481630af7642f98a..fc9ffa80fc3322431c93e9b8011e4c61f724b4f7 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
 static const char screensaver_id[] =
-       "@(#)xscreensaver 4.11 (23-Jun-2003), by Jamie Zawinski (jwz@jwz.org)";
+       "@(#)xscreensaver 4.12 (14-Aug-2003), by Jamie Zawinski (jwz@jwz.org)";
index 2e3b9a9619007a5605cc23b3649560b75b4dbfd2..8bb97646c2b14dd57394c26bf45b68db90358007 100644 (file)
@@ -1,4 +1,5 @@
-/* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+/* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2003
+ * 
  *  by Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  *  by Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -77,7 +78,7 @@ get_visual (Screen *screen, const char *string, Bool prefer_writable_cells,
   else if (!strcmp (v, "greyscale"))             vclass = GrayScale;
   else if (!strcmp (v, "pseudocolor"))           vclass = PseudoColor;
   else if (!strcmp (v, "directcolor"))           vclass = DirectColor;
   else if (!strcmp (v, "greyscale"))             vclass = GrayScale;
   else if (!strcmp (v, "pseudocolor"))           vclass = PseudoColor;
   else if (!strcmp (v, "directcolor"))           vclass = DirectColor;
-  else if (1 == sscanf (v, " %ld %c", &id, &c))          vclass = SPECIFIC_VISUAL;
+  else if (1 == sscanf (v, " %lu %c", &id, &c))          vclass = SPECIFIC_VISUAL;
   else if (1 == sscanf (v, " 0x%lx %c", &id, &c)) vclass = SPECIFIC_VISUAL;
   else
     {
   else if (1 == sscanf (v, " 0x%lx %c", &id, &c)) vclass = SPECIFIC_VISUAL;
   else
     {
index 3a4acbf0b07ddc69be58caa85c2cafe76e833654..eb560a2fd04256a614d5cb30c0fde7cdffd6ff14 100644 (file)
@@ -47,6 +47,7 @@ extern void ya_rand_init (unsigned int);
  /* Implement frand using GCC's statement-expression extension. */
 
 # define frand(f)                                                      \
  /* Implement frand using GCC's statement-expression extension. */
 
 # define frand(f)                                                      \
+  __extension__                                                                \
   ({ double tmp = ((((double) random()) * ((double) (f))) /            \
                   ((double) ((unsigned int)~0)));                      \
      tmp < 0 ? (-tmp) : tmp; })
   ({ double tmp = ((((double) random()) * ((double) (f))) /            \
                   ((double) ((unsigned int)~0)));                      \
      tmp < 0 ? (-tmp) : tmp; })
index 02a26d851c542408a9a0df976dac101e68908a30..51482e52238d8dbb9495075463fd94816eb09e7b 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title:          xscreensaver
 Begin3
 Title:          xscreensaver
-Version:        4.11
-Entered-date:   23JUN03
+Version:        4.12
+Entered-date:   14AUG03
 Description:    A modular screen saver and locker for the X Window System.
                 Highly customizable: allows the use of any program that
                 can draw on the root window as a display mode.
 Description:    A modular screen saver and locker for the X Window System.
                 Highly customizable: allows the use of any program that
                 can draw on the root window as a display mode.
@@ -10,16 +10,16 @@ Keywords:       screen saver, screen lock, lock, xlock, X11
 Author:         jwz@jwz.org (Jamie Zawinski)
 Maintained-by:  jwz@jwz.org (Jamie Zawinski)
 Primary-site:   http://www.jwz.org/xscreensaver/
 Author:         jwz@jwz.org (Jamie Zawinski)
 Maintained-by:  jwz@jwz.org (Jamie Zawinski)
 Primary-site:   http://www.jwz.org/xscreensaver/
-                245K xscreensaver-4.11.tar.gz
-                64K   xscreensaver.README
+                3793K xscreensaver-4.12.tar.gz
+                65K   xscreensaver.README
                 1K    xscreensaver.lsm
 Alternate-site: sunsite.unc.edu /pub/Linux/X11/screensavers/
                 1K    xscreensaver.lsm
 Alternate-site: sunsite.unc.edu /pub/Linux/X11/screensavers/
-                245K xscreensaver-4.11.tar.gz
-                64K   xscreensaver.README
+                3793K xscreensaver-4.12.tar.gz
+                65K   xscreensaver.README
                 1K    xscreensaver.lsm
 Alternate-site: ftp.x.org /contrib/applications/
                 1K    xscreensaver.lsm
 Alternate-site: ftp.x.org /contrib/applications/
-                245K xscreensaver-4.11.tar.gz
-                64K   xscreensaver.README
+                3793K xscreensaver-4.12.tar.gz
+                65K   xscreensaver.README
                 1K    xscreensaver.lsm
 Platforms:      Linux, Irix, SunOS, Solaris, HPUX, AIX, FreeBSD, NetBSD,
                 BSDI, SCO, OSF1, Ultrix, VMS.
                 1K    xscreensaver.lsm
 Platforms:      Linux, Irix, SunOS, Solaris, HPUX, AIX, FreeBSD, NetBSD,
                 BSDI, SCO, OSF1, Ultrix, VMS.
index 93da1d7c19611c7b50036bcae4a4a3129965c275..21e32876f40d33fbde21d2ab51d02f5595735d9f 100644 (file)
@@ -1,5 +1,5 @@
 %define        name            xscreensaver
 %define        name            xscreensaver
-%define        version         4.11
+%define        version         4.12
 %define        release         1
 %define        serial          1
 %define        x11_prefix      /usr/X11R6
 %define        release         1
 %define        serial          1
 %define        x11_prefix      /usr/X11R6