http://www.jwz.org/xscreensaver/xscreensaver-5.08.tar.gz
authorZygo Blaxell <zblaxell@hungrycats.org>
Mon, 2 Mar 2009 05:43:57 +0000 (00:43 -0500)
committerZygo Blaxell <zblaxell@faye.furryterror.org>
Fri, 8 Feb 2013 17:54:54 +0000 (12:54 -0500)
-rw-r--r-- 1 zblaxell zblaxell 5466460 Dec 28 02:59 xscreensaver-5.08.tar.gz
4e6889d7171eaf18b856c484a87d5701787e5dc6  xscreensaver-5.08.tar.gz

117 files changed:
Makefile.in
OSX/._jwxyz.m [deleted file]
OSX/Makefile
OSX/README
OSX/SaverTester.plist
OSX/XScreenSaver.plist
OSX/bindist.rtf
OSX/jwxyz.h
OSX/jwxyz.m
OSX/osxgrabscreen.m
OSX/update-info-plist.pl
README
config.h.in
configure
configure.in
driver/XScreenSaver.ad.in
driver/XScreenSaver_ad.h
driver/lock.c
driver/passwd.c
driver/screens.c
driver/test-randr.c
driver/timers.c
driver/xscreensaver-getimage.c
driver/xscreensaver-text
driver/xscreensaver-text.man
driver/xscreensaver.c
driver/xscreensaver.man
hacks/.gdbinit
hacks/Makefile.in
hacks/asm6502.c
hacks/bubbles.man [deleted file]
hacks/compile_axp.com
hacks/compile_decc.com
hacks/config/README
hacks/config/discrete.xml
hacks/config/jigsaw.xml
hacks/config/maze.xml
hacks/config/mismunch.xml [deleted file]
hacks/config/munch.xml
hacks/config/photopile.xml [new file with mode: 0644]
hacks/config/sierpinski3d.xml
hacks/config/sonar.xml
hacks/config/timetunnel.xml
hacks/critical.man [deleted file]
hacks/fireworkx.c
hacks/flag.c
hacks/flag.man [deleted file]
hacks/forest.man [deleted file]
hacks/glx/._jigsaw.c [new file with mode: 0644]
hacks/glx/Makefile.in
hacks/glx/carousel.man
hacks/glx/flurry.c
hacks/glx/glforestfire.man [deleted file]
hacks/glx/glslideshow.man
hacks/glx/grab-ximage.c
hacks/glx/hypnowheel.c
hacks/glx/jigsaw.c [new file with mode: 0644]
hacks/glx/jigsaw.man [new file with mode: 0644]
hacks/glx/lavalite.c
hacks/glx/molecule.c
hacks/glx/photopile.c [new file with mode: 0644]
hacks/glx/photopile.man [new file with mode: 0644]
hacks/glx/sierpinski3d.c
hacks/glx/sonar-icmp.c [new file with mode: 0644]
hacks/glx/sonar-sim.c [new file with mode: 0644]
hacks/glx/sonar.c [new file with mode: 0644]
hacks/glx/sonar.h [new file with mode: 0644]
hacks/glx/sonar.man [new file with mode: 0644]
hacks/glx/starwars.c
hacks/glx/timetunnel.c
hacks/glx/timetunnel.man
hacks/glx/xpm-ximage.c
hacks/images/m6502/._amiga.asm [new file with mode: 0644]
hacks/images/m6502/._colors.asm [new file with mode: 0644]
hacks/images/m6502/._disco.asm [new file with mode: 0644]
hacks/images/m6502/._softsprite.asm [new file with mode: 0644]
hacks/images/m6502/._starfield2d.asm [new file with mode: 0644]
hacks/images/m6502/amiga.asm [new file with mode: 0644]
hacks/images/m6502/colors.asm [new file with mode: 0644]
hacks/images/m6502/disco.asm [new file with mode: 0644]
hacks/images/m6502/softsprite.asm [new file with mode: 0644]
hacks/images/m6502/starfield2d.asm [new file with mode: 0644]
hacks/jigsaw.c [deleted file]
hacks/jigsaw.man [deleted file]
hacks/laser.man [deleted file]
hacks/lightning.man [deleted file]
hacks/lisa.man [deleted file]
hacks/lissie.man [deleted file]
hacks/lmorph.man [deleted file]
hacks/maze.c
hacks/mismunch.c [deleted file]
hacks/mismunch.man [deleted file]
hacks/munch.c
hacks/munch.man
hacks/munge-ad.pl
hacks/rotor.man [deleted file]
hacks/sonar.c [deleted file]
hacks/sonar.man [deleted file]
hacks/sphere.man [deleted file]
hacks/spiral.man [deleted file]
hacks/t3d.man [deleted file]
hacks/vines.man [deleted file]
hacks/webcollage
hacks/whirlygig.man [deleted file]
hacks/worm.man [deleted file]
hacks/xspirograph.c
hacks/xsublim.man [deleted file]
po/._ja.po [new file with mode: 0644]
po/._nb.po [new file with mode: 0644]
po/POTFILES.in
po/ja.po
po/nb.po
po/no.po [deleted file]
setup.com
utils/version.h
xscreensaver.spec
xscreensaver.xcodeproj/project.pbxproj

index c8e034f336457fe6f1dfa76a0aa278f995d63c24..b094069d1007f60bc1d09b294d32f0ce9917733e 100644 (file)
@@ -321,7 +321,7 @@ www::
   cd $$DEST ;                                                              \
                                                                            \
   TMP=/tmp/xd.$$$$ ;                                                       \
-  sed "s/xscreensaver-5\.[0-9][0-9ab]*/$$HEAD/g" download.html > $$TMP ;  \
+  sed "s/xscreensaver-5\.[0-9][0-9ab]*/$$HEAD/g" download.html > $$TMP ;    \
   echo '' ;                                                                \
   diff -U0 download.html $$TMP ;                                           \
   echo '' ;                                                                \
@@ -334,10 +334,10 @@ www::
       set -x ;                                                             \
       rm $$OLDEST ;                                                        \
       cvs remove $$OLDEST ;                                                \
-    else                                                                   \
-      set -x ;                                                             \
+      set +x ;                                                             \
     fi ;                                                                   \
   done ;                                                                   \
+  set -x ;                                                                 \
   cvs add -kb $$BNAME $$BNAME2 ;                                           \
   cat $$TMP > download.html ;                                              \
   rm -f $$TMP ;                                                                    \
diff --git a/OSX/._jwxyz.m b/OSX/._jwxyz.m
deleted file mode 100644 (file)
index 3281d46..0000000
Binary files a/OSX/._jwxyz.m and /dev/null differ
index 2ff5fe1bcbac8538301ff029a0bd9a5bd39e6ebc..c1ad1fb7c995163f778f7745c6f057278525fb00 100644 (file)
@@ -100,8 +100,25 @@ dmg:: distdepend check_versions
   rm -rf "$$STAGE" ;                                                         \
   echo + mkdir "$$STAGE" ;                                                   \
          mkdir "$$STAGE" ;                                                   \
-  echo + cp -pr "$$SRC/"\*.saver "$$STAGE" ;                                 \
-         cp -pr "$$SRC/"*.saver  "$$STAGE" ;                                 \
+                                                                             \
+  retired=`perl -0 -ne                                                       \
+     's/\\\\\\n//g; m/^RETIRED_EXES\s*=\s*(.*)$$/m && print "$$1\n"'         \
+      ../hacks/Makefile.in                                                   \
+      ../hacks/glx/Makefile.in` ;                                            \
+                                                                             \
+  for f in $$SRC/*.saver ; do                                                \
+   ok=yes ;                                                                  \
+   ff=`echo $$f | perl -e '$$_=<>; s@^.*/(.*)\..*$$@\L$$1@; print'`;         \
+   for r in $$retired ; do                                                   \
+    if [ "$$ff" = "$$r" ]; then ok=no ; fi ;                                 \
+   done ;                                                                    \
+   if [ "$$ok" = yes ]; then                                                 \
+    echo + cp -pr "$$f" "$$STAGE/" ;                                         \
+           cp -pr "$$f" "$$STAGE/" ;                                         \
+   else                                                                              \
+    echo skipping "$$f" ;                                                    \
+   fi ;                                                                              \
+  done ;                                                                     \
   set -x ;                                                                   \
   cp -p bindist.rtf "$$STAGE/ READ ME.rtf" ;                                 \
   cp -p bindist-DS_Store "$$STAGE/.DS_Store" ;                               \
index 4a9ea80777c002f463e9203d59ffd70f57a86740..551e3bb6814a53c79a85ee20d61caee1add1aca0 100644 (file)
@@ -6,5 +6,5 @@ To build it, just type "make", or use the included XCode project.  The
 executables will show up in the "build/Release/" and/or "build/Debug/"
 directories.
 
-To build these programs, XCode 2.2 or later is required.
+To build these programs, XCode 2.4 or later is required.
 To run them, MacOS 10.4.0 or later is required.
index 8cddccac7e6f70426b3c4f16900d412431bb3db4..4a5dcba74ca7478cc163d32c7da17c3878e3e3df 100644 (file)
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>5.07</string>
+       <string>5.08</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5.07</string>
+       <string>5.08</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.4.0</string>
        <key>NSMainNibFile</key>
index 3d0c849adc8c8ebb670311cd6f16b31b43a791e5..48fcdd0d139c363442dac1ea7654da79af6f0368 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>5.07</string>
+       <string>5.08</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5.07</string>
+       <string>5.08</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.4.0</string>
        <key>NSMainNibFile</key>
index fbfe64d483e95d2d84e79f5ed4c2bff91ab135de..76dca61fa1eb993e4d38eb2aca62ca7336002e6c 100644 (file)
@@ -15,7 +15,7 @@ XScreenSaver
 \f1\b0 \
 by Jamie Zawinski \uc0\u8232 and many others\
 \
-version 5.07 \uc0\u8232 10-Aug-2008\
+version 5.08 \uc0\u8232 27-Dec-2008\
 \
 {\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}}\
 \pard\pardeftab720\li720
index 0835258d5321349fbbe33bf80998d8e2bfdb654e..150c638db073b185c94b94f8e925957a1fd89044 100644 (file)
@@ -358,7 +358,7 @@ extern Pixmap XCreatePixmapFromBitmapData (Display *, Drawable,
 extern XPixmapFormatValues *XListPixmapFormats (Display *, int *count_ret);
 
 extern void jwxyz_draw_NSImage (Display *, Drawable, void *NSImage_arg,
-                                XRectangle *geom_ret);
+                                XRectangle *geom_ret, int exif_rotation);
 
 extern int XSetGraphicsExposures (Display *, GC, Bool);
 extern Bool XTranslateCoordinates (Display *, Window src_w, Window dest_w,
index c1984c931f169fc661711fe8c233ffdf9aedab79..17a37734f24e47cae5d63e91bf2806ffa56c31e5 100644 (file)
@@ -395,6 +395,8 @@ XDrawPoints (Display *dpy, Drawable d, GC gc,
   int i;
   CGRect wr = d->frame;
 
+  push_fg_gc (d, gc, YES);
+
 # ifdef XDRAWPOINTS_IMAGES
 
   unsigned int argb = gc->gcv.foreground;
@@ -440,7 +442,6 @@ XDrawPoints (Display *dpy, Drawable d, GC gc,
   CGRect *rects = (CGRect *) malloc (count * sizeof(CGRect));
   CGRect *r = rects;
   
-  push_fg_gc (d, gc, YES);
   for (i = 0; i < count; i++) {
     r->size.width = r->size.height = 1;
     if (i > 0 && mode == CoordModePrevious) {
@@ -459,6 +460,8 @@ XDrawPoints (Display *dpy, Drawable d, GC gc,
 
 # endif /* ! XDRAWPOINTS_IMAGES */
 
+  pop_gc (d, gc);
+
   return 0;
 }
 
@@ -1704,9 +1707,62 @@ XGetImage (Display *dpy, Drawable d, int x, int y,
   return image;
 }
 
+
+/* Returns a transformation matrix to do rotation as per the provided
+   EXIF "Orientation" value.
+ */
+static CGAffineTransform
+exif_rotate (int rot, CGSize rect)
+{
+  CGAffineTransform trans = CGAffineTransformIdentity;
+  switch (rot) {
+  case 2:              // flip horizontal
+    trans = CGAffineTransformMakeTranslation (rect.width, 0);
+    trans = CGAffineTransformScale (trans, -1, 1);
+    break;
+
+  case 3:              // rotate 180
+    trans = CGAffineTransformMakeTranslation (rect.width, rect.height);
+    trans = CGAffineTransformRotate (trans, M_PI);
+    break;
+
+  case 4:              // flip vertical
+    trans = CGAffineTransformMakeTranslation (0, rect.height);
+    trans = CGAffineTransformScale (trans, 1, -1);
+    break;
+
+  case 5:              // transpose (UL-to-LR axis)
+    trans = CGAffineTransformMakeTranslation (rect.height, rect.width);
+    trans = CGAffineTransformScale (trans, -1, 1);
+    trans = CGAffineTransformRotate (trans, 3 * M_PI / 2);
+    break;
+
+  case 6:              // rotate 90
+    trans = CGAffineTransformMakeTranslation (0, rect.width);
+    trans = CGAffineTransformRotate (trans, 3 * M_PI / 2);
+    break;
+
+  case 7:              // transverse (UR-to-LL axis)
+    trans = CGAffineTransformMakeScale (-1, 1);
+    trans = CGAffineTransformRotate (trans, M_PI / 2);
+    break;
+
+  case 8:              // rotate 270
+    trans = CGAffineTransformMakeTranslation (rect.height, 0);
+    trans = CGAffineTransformRotate (trans, M_PI / 2);
+    break;
+
+  default: 
+    break;
+  }
+
+  return trans;
+}
+
+
 void
 jwxyz_draw_NSImage (Display *dpy, Drawable d, void *nsimg_arg,
-                    XRectangle *geom_ret)
+                    XRectangle *geom_ret, int exif_rotation)
 {
   NSImage *nsimg = (NSImage *) nsimg_arg;
 
@@ -1721,17 +1777,30 @@ jwxyz_draw_NSImage (Display *dpy, Drawable d, void *nsimg_arg,
   CGImageRef cgi = CGImageSourceCreateImageAtIndex (cgsrc, 0, NULL);
 
   NSSize imgr = [nsimg size];
+  Bool rot_p = (exif_rotation >= 5);
+
+  if (rot_p)
+    imgr = NSMakeSize (imgr.height, imgr.width);
+
   CGRect winr = d->frame;
   float rw = winr.size.width  / imgr.width;
   float rh = winr.size.height / imgr.height;
   float r = (rw < rh ? rw : rh);
 
-  CGRect dst;
+  CGRect dst, dst2;
   dst.size.width  = imgr.width  * r;
   dst.size.height = imgr.height * r;
   dst.origin.x = (winr.size.width  - dst.size.width)  / 2;
   dst.origin.y = (winr.size.height - dst.size.height) / 2;
 
+  dst2.origin.x = dst2.origin.y = 0;
+  if (rot_p) {
+    dst2.size.width = dst.size.height; 
+    dst2.size.height = dst.size.width;
+  } else {
+    dst2.size = dst.size;
+  }
+
   // Clear the part not covered by the image to background or black.
   //
   if (d->type == WINDOW)
@@ -1741,8 +1810,17 @@ jwxyz_draw_NSImage (Display *dpy, Drawable d, void *nsimg_arg,
     draw_rect (dpy, d, 0, 0, 0, winr.size.width, winr.size.height, NO, YES);
   }
 
+  CGAffineTransform trans = 
+    exif_rotate (exif_rotation, rot_p ? dst2.size : dst.size);
+
+  CGContextSaveGState (d->cgc);
+  CGContextConcatCTM (d->cgc, 
+                      CGAffineTransformMakeTranslation (dst.origin.x,
+                                                        dst.origin.y));
+  CGContextConcatCTM (d->cgc, trans);
   //Assert (CGImageGetColorSpace (cgi) == dpy->colorspace, "bad colorspace");
-  CGContextDrawImage (d->cgc, dst, cgi);
+  CGContextDrawImage (d->cgc, dst2, cgi);
+  CGContextRestoreGState (d->cgc);
 
   CFRelease (cgsrc);
   CGImageRelease (cgi);
index 14e13725716d1b785bddef75517cba08ad116e41..980db62d6377d2cf1077269a428de3a23697a984 100644 (file)
@@ -207,6 +207,33 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable)
 }
 
 
+/* Returns the EXIF rotation property of the image, if any.
+ */
+static int
+exif_rotation (const char *filename)
+{
+  /* This is a ridiculous amount of rigamarole to go through, but for some
+     reason the "Orientation" tag does not exist in the "NSImageEXIFData"
+     dictionary inside the NSBitmapImageRep of the NSImage.  Several other
+     EXIF tags are there (e.g., shutter speed) but not orientation.  WTF?
+   */
+  CFStringRef s = CFStringCreateWithCString (NULL, filename, 
+                                             kCFStringEncodingUTF8);
+  CFURLRef url = CFURLCreateWithFileSystemPath (NULL, s, 
+                                                kCFURLPOSIXPathStyle, 0);
+  CGImageSourceRef cgimg = CGImageSourceCreateWithURL (url, NULL);
+  if (! cgimg) return -1;
+
+  NSDictionary *props = (NSDictionary *)
+    CGImageSourceCopyPropertiesAtIndex (cgimg, 0, NULL);
+  int rot = [[props objectForKey:@"Orientation"] intValue];
+  CFRelease (cgimg);
+  CFRelease (url);
+  CFRelease (s);
+  return rot;
+}
+
+
 /* Loads an image file and splats it onto the drawable.
    The image is drawn as large as possible while preserving its aspect ratio.
    If geom_ret is provided, the actual rectangle the rendered image takes
@@ -222,7 +249,8 @@ osx_load_image_file (Screen *screen, Window xwindow, Drawable drawable,
   if (!img)
     return False;
 
-  jwxyz_draw_NSImage (DisplayOfScreen (screen), drawable, img, geom_ret);
+  jwxyz_draw_NSImage (DisplayOfScreen (screen), drawable, img, geom_ret,
+                      exif_rotation (filename));
   [img release];
   return True;
 }
index aac1f48c860694c8fc3944ccfec86c8fe3bd6d1a..069d0c3b6ea47f5c246a43f0503362f7fab51e0b 100755 (executable)
@@ -23,7 +23,7 @@ require 5;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.9 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.10 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 1;
 
@@ -75,14 +75,15 @@ sub update_saver_xml($$) {
   $desc =~ s/^.* version \d[^\n]*\n//s;
   $desc =~ s/^From the XScreenSaver.*\n//m;
   $desc =~ s@^http://www\.jwz\.org/xscreensaver.*\n@@m;
-  $desc =~ s/^Copyright [^ \r\n\t]+ (\d{4})(-\d{4})? (.*)\.$/Written $3; $1./m;
+  $desc =~
+       s/\nCopyright [^ \r\n\t]+ (\d{4})(-\d{4})? (.*)\.$/\nWritten $3; $1./s;
   $desc =~ s/^\n+//s;
 
   error ("$filename: description contains bad characters")
     if ($desc =~ m/([^\t\n -~]|[<>])/);
 
   error ("$filename: can't extract authors")
-    unless ($desc =~ m@^(.*)\nWritten by[ \t]+([^\n]+)$@s);
+    unless ($desc =~ m@^(.*)\nWritten by[ \t]+(.+)$@s);
   $desc = $1;
   my $authors = $2;
   $desc =~ s/\s*$//s;
@@ -93,6 +94,7 @@ sub update_saver_xml($$) {
     $year = $2;
   }
 
+  error ("$filename: can't extract year") unless $year;
   my $cyear = 1900 + ((localtime())[5]);
   $year = "$cyear" unless $year;
   if ($year && ! ($year =~ m/$cyear/)) {
diff --git a/README b/README
index f0bc5f86f5127b48207f6294b482dd6aa9e72092..98179791e736906824543f9e5b15a7cdc5065aec 100644 (file)
--- a/README
+++ b/README
@@ -38,9 +38,32 @@ XScreenSaver has an extensive manual -- please read it!
 
 ===============================================================================
 
+Changes since 5.07:   * New hack, `photopile'.
+                      * Rewrote `sonar' and `jigsaw' as OpenGL programs.
+                      * Minor tweaks to `maze', `m6502', `hypnowheel', and
+                        `timetunnel'.
+                      * Savers that load images now obey EXIF rotation tags.
+                      * Arrgh, more RANDR noise!  Fixes this time for rotated
+                        screens, and for systems where RANDR lies and says the
+                        screen size is 0x0.
+                      * When the password dialog has timed out or been
+                        cancelled, don't pop it right back up a second time.
+                      * Password timeouts/cancels don't count as
+                        "failed logins".
+                      * Retired some of the older, less interesting savers:
+                        say goodbye to `bubbles', `critical', `flag', `forest',
+                        `glforestfire', `lmorph', `laser', `lightning', `lisa',
+                        `lissie', `rotor', `sphere', `spiral', `t3d', `vines',
+                        `whirlygig', and `worm'.
+                      * Merged `munch' and `mismunch'.
+                      * Updated `webcollage' to use twitpics.com as well.
 Changes since 5.06:   * Xinerama/RANDR tweaks for old-style multi-screen.
-                      * Fixed the bouncing ball in `stairs'.
+                      * Added bumpy skin and cel shading to `skytentacles'.
                       * `flipflop' can load images onto the tiles.
+                      * Fixed the bouncing ball in `stairs'.
+                      * Added the missing Utah Teapotahedron to `polyhedra'.
+                      * `blitspin' works with color images on OSX now.
+                      * Added transparency to `stonerview'.
                       * Improved layout of the preferences dialogs: they
                         should all now be usable even on ridiculously tiny
                         laptop screens.
@@ -51,10 +74,6 @@ Changes since 5.06:   * Xinerama/RANDR tweaks for old-style multi-screen.
                         saver descriptions.
                       * All hacks support the `-fps' option, not just GL ones.
                       * The `-fps' option now shows CPU load.
-                      * Added bumpy skin and cel shading to `skytentacles'.
-                      * Added the missing Utah Teapotahedron to `polyhedra'.
-                      * `blitspin' works with color images on OSX now.
-                      * Added transparency to `stonerview'.
 Changes since 5.05:   * Xinerama/RANDR fixes: this time for sure.  It should
                         now work to add/remove monitors or resize screens at
                         any time.
index 21b68cd4af79d65f263b18adb2daa8ff66f89bf5..4ea77aa305d4fb14fa58b296a336743e547754a8 100644 (file)
    can make use of this if it is available. */
 #undef HAVE_GDK_PIXBUF
 
+/* Define this if you have the gdk_pixbuf_apply_embedded_orientation function
+   (gdk-pixbuf 2.12). */
+#undef HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION
+
 /* Define to 1 if you have the `getcwd' function. */
 #undef HAVE_GETCWD
 
index 4e352b6095f7b297586a7b7526bdd9171af75998..fe4156a97fa289425a3a117eaa072e0a3233a90e 100755 (executable)
--- a/configure
+++ b/configure
@@ -759,6 +759,7 @@ LOCK_SRCS
 LOCK_OBJS
 JPEG_EXES
 GL_EXES
+SUID_EXES
 GL_UTIL_EXES
 GL_MEN
 GL_KLUDGE
@@ -2059,6 +2060,9 @@ echo "command line was: $0 $@"
 
 
 
+
+
+
 
 
 
@@ -7921,7 +7925,7 @@ _ACEOF
 
 
 
-ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl no pl pt pt_BR ru sk sv vi wa zh_CN zh_TW"
+ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW"
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
@@ -16761,7 +16765,7 @@ if test "${ac_cv_mesagl_version_string+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16768 "configure"
+#line 16772 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 #ifndef MESA_MAJOR_VERSION
@@ -18269,6 +18273,100 @@ _ACEOF
     { echo "$as_me:$LINENO: result: checking for gdk_pixbuf usability... no" >&5
 echo "${ECHO_T}checking for gdk_pixbuf usability... no" >&6; }
   fi
+
+  if test "$have_gdk_pixbuf" = yes; then
+
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  ac_save_LDFLAGS="$LDFLAGS"
+#  ac_save_LIBS="$LIBS"
+
+  if test \! -z "$includedir" ; then
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  # note: $X_CFLAGS includes $x_includes
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+  if test \! -z "$libdir" ; then
+    LDFLAGS="$LDFLAGS -L$libdir"
+  fi
+  # note: $X_LIBS includes $x_libraries
+  LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+  CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+  LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+  { echo "$as_me:$LINENO: checking for gdk_pixbuf_apply_embedded_orientation in -lc" >&5
+echo $ECHO_N "checking for gdk_pixbuf_apply_embedded_orientation in -lc... $ECHO_C" >&6; }
+if test "${ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gdk_pixbuf_apply_embedded_orientation ();
+int
+main ()
+{
+return gdk_pixbuf_apply_embedded_orientation ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -rf conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -rf conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&5
+echo "${ECHO_T}$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&6; }
+if test $ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION 1
+_ACEOF
+
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+  LDFLAGS="$ac_save_LDFLAGS"
+#  LIBS="$ac_save_LIBS"
+
+  fi
 fi
 
 
@@ -20216,6 +20314,8 @@ fi
 tab='  '
 if test "$have_gl" = yes; then
   GL_EXES='$(GL_EXES)'
+  SUID_EXES='$(SUID_EXES)'
+  RETIRED_GL_EXES='$(RETIRED_EXES)'
   GL_UTIL_EXES='$(GL_UTIL_EXES)'
   GL_MEN='$(GL_MEN)'
   GL_KLUDGE=" "
@@ -20357,6 +20457,7 @@ INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'`
 
 
 
+
 
 
 APPDEFAULTS=$ac_x_app_defaults
@@ -21198,6 +21299,7 @@ LOCK_SRCS!$LOCK_SRCS$ac_delim
 LOCK_OBJS!$LOCK_OBJS$ac_delim
 JPEG_EXES!$JPEG_EXES$ac_delim
 GL_EXES!$GL_EXES$ac_delim
+SUID_EXES!$SUID_EXES$ac_delim
 GL_UTIL_EXES!$GL_UTIL_EXES$ac_delim
 GL_MEN!$GL_MEN$ac_delim
 GL_KLUDGE!$GL_KLUDGE$ac_delim
@@ -21220,7 +21322,7 @@ LIBOBJS!$LIBOBJS$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 69; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 70; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
index c486f2a173f0048cd2fa203970e7fe5622a47cc5..25c5d29cc009fca5cbdc987f5c1507e40a7057a2 100644 (file)
@@ -145,6 +145,10 @@ AH_TEMPLATE([HAVE_GDK_PIXBUF],
            [Define this if you have the GDK_Pixbuf library installed.  Some
            of the demos can make use of this if it is available.])
 
+AH_TEMPLATE([HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION],
+           [Define this if you have the gdk_pixbuf_apply_embedded_orientation
+           function (gdk-pixbuf 2.12).])
+
 AH_TEMPLATE([HAVE_JPEGLIB],
            [Define this if you have the Independent JPEG Group's JPEG
            library installed.  Some of the demos can make use of this if it
@@ -1181,7 +1185,7 @@ AC_DEFINE_UNQUOTED(PACKAGE, "$GETTEXT_PACKAGE",
                   generated code.])
 AC_SUBST(GETTEXT_PACKAGE)
 
-ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl no pl pt pt_BR ru sk sv vi wa zh_CN zh_TW"
+ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW"
 AM_GLIB_GNU_GETTEXT
 MKINSTALLDIRS="$INSTALL_DIRS"
 
@@ -3087,6 +3091,12 @@ if test "$with_gdk_pixbuf" = yes; then
   else
     AC_MSG_RESULT(checking for gdk_pixbuf usability... no)
   fi
+
+  if test "$have_gdk_pixbuf" = yes; then
+    AC_CHECK_X_LIB(c, gdk_pixbuf_apply_embedded_orientation,
+                     [AC_DEFINE(HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION)],,
+                     $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm)
+  fi
 fi
 
 
@@ -3590,6 +3600,8 @@ fi
 tab='  '
 if test "$have_gl" = yes; then
   GL_EXES='$(GL_EXES)'
+  SUID_EXES='$(SUID_EXES)'
+  RETIRED_GL_EXES='$(RETIRED_EXES)'
   GL_UTIL_EXES='$(GL_UTIL_EXES)'
   GL_MEN='$(GL_MEN)'
   GL_KLUDGE=" "
@@ -3716,6 +3728,7 @@ AC_SUBST(LOCK_SRCS)
 AC_SUBST(LOCK_OBJS)
 AC_SUBST(JPEG_EXES)
 AC_SUBST(GL_EXES)
+AC_SUBST(SUID_EXES)
 AC_SUBST(GL_UTIL_EXES)
 AC_SUBST(GL_MEN)
 AC_SUBST(GL_KLUDGE)
index 43bb50f8be236f5cdde98ef471390860403ab59f..af651d73db8ef798b6549bbc83f027eeb8254170 100644 (file)
@@ -4,8 +4,8 @@
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
-!                              version 5.07
-!                              10-Aug-2008
+!                              version 5.08
+!                              27-Dec-2008
 !
 ! See "man xscreensaver" for more info.  The latest version is always
 ! available at http://www.jwz.org/xscreensaver/
@@ -61,6 +61,7 @@
 *textFile:             @DEFAULT_TEXT_FILE@
 *textProgram:          fortune
 *textURL:              http://www.livejournal.com/stats/latest-rss.bml
+!*textURL:             http://twitter.com/statuses/public_timeline.atom
 
 *overlayTextForeground:        #FFFF00
 *overlayTextBackground:        #000000
@@ -150,47 +151,38 @@ GetViewPortIsFullOfLies: False
 ! screen savers interactively.
 !
 *programs:                                                                   \
--                              sphere -root                                \n\
+                               maze -root                                  \n\
 @GL_KLUDGE@ GL:                                superquadrics -root                         \n\
--                              worm -root                                  \n\
                                attraction -root                            \n\
                                blitspin -root                              \n\
                                greynetic -root                             \n\
                                helix -root                                 \n\
                                hopalong -root                              \n\
-                               hypercube -root                             \n\
+-                              hypercube -root                             \n\
                                imsmap -root                                \n\
-                               maze -root                                  \n\
-                               noseguy -root                               \n\
-                               pyro -root                                  \n\
+-                              noseguy -root                               \n\
+-                              pyro -root                                  \n\
                                qix -root                                   \n\
-                               rocks -root                                 \n\
+-                              rocks -root                                 \n\
                                rorschach -root                             \n\
                                decayscreen -root                           \n\
                                flame -root                                 \n\
                                halo -root                                  \n\
                                slidescreen -root                           \n\
--                              lmorph -root                                \n\
                                pedal -root                                 \n\
-                               bubbles -root                               \n\
                                bouboule -root                              \n\
-                               braid -root                                 \n\
+-                              braid -root                                 \n\
                                coral -root                                 \n\
                                deco -root                                  \n\
                                drift -root                                 \n\
-                               fadeplot -root                              \n\
-                               flag -root                                  \n\
-                               forest -root                                \n\
+-                              fadeplot -root                              \n\
                                galaxy -root                                \n\
                                goop -root                                  \n\
                                grav -root                                  \n\
                                ifs -root                                   \n\
+@GL_KLUDGE@ GL:                                jigsaw -root                                \n\
                                julia -root                                 \n\
-                               kaleidescope -root                          \n\
--                              laser -root                                 \n\
--                              lightning -root                             \n\
--                              lisa -root                                  \n\
--                              lissie -root                                \n\
+-                              kaleidescope -root                          \n\
 @GL_KLUDGE@ GL:                                moebius -root                               \n\
                                moire -root                                 \n\
 @GL_KLUDGE@ GL:                                morph3d -root                               \n\
@@ -199,36 +191,32 @@ GetViewPortIsFullOfLies: False
                                penrose -root                               \n\
 @GL_KLUDGE@ GL:                                pipes -root                                 \n\
                                rd-bomb -root                               \n\
--                              rotor -root                                 \n\
 @GL_KLUDGE@ GL:                                rubik -root                                 \n\
 -                              sierpinski -root                            \n\
                                slip -root                                  \n\
--                              spiral -root                                \n\
 @GL_KLUDGE@ GL:                                sproingies -root                            \n\
                                starfish -root                              \n\
                                strange -root                               \n\
                                swirl -root                                 \n\
                                triangle -root                              \n\
--                              vines -root                                 \n\
                                xjack -root                                 \n\
                                xlyap -root                                 \n\
 @GL_KLUDGE@ GL:                                atlantis -root                              \n\
                                bsod -root                                  \n\
 @GL_KLUDGE@ GL:                                bubble3d -root                              \n\
 @GL_KLUDGE@ GL:                                cage -root                                  \n\
-                               crystal -root                               \n\
+-                              crystal -root                               \n\
                                cynosure -root                              \n\
                                discrete -root                              \n\
                                distort -root                               \n\
                                epicycle -root                              \n\
                                flow -root                                  \n\
-@GL_KLUDGE@ GL:                                glplanet -root                              \n\
+- GL:                          glplanet -root                              \n\
                                interference -root                          \n\
-                               jigsaw -root                                \n\
                                kumppa -root                                \n\
 @GL_KLUDGE@ GL:                                lament -root                                \n\
                                moire2 -root                                \n\
-                               sonar -root                                 \n\
+@GL_KLUDGE@ GL:                                sonar -root                                 \n\
 @GL_KLUDGE@ GL:                                stairs -root                                \n\
                                truchet -root                               \n\
 -                              vidwhacker -root                            \n\
@@ -236,7 +224,6 @@ GetViewPortIsFullOfLies: False
                                bumps -root                                 \n\
                                ccurve -root                                \n\
                                compass -root                               \n\
--                              critical -root                              \n\
                                deluxe -root                                \n\
 -                              demon -root                                 \n\
 @GLE_KLUDGE@ GL:                               extrusion -root                             \n\
@@ -250,14 +237,13 @@ GetViewPortIsFullOfLies: False
 @GL_KLUDGE@ GL:                                sierpinski3d -root                          \n\
                                spotlight -root                             \n\
                                squiral -root                               \n\
-                               t3d -root                                   \n\
                                wander -root                                \n\
 -                              webcollage -root                            \n\
                                xflame -root                                \n\
                                xmatrix -root                               \n\
 @GL_KLUDGE@ GL:                                gflux -root                                 \n\
 -                              hyperball -root                             \n\
-                               nerverot -root                              \n\
+-                              nerverot -root                              \n\
                                xrayswarm -root                             \n\
                                xspirograph -root                           \n\
 @GL_KLUDGE@ GL:                                circuit -root                               \n\
@@ -274,7 +260,6 @@ GetViewPortIsFullOfLies: False
 @GL_KLUDGE@ GL:                                stonerview -root                            \n\
                                vermiculate -root                           \n\
                                whirlwindwarp -root                         \n\
-                               whirlygig -root                             \n\
                                zoom -root                                  \n\
                                anemone -root                               \n\
                                apollonian -root                            \n\
@@ -285,18 +270,17 @@ GetViewPortIsFullOfLies: False
                                fluidballs -root                            \n\
 @GL_KLUDGE@ GL:                                flurry -root                                \n\
 - GL:                          glblur -root                                \n\
-- GL:                          glforestfire -root                          \n\
 @GL_KLUDGE@ GL:                                glsnake -root                               \n\
                                halftone -root                              \n\
 -                              juggle -root                                \n\
 @GL_KLUDGE@ GL:                                lavalite -root                              \n\
-                               polyominoes -root                           \n\
+-                              polyominoes -root                           \n\
 @GL_KLUDGE@ GL:                                queens -root                                \n\
 - GL:                          sballs -root                                \n\
 @GL_KLUDGE@ GL:                                spheremonics -root                          \n\
 -                              thornbird -root                             \n\
                                twang -root                                 \n\
-@GL_KLUDGE@ GL:                                antspotlight -root                          \n\
+- GL:                          antspotlight -root                          \n\
                                apple2 -root                                \n\
 @GL_KLUDGE@ GL:                                atunnel -root                               \n\
                                barcode -root                               \n\
@@ -314,7 +298,7 @@ GetViewPortIsFullOfLies: False
 @GL_KLUDGE@ GL:                                glmatrix -root                              \n\
 - GL:                          glslideshow -root                           \n\
 @GL_KLUDGE@ GL:                                hypertorus -root                            \n\
-@GL_KLUDGE@ GL:                                jigglypuff -root                            \n\
+- GL:                          jigglypuff -root                            \n\
 @GL_KLUDGE@ GL:                                klein -root                                 \n\
                                metaballs -root                             \n\
 @GL_KLUDGE@ GL:                                mirrorblob -root                            \n\
@@ -331,18 +315,17 @@ GetViewPortIsFullOfLies: False
                                interaggregate -root                        \n\
                                intermomentary -root                        \n\
                                memscroller -root                           \n\
-                               mismunch -root                              \n\
 @GL_KLUDGE@ GL:                                noof -root                                  \n\
                                pacman -root                                \n\
 @GL_KLUDGE@ GL:                                pinion -root                                \n\
 @GL_KLUDGE@ GL:                                polyhedra -root                             \n\
-@GL_KLUDGE@ GL:                                providence -root                            \n\
+- GL:                          providence -root                            \n\
                                substrate -root                             \n\
                                wormhole -root                              \n\
 - GL:                          antmaze -root                               \n\
 @GL_KLUDGE@ GL:                                boing -root                                 \n\
                                boxfit -root                                \n\
-- GL:                          carousel -root                              \n\
+@GL_KLUDGE@ GL:                                carousel -root                              \n\
                                celtic -root                                \n\
 @GL_KLUDGE@ GL:                                crackberg -root                             \n\
 @GL_KLUDGE@ GL:                                cube21 -root                                \n\
@@ -364,6 +347,7 @@ GetViewPortIsFullOfLies: False
 @GL_KLUDGE@ GL:                                voronoi -root                               \n\
 @GL_KLUDGE@ GL:                                hypnowheel -root                            \n\
 -                              lcdscrub -root                              \n\
+@GL_KLUDGE@ GL:                                photopile -root                             \n\
 @GL_KLUDGE@ GL:                                skytentacles -root                          \n
 
 
index 833a26a29079701437f192a5c15cc57bed683212..8255fa0e93078c7caa95d29833118b13ef932f1e 100644 (file)
 "*dateFormat:          %d-%b-%y (%a); %I:%M %p",
 "*installColormap:     True",
 "*programs:                                                                  \
--                              sphere -root                                \\n\
+                               maze -root                                  \\n\
   GL:                          superquadrics -root                         \\n\
--                              worm -root                                  \\n\
                                attraction -root                            \\n\
                                blitspin -root                              \\n\
                                greynetic -root                             \\n\
                                helix -root                                 \\n\
                                hopalong -root                              \\n\
-                               hypercube -root                             \\n\
+-                              hypercube -root                             \\n\
                                imsmap -root                                \\n\
-                               maze -root                                  \\n\
-                               noseguy -root                               \\n\
-                               pyro -root                                  \\n\
+-                              noseguy -root                               \\n\
+-                              pyro -root                                  \\n\
                                qix -root                                   \\n\
-                               rocks -root                                 \\n\
+-                              rocks -root                                 \\n\
                                rorschach -root                             \\n\
                                decayscreen -root                           \\n\
                                flame -root                                 \\n\
                                halo -root                                  \\n\
                                slidescreen -root                           \\n\
--                              lmorph -root                                \\n\
                                pedal -root                                 \\n\
-                               bubbles -root                               \\n\
                                bouboule -root                              \\n\
-                               braid -root                                 \\n\
+-                              braid -root                                 \\n\
                                coral -root                                 \\n\
                                deco -root                                  \\n\
                                drift -root                                 \\n\
-                               fadeplot -root                              \\n\
-                               flag -root                                  \\n\
-                               forest -root                                \\n\
+-                              fadeplot -root                              \\n\
                                galaxy -root                                \\n\
                                goop -root                                  \\n\
                                grav -root                                  \\n\
                                ifs -root                                   \\n\
+  GL:                          jigsaw -root                                \\n\
                                julia -root                                 \\n\
-                               kaleidescope -root                          \\n\
--                              laser -root                                 \\n\
--                              lightning -root                             \\n\
--                              lisa -root                                  \\n\
--                              lissie -root                                \\n\
+-                              kaleidescope -root                          \\n\
   GL:                          moebius -root                               \\n\
                                moire -root                                 \\n\
   GL:                          morph3d -root                               \\n\
                                penrose -root                               \\n\
   GL:                          pipes -root                                 \\n\
                                rd-bomb -root                               \\n\
--                              rotor -root                                 \\n\
   GL:                          rubik -root                                 \\n\
 -                              sierpinski -root                            \\n\
                                slip -root                                  \\n\
--                              spiral -root                                \\n\
   GL:                          sproingies -root                            \\n\
                                starfish -root                              \\n\
                                strange -root                               \\n\
                                swirl -root                                 \\n\
                                triangle -root                              \\n\
--                              vines -root                                 \\n\
                                xjack -root                                 \\n\
                                xlyap -root                                 \\n\
   GL:                          atlantis -root                              \\n\
                                bsod -root                                  \\n\
   GL:                          bubble3d -root                              \\n\
   GL:                          cage -root                                  \\n\
-                               crystal -root                               \\n\
+-                              crystal -root                               \\n\
                                cynosure -root                              \\n\
                                discrete -root                              \\n\
                                distort -root                               \\n\
                                epicycle -root                              \\n\
                                flow -root                                  \\n\
-  GL:                          glplanet -root                              \\n\
+- GL:                          glplanet -root                              \\n\
                                interference -root                          \\n\
-                               jigsaw -root                                \\n\
                                kumppa -root                                \\n\
   GL:                          lament -root                                \\n\
                                moire2 -root                                \\n\
-                               sonar -root                                 \\n\
+  GL:                          sonar -root                                 \\n\
   GL:                          stairs -root                                \\n\
                                truchet -root                               \\n\
 -                              vidwhacker -root                            \\n\
                                bumps -root                                 \\n\
                                ccurve -root                                \\n\
                                compass -root                               \\n\
--                              critical -root                              \\n\
                                deluxe -root                                \\n\
 -                              demon -root                                 \\n\
 - GL:                          extrusion -root                             \\n\
   GL:                          sierpinski3d -root                          \\n\
                                spotlight -root                             \\n\
                                squiral -root                               \\n\
-                               t3d -root                                   \\n\
                                wander -root                                \\n\
 -                              webcollage -root                            \\n\
                                xflame -root                                \\n\
                                xmatrix -root                               \\n\
   GL:                          gflux -root                                 \\n\
 -                              hyperball -root                             \\n\
-                               nerverot -root                              \\n\
+-                              nerverot -root                              \\n\
                                xrayswarm -root                             \\n\
                                xspirograph -root                           \\n\
   GL:                          circuit -root                               \\n\
   GL:                          stonerview -root                            \\n\
                                vermiculate -root                           \\n\
                                whirlwindwarp -root                         \\n\
-                               whirlygig -root                             \\n\
                                zoom -root                                  \\n\
                                anemone -root                               \\n\
                                apollonian -root                            \\n\
                                fluidballs -root                            \\n\
   GL:                          flurry -root                                \\n\
 - GL:                          glblur -root                                \\n\
-- GL:                          glforestfire -root                          \\n\
   GL:                          glsnake -root                               \\n\
                                halftone -root                              \\n\
 -                              juggle -root                                \\n\
   GL:                          lavalite -root                              \\n\
-                               polyominoes -root                           \\n\
+-                              polyominoes -root                           \\n\
   GL:                          queens -root                                \\n\
 - GL:                          sballs -root                                \\n\
   GL:                          spheremonics -root                          \\n\
 -                              thornbird -root                             \\n\
                                twang -root                                 \\n\
-  GL:                          antspotlight -root                          \\n\
+- GL:                          antspotlight -root                          \\n\
                                apple2 -root                                \\n\
   GL:                          atunnel -root                               \\n\
                                barcode -root                               \\n\
   GL:                          glmatrix -root                              \\n\
 - GL:                          glslideshow -root                           \\n\
   GL:                          hypertorus -root                            \\n\
-  GL:                          jigglypuff -root                            \\n\
+- GL:                          jigglypuff -root                            \\n\
   GL:                          klein -root                                 \\n\
                                metaballs -root                             \\n\
   GL:                          mirrorblob -root                            \\n\
                                interaggregate -root                        \\n\
                                intermomentary -root                        \\n\
                                memscroller -root                           \\n\
-                               mismunch -root                              \\n\
   GL:                          noof -root                                  \\n\
                                pacman -root                                \\n\
   GL:                          pinion -root                                \\n\
   GL:                          polyhedra -root                             \\n\
-  GL:                          providence -root                            \\n\
+- GL:                          providence -root                            \\n\
                                substrate -root                             \\n\
                                wormhole -root                              \\n\
 - GL:                          antmaze -root                               \\n\
   GL:                          boing -root                                 \\n\
                                boxfit -root                                \\n\
-- GL:                          carousel -root                              \\n\
+  GL:                          carousel -root                              \\n\
                                celtic -root                                \\n\
   GL:                          crackberg -root                             \\n\
   GL:                          cube21 -root                                \\n\
   GL:                          voronoi -root                               \\n\
   GL:                          hypnowheel -root                            \\n\
 -                              lcdscrub -root                              \\n\
+  GL:                          photopile -root                             \\n\
   GL:                          skytentacles -root                          \\n",
 "XScreenSaver.pointerPollTime:         0:00:05",
 "XScreenSaver.pointerHysteresis:               10",
index 159c6a0f2517d548e7a1036d938466b303b89344..2f3108c19cf147b632ef51afe8e55956bf39ba69 100644 (file)
@@ -1912,6 +1912,12 @@ gui_auth_conv(int num_msg,
   const char *info_msg, *prompt;
   struct auth_response *responses;
 
+  if (si->unlock_state == ul_cancel ||
+      si->unlock_state == ul_time)
+    /* If we've already cancelled or timed out in this PAM conversation,
+       don't prompt again even if PAM asks us to! */
+    return -1;
+
   if (!(responses = calloc(num_msg, sizeof(struct auth_response))))
     goto fail;
 
@@ -2049,7 +2055,7 @@ auth_finished_cb (saver_info *si)
               event.xany.type == Expose)
             draw_passwd_window (si);
           else if (event.xany.type == ButtonPress || 
-                   event.xany.type == ButtonRelease)
+                   event.xany.type == KeyPress)
             break;
           XSync (si->dpy, False);
         }
index 066bc81f9c608d6a0178c5be12605b30556efaaf..fd42c5521351da99fa65a2584e8debe429bd7789 100644 (file)
@@ -249,6 +249,8 @@ xss_authenticate(saver_info *si, Bool verbose_p)
 {
   int i, j;
 
+  si->unlock_state = ul_read;
+
   for (i = 0; i < countof(methods); i++)
     {
       if (!methods[i].initted_p)
@@ -267,6 +269,20 @@ xss_authenticate(saver_info *si, Bool verbose_p)
 
       check_for_leaks (methods[i].name);
 
+      /* If password authentication failed, but the password was NULL
+         (meaning the user just hit RET) then treat that as "cancel".
+         This means that if the password is literally NULL, it will
+         work; but if not, then NULL passwords are treated as cancel.
+       */
+      if (si->unlock_state == ul_fail &&
+          si->cached_passwd &&
+          !*si->cached_passwd)
+        {
+          fprintf (stderr, "%s: assuming null password means cancel.\n",
+                   blurb());
+          si->unlock_state = ul_cancel;
+        }
+
       if (si->unlock_state == ul_success)
         {
           /* If we successfully authenticated by method N, but attempting
@@ -287,6 +303,18 @@ xss_authenticate(saver_info *si, Bool verbose_p)
             }
           goto DONE;           /* Successfully authenticated! */
         }
+      else if (si->unlock_state == ul_cancel ||
+               si->unlock_state == ul_time)
+        {
+          /* If any auth method gets a cancel or timeout, don't try the
+             next auth method!  We're done! */
+          fprintf (stderr,
+                   "%s: authentication via %s %s.\n",
+                       blurb(), methods[i].name,
+                   (si->unlock_state == ul_cancel
+                    ? "cancelled" : "timed out"));
+          goto DONE;
+        }
     }
 
   if (verbose_p)
index 6516ade7f55cdcfb4a96c03ccf4f7c7dca121baa..689e26982c2be7d9b1ddb922019f22e0b5dc15cf 100644 (file)
@@ -99,7 +99,7 @@
  *      monitors, xscreensaver just ignores them (which allows them to
  *      display duplicates or overlaps).
  *
- *   5a) Nvidia fucks it up:
+ *  5a) Nvidia fucks it up:
  *
  *      Nvidia drivers as of Aug 2008 running in "TwinView" mode
  *      apparently report correct screen geometry via Xinerama, but
  *      instead."  Which is a seriously lame answer.  So, xscreensaver
  *      has to query *both* extensions, and make a guess as to which
  *      is to be believed.
+ *
+ *  5b) Also sometimes RANDR says stupid shit like, "You have one
+ *      screen, and it has no available orientations or sizes."
+ *
  */
 
 #ifdef HAVE_CONFIG_H
@@ -151,6 +155,8 @@ struct _monitor {
   int x, y, width, height;
   monitor_sanity sanity;       /* I'm not crazy you're the one who's crazy */
   int enemy;                   /* which monitor it overlaps or duplicates */
+  char *err;                   /* msg to print at appropriate later time;
+                                   exists only on monitor #0. */
 };
 
 static Bool layouts_differ_p (monitor **a, monitor **b);
@@ -164,6 +170,7 @@ free_monitors (monitor **monitors)
   while (*m2) 
     {
       if ((*m2)->desc) free ((*m2)->desc);
+      if ((*m2)->err) free ((*m2)->err);
       free (*m2);
       m2++;
     }
@@ -171,10 +178,24 @@ free_monitors (monitor **monitors)
 }
 
 
+static char *
+append (char *s1, const char *s2)
+{
+  char *s = (char *) malloc ((s1 ? strlen(s1) : 0) +
+                             (s2 ? strlen(s2) : 0) + 3);
+  *s = 0;
+  if (s1) strcat (s, s1);
+  if (s1 && s2) strcat (s, "\n");
+  if (s2) strcat (s, s2);
+  if (s1) free (s1);
+  return s;
+}
+
+
 #ifdef HAVE_XINERAMA
 
 static monitor **
-xinerama_scan_monitors (Display *dpy)
+xinerama_scan_monitors (Display *dpy, char **errP)
 {
   Screen *screen = DefaultScreenOfDisplay (dpy);
   int event, error, nscreens, i;
@@ -213,7 +234,7 @@ xinerama_scan_monitors (Display *dpy)
 #ifdef HAVE_XF86VMODE
 
 static monitor **
-vidmode_scan_monitors (Display *dpy)
+vidmode_scan_monitors (Display *dpy, char **errP)
 {
   int event, error, nscreens, i;
   monitor **monitors;
@@ -312,7 +333,7 @@ vidmode_scan_monitors (Display *dpy)
 #ifdef HAVE_RANDR
 
 static monitor **
-randr_scan_monitors (Display *dpy)
+randr_scan_monitors (Display *dpy, char **errP)
 {
   int event, error, major, minor, nscreens, i, j;
   monitor **monitors;
@@ -350,6 +371,13 @@ randr_scan_monitors (Display *dpy)
 # endif /* HAVE_RANDR_12 */
     }
 
+  if (nscreens <= 0)
+    {
+      *errP = append (*errP,
+                      "WARNING: RANDR reported no screens!  Ignoring it.");
+      return 0;
+    }
+
   monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors));
   if (!monitors) return 0;
 
@@ -402,39 +430,37 @@ randr_scan_monitors (Display *dpy)
           int k;
           XRRScreenResources *res = 
             XRRGetScreenResources (dpy, RootWindowOfScreen (screen));
-          for (k = 0; k < res->noutput; k++)
+          for (k = 0; k < res->noutput; k++, j++)
             {
               monitor *m = (monitor *) calloc (1, sizeof (monitor));
               XRROutputInfo *rroi = XRRGetOutputInfo (dpy, res, 
                                                       res->outputs[k]);
-              RRCrtc crtc = (rroi->crtc ? rroi->crtc : rroi->crtcs[0]);
-              XRRCrtcInfo *crtci = XRRGetCrtcInfo (dpy, res, crtc);
+              RRCrtc crtc = (rroi->crtc  ? rroi->crtc :
+                             rroi->crtcs ? rroi->crtcs[0] : 0);
+              XRRCrtcInfo *crtci = (crtc ? XRRGetCrtcInfo(dpy, res, crtc) : 0);
 
               monitors[j] = m;
               m->screen   = screen;
               m->id       = (i * 1000) + j;
               m->desc     = (rroi->name ? strdup (rroi->name) : 0);
-              m->x        = crtci->x;
-              m->y        = crtci->y;
 
-              if (crtci->rotation & (RR_Rotate_90|RR_Rotate_270))
-                {
-                  m->width  = crtci->height;
-                  m->height = crtci->width;
-                }
-              else
+              if (crtci)
                 {
+                  /* Note: if the screen is rotated, XRRConfigSizes contains
+                     the unrotated WxH, but XRRCrtcInfo contains rotated HxW.
+                   */
+                  m->x      = crtci->x;
+                  m->y      = crtci->y;
                   m->width  = crtci->width;
                   m->height = crtci->height;
                 }
 
-              j++;
-
               if (rroi->connection == RR_Disconnected)
                 m->sanity = S_DISABLED;
               /* #### do the same for RR_UnknownConnection? */
 
-              XRRFreeCrtcInfo (crtci);
+              if (crtci) 
+                XRRFreeCrtcInfo (crtci);
               XRRFreeOutputInfo (rroi);
             }
           XRRFreeScreenResources (res);
@@ -442,6 +468,25 @@ randr_scan_monitors (Display *dpy)
         }
     }
 
+  /* Work around more fucking brain damage. */
+  {
+    int ok = 0;
+    int i = 0;
+    while (monitors[i]) 
+      {
+        if (monitors[i]->width != 0 && monitors[i]->height != 0)
+          ok++;
+        i++;
+      }
+    if (! ok)
+      {
+        *errP = append (*errP,
+              "WARNING: RANDR says all screens are 0x0!  Ignoring it.");
+        free_monitors (monitors);
+        monitors = 0;
+      }
+  }
+
   return monitors;
 }
 
@@ -449,7 +494,7 @@ randr_scan_monitors (Display *dpy)
 
 
 static monitor **
-basic_scan_monitors (Display *dpy)
+basic_scan_monitors (Display *dpy, char **errP)
 {
   int nscreens = ScreenCount (dpy);
   int i;
@@ -492,14 +537,15 @@ basic_scan_monitors (Display *dpy)
      modifying xscreensaver to try to get this information from RandR.
  */
 static monitor **
-randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors)
+randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors, 
+                             char **errP)
 {
   monitor **xinerama_monitors;
 
   if (!randr_monitors) 
     return 0;
 
-  xinerama_monitors = xinerama_scan_monitors (dpy);
+  xinerama_monitors = xinerama_scan_monitors (dpy, errP);
   if (!xinerama_monitors)
     return randr_monitors;
 
@@ -511,19 +557,17 @@ randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors)
   else if (   randr_monitors[0] &&   !randr_monitors[1] &&  /* 1 monitor */
            xinerama_monitors[0] && xinerama_monitors[1])    /* >1 monitor */
     {
-      fprintf (stderr,
-               "%s: WARNING: RANDR reports 1 screen but Xinerama\n"
-               "%s:          reports multiple.  Believing Xinerama.\n",
-               blurb(), blurb());
+      *errP = append (*errP,
+                      "WARNING: RANDR reports 1 screen but Xinerama\n"
+                      "\t\treports multiple.  Believing Xinerama.");
       free_monitors (randr_monitors);
       return xinerama_monitors;
     }
   else
     {
-      fprintf (stderr,
-               "%s: WARNING: RANDR and Xinerama report different\n"
-               "%s:          screen layouts!  Believing RANDR.\n",
-               blurb(), blurb());
+      *errP = append (*errP,
+                      "WARNING: RANDR and Xinerama report different\n"
+                      "\t\tscreen layouts!  Believing RANDR.");
       free_monitors (xinerama_monitors);
       return randr_monitors;
     }
@@ -540,7 +584,7 @@ randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors)
    for stress-testing purposes.
  */
 static monitor **
-debug_scan_monitors (Display *dpy)
+debug_scan_monitors (Display *dpy, char **errP)
 {
   static const char * const geoms[] = {
     "1600x1028+0+22",
@@ -587,7 +631,7 @@ debug_scan_monitors (Display *dpy)
 
 #ifdef QUAD_MODE
 static monitor **
-quadruple (monitor **monitors, Bool debug_p)
+quadruple (monitor **monitors, Bool debug_p, char **errP)
 {
   int i, j, count = 0;
   monitor **monitors2;
@@ -627,35 +671,38 @@ scan_monitors (saver_info *si)
 {
   saver_preferences *p = &si->prefs;
   monitor **monitors = 0;
+  char *err = 0;
 
 # ifdef DEBUG_MULTISCREEN
-    if (! monitors) monitors = debug_scan_monitors (si->dpy);
+    if (! monitors) monitors = debug_scan_monitors (si->dpy, &err);
 # endif
 
 # ifdef HAVE_RANDR
   if (! p->getviewport_full_of_lies_p)
-    if (! monitors) monitors = randr_scan_monitors (si->dpy);
+    if (! monitors) monitors = randr_scan_monitors (si->dpy, &err);
 
 #  ifdef HAVE_XINERAMA
-   monitors = randr_versus_xinerama_fight (si->dpy, monitors);
+   monitors = randr_versus_xinerama_fight (si->dpy, monitors, &err);
 #  endif
 # endif /* HAVE_RANDR */
 
 # ifdef HAVE_XF86VMODE
-  if (! monitors) monitors = vidmode_scan_monitors (si->dpy);
+  if (! monitors) monitors = vidmode_scan_monitors (si->dpy, &err);
 # endif
 
 # ifdef HAVE_XINERAMA
-  if (! monitors) monitors = xinerama_scan_monitors (si->dpy);
+  if (! monitors) monitors = xinerama_scan_monitors (si->dpy, &err);
 # endif
 
-  if (! monitors) monitors = basic_scan_monitors (si->dpy);
+  if (! monitors) monitors = basic_scan_monitors (si->dpy, &err);
 
 # ifdef QUAD_MODE
   if (p->quad_p)
-    monitors = quadruple (monitors, p->debug_p);
+    monitors = quadruple (monitors, p->debug_p, &err);
 # endif
 
+  if (monitors && err) monitors[0]->err = err;
+
   return monitors;
 }
 
@@ -840,6 +887,18 @@ describe_monitor_layout (saver_info *si)
       count++;
     }
 
+  if (monitors[0]->err)                /* deferred error msg */
+    {
+      char *token = strtok (monitors[0]->err, "\n");
+      while (token)
+        {
+          fprintf (stderr, "%s: %s\n", blurb(), token);
+          token = strtok (0, "\n");
+        }
+      free (monitors[0]->err);
+      monitors[0]->err = 0;
+    }
+
   if (count == 0)
     fprintf (stderr, "%s: no screens!\n", blurb());
   else
index 0d57895ab6a2fece2ff9c75be30fd7fff22a8151..74ead37fde2c6d1f01a57d8694f44598958d139d 100644 (file)
@@ -285,7 +285,11 @@ main (int argc, char **argv)
         }
 
       XSync (dpy, False);
-      fprintf (stderr, "\n%s: awaiting events...\n", progname);
+
+      fprintf (stderr, "\n%s: awaiting events...\n\n"
+          "\t(If you resize the screen or add/remove monitors, this should\n"
+          "\tnotice that and print stuff.  Otherwise, hit ^C.)\n\n",
+               progname);
       while (1)
         {
          XEvent event;
index 584a6d0d49f8f621df814661a9ad8fe571b1e15b..9ab7ae6e050586f2620f9502721b1c99da7a131d 100644 (file)
@@ -612,6 +612,7 @@ swallow_unlock_typeahead_events (saver_info *si, XEvent *e)
               break;
             case '\025': case '\030':                  /* Erase line */
             case '\012': case '\015':                  /* Enter */
+            case '\033':                               /* ESC */
               i = 0;
               break;
             case '\040':                               /* Space */
@@ -817,9 +818,12 @@ sleep_until_idle (saver_info *si, Bool until_idle_p)
        break;
 
       case KeyPress:
-      case KeyRelease:
       case ButtonPress:
-      case ButtonRelease:
+      /* Ignore release events so that hitting ESC at the password dialog
+         doesn't result in the password dialog coming right back again when
+         the fucking release key is seen! */
+      /* case KeyRelease:*/
+      /* case ButtonRelease:*/
       case MotionNotify:
 
        if (p->debug_p)
@@ -1083,8 +1087,6 @@ sleep_until_idle (saver_info *si, Bool until_idle_p)
 
   if (until_idle_p && si->cycle_id)    /* no cycle timer when inactive */
     abort ();
-
-  return;
 }
 
 
index 68637a7be4e2fb8662d035a293247ea48ef11993..856e05a6bc480ff37515f949e08d6b566b4de232 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2001-2006 by Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2001-2008 by 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
@@ -405,6 +405,20 @@ read_file_gdk (Screen *screen, Window window, Drawable drawable,
       int srcx, srcy, destx, desty, w2, h2;
       Bool bg_p = False;
 
+# ifdef HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION
+      {
+        int ow = w, oh = h;
+        GdkPixbuf *opb = pb;
+        pb = gdk_pixbuf_apply_embedded_orientation (opb);
+        gdk_pixbuf_unref (opb);
+        w = gdk_pixbuf_get_width (pb);
+        h = gdk_pixbuf_get_height (pb);
+        if (verbose_p && (w != ow || h != oh))
+          fprintf (stderr, "%s: rotated %dx%d to %dx%d\n",
+                   progname, ow, oh, w, h);
+      }
+# endif
+
       compute_image_scaling (w, h, win_width, win_height, verbose_p,
                              &srcx, &srcy, &destx, &desty, &w2, &h2);
       if (w != w2 || h != h2)
index 2f7372516a4d020f7722ede34e2075cc77fcb3af..8eeaf8968e8002f547f50d66d58e5546bb16e95a 100755 (executable)
@@ -30,7 +30,7 @@ use Text::Wrap qw(wrap);
 use bytes;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.15 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.17 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 my $http_proxy = undef;
@@ -74,7 +74,20 @@ my %entity_table = (
    "ocirc"  => 'ô', "otilde" => 'õ', "ouml"   => 'ö', "divide" => '÷',
    "oslash" => 'ø', "ugrave" => 'ù', "uacute" => 'ú', "ucirc"  => 'û',
    "uuml"   => 'ü', "yacute" => 'ý', "thorn"  => 'þ', "yuml"   => 'ÿ',
-   "apos"   => '\''
+   "apos"   => '\'',
+
+   # HTML 4 entities that do not have 1:1 Latin1 mappings.
+   "bull"  => "*",   "hellip"=> "...",  "prime" => "'",  "Prime" => "\"",
+   "frasl" => "/",   "trade" => "[tm]", "larr"  => "<-", "rarr"  => "->",
+   "harr"  => "<->", "lArr"  => "<=",   "rArr"  => "=>", "hArr"  => "<=>",
+   "empty" => "Ø",   "minus" => "-",    "lowast"=> "*",  "sim"   => "~",
+   "cong"  => "=~",  "asymp" => "~",    "ne"    => "!=", "equiv" => "==",
+   "le"    => "<=",  "ge"    => ">=",   "lang"  => "<",  "rang"  => ">",
+   "loz"   => "<>",  "OElig" => "OE",   "oelig" => "oe", "Yuml"  => "Y",
+   "circ"  => "^",   "tilde" => "~",    "ensp"  => " ",  "emsp"  => " ",
+   "thinsp"=> " ",   "ndash" => "-",    "mdash" => "-",  "lsquo" => "`",
+   "rsquo" => "'",   "sbquo" => "'",    "ldquo" => "\"", "rdquo" => "\"",
+   "bdquo" => "\"",  "lsaquo"=> "<",    "rsaquo"=> ">",
 );
 
 # Maps certain UTF8 characters (2 or 3 bytes) to the corresponding
@@ -631,6 +644,8 @@ sub reformat_html($$) {
     s/[ \t]+$//gm;                # lose whitespace at end of line again
   }
 
+  s/^\n+//gs;
+
   y/A-Za-z/N-ZA-Mn-za-m/ if ($nyarlathotep_p);
   print STDOUT $_;
 }
@@ -695,6 +710,8 @@ sub reformat_rss($) {
     $title = rss_field_to_html ($title || '');
     $body1 = rss_field_to_html ($body1 || '');
 
+    $title = '' if ($body1 eq $title);  # Identical in Twitter's atom feed.
+
     reformat_html ("$title<P>$body1", 1);
     print "\n";
   }
index 7c18942579c426b230ecf0173d8170e9b225876f..caa7bd7f74100229abde1133811796ab8ab1f66a 100644 (file)
@@ -65,7 +65,11 @@ URLs should be cached, use "If-Modified-Since", and obey "Expires".
 .BR fontglide (MANSUFFIX),
 .BR dadadodo (1),
 .BR webcollage (MANSUFFIX),
+.RS 0
 .I http://www.livejournal.com/stats/latest-rss.bml,
+.RS 0
+.I http://twitter.com/statuses/public_timeline.atom,
+.RS 0
 .BR driftnet (1),
 .BR EtherPEG ,
 .BR EtherPeek
index 1ac1d68c16da2ae8312631958807dd83b0c475a4..c092777c58796c193463c85ee6c8a3d870cdf5e6 100644 (file)
@@ -574,6 +574,9 @@ lock_initialization (saver_info *si, int *argc, char **argv)
         }
     }
 
+  if (si->prefs.debug_p)    /* But allow locking anyway in debug mode. */
+    si->locking_disabled_p = False;
+
 #endif /* NO_LOCKING */
 }
 
@@ -2124,6 +2127,10 @@ analyze_display (saver_info *si)
 #     endif
    }, { "DRI",                                 "DRI",
         True,  0
+   }, { "NV-CONTROL",                           "NVidia",
+        True,  0
+   }, { "NV-GLX",                               "NVidia GLX",
+        True,  0
    }, { "Apple-DRI",                            "Apple-DRI (XDarwin)",
         True,  0
    },
index d285f7990875f3eb712ffef1e6b35a647975ec10..dfb21d6722946ae8cb88d0e278fe4843deb0e53a 100644 (file)
@@ -237,15 +237,15 @@ called \fIxscreensaver.desktop\fP that contains the following five lines:
 .EX
 [Desktop Entry]
 Exec=xscreensaver
-Name=XScreensaver
+Name=XScreenSaver
 Type=Application
 X-KDE-StartupNotify=false
 .EE
 .TP 3
 \fB4: Make the various "lock session" buttons call xscreensaver.\fP
-Replace the file \fI/usr/bin/kdesktop_lock\fP (or 
-possibly \fI/usr/kde/3.5/bin/kdesktop_lock\fP)
-with these two lines:
+Replace the file \fIkdesktop_lock\fP or \fIkrunner_lock\fP
+in \fI/usr/bin/\fP (or possibly \fI/usr/kde/3.5/bin/\fP
+or \fI/usr/lib/kde4/libexec/\fP) with these two lines:
 .EX
 #!/bin/sh
 xscreensaver-command -lock
index 78a723608c4e8273a6000e2c545dc190929a6a49..564917891bce9161d6303904c6b587fe9c2a1c33 100644 (file)
@@ -1,4 +1,12 @@
-set args -geom =600x480+0+0 -sync
+set args -geom =800x600+0+0 -sync
+set env MallocScribble 1
+set env MallocPreScribble 1
+set env MallocErrorAbort 1
+set env MallocCheckHeapAbort 1
+set env MallocGuardEdges 1
+#set env MallocCheckHeapStart 130000
+#set env MallocCheckHeapEach 1
 b screenhack_ehandler
+b malloc_error_break
 b exit
 b abort
index 6c3954a16674505ad0284b0cdbb9d6d35a25f201..148a7624685faa4750cb022272d9999a3a0b59d0 100644 (file)
@@ -37,10 +37,8 @@ DEPEND_DEFINES       = @DEPEND_DEFINES@
 
 SHELL          = /bin/sh
 INSTALL                = @INSTALL@
-SUID_FLAGS      = -o root -m 4755
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT  = @INSTALL_SCRIPT@
-INSTALL_SETUID  = @INSTALL_SETUID@
 INSTALL_DATA   = @INSTALL_DATA@
 INSTALL_DIRS   = @INSTALL_DIRS@
 
@@ -94,10 +92,10 @@ SRCS                = attraction.c blitspin.c bouboule.c braid.c bubbles.c \
                  slip.c sphere.c spiral.c strange.c swirl.c xlockmore.c \
                  fps.c goop.c starfish.c munch.c fadeplot.c \
                  rd-bomb.c coral.c mountain.c triangle.c lissie.c worm.c \
-                 rotor.c ant.c xjack.c xlyap.c jigsaw.c xscreensaver-sgigl.c \
+                 rotor.c ant.c xjack.c xlyap.c xscreensaver-sgigl.c \
                  cynosure.c moire2.c flow.c epicycle.c interference.c \
                  truchet.c bsod.c crystal.c discrete.c distort.c kumppa.c \
-                 sonar.c demon.c loop.c t3d.c penetrate.c deluxe.c compass.c \
+                 demon.c loop.c t3d.c penetrate.c deluxe.c compass.c \
                  squiral.c xflame.c wander.c spotlight.c critical.c \
                  phosphor.c xmatrix.c petri.c shadebobs.c xsublim.c ccurve.c \
                  blaster.c bumps.c ripples.c xspirograph.c \
@@ -108,7 +106,7 @@ SRCS                = attraction.c blitspin.c bouboule.c braid.c bubbles.c \
                  anemone.c halftone.c metaballs.c eruption.c popsquares.c \
                  barcode.c piecewise.c cloudlife.c fontglide.c apple2.c \
                  apple2-main.c analogtv.c xanalogtv.c pong.c wormhole.c \
-                 mismunch.c pacman.c pacman_ai.c pacman_level.c \
+                 pacman.c pacman_ai.c pacman_level.c \
                  fuzzyflakes.c anemotaxis.c memscroller.c substrate.c \
                  intermomentary.c fireworkx.c fireworkx_mmx.S fiberlamp.c \
                  boxfit.c interaggregate.c celtic.c cwaves.c m6502.c \
@@ -133,10 +131,10 @@ OBJS              = attraction.o blitspin.o bouboule.o braid.o bubbles.o \
                  slip.o sphere.o spiral.o strange.o swirl.o xlockmore.o \
                  fps.o goop.o starfish.o munch.o fadeplot.o \
                  rd-bomb.o coral.o mountain.o triangle.o lissie.o worm.o \
-                 rotor.o ant.o xjack.o xlyap.o jigsaw.o xscreensaver-sgigl.o \
+                 rotor.o ant.o xjack.o xlyap.o xscreensaver-sgigl.o \
                  cynosure.o moire2.o flow.o epicycle.o interference.o \
                  truchet.o bsod.o crystal.o discrete.o distort.o kumppa.o \
-                 sonar.o demon.o loop.o t3d.o penetrate.o deluxe.o compass.o \
+                 demon.o loop.o t3d.o penetrate.o deluxe.o compass.o \
                  squiral.o xflame.o wander.o spotlight.o critical.o \
                  phosphor.o xmatrix.o petri.o shadebobs.o xsublim.o ccurve.o \
                  blaster.o bumps.o ripples.o xspirograph.o \
@@ -147,37 +145,39 @@ OBJS              = attraction.o blitspin.o bouboule.o braid.o bubbles.o \
                  anemone.o halftone.o metaballs.o eruption.o popsquares.o \
                  barcode.o piecewise.o cloudlife.o fontglide.o apple2.o \
                  apple2-main.o analogtv.o xanalogtv.o pong.o wormhole.o \
-                 mismunch.o pacman.o pacman_ai.o pacman_level.o \
+                 pacman.o pacman_ai.o pacman_level.o \
                  fuzzyflakes.o anemotaxis.o memscroller.o substrate.o \
                  intermomentary.o fireworkx.o fiberlamp.o boxfit.o \
                  interaggregate.o celtic.o cwaves.o webcollage-cocoa.o \
-                 webcollage-helper-cocoa.o m6502.0 asm6502.o abstractile.o \
+                 webcollage-helper-cocoa.o m6502.o asm6502.o abstractile.o \
                  lcdscrub.o
 
-NEXES          = attraction blitspin bouboule braid bubbles decayscreen deco \
-                 drift flag flame forest vines galaxy grav greynetic halo \
+EXES           = attraction blitspin bouboule braid decayscreen deco \
+                 drift flame galaxy grav greynetic halo \
                  helix hopalong hypercube ifs imsmap julia kaleidescope \
-                 laser lightning lisa lmorph maze moire noseguy pedal \
+                 maze moire noseguy pedal \
                  penrose pyro qix rocks rorschach sierpinski slidescreen \
-                 slip sphere spiral strange swirl goop starfish munch \
-                 fadeplot rd-bomb coral mountain triangle lissie worm rotor \
-                 xjack xlyap jigsaw cynosure moire2 flow epicycle \
+                 slip strange swirl goop starfish munch \
+                 fadeplot rd-bomb coral mountain triangle \
+                 xjack xlyap cynosure moire2 flow epicycle \
                  interference truchet bsod crystal discrete distort kumppa \
-                 demon loop t3d penetrate deluxe compass squiral xflame \
-                 wander spotlight critical phosphor xmatrix petri shadebobs \
+                 demon loop penetrate deluxe compass squiral xflame \
+                 wander spotlight phosphor xmatrix petri shadebobs \
                  ccurve blaster bumps ripples xspirograph \
                  nerverot xrayswarm hyperball zoom whirlwindwarp rotzoomer \
-                 whirlygig speedmine vermiculate twang apollonian euler2d \
+                 speedmine vermiculate twang apollonian euler2d \
                  juggle polyominoes thornbird  fluidballs anemone halftone \
                  metaballs eruption popsquares barcode piecewise cloudlife \
-                 fontglide apple2 xanalogtv pong  wormhole mismunch \
+                 fontglide apple2 xanalogtv pong  wormhole \
                  pacman fuzzyflakes anemotaxis memscroller substrate \
                  intermomentary fireworkx fiberlamp boxfit interaggregate \
                  celtic cwaves m6502 abstractile lcdscrub \
                  @JPEG_EXES@
-SEXES          = sonar
 JPEG_EXES      = webcollage-helper
-EXES           = $(NEXES) $(SEXES)
+
+RETIRED_EXES   = ant bubbles critical flag forest laser lightning lisa \
+                 lissie lmorph rotor sphere spiral t3d vines whirlygig \
+                 worm xsublim
 
 HACK_OBJS_1    = fps.o $(UTILS_BIN)/resources.o $(UTILS_BIN)/visual.o \
                  $(UTILS_BIN)/usleep.o $(UTILS_BIN)/yarandom.o @XMU_OBJS@
@@ -194,36 +194,42 @@ HDRS              = screenhack.h screenhackI.h fps.h fpsI.h xlockmore.h \
                  asm6502.h
 MEN            = anemone.man apollonian.man attraction.man \
                  blaster.man blitspin.man bouboule.man braid.man bsod.man \
-                 bubbles.man bumps.man ccurve.man compass.man coral.man \
-                 critical.man crystal.man cynosure.man decayscreen.man \
+                 bumps.man ccurve.man compass.man coral.man \
+                 crystal.man cynosure.man decayscreen.man \
                  deco.man deluxe.man demon.man discrete.man distort.man \
-                 drift.man epicycle.man euler2d.man fadeplot.man flag.man \
-                 flame.man flow.man fluidballs.man forest.man galaxy.man \
+                 drift.man epicycle.man euler2d.man fadeplot.man \
+                 flame.man flow.man fluidballs.man galaxy.man \
                  goop.man grav.man greynetic.man halo.man helix.man \
                  hopalong.man hyperball.man hypercube.man ifs.man imsmap.man \
-                 interference.man jigsaw.man juggle.man julia.man \
-                 kaleidescope.man kumppa.man laser.man lightning.man \
-                 lisa.man lissie.man lmorph.man loop.man maze.man moire.man \
+                 interference.man juggle.man julia.man \
+                 kaleidescope.man kumppa.man \
+                 loop.man maze.man moire.man \
                  moire2.man mountain.man munch.man nerverot.man noseguy.man \
                  pedal.man penetrate.man penrose.man petri.man phosphor.man \
                  polyominoes.man pyro.man qix.man rd-bomb.man ripples.man \
-                 rocks.man rorschach.man rotor.man rotzoomer.man \
+                 rocks.man rorschach.man rotzoomer.man \
                  shadebobs.man sierpinski.man slidescreen.man slip.man \
-                 sonar.man speedmine.man sphere.man spiral.man \
+                 speedmine.man \
                  spotlight.man squiral.man starfish.man strange.man \
-                 swirl.man t3d.man thornbird.man triangle.man truchet.man \
-                 twang.man vermiculate.man vidwhacker.man vines.man \
-                 wander.man webcollage.man whirlwindwarp.man whirlygig.man \
-                 worm.man xflame.man xjack.man xlyap.man xmatrix.man \
-                 xrayswarm.man xspirograph.man xsublim.man \
+                 swirl.man thornbird.man triangle.man truchet.man \
+                 twang.man vermiculate.man vidwhacker.man \
+                 wander.man webcollage.man whirlwindwarp.man \
+                 xflame.man xjack.man xlyap.man xmatrix.man \
+                 xrayswarm.man xspirograph.man \
                  zoom.man halftone.man eruption.man metaballs.man \
                  barcode.man piecewise.man cloudlife.man ljlatest.man \
                  fontglide.man apple2.man xanalogtv.man pong.man \
-                 wormhole.man mismunch.man pacman.man fuzzyflakes.man \
+                 wormhole.man pacman.man fuzzyflakes.man \
                  anemotaxis.man memscroller.man substrate.man \
                  intermomentary.man fireworkx.man fiberlamp.man boxfit.man \
                  interaggregate.man celtic.man cwaves.man abstractile.man \
                  lcdscrub.man
+
+RETIRED_MEN    = ant.man bubbles.man critical.man flag.man forest.man \
+                 laser.man lightning.man lisa.man lissie.man lmorph.man \
+                 rotor.man sphere.man spiral.man t3d.man vines.man \
+                 whirlygig.man worm.man xsublim.man
+
 STAR           = *
 EXTRAS         = README Makefile.in xml2man.pl m6502.sh .gdbinit \
                  euler2d.tex check-configs.pl munge-ad.pl \
@@ -248,7 +254,7 @@ TARFILES    = $(SRCS) $(HDRS) $(SCRIPTS) $(MEN) $(EXTRAS) $(VMSFILES)
 
 
 default: all
-all: $(EXES)
+all: $(EXES) $(RETIRED_EXES)
 
 install:   install-program   install-scripts install-xml install-man
 uninstall: uninstall-program uninstall-xml uninstall-man
@@ -262,36 +268,12 @@ install-program:: $(EXES)
        @if [ ! -d $(install_prefix)$(HACKDIR) ]; then                  \
          $(INSTALL_DIRS) $(install_prefix)$(HACKDIR) ;                 \
         fi ;                                                           \
-       for program in $(NEXES); do                                     \
+       for program in $(EXES); do                                      \
          echo $(INSTALL_PROGRAM) $$program                             \
            $(install_prefix)$(HACKDIR)/$$program ;                     \
          $(INSTALL_PROGRAM) $$program                                  \
            $(install_prefix)$(HACKDIR)/$$program ;                     \
        done ;                                                          \
-       if [ @SETUID_HACKS@ = yes ]; then                               \
-         sinst="$(INSTALL_SETUID)" ;                                   \
-       else                                                            \
-         sinst="$(INSTALL_PROGRAM)" ;                                  \
-       fi ;                                                            \
-       for program in $(SEXES); do                                     \
-         instargs="$$program $(install_prefix)$(HACKDIR)/$$program" ;  \
-         echo $$sinst $$instargs ;                                     \
-         if   $$sinst $$instargs ; then                                \
-             true ;                                                    \
-         elif [ @SETUID_HACKS@ = yes ]; then                           \
-           echo $(INSTALL_PROGRAM) $$instargs ;                        \
-           if   $(INSTALL_PROGRAM) $$instargs ; then                   \
-             echo "" ;                                                 \
-             echo "WARNING: unable to install $$program setuid:"       \
-                  "installed non-setuid instead." ;                    \
-             echo "" ;                                                 \
-           else                                                        \
-             exit 1 ;                                                  \
-           fi ;                                                        \
-         else                                                          \
-           exit 1 ;                                                    \
-         fi ;                                                          \
-       done
 
 install-scripts: $(SCRIPTS) munge-scripts
        @for program in $(SCRIPTS); do                                  \
@@ -658,9 +640,6 @@ xjack:              xjack.o         $(HACK_OBJS)
 xlyap:         xlyap.o         $(HACK_OBJS) $(COL)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(COL) $(HACK_LIBS)
 
-jigsaw:                jigsaw.o        $(HACK_OBJS) $(SPL) $(GRAB)
-       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(SPL) $(GRAB) $(HACK_LIBS)
-
 cynosure:      cynosure.o      $(HACK_OBJS) $(COL)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(COL) $(HACK_LIBS)
 
@@ -688,9 +667,6 @@ distort:    distort.o       $(HACK_OBJS) $(GRAB) $(SHM)
 kumppa:                kumppa.o        $(HACK_OBJS) $(DBE)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(DBE) $(HACK_LIBS)
 
-sonar:         sonar.o         $(HACK_OBJS) $(COL)
-       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(COL) $(HACK_LIBS)
-
 t3d:           t3d.o           $(HACK_OBJS) $(COL)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(COL) $(HACK_LIBS)
 
@@ -811,9 +787,6 @@ pong:       pong.o  $(HACK_OBJS) $(ATV) $(GRAB) $(XPM)
 wormhole:      wormhole.o      $(HACK_OBJS)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
 
-mismunch:      mismunch.o      $(HACK_OBJS) $(COL) $(SPL)
-       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(COL) $(SPL) $(HACK_LIBS)
-
 fuzzyflakes:   fuzzyflakes.o   $(HACK_OBJS)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
 
@@ -1818,18 +1791,6 @@ intermomentary.o: $(UTILS_SRC)/resources.h
 intermomentary.o: $(UTILS_SRC)/usleep.h
 intermomentary.o: $(UTILS_SRC)/visual.h
 intermomentary.o: $(UTILS_SRC)/yarandom.h
-jigsaw.o: ../config.h
-jigsaw.o: $(srcdir)/fps.h
-jigsaw.o: $(srcdir)/screenhackI.h
-jigsaw.o: $(srcdir)/screenhack.h
-jigsaw.o: $(UTILS_SRC)/colors.h
-jigsaw.o: $(UTILS_SRC)/grabscreen.h
-jigsaw.o: $(UTILS_SRC)/hsv.h
-jigsaw.o: $(UTILS_SRC)/resources.h
-jigsaw.o: $(UTILS_SRC)/spline.h
-jigsaw.o: $(UTILS_SRC)/usleep.h
-jigsaw.o: $(UTILS_SRC)/visual.h
-jigsaw.o: $(UTILS_SRC)/yarandom.h
 juggle.o: ../config.h
 juggle.o: $(srcdir)/fps.h
 juggle.o: $(srcdir)/screenhackI.h
@@ -2017,17 +1978,6 @@ metaballs.o: $(UTILS_SRC)/resources.h
 metaballs.o: $(UTILS_SRC)/usleep.h
 metaballs.o: $(UTILS_SRC)/visual.h
 metaballs.o: $(UTILS_SRC)/yarandom.h
-mismunch.o: ../config.h
-mismunch.o: $(srcdir)/fps.h
-mismunch.o: $(srcdir)/screenhackI.h
-mismunch.o: $(srcdir)/screenhack.h
-mismunch.o: $(UTILS_SRC)/colors.h
-mismunch.o: $(UTILS_SRC)/grabscreen.h
-mismunch.o: $(UTILS_SRC)/hsv.h
-mismunch.o: $(UTILS_SRC)/resources.h
-mismunch.o: $(UTILS_SRC)/usleep.h
-mismunch.o: $(UTILS_SRC)/visual.h
-mismunch.o: $(UTILS_SRC)/yarandom.h
 moire2.o: ../config.h
 moire2.o: $(srcdir)/fps.h
 moire2.o: $(srcdir)/screenhackI.h
@@ -2452,17 +2402,6 @@ slip.o: $(UTILS_SRC)/xshm.h
 slip.o: $(UTILS_SRC)/yarandom.h
 slip.o: $(srcdir)/xlockmoreI.h
 slip.o: $(srcdir)/xlockmore.h
-sonar.o: ../config.h
-sonar.o: $(srcdir)/fps.h
-sonar.o: $(srcdir)/screenhackI.h
-sonar.o: $(srcdir)/screenhack.h
-sonar.o: $(UTILS_SRC)/colors.h
-sonar.o: $(UTILS_SRC)/grabscreen.h
-sonar.o: $(UTILS_SRC)/hsv.h
-sonar.o: $(UTILS_SRC)/resources.h
-sonar.o: $(UTILS_SRC)/usleep.h
-sonar.o: $(UTILS_SRC)/visual.h
-sonar.o: $(UTILS_SRC)/yarandom.h
 speedmine.o: ../config.h
 speedmine.o: $(srcdir)/fps.h
 speedmine.o: $(srcdir)/screenhackI.h
index 101ee5a6a416a98fbeadf7b0abca1b23f91d82a5..90eed8d1d7ac3c762f3e8c75a15ccfc3233532f6 100644 (file)
@@ -1027,7 +1027,7 @@ static void jmpSTY(machine_6502 *machine, AddrMode adm){
 static void assignOpCodes(Opcodes *opcodes){
 
  #define SETOP(num, _name, _Imm, _ZP, _ZPX, _ZPY, _ABS, _ABSX, _ABSY, _INDX, _INDY, _SNGL, _BRA, _func) \
-{opcodes[num].name[4] = '\0'; \
+{opcodes[num].name[3] = '\0'; \
  strncpy(opcodes[num].name, _name, 3); opcodes[num].Imm = _Imm; opcodes[num].ZP = _ZP; \
  opcodes[num].ZPX = _ZPX; opcodes[num].ZPY = _ZPY; opcodes[num].ABS = _ABS; \
  opcodes[num].ABSX = _ABSX; opcodes[num].ABSY = _ABSY; opcodes[num].INDX = _INDX; \
@@ -1897,12 +1897,11 @@ static BOOL translate(Opcodes *op,Param *param, machine_6502 *machine){
       else {
        if (op->BRA) {
          pushByte(machine, op->BRA);
-         if (param->lbladdr < (machine->codeLen + PROG_START))
-           pushByte(machine,
-                    (0xff - (machine->codeLen-param->lbladdr)) & 0xff);
-         else
-           pushByte(machine,
-                    (param->lbladdr - machine->codeLen-1) & 0xff);
+          {
+            int diff = abs(param->lbladdr - machine->defaultCodePC);
+            int backward = (param->lbladdr < machine->defaultCodePC);
+            pushByte(machine, (backward) ? 0xff - diff : diff - 1);
+          }
        }
        else {
          fprintf(stderr,"%s does not take BRANCH parameters.\n",op->name);
@@ -1993,14 +1992,28 @@ static BOOL compileLine(AsmLine *asmline, void *args){
 static BOOL indexLabels(AsmLine *asmline, void *arg){
   machine_6502 *machine; 
   int thisPC;
+  Bit16 oldDefault;
   machine = arg;
+  oldDefault = machine->defaultCodePC;
   thisPC = machine->regPC;
   /* Figure out how many bytes this instruction takes */
   machine->codeLen = 0;
+
   if ( ! compileLine(asmline, machine) ){
     return FALSE;
   }
-  machine->regPC += machine->codeLen;
+
+  /* If the machine's defaultCodePC has changed then we encountered a
+     *= which changes the load address. We need to initials our code
+     *counter with the current default. */
+  if (oldDefault == machine->defaultCodePC){    
+    machine->regPC += machine->codeLen;
+  }
+  else {
+    machine->regPC = machine->defaultCodePC;
+    oldDefault = machine->defaultCodePC;
+  }
+
   if (asmline->labelDecl) {
     asmline->label->addr = thisPC;
   }
@@ -2040,6 +2053,20 @@ static BOOL compileCode(machine_6502 *machine, const char *code){
       return FALSE;
     /* update label references */
     linkLabels(asmlist);
+
+#if 0 /* prints out some debugging information */
+    {
+      AsmLine *p;
+      if(asmlist != NULL){
+        for (p = asmlist; p != NULL; p = p->next)
+          fprintf(stderr,"%s lbl: %s addr: %d ParamLbl: %s ParamAddr: %d\n",
+                  p->command, p->label->label, p->label->addr,
+                  p->param->label, p->param->lbladdr);
+            }
+    }
+
+#endif    
+
     /* Second pass: translate the instructions */
     machine->codeLen = 0;
     /* Link label call push_byte which increments defaultCodePC.
diff --git a/hacks/bubbles.man b/hacks/bubbles.man
deleted file mode 100644 (file)
index f9b892e..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-.de EX         \"Begin example
-.ne 5
-.if n .sp 1
-.if t .sp .5
-.nf
-.in +.5i
-..
-.de EE
-.fi
-.in -.5i
-.if n .sp 1
-.if t .sp .5
-..
-.TH XScreenSaver 1 "14-Dec-95" "X Version 11"
-.SH NAME
-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] [\-rise|\-drop] [-trails]
-[\-fps]
-.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
-for this was watching little globules of oil on the bottom of a frying pan
-and it also looks a little like bubbles in fizzy soft drink.  The default
-mode uses fancy ray-traced bubbles but there is also a mode which just draws 
-circles in case the default mode is too taxing on your hardware.
-.SH OPTIONS
-Depending on how your
-.I bubbles
-was compiled, it accepts the following options:
-.TP 8
-.B \-foreground
-Colour of circles if \fI\-simple\fP mode is selected.
-.TP 8
-.B \-background
-Colour of window background.
-.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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 microseconds
-How much of a delay should be introduced between steps of the animation.
-Default 800, or about 800 microsecond.  Actually, this is the delay between each
-group of 15 new bubbles since such a delay between each step results in a
-very slow animation rate.
-.TP 8
-.B \-nodelay
-Same as \fI\-delay 0\fP.
-.TP 8
-.B \-simple
-Don't use the default fancy pixmap bubbles.  Just draw circles instead.
-This may give more bearable performance if your hardware wasn't made for
-this sort of thing.
-.TP 8
-.B \-broken
-Don't hide bubbles when they pop.  This was a bug during development
-but the results were actually quite attractive.
-.TP 8
-.B \-3D
-Normally, the simulation is done completely in two dimensions.  When a
-bubble swallows up another bubble, the areas of each are added to get
-the area of the resulting bubble.  This option changes the algorithm
-to instead add volume (imagining each to be a sphere in 3D space).  The
-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
-.B \-quiet
-Don't print messages explaining why one or several command line options
-were ignored.  This is disabled by default.
-.TP 8
-.B \-rise | \-drop 
-.TP 8
-.B \-trails
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.SH NOTES
-If you find the pace of things too slow, remember that there is a delay
-even though you specify no \fI\-delay\fP option.  Try using \fI\-nodelay\fP
-although beware of the effects of irritation of other users if you're on a 
-shared system as you bleed their CPU time away.
-
-Some tools to assist in creation of new bubbles are included in the source
-distribution.  These can either be loaded with the \fI\-file\fP or
-\fI\-directory\fP options (if available) or they can be used in place
-of the distributed default bubble (bubble_default.c).
-You might like to copy these scripts to a permanent location and
-use them.  Read bubbles.README.
-
-Rendered bubbles are not supported on monochrome displays.  I'm not
-convinced that small bubbles, even dithered properly are going to look
-like anything more than a jumble of random dots.
-.SH BUGS
-There is a delay before something appears on the screen when using
-rendered bubbles.  The XPM library seems to take a \fBlong\fP time to make
-pixmaps out of raw data.  This can be irritating on slower systems.
-
-The movement of the bubbles looks jerky if an incomplete set of bubbles
-is used.  
-
-The hide/display algorithm could do with some work to avoid flickering
-when \fI\-nodelay\fP is set.
-.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 DISTRIBUTION POLICY
-This work is Copyright \(co 1995, 1996 by James Macnicol.  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
-James Macnicol <james.macnicol@mailexcite.com>
index 96d04d69c4c95e60c2102d04b186a28bcd8ee251..23ca552d3edec59f3564f87204f066c94568776b 100644 (file)
@@ -64,7 +64,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERAGGREGATE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERFERENCE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERMOMENTARY.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JIGSAW.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JUGGLE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JULIA.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) KALEIDESCOPE.C
@@ -80,7 +79,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MAZE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MEMSCROLLER.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) METABALLS.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MISMUNCH.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE2.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOUNTAIN.C
@@ -112,7 +110,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SIERPINSKI.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIDESCREEN.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIP.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SONAR.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPEEDMINE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPHERE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPIRAL.C
index 96d04d69c4c95e60c2102d04b186a28bcd8ee251..23ca552d3edec59f3564f87204f066c94568776b 100644 (file)
@@ -64,7 +64,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERAGGREGATE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERFERENCE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERMOMENTARY.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JIGSAW.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JUGGLE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JULIA.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) KALEIDESCOPE.C
@@ -80,7 +79,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MAZE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MEMSCROLLER.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) METABALLS.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MISMUNCH.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE2.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOUNTAIN.C
@@ -112,7 +110,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SIERPINSKI.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIDESCREEN.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIP.C
-$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SONAR.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPEEDMINE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPHERE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPIRAL.C
index ec3cb5f82994f6789c184afa790a410448383c75..95c408a3f12bd8353f9d7acacc43ee06ac204ddd 100644 (file)
@@ -4,8 +4,8 @@
             a screen saver and locker for the X window system
                             by Jamie Zawinski
 
-                              version 5.07
-                               10-Aug-2008
+                              version 5.08
+                               27-Dec-2008
 
                      http://www.jwz.org/xscreensaver/
 
index 9640a2c958db8543e2c8d08795cc296825ff86eb..8a3916b0104cff45aee0bb13aaa7e17260f0c38b 100644 (file)
@@ -21,7 +21,8 @@
 
   <_description>
 More "discrete map" systems, including new variants of Hopalong and
-Julia, and a few others.
+Julia, and a few others.  See also the "Hopalong" and "Julia" 
+screen savers.
 
 Written by Tim Auckland; 1998.
   </_description>
index e2661d186c3f2b920e3cef64bf58701f37f5fd7d..c026c30c0c096ebfea729921e96b65080d49b27b 100644 (file)
@@ -4,28 +4,45 @@
 
   <command arg="-root"/>
 
-  <number id="delay" type="slider" arg="-delay %"
-          _label="Frame rate" _low-label="Low" _high-label="High"
-          low="0" high="100000" default="70000"
-          convert="invert"/>
-
-  <number id="delay2" type="slider" arg="-delay2 %"
-          _label="Linger"
-          _low-label="0 seconds" _high-label="1 minute"
-          low="0" high="60" default="5"/>
-
-  <xscreensaver-image />
-
-  <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+  <hgroup>
+   <vgroup>
+    <number id="delay" type="slider" arg="-delay %"
+            _label="Frame rate" _low-label="Low" _high-label="High"
+            low="0" high="100000" default="20000"
+            convert="invert"/>
+
+    <number id="speed" type="slider" arg="-speed %"
+             _label="Speed" _low-label="Slow" _high-label="Fast"
+             low="0.1" high="8.0" default="1.0"/>
+   </vgroup>
+   <vgroup>
+    <number id="density" type="slider" arg="-complexity %"
+             _label="Puzzle pieces" _low-label="Few" _high-label="Many"
+             low="1.0" high="4.0" default="1.0"/>
+
+    <number id="resolution" type="slider" arg="-resolution %"
+             _label="Resolution" _low-label="Chunky" _high-label="Smooth"
+             low="25" high="200" default="100"/>
+   </vgroup>
+  </hgroup>
+
+  <hgroup>
+   <vgroup>
+    <xscreensaver-image />
+   </vgroup>
+   <vgroup>
+    <boolean id="wobble"  _label="Tilt"  arg-unset="-no-wobble"/>
+    <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+   </vgroup>
+  </hgroup>
 
   <_description>
 This grabs a screen image, carves it up into a jigsaw puzzle,
-shuffles it, and then solves the puzzle.  This works especially well
-when you feed it an external video signal instead of letting it grab
-the screen image (actually, I guess this is generally true...)  When
-it is grabbing a video image, it is sometimes pretty hard to guess
-what the image is going to look like once the puzzle is solved.
+shuffles it, and then solves the puzzle.
+
+http://en.wikipedia.org/wiki/Jigsaw_puzzle
+http://en.wikipedia.org/wiki/Tessellation
 
-Written by Jamie Zawinski; 1998.
+Written by Jamie Zawinski; 1997.
   </_description>
 </screensaver>
index fbbb65c44c782f5968674e8f0bb2ad85eaee9dc4..0bd981a74a24d199a1ccc0ff3c30944fbd257be3 100644 (file)
           _label="Grid size" low="0" high="100" default="0"/>
 
   <select id="generator">
-    <option id="mrandom" _label="Random generator"/>
-    <option id="m0"      _label="Backtracking generator"
+    <option id="mrandom" _label="Random maze generator"/>
+    <option id="m0"      _label="Depth-first backtracking maze generator"
                          arg-set="-generator 0"/>
-    <option id="m1"      _label="Seeding generator"
+    <option id="m1"      _label="Wall-building maze generator (Prim)"
                          arg-set="-generator 1"/>
-    <option id="m2"      _label="Joining generator"
+    <option id="m2"      _label="Set-joining maze generator (Kruskal)"
                          arg-set="-generator 2"/>
   </select>
 
-  <select id="ignorance">
-    <option id="smart" _label="Head toward exit"/>
-    <option id="dumb"  _label="Ignorant of exit direction"
-            arg-set="-ignorant"/>
-  </select>
-
-  <!-- #### -max-length [5] -->
-  <!-- #### -bridge -->
-  <!-- #### -live-color [green] -->
-  <!-- #### -dead-color [red] -->
-  <!-- #### -skip-color [orange] -->
-  <!-- #### -surround-color [slateblue] -->
+  <hgroup>
+   <select id="ignorance">
+     <option id="smart" _label="Head toward exit"/>
+     <option id="dumb"  _label="Ignorant of exit direction"
+             arg-set="-ignorant"/>
+   </select>
 
-  <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+   <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+  </hgroup>
 
   <_description>
-This generates random mazes (with various different algorithms), and
-then solves them.  Backtracking and look-ahead paths are displayed in
-different colors.
+This generates random mazes (with three different maze-generation
+algorithms), and then solves them.  Backtracking and look-ahead paths
+are displayed in different colors.
+
+http://en.wikipedia.org/wiki/Maze_generation_algorithm
 
-Written by Jim Randell and many others; 1992.
+Written by Martin Weiss, Dave Lemke, Jim Randell, Jamie Zawinski,
+Johannes Keukelaar, and Zack Weinberg; 1985.
   </_description>
 </screensaver>
diff --git a/hacks/config/mismunch.xml b/hacks/config/mismunch.xml
deleted file mode 100644 (file)
index 7963932..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<screensaver name="mismunch" _label="Mismunch">
-
-  <command arg="-root"/>
-
-  <number id="delay" type="slider" arg="-delay %"
-          _label="Frame rate" _low-label="Low" _high-label="High"
-          low="0" high="100000" default="10000"
-          convert="invert"/>
-
-  <number id="duration" type="slider" arg="-clear %"
-          _label="Duration" _low-label="Short" _high-label="Long"
-          low="1" high="200" default="65"/>
-
-  <number id="simultaneous" type="slider" arg="-simul %"
-          _label="Simultaneous squares" _low-label="One" _high-label="Many"
-          low="1" high="20" default="5"/>
-
-  <select id="mode">
-    <option id="xor"   _label="XOR"/>
-    <option id="solid" _label="Solid" arg-set="-no-xor"/>
-  </select>
-
-  <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
-
-  <_description>
-Munching errors!  This is a creatively broken misimplementation of the
-classic munching squares graphics hack.  See the "Munch" screen saver
-for the original.
-
-http://en.wikipedia.org/wiki/HAKMEM
-http://en.wikipedia.org/wiki/Munching_square
-
-Written by Steven Hazel; 2004.
-  </_description>
-</screensaver>
index 2a0a0b3110af2e7964b5c7ddd8fa969ba9092b56..df7f92eebf41931967fcc0889fd66dac761cf9a8 100644 (file)
@@ -4,25 +4,36 @@
 
   <command arg="-root"/>
 
-  <number id="delay" type="slider" arg="-delay %"
-          _label="Frame rate" _low-label="Low" _high-label="High"
-          low="0" high="100000" default="10000"
-          convert="invert"/>
-
-  <number id="duration" type="slider" arg="-clear %"
-          _label="Duration" _low-label="Short" _high-label="Long"
-          low="1" high="200" default="50"/>
-
-  <select id="mode">
-    <option id="xor"   _label="XOR"/>
-    <option id="solid" _label="Solid" arg-set="-no-xor"/>
-  </select>
-
-  <!-- #### -no-shift -->
-  <!-- #### -hold [100000] -->
-  <!-- #### -logminwidth [7] -->
-
-  <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+  <hgroup>
+   <vgroup>
+    <number id="delay" type="slider" arg="-delay %"
+            _label="Frame rate" _low-label="Low" _high-label="High"
+            low="0" high="100000" default="10000"
+            convert="invert"/>
+
+    <number id="duration" type="slider" arg="-clear %"
+            _label="Duration" _low-label="Short" _high-label="Long"
+            low="1" high="200" default="65"/>
+
+    <number id="simultaneous" type="slider" arg="-simul %"
+            _label="Simultaneous squares" _low-label="One" _high-label="Many"
+            low="1" high="20" default="5"/>
+   </vgroup>
+   <vgroup>
+    <select id="mismunch">
+      <option id="random"   _label="Munch or mismunch"/>
+      <option id="munch"    _label="Munch only"    arg-set="-classic"/>
+      <option id="mismunch" _label="Mismunch only" arg-set="-mismunch"/>
+    </select>
+
+    <select id="mode">
+      <option id="xor"   _label="XOR"/>
+      <option id="solid" _label="Solid" arg-set="-no-xor"/>
+    </select>
+
+    <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+   </vgroup>
+  </hgroup>
 
   <_description>
         DATAI 2
         XOR 1,2
         JRST .-4
 
-As reported by HAKMEM, in 1962, Jackson Wright wrote the above PDP-1
-code. That code still lives on here, some 46 years later.  The number
-of lines of enclosing code has increased substantially, however.
+As reported by HAKMEM (MIT AI Memo 239, 1972), Jackson Wright wrote
+the above PDP-1 code in 1962. That code still lives on here, some 46
+years later.
+
+In "mismunch" mode, it displays a creatively broken misimplementation
+of the classic munching squares algorithm instead.
 
 http://en.wikipedia.org/wiki/HAKMEM
 http://en.wikipedia.org/wiki/Munching_square
 
-Written by Jackson Wright and Tim Showalter; 1997.
+Written by Jackson Wright, Tim Showalter, Jamie Zawinski and
+Steven Hazel; 1997.
   </_description>
 </screensaver>
diff --git a/hacks/config/photopile.xml b/hacks/config/photopile.xml
new file mode 100644 (file)
index 0000000..f14657e
--- /dev/null
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="photopile" _label="Photopile">
+
+  <command arg="-root"/>
+
+  <hgroup>
+   <vgroup>
+
+    <number id="duration" type="slider" arg="-duration %"
+            _label="Time until loading a new image"
+            _low-label="5 seconds" _high-label="1 minute"
+            low="5" high="60" default="5"/>
+
+    <number id="speed" type="slider" arg="-speed %"
+            _label="Animation speed" _low-label="Slow" _high-label="Fast"
+            low="0.1" high="8.0" default="1.0"/>
+
+    <number id="delay" type="slider" arg="-delay %"
+            _label="Frame rate" _low-label="Low" _high-label="High"
+            low="0" high="100000" default="10000"
+            convert="invert"/>
+
+    <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+   </vgroup>
+   <vgroup>
+
+    <number id="count" type="spinbutton" arg="-count %"
+            _label="Number of images" low="1" high="20" default="7"/>
+
+    <number id="scale" type="slider" arg="-scale %"
+            _label="Image size"
+            _low-label="Small" _high-label="Large"
+            low="0.1" high="0.9" default="0.4"/>
+
+    <number id="tilt" type="slider" arg="-maxTilt %"
+            _label="Maximum angle from vertical"
+            _low-label="0 degrees" _high-label="90 degrees"
+            low="0" high="90" default="50"/>
+
+    <boolean id="titles" _label="Show file names" arg-set="-titles"/>
+
+   </vgroup>
+  </hgroup>
+
+  <xscreensaver-image />
+
+  <_description>
+Loads several random images, and displays them as if lying in a random pile.
+The pile is periodically reshuffled, with new images coming in and old ones
+being thrown out.
+
+Written by Jens Kilian; 2008.
+  </_description>
+</screensaver>
index 70ae366f06c9d81ce4eaf4b0c6269014403cb0ec..105e55a36bf612b6370f54886501507180d8fe43 100644 (file)
@@ -26,6 +26,6 @@ variant of the recursive Sierpinski triangle.
 
 http://en.wikipedia.org/wiki/Sierpinski_triangle#Analogs_in_higher_dimension
 
-Written by Tim Robinson and Jamie Zawinski; 1999.
+Written by Jamie Zawinski and Tim Robinson; 1999.
   </_description>
 </screensaver>
index 8a3265df04bb2a78f919c4d212f690336f2856c0..baffcbf96d3f22c95ee05ab948cbf15b2492591a 100644 (file)
@@ -4,39 +4,58 @@
 
   <command arg="-root"/>
 
-  <number id="delay" type="slider" arg="-delay %"
-        _label="Frame rate" _low-label="Low" _high-label="High"
-        low="0" high="1000000" default="100000"
-        convert="invert"/>
-
-  <select id="ping">
-   <option id="24" _label="Ping subnet/24 (254 hosts)" arg-set="-ping subnet/24"/>
-   <option id="25" _label="Ping subnet/25 (126 hosts)" arg-set="-ping subnet/25"/>
-   <option id="26" _label="Ping subnet/26 (62 hosts)"  arg-set="-ping subnet/26"/>
-   <option id="27" _label="Ping subnet/27 (31 hosts)"  arg-set="-ping subnet/27"/>
-   <option id="28" _label="Ping subnet/28 (14 hosts)"/>
-   <option id="29" _label="Ping subnet/29 (6 hosts)"   arg-set="-ping subnet/29"/>
-   <option id="30" _label="Ping subnet/30 (2 hosts)"   arg-set="-ping subnet/30"/>
-   <option id="ssh" _label="Ping known SSH hosts"      arg-set="-ping /etc/hosts,$HOME/.ssh/known_hosts,$HOME/.ssh/known_hosts2"/>
-  </select>
+  <hgroup>
+   <vgroup>
+    <number id="delay" type="slider" arg="-delay %"
+            _label="Frame rate" _low-label="Low" _high-label="High"
+            low="0" high="100000" default="30000"
+            convert="invert"/>
+
+    <number id="speed" type="slider" arg="-speed %"
+             _label="Speed" _low-label="Slow" _high-label="Fast"
+             low="0.1" high="8.0" default="1.0"/>
+
+    <select id="ping">
+     <option id="24" _label="Ping subnet/24 (254 hosts)" arg-set="-ping subnet/24"/>
+     <option id="25" _label="Ping subnet/25 (126 hosts)" arg-set="-ping subnet/25"/>
+     <option id="26" _label="Ping subnet/26 (62 hosts)"  arg-set="-ping subnet/26"/>
+     <option id="27" _label="Ping subnet/27 (31 hosts)"  arg-set="-ping subnet/27"/>
+     <option id="28" _label="Ping subnet/28 (14 hosts)"/>
+     <option id="29" _label="Ping subnet/29 (6 hosts)"   arg-set="-ping subnet/29"/>
+     <option id="30" _label="Ping subnet/30 (2 hosts)"   arg-set="-ping subnet/30"/>
+     <option id="ssh" _label="Ping known SSH hosts"      arg-set="-ping /etc/hosts,$HOME/.ssh/known_hosts,$HOME/.ssh/known_hosts2"/>
+     <option id="ssh" _label="Simulation (don't ping)"   arg-set="-ping simulation"/>
+    </select>
+   </vgroup>
+
+   <vgroup>
+    <number id="font" type="slider" arg="-font-size %"
+            _label="Font size" _low-label="Tiny" _high-label="Huge"
+            low="6.0" high="24.0" default="12"/>
+
+    <number id="sweep" type="slider" arg="-sweep-size %"
+            _label="Trail length" _low-label="Short" _high-label="Long"
+            low="0.02" high="0.7" default="0.3"/>
+   </vgroup>
+  </hgroup>
+
 
   <hgroup>
    <string id="aname" _label="Simulation team A name" arg="-team-a-name %"/>
     <number id="acount" type="spinbutton" arg="-team-a-count %"
-            _label="A count"
-            low="1" high="100" default="4"/>
+            _label="A count" low="1" high="100" default="4"/>
   </hgroup>
 
   <hgroup>
    <string id="bname" _label="Simulation team B name" arg="-team-b-name %"/>
    <number id="bcount" type="spinbutton" arg="-team-b-count %"
-           _label="B count"
-           low="1" high="100" default="4"/>
+           _label="B count" low="1" high="100" default="4"/>
   </hgroup>
 
   <hgroup>
-   <boolean id="dns"   _label="Resolve host names" arg-unset="-no-dns"/>
-   <boolean id="times" _label="Show ping times"    arg-unset="-no-times"/>
+   <boolean id="dns"     _label="Resolve host names" arg-unset="-no-dns"/>
+   <boolean id="times"   _label="Show ping times"    arg-unset="-no-times"/>
+   <boolean id="wobble"  _label="Tilt"               arg-unset="-no-wobble"/>
    <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
   </hgroup>
 
@@ -52,6 +71,6 @@ Alternately, it can run a simulation that doesn't involve hosts.
 
 http://en.wikipedia.org/wiki/Ping#History
 
-Written by Stephen Martin and Jamie Zawinski; 1998.
+Written by Jamie Zawinski and Stephen Martin; 1998.
   </_description>
 </screensaver>
index 56a2389862c25c52da37b4086561bb373922645e..40913e7895876ada9cfb4aad4b3245cc7182095a 100644 (file)
@@ -6,16 +6,29 @@
 
   <number id="start" type="slider" arg="-start %"
           _label="Start sequence time" _low-label="0 sec" _high-label="30 sec"
-          low="0.00" high="30.00" default="0.00"/>
-
-  <number id="changetime" type="slider" arg="-end %"
-          _label="Color change time" _low-label="Short" _high-label="Long"
-          low="0.00" high="30.00" default="27.79"/>
-
-  <boolean id="logo"    _label="Draw logo" arg-unset="-no-logo"/>
-  <boolean id="reverse" _label="Run backward" arg-set="-reverse"/>
-
-  <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+          low="0.00" high="27.79" default="0.00"/>
+
+  <number id="end" type="slider" arg="-end %"
+          _label="End sequence time" _low-label="0 sec" _high-label="30 sec"
+          low="0.00" high="27.79" default="27.79"/>
+
+  <hgroup>
+   <vgroup>
+    <boolean id="logo"    _label="Draw logo"       arg-unset="-no-logo"/>
+    <boolean id="reverse" _label="Run backward"    arg-set="-reverse"/>
+    <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+   </vgroup>
+   <vgroup>
+<!--
+    <string id="tardis"  _label="Tardis image            " arg="-tardis %"/>
+    <string id="head"    _label="Head image             "  arg="-head %"/>
+    <string id="marquee" _label="Marquee image        "    arg="-marquee %"/>
+    <string id="tun1"    _label="Tardis tunnel image "     arg="-tun1 %"/>
+    <string id="tun2"    _label="Middle tunnel image"      arg="-tun2 %"/>
+    <string id="tun3"    _label="Final tunnel image   "    arg="-tun3 %"/>
+-->
+   </vgroup>
+  </hgroup>
 
   <_description>
 Draws an animation similar to the opening and closing effects on the
diff --git a/hacks/critical.man b/hacks/critical.man
deleted file mode 100644 (file)
index 324c116..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-.TH XScreenSaver 1 "08 Feb 2000" "X Version 11"
-.SH NAME
-critical - Draw a system showing self-organizing criticality
-.SH SYNOPSIS
-.B critical
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIseconds\fP] [\-random \fIboolean\fP] [\-ncolors \fIint\fP] [\-offset \fIint\fP] 
-[\-fps]
-.SH DESCRIPTION
-The \fIcritical\fP program displays a self-organizing critical system
-that gradually emerges from chaos.
-
-\fIcritical\fP performs a simulation on a two-dimensional array of
-integers.  The array is initialized to random values.  On each
-iteration, it draws a line to the array position with the greatest
-value.  It then replaces that location and the eight neighboring
-locations with randomly-selected values.
-
-The lines are initially random, but over time a chaotic
-self-organizing system evolves: areas of the screen which happen to
-have lower values are less likely to be updated to new values, and so
-the line tends to avoid those areas.  Eventually, the histogram of
-changes approaches the power-law curve typical of such systems.
-
-The simplest documented self-organizing system is the one-dimensional
-equivalent of \fIcritical\fP.
-
-I heard about this algorithm second-hand: apparently there was an
-article in \fIScientific American\fP describing it sometime in 1997.
-.SH OPTIONS
-.I critical
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \fIusecs\fP
-Number of microseconds to wait after drawing each line.
-.TP 8
-.B \-random \fIboolean\fP
-Whether to use randomly selected colours rather than a cycle around
-the colour wheel.
-.TP 8
-.B \-offset \fIinteger\fP
-The maximum random radius increment to use.
-.TP 8
-.B \-ncolors \fIinteger\fP
-How many colors should be allocated in the color ramp (note that this
-value interacts with \fIoffset\fP.)
-.TP 8
-.B \-trail \fIinteger\fP
-Length of the trail: between 5 and 100 is nice.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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-command (1)
-.BR xscreensaver-demo (1)
-.SH COPYRIGHT
-Copyright \(co 1998 by Martin Pool.
-
-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
-Martin Pool <mbp@humbug.org.au>, 1998-2000.  Based in part on the
-XScreenSaver code by Jamie Zawinski <jwz@jwz.org>.
index b35debb38f9f460a278bf26412b141680c97c966..e0cfeee0778bb42386d8476ff2e1f5ca6a2d39e6 100644 (file)
@@ -462,7 +462,7 @@ fireworkx_event (Display *dpy, Window window, void *closure, XEvent *event)
 {
   struct state *st = (struct state *) closure;
   if (event->type == ButtonPress) {
-    recycle(st, st->fshell, event->xbutton.x, event->xbutton.y);
+    recycle(st, st->ffshell, event->xbutton.x, event->xbutton.y);
     return True;
   }
   return False;
index fee5198770452b864534b46435577cfcf3cff828..1cd68094b7ec6e641616a71488f6b8218b4fc785 100644 (file)
@@ -265,13 +265,42 @@ make_flag_bits(ModeInfo *mi)
                                                                         strlen(uts.sysname) +
                                                                         strlen(uts.version) +
                                                                         strlen(uts.release) + 10);
-# ifdef _AIX
+# if defined(_AIX)
                          sprintf(text, "%s\n%s %s.%s",
                                          uts.nodename, uts.sysname, uts.version, uts.release);
-# else  /* !_AIX */
+#  elif defined(__APPLE__)  /* MacOS X + XDarwin */
+              {
+                const char *file = 
+                  "/System/Library/CoreServices/SystemVersion.plist";
+                FILE *f = fopen (file, "r");
+                char *pbv = 0, *pn = 0, *puvv = 0;
+                if (f) {
+                  char *s, buf[255];
+
+                  while (fgets (buf, sizeof(buf)-1, f)) {
+#                   define GRAB(S,V)                                   \
+                    if (strstr(buf, S)) {                                      \
+                      fgets (buf, sizeof(buf)-1, f);                   \
+                      if ((s = strchr (buf, '>'))) V = strdup(s+1);    \
+                      if ((s = strchr (V, '<'))) *s = 0;                       \
+                    }
+                    GRAB ("ProductName", pn)
+                    GRAB ("ProductBuildVersion", pbv)
+                    GRAB ("ProductUserVisibleVersion", puvv)
+#                   undef GRAB
+                  }
+                }
+                if (pbv)
+                  sprintf (text, "%s\n%s\n%s", 
+                           uts.nodename, pn, puvv /*, uts.machine*/);
+                else
+                  sprintf(text, "%s\n%s %s",
+                          uts.nodename, uts.sysname, uts.release);
+              }
+# else
                          sprintf(text, "%s\n%s %s",
                                          uts.nodename, uts.sysname, uts.release);
-# endif /* !_AIX */
+# endif /* special system types */
                        }
 #else  /* !HAVE_UNAME */
 # ifdef VMS
diff --git a/hacks/flag.man b/hacks/flag.man
deleted file mode 100644 (file)
index dcf93f7..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-.TH XScreenSaver 1 "24-May-97" "X Version 11"
-.SH NAME
-flag - draws a waving flag, containing text or an image
-.SH SYNOPSIS
-.B flag
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-cycles \fIinteger\fP] [\-size \fIinteger\fP] [\-text \fIstring\fP] [\-font \fIfont\fP] [\-bitmap \fIxbm-file\fP]
-
-[\-fps]
-.SH DESCRIPTION
-The \fIflag\fP program draws a waving flag that contains text or a bitmap.
-.SH OPTIONS
-.I flag
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-ncolors \fIinteger\fP
-How many colors should be used (if possible).  Default 200.
-.TP 8
-.B \-cycles \fIinteger\fP
-
-.TP 8
-.B \-count \fIinteger\fP
-
-.TP 8
-.B \-size \fIinteger\fP
-How large the pixels in the flag should be, from 1 to 8.
-If this is a negative number, the pixel size is chosen randomly
-from the range 1 to -size.  Default -7.
-.TP 8
-.B \-text \fItext\fP
-The text to display in the flag.  Multiple lines of text are allowed;
-the lines will be displayed centered atop one another.  Default: none.
-If the text is the magic string \fI"(default)"\fP, then the text used 
-will be the local machine name; a newline; and the local OS version.
-.TP 8
-.B \-bitmap \fIxbm-file\fP
-The bitmap to display in the flag; this must be an XBM file (color XPMs
-are not allowed.)  Default: none.  If the bitmap is the magic 
-string \fI"(default)"\fP, then the bitmap used will be a charming 
-little picture of J. R. "Bob" Dobbs.
-
-If neither \fI\-text\fP nor \fI\-bitmap\fP are specified, then either
-the builtin text or the builtin bitmap will be chosen randomly.
-.TP 8
-.B \-font \fIfont\fP
-The font in which to draw the text; the default is
-"-*-helvetica-bold-r-*-240-*".
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 xlock (1)
-.SH COPYRIGHT
-Copyright \(co 1996 Charles Vidal.
-
-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. 
-
-.SH AUTHOR
-Charles Vidal <vidalc@univ-mlv.fr>, 1996.
-
-Ability to run standalone or with \fIxscreensaver\fP, and the \-text
-and \-bitmap options, added by Jamie Zawinski <jwz@jwz.org>, 24-May-97.
diff --git a/hacks/forest.man b/hacks/forest.man
deleted file mode 100644 (file)
index 4447221..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-.TH XScreenSaver 1 "27-May-97" "X Version 11"
-.SH NAME
-forest - draws a fractal forest
-.SH SYNOPSIS
-.B forest
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP]
-
-[\-fps]
-.SH DESCRIPTION
-The \fIforest\fP program draws a fractal forest.
-.SH OPTIONS
-.I forest
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-ncolors \fIinteger\fP
-How many colors should be used (if possible).  Default 20.
-
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 xlock (1)
-.SH COPYRIGHT
-Copyright \(co 1995 by Pascal Pensa.
-
-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. 
-.SH AUTHOR
-Pascal Pensa <pensa@aurora.unice.fr>, 1995.
-
-Ability to run standalone or with \fIxscreensaver\fP added by 
-Jamie Zawinski <jwz@jwz.org>, 27-May-97.
diff --git a/hacks/glx/._jigsaw.c b/hacks/glx/._jigsaw.c
new file mode 100644 (file)
index 0000000..b144d5e
Binary files /dev/null and b/hacks/glx/._jigsaw.c differ
index aecbaac8897a04f2a883b6ab9c30a3af5dd3da43..3ea3bdc1e0a21e21fdce53ea0f624e68b904da82 100644 (file)
@@ -37,7 +37,9 @@ DEPEND_DEFINES        = @DEPEND_DEFINES@
 
 SHELL          = /bin/sh
 INSTALL                = @INSTALL@
+SUID_FLAGS      = -o root -m 4755
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SETUID  = @INSTALL_SETUID@
 INSTALL_DATA   = @INSTALL_DATA@
 INSTALL_DIRS   = @INSTALL_DIRS@
 
@@ -106,7 +108,8 @@ SRCS                = xscreensaver-gl-helper.c normals.c glxfonts.c fps-gl.c \
                  timetunnel.c juggler3d.c topblock.c glschool.c \
                  glschool_gl.c glschool_alg.c glcells.c voronoi.c \
                  moebiusgears.c lockward.c cubicgrid.c hypnowheel.c \
-                 skytentacles.c teapot.c
+                 skytentacles.c teapot.c sonar.c sonar-sim.c sonar-icmp.c \
+                 jigsaw.c photopile.c
 
 OBJS           = xscreensaver-gl-helper.o normals.o glxfonts.o fps-gl.o \
                  atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
@@ -141,13 +144,14 @@ OBJS              = xscreensaver-gl-helper.o normals.o glxfonts.o fps-gl.o \
                  timetunnel.o juggler3d.o topblock.o glschool.o \
                  glschool_gl.o glschool_alg.o glcells.o voronoi.o \
                  moebiusgears.o lockward.o cubicgrid.o hypnowheel.o \
-                 skytentacles.o teapot.o
+                 skytentacles.o teapot.o sonar.o sonar-sim.o sonar-icmp.o \
+                 jigsaw.o photopile.o
 
 GL_EXES                = cage gears moebius pipes sproingies stairs superquadrics \
                  morph3d rubik atlantis lament bubble3d glplanet pulsar \
                  sierpinski3d gflux stonerview starwars gltext molecule \
                  dangerball circuit menger engine flipscreen3d glsnake boxed \
-                 glforestfire sballs cubenetic spheremonics lavalite queens \
+                 sballs cubenetic spheremonics lavalite queens \
                  endgame glblur flurry atunnel flyingtoasters bouncingcow \
                  glslideshow jigglypuff klein hypertorus glmatrix cubestorm \
                  glknots blocktube flipflop antspotlight polytopes \
@@ -155,14 +159,19 @@ GL_EXES           = cage gears moebius pipes sproingies stairs superquadrics \
                  antinspect providence pinion boing carousel fliptext \
                  antmaze tangram crackberg glhanoi cube21 timetunnel \
                  juggler3d topblock glschool glcells voronoi moebiusgears \
-                 lockward cubicgrid hypnowheel skytentacles
+                 lockward cubicgrid hypnowheel skytentacles jigsaw photopile
 GLE_EXES       = extrusion
+SUID_EXES      = sonar
 GL_UTIL_EXES   = xscreensaver-gl-helper
-HACK_EXES      = @GL_EXES@ @GLE_EXES@
+HACK_EXES_1    = @GL_EXES@ @GLE_EXES@
+HACK_EXES      = $(HACK_EXES_1) @SUID_EXES@
 XSHM_OBJS      = $(UTILS_BIN)/xshm.o
 GRAB_OBJS      = $(UTILS_BIN)/grabclient.o grab-ximage.o $(XSHM_OBJS)
 EXES           = @GL_UTIL_EXES@ $(HACK_EXES)
 
+RETIRED_EXES   = glforestfire
+RETIRED_GL_EXES        = @RETIRED_GL_EXES@
+
 HACK_OBJS      = $(HACK_BIN)/screenhack.o $(HACK_BIN)/fps.o \
                  xlockmore-gl.o xlock-gl-utils.o glxfonts.o fps-gl.o \
                  $(UTILS_BIN)/resources.o $(UTILS_BIN)/visual.o \
@@ -178,10 +187,10 @@ HDRS              = atlantis.h bubble3d.h buildlwo.h e_textures.h xpm-ximage.h \
                  tunnel_draw.h ants.h polyhedra.h normals.h glxfonts.h \
                  texfont.h tangram_shapes.h sproingies.h extrusion.h \
                  glschool.h glschool_gl.h glschool_alg.h topblock.h \
-                 involute.h teapot.h
+                 involute.h teapot.h sonar.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 \
+                 flipscreen3d.man gears.man gflux.man \
                  glplanet.man glsnake.man gltext.man lament.man lavalite.man \
                  menger.man moebius.man molecule.man morph3d.man pipes.man \
                  pulsar.man queens.man rubik.man sballs.man sierpinski3d.man \
@@ -198,15 +207,17 @@ GL_MEN            = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
                  crackberg.man glhanoi.man cube21.man timetunnel.man \
                  juggler3d.man topblock.man glschool.man glcells.man \
                  voronoi.man moebiusgears.man lockward.man cubicgrid.man \
-                 hypnowheel.man skytentacles.man
+                 hypnowheel.man skytentacles.man sonar.man jigsaw.man \
+                 photopile.man
 MEN            = @GL_MEN@
+RETIRED_MEN    = glforestfire.man
 EXTRAS         = README Makefile.in dxf2gl.pl molecules.sh starwars.txt
 
 TARFILES       = $(SRCS) $(HDRS) $(MEN) $(EXTRAS)
 
 
 default: all
-all: $(EXES)
+all: $(EXES) $(RETIRED_EXES)
 
 install:   install-program    install-xml   install-man
 uninstall: uninstall-program  uninstall-xml uninstall-man
@@ -216,7 +227,7 @@ install-strip:
 
 # the hacks, in $HACKDIR
 install-program:: $(EXES)
-       @exes="$(HACK_EXES)" ;                                          \
+       @exes="$(HACK_EXES_1)" ;                                        \
         idir="$(install_prefix)$(HACKDIR)" ;                           \
         if [ "$$exes" != "" ]; then                                    \
           if [ ! -d $$idir ]; then                                     \
@@ -225,9 +236,35 @@ install-program:: $(EXES)
           for program in $$exes; do                                    \
             echo $(INSTALL_PROGRAM) $$program $$idir/$$program ;       \
                  $(INSTALL_PROGRAM) $$program $$idir/$$program ;       \
+          done ;                                                       \
+                                                                       \
+          exes="$(SUID_EXES)" ;                                        \
+          if [ @SETUID_HACKS@ = yes ]; then                            \
+            sinst="$(INSTALL_SETUID)" ;                                \
+          else                                                         \
+            sinst="$(INSTALL_PROGRAM)" ;                               \
+          fi ;                                                         \
+          for program in $$exes; do                                    \
+            echo $$sinst $$program $$idir/$$program ;                  \
+            if   $$sinst $$program $$idir/$$program ; then             \
+               true ;                                                  \
+            elif [ @SETUID_HACKS@ = yes ]; then                        \
+              echo $(INSTALL_PROGRAM) $$program $$idir/$$program ;     \
+              if   $(INSTALL_PROGRAM) $$program $$idir/$$program ; then\
+                echo "" ;                                              \
+                echo "WARNING: unable to install $$program setuid:"    \
+                     "installed non-setuid instead." ;                 \
+                echo "" ;                                              \
+              else                                                     \
+                exit 1 ;                                               \
+              fi ;                                                     \
+            else                                                       \
+              exit 1 ;                                                 \
+            fi ;                                                       \
           done ;                                                       \
         fi
 
+
 # the xscreensaver-gl-helper program, in $bindir
 install-program:: $(EXES)
        @exes="@GL_UTIL_EXES@" ;                                        \
@@ -718,8 +755,19 @@ hypnowheel:        hypnowheel.o    $(HACK_TRACK_OBJS)
        $(CC_HACK) -o $@ $@.o   $(HACK_TRACK_OBJS) $(HACK_LIBS)
 
 TENTACLE_OBJS=normals.o xpm-ximage.o $(HACK_TRACK_OBJS)
-skytentacles:  skytentacles.o $(TENTACLE_OBJS)
-       $(CC_HACK) -o $@ $@.o  $(TENTACLE_OBJS) $(XPM_LIBS)
+skytentacles:  skytentacles.o  $(TENTACLE_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(TENTACLE_OBJS) $(XPM_LIBS)
+
+SONAR_OBJS=sonar-sim.o sonar-icmp.o texfont.o $(HACK_TRACK_OBJS)
+sonar:         sonar.o         $(SONAR_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(SONAR_OBJS) $(XPM_LIBS)
+
+JIGSAW_OBJS=normals.o $(UTILS_BIN)/spline.o $(HACK_TRACK_GRAB_OBJS)
+jigsaw:                jigsaw.o        $(JIGSAW_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(JIGSAW_OBJS) $(HACK_LIBS)
+
+photopile:     photopile.o     texfont.o $(HACK_GRAB_OBJS)
+       $(CC_HACK) -o $@ $@.o   texfont.o $(HACK_GRAB_OBJS) $(HACK_LIBS)
 
 ##############################################################################
 #
@@ -1582,6 +1630,24 @@ jigglypuff.o: $(UTILS_SRC)/yarandom.h
 jigglypuff.o: $(HACK_SRC)/xlockmoreI.h
 jigglypuff.o: $(HACK_SRC)/xlockmore.h
 jigglypuff.o: $(srcdir)/xpm-ximage.h
+jigsaw.o: ../../config.h
+jigsaw.o: $(HACK_SRC)/fps.h
+jigsaw.o: $(srcdir)/gltrackball.h
+jigsaw.o: $(srcdir)/grab-ximage.h
+jigsaw.o: $(srcdir)/normals.h
+jigsaw.o: $(srcdir)/rotator.h
+jigsaw.o: $(HACK_SRC)/screenhackI.h
+jigsaw.o: $(UTILS_SRC)/colors.h
+jigsaw.o: $(UTILS_SRC)/grabscreen.h
+jigsaw.o: $(UTILS_SRC)/hsv.h
+jigsaw.o: $(UTILS_SRC)/resources.h
+jigsaw.o: $(UTILS_SRC)/spline.h
+jigsaw.o: $(UTILS_SRC)/usleep.h
+jigsaw.o: $(UTILS_SRC)/visual.h
+jigsaw.o: $(UTILS_SRC)/xshm.h
+jigsaw.o: $(UTILS_SRC)/yarandom.h
+jigsaw.o: $(HACK_SRC)/xlockmoreI.h
+jigsaw.o: $(HACK_SRC)/xlockmore.h
 juggler3d.o: ../../config.h
 juggler3d.o: $(HACK_SRC)/fps.h
 juggler3d.o: $(srcdir)/gltrackball.h
@@ -1772,6 +1838,21 @@ noof.o: $(HACK_SRC)/xlockmoreI.h
 noof.o: $(HACK_SRC)/xlockmore.h
 normals.o: ../../config.h
 normals.o: $(srcdir)/normals.h
+photopile.o: ../../config.h
+photopile.o: $(HACK_SRC)/fps.h
+photopile.o: $(srcdir)/grab-ximage.h
+photopile.o: $(HACK_SRC)/screenhackI.h
+photopile.o: $(srcdir)/texfont.h
+photopile.o: $(UTILS_SRC)/colors.h
+photopile.o: $(UTILS_SRC)/grabscreen.h
+photopile.o: $(UTILS_SRC)/hsv.h
+photopile.o: $(UTILS_SRC)/resources.h
+photopile.o: $(UTILS_SRC)/usleep.h
+photopile.o: $(UTILS_SRC)/visual.h
+photopile.o: $(UTILS_SRC)/xshm.h
+photopile.o: $(UTILS_SRC)/yarandom.h
+photopile.o: $(HACK_SRC)/xlockmoreI.h
+photopile.o: $(HACK_SRC)/xlockmore.h
 pinion.o: ../../config.h
 pinion.o: $(HACK_SRC)/fps.h
 pinion.o: $(srcdir)/gltrackball.h
@@ -1966,6 +2047,46 @@ skytentacles.o: $(UTILS_SRC)/yarandom.h
 skytentacles.o: $(HACK_SRC)/xlockmoreI.h
 skytentacles.o: $(HACK_SRC)/xlockmore.h
 skytentacles.o: $(srcdir)/xpm-ximage.h
+sonar-icmp.o: ../../config.h
+sonar-icmp.o: $(HACK_SRC)/fps.h
+sonar-icmp.o: $(HACK_SRC)/screenhackI.h
+sonar-icmp.o: $(srcdir)/sonar.h
+sonar-icmp.o: $(UTILS_SRC)/colors.h
+sonar-icmp.o: $(UTILS_SRC)/grabscreen.h
+sonar-icmp.o: $(UTILS_SRC)/hsv.h
+sonar-icmp.o: $(UTILS_SRC)/resources.h
+sonar-icmp.o: $(UTILS_SRC)/usleep.h
+sonar-icmp.o: $(UTILS_SRC)/version.h
+sonar-icmp.o: $(UTILS_SRC)/visual.h
+sonar-icmp.o: $(UTILS_SRC)/yarandom.h
+sonar.o: ../../config.h
+sonar.o: $(HACK_SRC)/fps.h
+sonar.o: $(srcdir)/gltrackball.h
+sonar.o: $(srcdir)/rotator.h
+sonar.o: $(HACK_SRC)/screenhackI.h
+sonar.o: $(srcdir)/sonar.h
+sonar.o: $(srcdir)/texfont.h
+sonar.o: $(UTILS_SRC)/colors.h
+sonar.o: $(UTILS_SRC)/grabscreen.h
+sonar.o: $(UTILS_SRC)/hsv.h
+sonar.o: $(UTILS_SRC)/resources.h
+sonar.o: $(UTILS_SRC)/usleep.h
+sonar.o: $(UTILS_SRC)/visual.h
+sonar.o: $(UTILS_SRC)/xshm.h
+sonar.o: $(UTILS_SRC)/yarandom.h
+sonar.o: $(HACK_SRC)/xlockmoreI.h
+sonar.o: $(HACK_SRC)/xlockmore.h
+sonar-sim.o: ../../config.h
+sonar-sim.o: $(HACK_SRC)/fps.h
+sonar-sim.o: $(HACK_SRC)/screenhackI.h
+sonar-sim.o: $(srcdir)/sonar.h
+sonar-sim.o: $(UTILS_SRC)/colors.h
+sonar-sim.o: $(UTILS_SRC)/grabscreen.h
+sonar-sim.o: $(UTILS_SRC)/hsv.h
+sonar-sim.o: $(UTILS_SRC)/resources.h
+sonar-sim.o: $(UTILS_SRC)/usleep.h
+sonar-sim.o: $(UTILS_SRC)/visual.h
+sonar-sim.o: $(UTILS_SRC)/yarandom.h
 spheremonics.o: ../../config.h
 spheremonics.o: $(HACK_SRC)/fps.h
 spheremonics.o: $(srcdir)/gltrackball.h
index eff805ffd75c3d873ab438d1586ea48e2de895fc..d5c9e430fad50f86e3ade29fef9f88158fe10b16 100644 (file)
@@ -94,6 +94,7 @@ stored in the RESOURCE_MANAGER property.
 .BR xscreensaver-getimage (1)
 .BR xscreensaver (1)
 .BR glslideshow (MANSUFFIX)
+.BR photopile (MANSUFFIX)
 .SH COPYRIGHT
 Copyright \(co 2005 by Jamie Zawinski.
 
index 9e071e7e65731c1ec74318ed088eb5dd7ebf0e89..f2b74ff862230ed60029e682af73a7fc78797466 100644 (file)
@@ -403,7 +403,7 @@ init_flurry(ModeInfo * mi)
     case PRESET_FIRE: {
        flurry_info_t *flurry;
 
-       flurry = new_flurry_info(global, 12, slowCyclicColorMode, 10000.0, 0.0, 1.0);
+       flurry = new_flurry_info(global, 12, slowCyclicColorMode, 10000.0, 0.2, 1.0);
        flurry->next = global->flurry;
        global->flurry = flurry;        
         break;
diff --git a/hacks/glx/glforestfire.man b/hacks/glx/glforestfire.man
deleted file mode 100644 (file)
index aae3a25..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-.de EX         \"Begin example
-.ne 5
-.if n .sp 1
-.if t .sp .5
-.nf
-.in +.5i
-..
-.de EE
-.fi
-.in -.5i
-.if n .sp 1
-.if t .sp .5
-..
-.TH XScreenSaver 1 "03-Oct-01" "X Version 11"
-.SH NAME
-glforestfire - draws a GL animation of sprinkling fire-like 3D triangles
-.SH SYNOPSIS
-.B glforestfire
-[\-display \fIhost:display.screen\fP] [\-window] [\-root]
-[\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP]
-[\-count \fInumber_of_particles\fP] 
-[\-trees \fInumber_of_trees\fP] 
-[\-size \fIviewport_size\fP] 
-[\-texture] [\-no-texture]
-[\-shadows] [\-no-shadows]
-[\-fog] [\-no-fog]
-[\-wireframe] [\-no-wireframe]
-[\-wander] [\-no-wander]
-[\-trackmouse] [\-no-trackmouse]
-[\-fps]
-.SH DESCRIPTION
-The \fIglforestfire\fP program draws an animation of sprinkling fire-like 3D triangles in
-a landscape filled with trees.
-.SH OPTIONS
-.I glforestfire
-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.
-.TP 8
-.B \-fps
-Display the current frame rate, CPU load, and polygon count.
-.TP 8
-.B \-trees \fInumber_of_trees\fP\fP
-Specify how much trees are drawn in the landscape. 
-.TP 8
-.B \-count \fInumber_of_particles\fP\fP
-Specify how much fire particles are drawn. A very special case is 0
-wich means that you get
-.B rain
-!
-.TP 8
-.B \-size \fIviewport_size\fP\fP
-Viewport of GL scene is specified size if greater than 32 and less than screensize. Default value is 0, meaning full screensize.
-.TP 8
-.B \-texture
-Show a textured ground and the trees. This is the default.
-.TP 8
-.B \-no\-texture
-Disables texturing the landscape. This implies that no trees are drawn.
-.TP 8
-.B \-shadows
-Show a shadow for each particle on the ground. This is the default.
-.TP 8
-.B \-no\-shadows
-Disables the drawing of the shadows.
-.TP 8
-.B \-fog
-Show a fog in the distance.
-.TP 8
-.B \-no\-fog
-Disables the fog. This is the default.
-.TP 8
-.B \-wander
-Move the observer around the landscape. This is the default.
-.TP 8
-.B \-no\-wander
-Keep the fire centered on the screen.
-.TP 8
-.B \-trackmouse
-Let the mouse be a joystick to change the view of the landscape.
-This implies 
-.I \-no\-wander.
-.TP 8
-.B \-no\-trackmouse
-Disables mouse tracking. This is the default.
-.TP 8
-.B \-wire
-Draw a wireframe rendition of the fire: this will consist only of
-single-pixel lines for the triangles.
-.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 2001 by Eric Lassauge.
-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.
-
-The original code for this hack was written by David Bucciarelli 
-(tech.hmw@plus.it) and could be found in the demo package 
-of Mesa (Mesa-3.2/3Dfx/demos/). This hack is the result of the merge of
-two of the David's demos (fire and rain).
-
-.SH AUTHOR
-David Bucciarelli <tech.hmw@plus.it>
-Eric Lassauge <lassauge@mail.dotcom.fr>
index a35921dcebf06d7b3a87f70ae26d38dd7ea8e70b..4ce46724107c4cddcad1afff51ff8a55bcdc7037 100644 (file)
@@ -114,6 +114,7 @@ stored in the RESOURCE_MANAGER property.
 .BR xscreensaver-getimage (1),
 .BR xscreensaver (1),
 .BR carousel (MANSUFFIX)
+.BR photopile (MANSUFFIX)
 .SH COPYRIGHT
 Copyright \(co 2003-2005 by Jamie Zawinski, based on an earlier version
 that was
index 063e9e313dda407f1f4cddb30d56d68fb5887f22..9fca3c811eccff0e2f1fddabeae93e9f52c6a3a2 100644 (file)
@@ -145,7 +145,7 @@ convert_ximage_to_rgba32 (Screen *screen, XImage *image)
   XColor *colors = 0;
   unsigned char spread_map[3][256];
 
-  /* Note: height+2 in "to" to be to work around an array bounds overrun
+  /* Note: height+2 in "to" to work around an array bounds overrun
      in gluBuild2DMipmaps / gluScaleImage.
    */
   XImage *from = image;
@@ -201,6 +201,10 @@ convert_ximage_to_rgba32 (Screen *screen, XImage *image)
         }
     }
 
+  /* trying to track down an intermittent crash in ximage_putpixel_32 */
+  if (to->width  < from->width)  abort();
+  if (to->height < from->height) abort();
+
   for (y = 0; y < from->height; y++)
     for (x = 0; x < from->width; x++)
       {
index c05f503d3b994296d5b0a34546262b94216e92fa..3131a9fce80331144088d5fbb522b18d167c2b11 100644 (file)
@@ -63,7 +63,7 @@ static hypnowheel_configuration *bps = NULL;
 
 static GLfloat speed;
 static GLfloat twistiness;
-static GLfloat nlayers;
+static GLint nlayers;
 static Bool do_wander;
 static Bool do_symmetric;
 
@@ -82,7 +82,7 @@ static argtype vars[] = {
   {&do_symmetric, "symmetric",  "Symmetric",  DEF_SYMMETRIC,  t_Bool},
   {&speed,       "speed",      "Speed",      DEF_SPEED,      t_Float},
   {&twistiness,          "twistiness", "Twistiness", DEF_TWISTINESS, t_Float},
-  {&nlayers,     "layers",     "Layers",     DEF_LAYERS,     t_Float},
+  {&nlayers,     "layers",     "Layers",     DEF_LAYERS,     t_Int},
 };
 
 ENTRYPOINT ModeSpecOpt hypnowheel_opts = {
diff --git a/hacks/glx/jigsaw.c b/hacks/glx/jigsaw.c
new file mode 100644 (file)
index 0000000..0d9a314
--- /dev/null
@@ -0,0 +1,1165 @@
+/* xscreensaver, Copyright (c) 1997-2008 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
+ * 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.
+ *
+ * Written as an Xlib program some time in 1997.
+ * Rewritten as an OpenGL program 24-Aug-2008.
+ */
+
+/*
+  Currently, we do this:
+
+    - start pieces off screen and move them in.
+    - when they land, they fill the puzzle grid with a shuffled
+      puzzle (pieces are rotated, too).
+    - swap random pairs of pieces until the puzzle is solved.
+    - scatter the pieces off screen (resulting in black).
+    - load new image and repeat.
+
+  Another idea would be to show the puzzle being solved the way
+  a person would do it:
+
+    - start off with black screen.
+    - assume knowledge of size of grid (position of corners).
+    - find a corner piece, and place it.
+    - while puzzle unsolved:
+      - pick a random piece;
+      - if it is the correct piece for any open edge, place it;
+      - if it fits physically in any rotation at any open edge,
+        place it, then toss it back (show the fake-out).
+      - if it doesn't fit at all, don't animate it at all.
+
+   This would take a long time to solve, I think...
+
+   An even harder idea would involve building up completed "clumps"
+   and sliding them around (a coral growth / accretion approach)
+ */
+
+#define DEF_SPEED        "1.0"
+#define DEF_COMPLEXITY   "1.0"
+#define DEF_RESOLUTION   "100"
+#define DEF_THICKNESS    "0.06"
+#define DEF_WOBBLE       "True"
+#define DEF_DEBUG        "False"
+
+#define DEFAULTS  "*delay:             20000   \n" \
+                 "*showFPS:            False   \n" \
+                 "*wireframe:          False   \n" \
+                 "*desktopGrabber:   xscreensaver-getimage -no-desktop %s\n" \
+                 "*grabDesktopImages:  False   \n" \
+                 "*chooseRandomImages: True    \n"
+
+
+# define refresh_jigsaw 0
+# define release_jigsaw 0
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#include "xlockmore.h"
+#include "rotator.h"
+#include "gltrackball.h"
+#include "spline.h"
+#include "normals.h"
+#include "grab-ximage.h"
+
+#undef BELLRAND
+#define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3)
+
+#ifdef USE_GL /* whole file */
+
+#define TOP    0
+#define RIGHT  1
+#define BOTTOM 2
+#define LEFT   3
+
+#define IN    -1
+#define FLAT   0
+#define OUT    1
+
+typedef struct jigsaw_configuration jigsaw_configuration;
+
+typedef struct {
+  double x,y,z,r;      /* position and Z rotation (in degrees) */
+} XYZR;
+
+
+typedef struct {
+  jigsaw_configuration *jc;
+  int edge[4];
+  GLuint dlist;
+  int polys;
+
+  XYZR home;           /* correct position in puzzle */
+  XYZR current;                /* where it is right now */
+  XYZR from, to;       /* in transit from A to B */
+  double tick;         /* 0-1.0, how far from A to B */
+  double arc_height;   /* height of apex of curved path from A to B */
+  double tilt, max_tilt;
+
+} puzzle_piece;
+
+
+struct jigsaw_configuration {
+  GLXContext *glx_context;
+  trackball_state *trackball;
+  rotator *rot;
+  Bool button_down_p;
+
+  int puzzle_width;
+  int puzzle_height;
+  puzzle_piece *puzzle;
+
+  enum { PUZZLE_LOADING,
+         PUZZLE_UNSCATTER,
+         PUZZLE_SOLVE, 
+         PUZZLE_SCATTER } state;
+  double pausing;
+  double tick_speed;
+
+  GLuint texid;
+  GLfloat tex_x, tex_y, tex_width, tex_height, aspect;
+
+  GLuint line_thickness;
+};
+
+static jigsaw_configuration *sps = NULL;
+
+static GLfloat speed;
+static GLfloat complexity_arg;
+static int resolution_arg;
+static GLfloat thickness_arg;
+static Bool wobble_p;
+static Bool debug_p;
+
+static XrmOptionDescRec opts[] = {
+  { "-speed",      ".speed",       XrmoptionSepArg, 0 },
+  { "-complexity", ".complexity",  XrmoptionSepArg, 0 },
+  { "-resolution", ".resolution",  XrmoptionSepArg, 0 },
+  { "-thickness",  ".thickness",   XrmoptionSepArg, 0 },
+  { "-wobble",     ".wobble",      XrmoptionNoArg, "True" },
+  { "+wobble",     ".wobble",      XrmoptionNoArg, "False" },
+  { "-debug",      ".debug",       XrmoptionNoArg, "True" },
+};
+
+static argtype vars[] = {
+  {&speed,          "speed",       "Speed",       DEF_SPEED,      t_Float},
+  {&complexity_arg, "complexity",  "Complexity",  DEF_COMPLEXITY, t_Float},
+  {&resolution_arg, "resolution",  "Resolution",  DEF_RESOLUTION, t_Int},
+  {&thickness_arg,  "thickness",   "Thickness",   DEF_THICKNESS,  t_Float},
+  {&wobble_p,       "wobble",      "Wobble",      DEF_WOBBLE,     t_Bool},
+  {&debug_p,        "debug",       "Debug",       DEF_DEBUG,      t_Bool},
+};
+
+ENTRYPOINT ModeSpecOpt jigsaw_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+/* Returns a spline describing one edge of a puzzle piece of the given length.
+ */
+static spline *
+make_puzzle_curve (int pixels)
+{
+  double x0 = 0.0000, y0 =  0.0000;
+  double x1 = 0.3333, y1 =  0.1000;
+  double x2 = 0.4333, y2 =  0.0333;
+  double x3 = 0.4666, y3 = -0.0666;
+  double x4 = 0.3333, y4 = -0.1666;
+  double x5 = 0.3666, y5 = -0.2900;
+  double x6 = 0.5000, y6 = -0.3333;
+
+  spline *s = make_spline(20);
+  s->n_controls = 0;
+
+# define PT(x,y) \
+    s->control_x[s->n_controls] = pixels * (x); \
+    s->control_y[s->n_controls] = pixels * (y); \
+    s->n_controls++
+  PT (  x0, y0);
+  PT (  x1, y1);
+  PT (  x2, y2);
+  PT (  x3, y3);
+  PT (  x4, y4);
+  PT (  x5, y5);
+  PT (  x6, y6);
+  PT (1-x5, y5);
+  PT (1-x4, y4);
+  PT (1-x3, y3);
+  PT (1-x2, y2);
+  PT (1-x1, y1);
+  PT (1-x0, y0);
+# undef PT
+
+  compute_spline (s);
+  return s;
+}
+
+
+static void
+tess_error_cb (GLenum errorCode)
+{
+  fprintf (stderr, "%s: tesselation error: %s\n",
+           progname, gluErrorString(errorCode));
+  exit (0);
+}
+
+
+static void
+tess_combine_cb (GLdouble coords[3], GLdouble *d[4], GLfloat w[4], 
+                 GLdouble **dataOut)
+{
+  GLdouble *new = (GLdouble *) malloc (3 * sizeof(*new));
+  new[0] = coords[0];
+  new[1] = coords[1];
+  new[2] = coords[2];
+  *dataOut = new;
+}
+
+
+static void
+tess_vertex_cb (void *vertex_data, void *closure)
+{
+  puzzle_piece *p = (puzzle_piece *) closure;
+  GLdouble *v = (GLdouble *) vertex_data;
+  GLdouble x = v[0];
+  GLdouble y = v[1];
+  GLdouble z = v[2];
+
+  if (p)
+    {
+      GLfloat pw = p->jc->puzzle_width;
+      GLfloat ph = p->jc->puzzle_height;
+
+      GLfloat xx = x / (GLfloat) resolution_arg;  /* 0-1 from piece origin */
+      GLfloat yy = y / (GLfloat) resolution_arg;
+      GLdouble tx = (p->home.x + xx)      / pw;   /* 0-1 from puzzle origin */
+      GLdouble ty = (ph - p->home.y - yy) / ph;
+
+      tx = p->jc->tex_x + (tx * p->jc->tex_width);
+      ty = p->jc->tex_y + (ty * p->jc->tex_height);
+
+      glTexCoord2d (tx, ty);
+    }
+
+  glVertex3d (x, y, z);
+}
+
+
+
+/* Draws a puzzle piece.  The top/right/bottom/left_type args
+   indicate the direction the tabs point: 1 for out, -1 for in, 0 for flat.
+ */
+static int
+draw_piece (jigsaw_configuration *jc, puzzle_piece *p,
+            int resolution, GLfloat thickness,
+            int top_type, int right_type,
+            int bottom_type, int left_type,
+            Bool wire)
+{
+  spline *s = make_puzzle_curve (resolution);
+  GLdouble *pts = (GLdouble *) malloc (s->n_points * 4 * 3 * sizeof(*pts));
+  int polys = 0;
+  int i, o;
+  GLdouble z = resolution * thickness;
+
+  o = 0;
+  if (top_type == 0) {
+    pts[o++] = 0;
+    pts[o++] = 0; 
+    pts[o++] = z;
+
+    pts[o++] = resolution;
+    pts[o++] = 0;
+    pts[o++] = z;
+  } else {
+    for (i = 0; i < s->n_points; i++) {
+      pts[o++] = s->points[i].x;
+      pts[o++] = s->points[i].y * top_type;
+      pts[o++] = z;
+    }
+  }
+
+  if (right_type == 0) {
+    pts[o++] = resolution;
+    pts[o++] = resolution;
+    pts[o++] = z;
+  } else {
+    for (i = 1; i < s->n_points; i++) {
+      pts[o++] = resolution + s->points[i].y * (-right_type);
+      pts[o++] = s->points[i].x;
+      pts[o++] = z;
+    }
+  }
+
+  if (bottom_type == 0) {
+    pts[o++] = 0;
+    pts[o++] = resolution;
+    pts[o++] = z;
+  } else {
+    for (i = 1; i < s->n_points; i++) {
+      pts[o++] = s->points[s->n_points-i-1].x;
+      pts[o++] = resolution + s->points[s->n_points-i-1].y * (-bottom_type);
+      pts[o++] = z;
+    }
+  }
+
+  if (left_type == 0) {
+    pts[o++] = 0;
+    pts[o++] = 0;
+    pts[o++] = z;
+  } else {
+    for (i = 1; i < s->n_points; i++) {
+      pts[o++] = s->points[s->n_points-i-1].y * left_type;
+      pts[o++] = s->points[s->n_points-i-1].x;
+      pts[o++] = z;
+    }
+  }
+
+  free_spline (s);
+
+  { GLfloat s = 1.0 / resolution; glScalef (s, s, s); }
+
+  glPolygonMode (GL_FRONT_AND_BACK, wire ? GL_LINE : GL_FILL);
+
+  if (wire)
+    {
+      glDisable (GL_TEXTURE_2D);
+      glDisable (GL_BLEND);
+      glDisable (GL_LIGHTING);
+    }
+  else
+    {
+# ifndef  _GLUfuncptr
+#  define _GLUfuncptr void(*)(void)
+# endif
+      GLUtesselator *tess = gluNewTess();
+      gluTessCallback(tess, GLU_TESS_BEGIN,      (_GLUfuncptr)glBegin);
+      gluTessCallback(tess, GLU_TESS_VERTEX_DATA,(_GLUfuncptr)tess_vertex_cb);
+      gluTessCallback(tess, GLU_TESS_END,        (_GLUfuncptr)glEnd);
+      gluTessCallback(tess, GLU_TESS_COMBINE,    (_GLUfuncptr)tess_combine_cb);
+      gluTessCallback(tess, GLU_TESS_ERROR,      (_GLUfuncptr)tess_error_cb);
+
+      /* front face */
+      glEnable (GL_TEXTURE_2D);
+      glEnable (GL_BLEND);
+      glEnable (GL_LIGHTING);
+      glBindTexture(GL_TEXTURE_2D, jc->texid);
+      glFrontFace (GL_CCW);
+      glNormal3f (0, 0, 1);
+      gluTessBeginPolygon (tess, p);
+      gluTessBeginContour (tess);
+      for (i = 0; i < o; i += 3)
+        {
+          GLdouble *p = pts + i;
+          gluTessVertex (tess, p, p);
+          polys++;  /* not quite right but close */
+        }
+      gluTessEndContour(tess);
+      gluTessEndPolygon(tess);
+
+      /* back face */
+      glDisable (GL_TEXTURE_2D);
+      glFrontFace (GL_CW);
+      glNormal3f (0, 0, -1);
+      gluTessBeginPolygon (tess, 0);
+      gluTessBeginContour (tess);
+      for (i = 0; i < o; i += 3)
+        {
+          GLdouble *p = pts + i;
+          p[2] = -p[2];
+          gluTessVertex (tess, p, p);
+          polys++;  /* not quite right but close */
+        }
+      gluTessEndContour(tess);
+      gluTessEndPolygon(tess);
+      gluDeleteTess(tess);
+    }
+
+  /* side faces */
+  glFrontFace (GL_CCW);
+  glBegin (wire ? GL_LINES : GL_QUAD_STRIP);
+  for (i = 0; i < o; i += 3)
+    {
+      int j = (i+o-3) % o;
+      int k = (i+3)   % o;
+      GLdouble *p  = pts + i;
+      GLdouble *pj = pts + j;
+      GLdouble *pk = pts + k;
+
+      do_normal  (pj[0], pj[1], -pj[2],
+                  pj[0], pj[1],  pj[2],
+                  pk[0], pk[1],  pk[2]);
+
+      glVertex3f (p[0], p[1], -p[2]);
+      glVertex3f (p[0], p[1],  p[2]);
+      polys++;
+    }
+  glEnd();
+
+  if (! wire)
+    glColor3f (0.3, 0.3, 0.3);
+
+  glDisable (GL_TEXTURE_2D);
+  glDisable (GL_LIGHTING);
+  glLineWidth (jc->line_thickness);
+
+  glBegin (GL_LINE_LOOP);
+  for (i = 0; i < o; i += 3)
+    glVertex3f (pts[i], pts[i+1], pts[i+2]);
+  glEnd();
+  polys += o/3;
+
+  glBegin (GL_LINE_LOOP);
+  for (i = 0; i < o; i += 3)
+    glVertex3f (pts[i], pts[i+1], -pts[i+2]);
+  glEnd();
+  polys += o/3;
+
+  free (pts);
+
+  return polys;
+}
+
+
+static void
+free_puzzle_grid (jigsaw_configuration *jc)
+{
+  int i;
+  for (i = 0; i < jc->puzzle_width * jc->puzzle_height; i++)
+    glDeleteLists (jc->puzzle[i].dlist,  1);
+  free (jc->puzzle);
+  jc->puzzle = 0;
+  jc->puzzle_width = 0;
+  jc->puzzle_height = 0;
+}
+
+
+static void
+make_puzzle_grid (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  int wire = MI_IS_WIREFRAME(mi);
+  int x, y;
+  GLfloat size = (8 + (random() % 8)) * complexity_arg;
+
+  if (jc->puzzle)
+    free_puzzle_grid (jc);
+
+  if (wire)
+    jc->aspect = MI_WIDTH(mi) / (float) MI_HEIGHT(mi);
+
+  if (jc->aspect >= 1.0)
+    {
+      jc->puzzle_width  = size;
+      jc->puzzle_height = (size + 0.5) / jc->aspect;
+    }
+  else
+    {
+      jc->puzzle_width  = (size + 0.5) * jc->aspect;
+      jc->puzzle_height = size;
+    }
+
+  if (jc->puzzle_width  < 1) jc->puzzle_width  = 1;
+  if (jc->puzzle_height < 1) jc->puzzle_height = 1;
+
+  if (debug_p)
+    fprintf (stderr, "%s: grid  %4d x %-4d               (%.2f)\n", progname,
+             jc->puzzle_width, jc->puzzle_height,
+             ((float) jc->puzzle_width / jc->puzzle_height));
+
+  jc->puzzle = (puzzle_piece *) 
+    calloc (jc->puzzle_width * (jc->puzzle_height+1), sizeof(*jc->puzzle));
+
+  /* Randomize the right and bottom edge of each piece.
+     Match the left edge of the piece to the right to our right edge.
+     Match the top edge of the piece to the bottom to our bottom edge.
+   */
+  for (y = 0; y < jc->puzzle_height; y++)
+    for (x = 0; x < jc->puzzle_width; x++)
+      {
+        puzzle_piece *p = &jc->puzzle [y     * jc->puzzle_width + x];
+        puzzle_piece *r = &jc->puzzle [y     * jc->puzzle_width + x+1];
+        puzzle_piece *b = &jc->puzzle [(y+1) * jc->puzzle_width + x];
+        p->edge[RIGHT]  = (random() & 1) ? IN : OUT;
+        p->edge[BOTTOM] = (random() & 1) ? IN : OUT;
+        r->edge[LEFT]   = p->edge[RIGHT]  == IN ? OUT : IN;
+        b->edge[TOP]    = p->edge[BOTTOM] == IN ? OUT : IN;
+      }
+
+  /* tell each piece where it belongs. */
+  for (y = 0; y < jc->puzzle_height; y++)
+    for (x = 0; x < jc->puzzle_width; x++)
+      {
+        puzzle_piece *p = &jc->puzzle [y * jc->puzzle_width + x];
+        p->jc = jc;
+        p->home.x = x;
+        p->home.y = y;
+        p->current = p->home;
+
+        /* make sure the outer border is flat */
+        if (p->home.x == 0)  p->edge[LEFT] = FLAT;
+        if (p->home.y == 0)  p->edge[TOP]  = FLAT;
+        if (p->home.x == jc->puzzle_width-1)  p->edge[RIGHT]  = FLAT;
+        if (p->home.y == jc->puzzle_height-1) p->edge[BOTTOM] = FLAT;
+
+        /* generate the polygons */
+        p->dlist = glGenLists (1);
+        check_gl_error ("generating lists");
+        if (p->dlist <= 0) abort();
+
+        glNewList (p->dlist, GL_COMPILE);
+        p->polys += draw_piece (jc, p,
+                                resolution_arg, thickness_arg,
+                                p->edge[TOP], p->edge[RIGHT],
+                                p->edge[BOTTOM], p->edge[LEFT], 
+                                wire);
+        glEndList();
+      }
+}
+
+
+static void shuffle_grid (ModeInfo *mi);
+
+
+static void
+image_loaded_cb (const char *filename, XRectangle *geometry,
+                 int image_width, int image_height, 
+                 int texture_width, int texture_height,
+                 void *closure)
+{
+  ModeInfo *mi = (ModeInfo *) closure;
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+
+  jc->tex_x      = geometry->x      / (float) texture_width;
+  jc->tex_y      = geometry->y      / (float) texture_height;
+  jc->tex_width  = geometry->width  / (float) texture_width; 
+  jc->tex_height = geometry->height / (float) texture_height;
+  jc->aspect     = geometry->width  / (float) geometry->height;
+
+  if (debug_p)
+    {
+      fprintf (stderr, "%s: image %s\n", progname, 
+               (filename ? filename : "(null)"));
+      fprintf (stderr, "%s: image %4d x %-4d + %4d + %-4d (%.2f)\n", progname,
+               geometry->width, geometry->height, geometry->x, geometry->y,
+               (float) geometry->width / geometry->height);
+      fprintf (stderr, "%s: tex   %4d x %-4d\n", progname,
+               texture_width, texture_height);
+      fprintf (stderr, "%s: tex   %4.2f x %4.2f + %4.2f + %4.2f (%.2f)\n",
+               progname,
+               jc->tex_width, jc->tex_height, jc->tex_x, jc->tex_y,
+               (jc->tex_width / jc->tex_height) *
+               (texture_width / texture_height));
+    }
+
+  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+
+  make_puzzle_grid (mi);
+}
+
+
+static void
+load_image (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  load_texture_async (mi->xgwa.screen, mi->window,
+                      *jc->glx_context, 0, 0, 
+                      False, jc->texid,
+                      image_loaded_cb, mi);
+}
+
+
+/* Whether the two pieces are the same shape, when the second piece
+   is rotated by the given degrees.
+ */
+static Bool
+same_shape (puzzle_piece *p0, puzzle_piece *p1, int rotated_by)
+{
+  switch (rotated_by) 
+    {
+    case 0:
+      return (p0->edge[0] == p1->edge[0] &&
+              p0->edge[1] == p1->edge[1] &&
+              p0->edge[2] == p1->edge[2] &&
+              p0->edge[3] == p1->edge[3]);
+    case 90:
+      return (p0->edge[0] == p1->edge[1] &&
+              p0->edge[1] == p1->edge[2] &&
+              p0->edge[2] == p1->edge[3] &&
+              p0->edge[3] == p1->edge[0]);
+    case 180:
+      return (p0->edge[0] == p1->edge[2] &&
+              p0->edge[1] == p1->edge[3] &&
+              p0->edge[2] == p1->edge[0] &&
+              p0->edge[3] == p1->edge[1]);
+    case 270:
+      return (p0->edge[0] == p1->edge[3] &&
+              p0->edge[1] == p1->edge[0] &&
+              p0->edge[2] == p1->edge[1] &&
+              p0->edge[3] == p1->edge[2]);
+    default:
+      abort();
+    }
+}
+
+
+/* Returns the proper rotation for the piece at the given position. 
+ */
+static int
+proper_rotation (jigsaw_configuration *jc, puzzle_piece *p, 
+                 double x, double y)
+{
+  puzzle_piece *p1;
+  int cx = x;
+  int cy = y;
+  if (cx != x) abort();  /* must be in integral position! */
+  if (cy != y) abort();
+  p1 = &jc->puzzle [cy * jc->puzzle_width + cx];
+  if (same_shape (p, p1, 0))   return 0;
+  if (same_shape (p, p1, 90))  return 90;
+  if (same_shape (p, p1, 180)) return 180;
+  if (same_shape (p, p1, 270)) return 270;
+  abort();             /* these two pieces don't match in any rotation! */
+}
+
+
+/* Returns the piece currently at the given position. 
+ */
+static puzzle_piece *
+piece_at (jigsaw_configuration *jc, double x, double y)
+{
+  int npieces = jc->puzzle_width * jc->puzzle_height;
+  int i;
+  int cx = x;
+  int cy = y;
+  if (cx != x) abort();  /* must be in integral position! */
+  if (cy != y) abort();
+
+  for (i = 0; i < npieces; i++)
+    {
+      puzzle_piece *p = &jc->puzzle [i];
+      if (p->current.x == cx &&
+          p->current.y == cy)
+        return p;
+    }
+  abort();   /* no piece at that position? */
+}
+
+
+static void
+shuffle_grid (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  int max_tries = jc->puzzle_width * jc->puzzle_height;
+  int npieces = jc->puzzle_width * jc->puzzle_height;
+  int i;
+
+  for (i = 0; i < npieces; i++)
+    {
+      puzzle_piece *p0 = &jc->puzzle [i];
+      puzzle_piece *p1 = 0;
+      int k;
+
+      for (k = 0; k < max_tries; k++)
+        {
+          p1 = &jc->puzzle [random() % npieces];
+          if (same_shape (p0, p1, 0))   break;
+          if (same_shape (p0, p1, 90))  break;
+          if (same_shape (p0, p1, 180)) break;
+          if (same_shape (p0, p1, 270)) break;
+          p1 = 0;  /* mismatch */
+        }
+      if (p1 && p0 != p1)
+        {
+          XYZR s;
+          s = p0->current; p0->current = p1->current; p1->current = s;
+          p0->current.r = 
+            proper_rotation (jc, p0, p0->current.x, p0->current.y);
+          p1->current.r = 
+            proper_rotation (jc, p1, p1->current.x, p1->current.y);
+        }
+    }
+}
+
+
+/* We tend to accumulate floating point errors, e.g., z being 0.000001
+   after a move.  This makes sure float values that should be integral are.
+ */
+static void
+smooth_grid (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  int npieces = jc->puzzle_width * jc->puzzle_height;
+  int i;
+
+  for (i = 0; i < npieces; i++)
+    {
+      puzzle_piece *p = &jc->puzzle [i];
+# define SMOOTH(P) \
+        P.x = (int) (P.x + 0.5);                  \
+        P.y = (int) (P.y + 0.5);                  \
+        P.z = (int) (P.z + 0.5);                  \
+        P.r = (int) (P.r + 0.5)
+      SMOOTH(p->home);
+      SMOOTH(p->current);
+      SMOOTH(p->from);
+      SMOOTH(p->to);
+      if (p->tick <= 0.0001) p->tick = 0.0;
+      if (p->tick >= 0.9999) p->tick = 1.0;
+    }
+}
+
+
+static void
+begin_scatter (ModeInfo *mi, Bool unscatter_p)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  int npieces = jc->puzzle_width * jc->puzzle_height;
+  int i;
+  XYZR ctr = { 0, };
+  ctr.x = jc->puzzle_width  / 2;
+  ctr.y = jc->puzzle_height / 2;
+
+  for (i = 0; i < npieces; i++)
+    {
+      puzzle_piece *p = &jc->puzzle [i];
+      XYZ a;
+      double d, r, th;
+      p->tick = -frand(1.0);
+      p->from = p->current;
+
+      a.x = p->from.x - ctr.x; /* position relative to center */
+      a.y = p->from.y - ctr.y;
+
+      r = sqrt (a.x*a.x + a.y*a.y);
+      th = atan2 (a.x, a.y);
+
+      d = MAX (jc->puzzle_width, jc->puzzle_height) * 2;
+      r = r*r + d;
+
+      p->to.x = ctr.x + (r * sin (th));
+      p->to.y = ctr.y + (r * cos (th));
+      p->to.z = p->from.z;
+      p->to.r = ((int) p->from.r + (random() % 180)) % 360;
+      p->arc_height = frand(10.0);
+
+      if (unscatter_p)
+        {
+          XYZR s = p->to; p->to = p->from; p->from = s;
+          p->current = p->from;
+        }
+    }
+}
+
+
+static Bool
+solved_p (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  int npieces = jc->puzzle_width * jc->puzzle_height;
+  int i;
+
+  for (i = 0; i < npieces; i++)
+    {
+      puzzle_piece *p = &jc->puzzle [i];
+      if (p->current.x != p->home.x ||
+          p->current.y != p->home.y ||
+          p->current.z != p->home.z)
+        return False;
+    }
+  return True;
+}
+
+
+static void
+move_one_piece (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  int npieces = jc->puzzle_width * jc->puzzle_height;
+  int i;
+
+  for (i = 0; i < npieces * 100; i++)  /* shouldn't take that long */
+    {
+      int i = random() % npieces;
+      puzzle_piece *p0 = &jc->puzzle [i];
+      puzzle_piece *p1;
+
+      if (p0->current.x == p0->home.x &&
+          p0->current.y == p0->home.y &&
+          p0->current.z == p0->home.z)
+        continue;              /* piece already solved - try again */
+
+      /* swap with the piece occupying p0's home cell. */
+      p1 = piece_at (jc, p0->home.x, p0->home.y);
+
+      if (p0 == p1) abort();    /* should have caught this above */
+
+      p0->tick = 0;
+      p0->from = p0->current;
+      p0->to   = p1->current;
+      p0->to.r = proper_rotation (jc, p0, p0->to.x, p0->to.y);
+
+      p1->tick = 0;
+      p1->from = p1->current;
+      p1->to   = p0->current;
+      p1->to.r = proper_rotation (jc, p1, p1->to.x, p1->to.y);
+
+      p0->arc_height = 0.5 + frand(3.0);
+      p1->arc_height = 1.0 + frand(3.0);
+
+# define RTILT(V) \
+         V = 90 - BELLRAND(180);       \
+         if (! (random() % 5)) V *= 2; \
+         if (! (random() % 5)) V *= 2; \
+         if (! (random() % 5)) V *= 2
+      RTILT (p0->max_tilt);
+      RTILT (p1->max_tilt);
+# undef RTILT
+
+      if (debug_p)
+        fprintf (stderr, "%s: swapping %2d,%-2d with %2d,%d\n", progname,
+                 (int) p0->from.x, (int) p0->from.y,
+                 (int) p1->from.x, (int) p1->from.y);
+      return;
+    }
+
+  abort();  /* infinite loop! */
+}
+
+
+static Bool
+anim_tick (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  int npieces = jc->puzzle_width * jc->puzzle_height;
+  int i;
+  Bool finished_p = True;
+
+  if (jc->pausing > 0)
+    {
+      jc->pausing -= jc->tick_speed * speed;
+      if (debug_p && jc->pausing <= 0)
+        fprintf (stderr, "%s:   (done pausing)\n", progname);
+      return False;
+    }
+
+  for (i = 0; i < npieces; i++)
+    {
+      puzzle_piece *p = &jc->puzzle [i];
+      double tt;
+
+      if (p->tick >= 1.0) continue;    /* this piece is done */
+      finished_p = False;              /* not done */
+
+      p->tick += jc->tick_speed * speed;
+      if (p->tick > 1.0) p->tick = 1.0;
+
+      if (p->tick < 0.0) continue;     /* not yet started */
+
+      tt = 1 - sin (M_PI/2 - p->tick * M_PI/2);
+
+      p->current.x = p->from.x + ((p->to.x - p->from.x) * tt);
+      p->current.y = p->from.y + ((p->to.y - p->from.y) * tt);
+      p->current.z = p->from.z + ((p->to.z - p->from.z) * tt);
+      p->current.r = p->from.r + ((p->to.r - p->from.r) * tt);
+
+      p->current.z += p->arc_height * sin (p->tick * M_PI);
+
+      p->tilt = p->max_tilt * sin (p->tick * M_PI);
+
+    }
+
+  return finished_p;
+}
+
+
+static void
+animate (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  double slow = 0.01;
+  double fast = 0.04;
+
+  if (jc->button_down_p) return;
+
+  switch (jc->state)
+    {
+    case PUZZLE_LOADING:
+      if (!jc->puzzle) break;  /* still loading */
+      jc->tick_speed = slow;
+      shuffle_grid (mi);
+      smooth_grid (mi);
+      begin_scatter (mi, True);
+      jc->pausing = 0;
+      jc->state = PUZZLE_UNSCATTER;
+      if (debug_p) fprintf (stderr, "%s: unscattering\n", progname);
+      break;
+
+    case PUZZLE_UNSCATTER:
+      jc->tick_speed = slow;
+      if (anim_tick (mi))
+        {
+          smooth_grid (mi);
+          jc->pausing = 1.0;
+          jc->state = PUZZLE_SOLVE;
+          if (debug_p) fprintf (stderr, "%s: solving\n", progname);
+        }
+      break;
+
+    case PUZZLE_SOLVE:
+      jc->tick_speed = fast;
+      if (anim_tick (mi))
+        {
+          smooth_grid (mi);
+          if (solved_p (mi))
+            {
+              if (debug_p) fprintf (stderr, "%s: solved!\n", progname);
+              begin_scatter (mi, False);
+              jc->state = PUZZLE_SCATTER;
+              jc->pausing = 3.0;
+              if (debug_p) fprintf (stderr, "%s: scattering\n", progname);
+            }
+          else
+            {
+              move_one_piece (mi);
+              jc->pausing = 0.3;
+            }
+        }
+      break;
+
+    case PUZZLE_SCATTER:
+      jc->tick_speed = slow;
+      if (anim_tick (mi))
+        {
+          free_puzzle_grid (jc);
+          load_image (mi);
+          jc->state = PUZZLE_LOADING;
+          jc->pausing = 1.0;
+          if (debug_p) fprintf (stderr, "%s: loading\n", progname);
+        }
+      break;
+
+    default:
+      abort();
+    }
+}
+
+
+/* Window management, etc
+ */
+ENTRYPOINT void
+reshape_jigsaw (ModeInfo *mi, int width, int height)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  GLfloat h = (GLfloat) height / (GLfloat) width;
+
+  glViewport (0, 0, (GLint) width, (GLint) height);
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  gluPerspective (30.0, 1/h, 1.0, 100.0);
+
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  gluLookAt( 0.0, 0.0, 30.0,
+             0.0, 0.0, 0.0,
+             0.0, 1.0, 0.0);
+
+  glClear(GL_COLOR_BUFFER_BIT);
+
+  jc->line_thickness = (MI_IS_WIREFRAME (mi) ? 1 : MAX (1, height / 300.0));
+}
+
+
+ENTRYPOINT Bool
+jigsaw_handle_event (ModeInfo *mi, XEvent *event)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+
+  if (event->xany.type == ButtonPress &&
+      event->xbutton.button == Button1)
+    {
+      jc->button_down_p = True;
+      gltrackball_start (jc->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)
+    {
+      jc->button_down_p = False;
+      return True;
+    }
+  else if (event->xany.type == ButtonPress &&
+           (event->xbutton.button == Button4 ||
+            event->xbutton.button == Button5 ||
+            event->xbutton.button == Button6 ||
+            event->xbutton.button == Button7))
+    {
+      gltrackball_mousewheel (jc->trackball, event->xbutton.button, 10,
+                              !!event->xbutton.state);
+      return True;
+    }
+  else if (event->xany.type == MotionNotify &&
+           jc->button_down_p)
+    {
+      gltrackball_track (jc->trackball,
+                         event->xmotion.x, event->xmotion.y,
+                         MI_WIDTH (mi), MI_HEIGHT (mi));
+      return True;
+    }
+  else if (event->xany.type == KeyPress)
+    {
+      KeySym keysym;
+      char c = 0;
+      XLookupString (&event->xkey, &c, 1, &keysym, 0);
+
+      if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+        {
+          begin_scatter (mi, False);
+          jc->state = PUZZLE_SCATTER;
+          return True;
+        }
+    }
+
+
+  return False;
+}
+
+
+ENTRYPOINT void 
+init_jigsaw (ModeInfo *mi)
+{
+  jigsaw_configuration *jc;
+  int wire = MI_IS_WIREFRAME(mi);
+
+  if (!sps) {
+    sps = (jigsaw_configuration *)
+      calloc (MI_NUM_SCREENS(mi), sizeof (jigsaw_configuration));
+    if (!sps) {
+      fprintf(stderr, "%s: out of memory\n", progname);
+      exit(1);
+    }
+  }
+  jc = &sps[MI_SCREEN(mi)];
+  jc->glx_context = init_GL(mi);
+
+  reshape_jigsaw (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+  if (!wire)
+    {
+      GLfloat pos[4] = {0.05, 0.07, 1.00, 0.0};
+      GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0};
+      GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0};
+      GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0};
+
+      glLightfv(GL_LIGHT0, GL_POSITION, pos);
+      glLightfv(GL_LIGHT0, GL_AMBIENT,  amb);
+      glLightfv(GL_LIGHT0, GL_DIFFUSE,  dif);
+      glLightfv(GL_LIGHT0, GL_SPECULAR, spc);
+    }
+
+  jc->trackball = gltrackball_init ();
+  jc->rot = make_rotator (0, 0, 0, 0, speed * 0.002, True);
+
+  jc->state = PUZZLE_LOADING;
+
+  resolution_arg /= complexity_arg;
+
+  if (wire)
+    make_puzzle_grid (mi);
+  else
+    load_image (mi);
+}
+
+
+ENTRYPOINT void
+draw_jigsaw (ModeInfo *mi)
+{
+  jigsaw_configuration *jc = &sps[MI_SCREEN(mi)];
+  Display *dpy = MI_DISPLAY(mi);
+  Window window = MI_WINDOW(mi);
+  int wire = MI_IS_WIREFRAME(mi);
+
+  if (!jc->glx_context)
+    return;
+
+  animate (mi);
+
+  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(jc->glx_context));
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+  glPushMatrix ();
+
+  gltrackball_rotate (jc->trackball);
+
+  if (wobble_p && jc->puzzle)
+    {
+      double x, y, z;
+      double max = 60;
+      get_position (jc->rot, &x, &y, &z, !jc->button_down_p);
+      x = 1; /* always lean back */
+      glRotatef (max/2 - x*max, 1, 0, 0);
+      glRotatef (max/2 - z*max, 0, 1, 0);
+    }
+
+  mi->polygon_count = 0;
+
+  glEnable(GL_CULL_FACE);
+  glEnable(GL_DEPTH_TEST);
+  glEnable(GL_NORMALIZE);
+  glEnable(GL_LINE_SMOOTH);
+
+  if (jc->puzzle)
+    {
+      GLfloat s = 14.0 / jc->puzzle_height;
+      int x, y;
+
+      glScalef (s, s, s);
+      glTranslatef (-jc->puzzle_width / 2.0, -jc->puzzle_height / 2.0, 0);
+
+      if (! wire)
+        {
+          glEnable (GL_TEXTURE_2D);
+          glEnable (GL_BLEND);
+          glEnable (GL_LIGHTING);
+          glEnable (GL_LIGHT0);
+          glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+        }
+
+      for (y = 0; y < jc->puzzle_height; y++)
+        for (x = 0; x < jc->puzzle_width; x++)
+          {
+            puzzle_piece *p = &jc->puzzle [y * jc->puzzle_width + x];
+            glPushMatrix();
+            glTranslatef (p->current.x, p->current.y, p->current.z);
+            glTranslatef (0.5, 0.5, 0);
+            glRotatef (p->current.r, 0, 0, 1);
+            glRotatef (p->tilt, 0, 1, 0);
+            glTranslatef (-0.5, -0.5, 0);
+            glCallList(p->dlist);
+            mi->polygon_count += p->polys;
+            glPopMatrix();
+          }
+    }
+
+  glPopMatrix ();
+
+  if (mi->fps_p) do_fps (mi);
+  glFinish();
+
+  glXSwapBuffers(dpy, window);
+}
+
+XSCREENSAVER_MODULE ("Jigsaw", jigsaw)
+
+#endif /* USE_GL */
diff --git a/hacks/glx/jigsaw.man b/hacks/glx/jigsaw.man
new file mode 100644 (file)
index 0000000..c7d3493
--- /dev/null
@@ -0,0 +1,90 @@
+.TH XScreenSaver 1 "25-Aug-2008" "X Version 11"
+.SH NAME
+jigsaw - permute an image like a jigsaw puzzle
+.SH SYNOPSIS
+.B jigsaw
+[\-display \fIhost:display.screen\fP]
+[\-delay \fIusecs\fP]
+[\-speed \fIratio\fP]
+[\-complexity \fIratio\fP]
+[\-resolution \fIint\fP]
+[\-thickness \fIfloat\fP]
+[\-no\-wobble]
+[\-fps]
+.SH DESCRIPTION
+The \fIjigsaw\fP program loads an image, carves it up into
+a jigsaw puzzle, shuffles it, and then solves it.
+
+The image that it manipulates will be grabbed from the portion of
+the screen underlying the window, or from the system's video input,
+or from a random file on disk, as indicated by
+the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP,
+and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP
+file; see
+.BR xscreensaver-demo (1)
+for more details.
+.SH OPTIONS
+.I jigsaw
+accepts the following options:
+.TP 8
+.B \-delay \fImicroseconds\fP
+How long to wait between animation frames; default 20000.
+.TP 8
+.B \-speed \fIratio\fP
+Less than 1 for slower, greater than 1 for faster.  Default 1.
+.TP 8
+.B \-complexity \fIratio\fP
+Less than 1 for simpler puzzles (fewer pieces), greater than 1 for
+more complex puzzles (more pieces).  Default 1.
+.TP 8
+.B \-resolution \fIratio\fP
+Smoothness of the edges of the pieces.  Less than 1 for rougher pieces
+(fewer polygons), greater than 1 for more smoother pieces (more polygons).
+Default 1.
+.TP 8
+.B \-thickness \fIfloat\fP
+Thickness of the puzzle pieces (relative to their width).
+Default 0.06.
+.TP 8
+.B \-no\-wobble
+Keep the display stationary instead of very slowly wobbling back and forth.
+.TP 8
+.B \-fps
+Display the current frame rate, polygon count, and CPU load.
+.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.
+.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 1997 by Jamie Zawinski.  Permission to use, copy, modify, 
+distribute, and sell this software and its documentation for any purpose is 
+hereby granted without fee, provided that 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
+Jamie Zawinski <jwz@jwz.org>, 25-Nov-97.
index 1efe40cf408dc96ba1662135bb90d5ebb104c062..e2697a63f224aeede7476bea9c114ffd75ba9c97 100644 (file)
@@ -1413,7 +1413,7 @@ init_lavalite (ModeInfo *mi)
     gltrackball_track (bp->trackball, 50,  5, 100, 100);
 
     /* Oh, but if it's the "Giant" model, tilt the scene away: make it
-       look like we're looking up at it instead of odwn at it! */
+       look like we're looking up at it instead of down at it! */
     if (bp->style == GIANT)
       gltrackball_track (bp->trackball, 50, -12, 100, 100);
     else if (bp->style == ROCKET)  /* same for rocket, but not as much */
index d75735229c86722fb39fce2aa17e37fe9f0ab3de..25841d71b09db279ae549cad61e8ca42a605c1a8 100644 (file)
@@ -12,6 +12,7 @@
 
 
 /* Documentation on the PDB file format:
+   http://en.wikipedia.org/wiki/Protein_Data_Bank_%28file_format%29
    http://www.wwpdb.org/docs.html
    http://www.rcsb.org/pdb/file_formats/pdb/pdbguide2.2/guide2.2_frame.html
 
diff --git a/hacks/glx/photopile.c b/hacks/glx/photopile.c
new file mode 100644 (file)
index 0000000..7e6faef
--- /dev/null
@@ -0,0 +1,694 @@
+/* photopile, Copyright (c) 2008 Jens Kilian <jjk@acm.org>
+ * Based on carousel, Copyright (c) 2005-2008 Jamie Zawinski <jwz@jwz.org>
+ * Loads a sequence of images and shuffles them into a pile.
+ *
+ * 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.
+ */
+
+#define DEF_FONT "-*-helvetica-bold-r-normal-*-240-*"
+#define DEFAULTS  "*count:           7         \n" \
+                  "*delay:           10000     \n" \
+                  "*wireframe:       False     \n" \
+                  "*showFPS:         False     \n" \
+                  "*fpsSolid:        True      \n" \
+                  "*useSHM:          True      \n" \
+                  "*font:          " DEF_FONT "\n" \
+                  "*desktopGrabber:  xscreensaver-getimage -no-desktop %s\n" \
+                  "*grabDesktopImages:   False \n" \
+                  "*chooseRandomImages:  True  \n"
+
+# define refresh_photopile 0
+# define release_photopile 0
+# define photopile_handle_event 0
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#ifndef HAVE_COCOA
+# include <X11/Intrinsic.h>     /* for XrmDatabase in -debug mode */
+#endif
+#include <math.h>
+
+#include "xlockmore.h"
+#include "grab-ximage.h"
+#include "texfont.h"
+
+#ifdef USE_GL
+
+# define DEF_SCALE          "0.4"
+# define DEF_MAX_TILT       "50"
+# define DEF_SPEED          "1.0"
+# define DEF_DURATION       "5"
+# define DEF_TITLES         "False"
+# define DEF_MIPMAP         "True"
+# define DEF_DEBUG          "False"
+
+#define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3)
+
+typedef struct {
+  GLfloat x, y;                 /* position on screen */
+  GLfloat angle;                /* rotation angle */
+
+} position;
+
+typedef struct {
+  Bool loaded_p;                /* true if image can be drawn */
+
+  char *title;                  /* the filename of this image */
+  int w, h;                     /* size in pixels of the image */
+  int tw, th;                   /* size in pixels of the texture */
+  XRectangle geom;              /* where in the image the bits are */
+
+  position pos[4];              /* control points for calculating position */
+
+  GLuint texid;                 /* GL texture ID */
+
+} image;
+
+
+typedef enum { EARLY, IN, NORMAL, LOADING, SHUFFLE } fade_mode;
+static int fade_ticks = 60;
+
+typedef struct {
+  ModeInfo *mi;
+  GLXContext *glx_context;
+
+  image *frames;                /* pointer to array of images */
+  int nframe;                   /* image being (resp. next to be) loaded */
+
+  texture_font_data *texfont;
+  int loading_sw, loading_sh;
+
+  time_t last_time, now;
+  int draw_tick;
+  fade_mode mode;
+  int mode_tick;
+
+} photopile_state;
+
+static photopile_state *sss = NULL;
+
+
+/* Command-line arguments
+ */
+static GLfloat scale;        /* Scale factor for loading images. */
+static GLfloat max_tilt;     /* Maximum angle from vertical. */
+static GLfloat speed;        /* Animation speed scale factor. */
+static int duration;         /* Reload images after this long. */
+static Bool mipmap_p;        /* Use mipmaps instead of single textures. */
+static Bool titles_p;        /* Display image titles. */
+static Bool debug_p;         /* Be loud and do weird things. */
+
+
+static XrmOptionDescRec opts[] = {
+  {"-scale",        ".scale",         XrmoptionSepArg, 0 },
+  {"-maxTilt",      ".maxTilt",       XrmoptionSepArg, 0 },
+  {"-titles",       ".titles",        XrmoptionNoArg, "True"  },
+  {"-no-titles",    ".titles",        XrmoptionNoArg, "False" },
+  {"-mipmaps",      ".mipmap",        XrmoptionNoArg, "True"  },
+  {"-no-mipmaps",   ".mipmap",        XrmoptionNoArg, "False" },
+  {"-duration",     ".duration",      XrmoptionSepArg, 0 },
+  {"-debug",        ".debug",         XrmoptionNoArg, "True"  },
+  {"-font",         ".font",          XrmoptionSepArg, 0 },
+  {"-speed",        ".speed",         XrmoptionSepArg, 0 },
+};
+
+static argtype vars[] = {
+  { &scale,         "scale",        "Scale",        DEF_SCALE,       t_Float},
+  { &max_tilt,      "maxTilt",      "MaxTilt",      DEF_MAX_TILT,    t_Float},
+  { &mipmap_p,      "mipmap",       "Mipmap",       DEF_MIPMAP,      t_Bool},
+  { &debug_p,       "debug",        "Debug",        DEF_DEBUG,       t_Bool},
+  { &titles_p,      "titles",       "Titles",       DEF_TITLES,      t_Bool},
+  { &speed,         "speed",        "Speed",        DEF_SPEED,       t_Float},
+  { &duration,      "duration",     "Duration",     DEF_DURATION,    t_Int},
+};
+
+ENTRYPOINT ModeSpecOpt photopile_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+/* Functions to interpolate between image positions.
+ */
+static position
+add_pos(position p, position q)
+{
+  p.x += q.x;
+  p.y += q.y;
+  p.angle += q.angle;
+  return p;
+}
+
+static position
+scale_pos(GLfloat t, position p)
+{
+  p.x *= t;
+  p.y *= t;
+  p.angle *= t;
+  return p;
+}
+
+static position
+linear_combination(GLfloat t, position p, position q)
+{
+  return add_pos(scale_pos(1.0 - t, p), scale_pos(t, q));
+}
+
+static position
+interpolate(GLfloat t, position p[4])
+{
+  /* de Casteljau's algorithm, 4 control points */
+  position p10 = linear_combination(t, p[0], p[1]);
+  position p11 = linear_combination(t, p[1], p[2]);
+  position p12 = linear_combination(t, p[2], p[3]);
+
+  position p20 = linear_combination(t, p10, p11);
+  position p21 = linear_combination(t, p11, p12);
+
+  return linear_combination(t, p20, p21);
+}
+
+static position
+offset_pos(position p, GLfloat th, GLfloat r)
+{
+  p.x += cos(th) * r;
+  p.y += sin(th) * r;
+  p.angle = (frand(2.0) - 1.0) * max_tilt;
+  return p;
+}
+
+/* Calculate new positions for all images.
+ */
+static void
+set_new_positions(photopile_state *ss)
+{
+  ModeInfo *mi = ss->mi;
+  int i;
+
+  for (i = 0; i < MI_COUNT(mi)+1; ++i)
+    {
+      image *frame = ss->frames + i;
+      GLfloat d = sqrt(frame->w*frame->w + frame->h*frame->h);
+      GLfloat leave = frand(M_PI * 2.0);
+      GLfloat enter = frand(M_PI * 2.0);
+
+      /* start position */
+      frame->pos[0] = frame->pos[3];
+
+      /* end position */
+      frame->pos[3].x = BELLRAND(MI_WIDTH(mi));
+      frame->pos[3].y = BELLRAND(MI_HEIGHT(mi));
+      frame->pos[3].angle = (frand(2.0) - 1.0) * max_tilt;
+
+      /* intermediate points */
+      frame->pos[1] = offset_pos(frame->pos[0], leave, d * (0.5 + frand(1.0)));
+      frame->pos[2] = offset_pos(frame->pos[3], enter, d * (0.5 + frand(1.0)));
+    }
+}
+
+/* Callback that tells us that the texture has been loaded.
+ */
+static void
+image_loaded_cb (const char *filename, XRectangle *geom,
+                 int image_width, int image_height,
+                 int texture_width, int texture_height,
+                 void *closure)
+{
+  photopile_state *ss = (photopile_state *) closure;
+  ModeInfo *mi = ss->mi;
+  int wire = MI_IS_WIREFRAME(mi);
+  image *frame = ss->frames + ss->nframe;
+
+  if (wire)
+    {
+      frame->w = (int)(MI_WIDTH(mi)  * scale) - 1;
+      frame->h = (int)(MI_HEIGHT(mi) * scale) - 1;
+      if (frame->w <= 10) frame->w = 10;
+      if (frame->h <= 10) frame->h = 10;
+      frame->geom.width  = frame->w;
+      frame->geom.height = frame->h;
+      goto DONE;
+    }
+
+  if (image_width == 0 || image_height == 0)
+    exit (1);
+
+  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+                   mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR);
+
+  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+  glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+
+  frame->w  = image_width;
+  frame->h  = image_height;
+  frame->tw = texture_width;
+  frame->th = texture_height;
+  frame->geom = *geom;
+
+  if (frame->title)
+    free (frame->title);
+  frame->title = (filename ? strdup (filename) : 0);
+
+  if (frame->title)   /* strip filename to part after last /. */
+    {
+      char *s = strrchr (frame->title, '/');
+      if (s) strcpy (frame->title, s+1);
+    }
+
+  if (debug_p)
+    fprintf (stderr, "%s:   loaded %4d x %-4d  %4d x %-4d  \"%s\"\n",
+             progname,
+             frame->geom.width, 
+             frame->geom.height, 
+             frame->tw, frame->th,
+             (frame->title ? frame->title : "(null)"));
+
+ DONE:
+  frame->loaded_p = True;
+}
+
+
+/* Load a new file.
+ */
+static void
+load_image (ModeInfo *mi)
+{
+  photopile_state *ss = &sss[MI_SCREEN(mi)];
+  int wire = MI_IS_WIREFRAME(mi);
+  image *frame = ss->frames + ss->nframe;
+
+  if (debug_p && !wire && frame->w != 0)
+    fprintf (stderr, "%s:  dropped %4d x %-4d  %4d x %-4d  \"%s\"\n",
+             progname, 
+             frame->geom.width, 
+             frame->geom.height, 
+             frame->tw, frame->th,
+             (frame->title ? frame->title : "(null)"));
+
+  frame->loaded_p = False;
+
+  if (wire)
+    image_loaded_cb (0, 0, 0, 0, 0, 0, ss);
+  else
+    {
+      int w = (int)(MI_WIDTH(mi)  * scale) - 1;
+      int h = (int)(MI_HEIGHT(mi) * scale) - 1;
+      if (w <= 10) w = 10;
+      if (h <= 10) h = 10;
+      load_texture_async (mi->xgwa.screen, mi->window, *ss->glx_context, w, h,
+                          mipmap_p, frame->texid, 
+                          image_loaded_cb, ss);
+    }
+}
+
+
+static void
+loading_msg (ModeInfo *mi, int n)
+{
+  photopile_state *ss = &sss[MI_SCREEN(mi)];
+  int wire = MI_IS_WIREFRAME(mi);
+  char text[100];
+  GLfloat scale;
+
+  if (wire) return;
+
+  if (n == 0)
+    sprintf (text, "Loading images...");
+  else
+    sprintf (text, "Loading images...  (%d%%)",
+             (int) (n * 100 / MI_COUNT(mi)));
+
+  if (ss->loading_sw == 0)    /* only do this once, so that the string doesn't move. */
+    ss->loading_sw = texture_string_width (ss->texfont, text, &ss->loading_sh);
+
+  scale = ss->loading_sh / (GLfloat) MI_HEIGHT(mi);
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+  glMatrixMode(GL_PROJECTION);
+  glPushMatrix();
+  glLoadIdentity();
+
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  glLoadIdentity();
+  gluOrtho2D(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi));
+
+  glTranslatef ((MI_WIDTH(mi)  - ss->loading_sw) / 2,
+                (MI_HEIGHT(mi) - ss->loading_sh) / 2,
+                0);
+  glColor3f (1, 1, 0);
+  glEnable (GL_TEXTURE_2D);
+  glDisable (GL_DEPTH_TEST);
+  print_texture_string (ss->texfont, text);
+  glEnable (GL_DEPTH_TEST);
+  glPopMatrix();
+
+  glMatrixMode(GL_PROJECTION);
+  glPopMatrix();
+
+  glMatrixMode(GL_MODELVIEW);
+
+  glFinish();
+  glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi));
+}
+
+
+static Bool
+load_initial_images (ModeInfo *mi)
+{
+  photopile_state *ss = &sss[MI_SCREEN(mi)];
+
+  if (ss->frames[ss->nframe].loaded_p)
+    {
+      /* The current image has been fully loaded. */
+      if (++ss->nframe < MI_COUNT(mi))
+        {
+          /* Start the next one loading.  (We run the image loader
+           * asynchronously, but we load them one at a time.)
+           */
+          load_image(mi);
+        }
+      else
+        {
+          /* loaded all initial images, start fading them in */
+          int i;
+
+          for (i = 0; i < ss->nframe; ++i)
+            {
+              ss->frames[i].pos[3].x = MI_WIDTH(mi) * 0.5;
+              ss->frames[i].pos[3].y = MI_HEIGHT(mi) * 0.5;
+              ss->frames[i].pos[3].angle = 0.0;
+            }
+          set_new_positions(ss);
+
+          ss->mode = IN;
+          ss->mode_tick = fade_ticks / speed;
+        }
+    }
+
+  loading_msg(mi, ss->nframe);
+  return (ss->mode != EARLY);
+}
+
+
+ENTRYPOINT void
+reshape_photopile (ModeInfo *mi, int width, int height)
+{
+  glViewport (0, 0, (GLint) width, (GLint) height);
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  gluOrtho2D(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi));
+
+  glClear(GL_COLOR_BUFFER_BIT);
+}
+
+
+/* Kludge to add "-v" to invocation of "xscreensaver-getimage" in -debug mode
+ */
+static void
+hack_resources (Display *dpy)
+{
+# ifndef HAVE_COCOA
+  char *res = "desktopGrabber";
+  char *val = get_string_resource (dpy, res, "DesktopGrabber");
+  char buf1[255];
+  char buf2[255];
+  XrmValue value;
+  XrmDatabase db = XtDatabase (dpy);
+  sprintf (buf1, "%.100s.%.100s", progname, res);
+  sprintf (buf2, "%.200s -v", val);
+  value.addr = buf2;
+  value.size = strlen(buf2);
+  XrmPutResource (&db, buf1, "String", &value);
+# endif /* !HAVE_COCOA */
+}
+
+
+ENTRYPOINT void
+init_photopile (ModeInfo *mi)
+{
+  int screen = MI_SCREEN(mi);
+  photopile_state *ss;
+  int wire = MI_IS_WIREFRAME(mi);
+
+  if (sss == NULL) {
+    if ((sss = (photopile_state *)
+         calloc (MI_NUM_SCREENS(mi), sizeof(photopile_state))) == NULL)
+      return;
+  }
+  ss = &sss[screen];
+  ss->mi = mi;
+
+  if ((ss->glx_context = init_GL(mi)) != NULL) {
+    reshape_photopile (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+  } else {
+    MI_CLEARWINDOW(mi);
+  }
+
+  glDisable (GL_LIGHTING);
+  glEnable (GL_DEPTH_TEST);
+  glDisable (GL_CULL_FACE);
+
+  if (! wire)
+    {
+      glShadeModel (GL_SMOOTH);
+      glEnable (GL_LINE_SMOOTH);
+      /* This gives us a transparent diagonal slice through each image! */
+      /* glEnable (GL_POLYGON_SMOOTH); */
+      glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
+      glEnable (GL_BLEND);
+      glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+      glEnable (GL_POLYGON_OFFSET_FILL);
+      glPolygonOffset (1.0, 1.0);
+    }
+
+  ss->texfont = load_texture_font (MI_DISPLAY(mi), "font");
+
+  if (debug_p)
+    hack_resources (MI_DISPLAY (mi));
+
+  ss->frames = (image *)calloc (MI_COUNT(mi) + 1, sizeof(image));
+  ss->nframe = 0;
+  if (!wire)
+    {
+      int i;
+      for (i = 0; i < MI_COUNT(mi) + 1; ++i)
+        {
+          glGenTextures(1, &(ss->frames[i].texid));
+          if (ss->frames[i].texid <= 0) abort();
+        }
+    }
+
+  ss->mode = EARLY;
+  load_image(mi); /* start loading the first image */
+}
+
+
+static void
+draw_image (ModeInfo *mi, int i, GLfloat t, GLfloat s, GLfloat z)
+{
+  int wire = MI_IS_WIREFRAME(mi);
+  photopile_state *ss = &sss[MI_SCREEN(mi)];
+  image *frame = ss->frames + i;
+
+  GLfloat texw  = frame->geom.width  / (GLfloat) frame->tw;
+  GLfloat texh  = frame->geom.height / (GLfloat) frame->th;
+  GLfloat texx1 = frame->geom.x / (GLfloat) frame->tw;
+  GLfloat texy1 = frame->geom.y / (GLfloat) frame->th;
+  GLfloat texx2 = texx1 + texw;
+  GLfloat texy2 = texy1 + texh;
+
+  position pos = interpolate(t, frame->pos);
+  GLfloat w = frame->geom.width * 0.5;
+  GLfloat h = frame->geom.height * 0.5;
+
+  glBindTexture (GL_TEXTURE_2D, frame->texid);
+
+  glPushMatrix();
+
+  /* Position and scale this image.
+   */
+  glTranslatef (pos.x, pos.y, 0);
+  glRotatef (pos.angle, 0, 0, 1);
+  glScalef (s, s, 1);
+
+  /* Draw the image quad. */
+  if (! wire)
+    {
+      glColor3f (1, 1, 1);
+      glEnable (GL_TEXTURE_2D);
+      glBegin (GL_QUADS);
+      glTexCoord2f (texx1, texy2); glVertex3f (-w, -h, z);
+      glTexCoord2f (texx2, texy2); glVertex3f ( w, -h, z);
+      glTexCoord2f (texx2, texy1); glVertex3f ( w,  h, z);
+      glTexCoord2f (texx1, texy1); glVertex3f (-w,  h, z);
+      glEnd();
+    }
+
+  /* Draw a box around it.
+   */
+  glLineWidth (2.0);
+  glColor3f (0.5, 0.5, 0.5);
+  glDisable (GL_TEXTURE_2D);
+  glBegin (GL_LINE_LOOP);
+  glVertex3f (-w, -h, z);
+  glVertex3f ( w, -h, z);
+  glVertex3f ( w,  h, z);
+  glVertex3f (-w,  h, z);
+  glEnd();
+
+  /* Draw a title under the image.
+   */
+  if (titles_p)
+    {
+      int sw, sh;
+      GLfloat scale = 0.5;
+      char *title = frame->title ? frame->title : "(untitled)";
+      sw = texture_string_width (ss->texfont, title, &sh);
+
+      glTranslatef (-sw*scale*0.5, -h - sh*scale, z);
+      glScalef (scale, scale, 1);
+
+      glColor3f (1, 1, 1);
+
+      if (!wire)
+        {
+          glEnable (GL_TEXTURE_2D);
+          print_texture_string (ss->texfont, title);
+        }
+      else
+        {
+          glBegin (GL_LINE_LOOP);
+          glVertex3f (0,  0,  0);
+          glVertex3f (sw, 0,  0);
+          glVertex3f (sw, sh, 0);
+          glVertex3f (0,  sh, 0);
+          glEnd();
+        }
+    }
+
+  glPopMatrix();
+}
+
+
+ENTRYPOINT void
+draw_photopile (ModeInfo *mi)
+{
+  photopile_state *ss = &sss[MI_SCREEN(mi)];
+  int i;
+
+  if (!ss->glx_context)
+    return;
+
+  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ss->glx_context));
+
+  if (ss->mode == EARLY)
+    if (!load_initial_images (mi))
+      return;
+
+  /* Only check the wall clock every 10 frames */
+  if (ss->now == 0 || ss->draw_tick++ > 10)
+    {
+      ss->now = time((time_t *) 0);
+      if (ss->last_time == 0) ss->last_time = ss->now;
+      ss->draw_tick = 0;
+    }
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+  {
+    GLfloat t;
+
+    /* Handle state transitions. */
+    switch (ss->mode)
+      {
+      case IN:
+        if (--ss->mode_tick <= 0)
+          {
+            ss->mode = NORMAL;
+            ss->last_time = time((time_t *) 0);
+          }
+        break;
+      case NORMAL:
+        if (ss->now - ss->last_time > duration)
+          {
+            ss->mode = LOADING;
+            load_image(mi);
+          }
+        break;
+      case LOADING:
+        if (ss->frames[ss->nframe].loaded_p)
+          {
+            set_new_positions(ss);
+            ss->mode = SHUFFLE;
+            ss->mode_tick = fade_ticks / speed;
+          }
+        break;
+      case SHUFFLE:
+        if (--ss->mode_tick <= 0)
+          {
+            ss->nframe = (ss->nframe+1) % (MI_COUNT(mi)+1);
+
+            ss->mode = NORMAL;
+            ss->last_time = time((time_t *) 0);
+          }
+        break;
+      default:
+        abort();
+      }
+
+    t = 1.0 - ss->mode_tick / (fade_ticks / speed);
+    t = 0.5 * (1.0 - cos(M_PI * t));
+
+    /* Draw the images. */
+    for (i = 0; i < MI_COUNT(mi) + (ss->mode == SHUFFLE); ++i)
+      {
+        int j = (ss->nframe + i + 1) % (MI_COUNT(mi) + 1);
+        GLfloat s = 1.0;
+        GLfloat z = (GLfloat)i / (MI_COUNT(mi) + 1);
+
+        switch (ss->mode)
+          {
+          case IN:
+            s *= t;
+            break;
+          case NORMAL:
+          case LOADING:
+            t = 1.0;
+            break;
+          case SHUFFLE:
+            if (i == MI_COUNT(mi))
+              {
+                s *= t;
+              }
+            else if (i == 0)
+              {
+                s *= 1.0 - t;
+              }
+            break;
+          default:
+            abort();
+          }
+
+        draw_image(mi, j, t, s, z);
+      }
+  }
+
+  if (mi->fps_p) do_fps (mi);
+  glFinish();
+  glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi));
+}
+
+XSCREENSAVER_MODULE ("Photopile", photopile)
+
+#endif /* USE_GL */
diff --git a/hacks/glx/photopile.man b/hacks/glx/photopile.man
new file mode 100644 (file)
index 0000000..63be5aa
--- /dev/null
@@ -0,0 +1,105 @@
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+photopile - displays multiple images in a periodically shuffled pile
+.SH SYNOPSIS
+.B photopile
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-count \fIint\fP]
+[\-scale \fIfactor\fP]
+[\-maxTilt \fIdegrees\fP]
+[\-titles | \-no\-titles]
+[\-font \fIfont\fP]
+[\-speed \fIratio\fP]
+[\-duration \fIseconds\fP]
+[\-fps]
+[\-debug]
+[\-wireframe]
+.SH DESCRIPTION
+Loads several random images, and displays them as if lying in a random pile.
+The pile is periodically reshuffled, with new images coming in and old ones
+being thrown out.
+
+This program requires a good video card capable of supporting large
+textures.
+
+To specify the directory that images are loaded from, run
+.BR xscreensaver-demo (1)
+and click on the "Advanced" tab.
+.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 \-count \fIint\fP
+How many images to display.  Default 7.
+.TP 8
+.B \-scale \fIfactor\fP
+Size of images in relation to the size of the window.  Default 0.4.
+.TP 8
+.B \-maxTilt \fIdegrees\fP
+Maximum deviation from vertical.  Default 50 degrees.
+.TP 8
+.B \-duration \fIseconds\fP
+Every \fIduration\fP seconds, one of the images will be replaced
+with a new one.  Default 5 seconds.
+.TP 8
+.B \-speed \fIratio\fP
+Speed up or slow down the animation.  0.5 means half as fast as the
+default; 2.0 means twice as fast.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds.  Default: 10000 (0.01 seconds.).
+.TP 8
+.B \-titles \fB| \-no\-titles\fP
+Whether to display the file names of the images beneath them.  Default: no.
+.TP 8
+.B \-font \fIfont-name\fP
+The font to use for the initial loading screen.
+.TP 8
+.B \-fps
+Display the current frame rate, CPU load, and polygon count.
+.TP 8
+.B \-debug
+Prints debugging info to stderr.
+.TP 8
+.B \-wireframe
+Another debug mode.
+.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-demo (1)
+.BR xscreensaver-getimage (1)
+.BR xscreensaver (1)
+.BR carousel (MANSUFFIX)
+.BR glslideshow (MANSUFFIX)
+.SH COPYRIGHT
+Copyright \(co 2005 by Jamie Zawinski.
+Copyright \(co 2008 by Jens Kilian.
+
+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
+Jens Kilian.
index fd6fa6e89f55af080d576b8116475b29da6ac524..0e417d53106f12b2ea4c2fb73e656a4886b1ddcb 100644 (file)
@@ -83,11 +83,9 @@ ModStruct   gasket_description =
 
 #endif
 
-typedef struct{
-  GLfloat x;
-  GLfloat y;
-  GLfloat z;
-} GL_VECTOR;
+typedef struct {
+  double x,y,z;
+} XYZ;
 
 typedef struct {
   GLuint      gasket0, gasket1, gasket2, gasket3;
@@ -108,8 +106,6 @@ typedef struct {
 
   int tick;
 
-  GLfloat normals[4][3];
-
 } gasketstruct;
 
 static gasketstruct *gasket = NULL;
@@ -133,7 +129,8 @@ triangle (GLfloat x1, GLfloat y1, GLfloat z1,
 
 static void
 four_tetras (gasketstruct *gp, 
-             GL_VECTOR *outer, Bool wireframe_p, int countdown, int which,
+             XYZ *outer, XYZ *normals,
+             Bool wireframe_p, int countdown, int which,
              int *countP)
 {
   if (countdown <= 0)
@@ -141,7 +138,7 @@ four_tetras (gasketstruct *gp,
       (*countP)++;
       if (which == 0)
         {
-          glNormal3f (gp->normals[0][0], gp->normals[0][1], gp->normals[0][2]);
+          glNormal3f (normals[0].x, normals[0].y, normals[0].z);
           triangle (outer[0].x, outer[0].y, outer[0].z,
                     outer[1].x, outer[1].y, outer[1].z,
                     outer[2].x, outer[2].y, outer[2].z,
@@ -149,7 +146,7 @@ four_tetras (gasketstruct *gp,
         }
       else if (which == 1)
         {
-          glNormal3f (gp->normals[1][0], gp->normals[1][1], gp->normals[1][2]);
+          glNormal3f (normals[1].x, normals[1].y, normals[1].z);
           triangle (outer[0].x, outer[0].y, outer[0].z,
                     outer[3].x, outer[3].y, outer[3].z,
                     outer[1].x, outer[1].y, outer[1].z,
@@ -157,7 +154,7 @@ four_tetras (gasketstruct *gp,
         }
       else if (which == 2)
         {
-          glNormal3f (gp->normals[2][0], gp->normals[2][1], gp->normals[2][2]);
+          glNormal3f (normals[2].x, normals[2].y, normals[2].z);
           triangle (outer[0].x, outer[0].y, outer[0].z,
                     outer[2].x, outer[2].y, outer[2].z,
                     outer[3].x, outer[3].y, outer[3].z,
@@ -165,7 +162,7 @@ four_tetras (gasketstruct *gp,
         }
       else
         {
-          glNormal3f (gp->normals[3][0], gp->normals[3][1], gp->normals[3][2]);
+          glNormal3f (normals[3].x, normals[3].y, normals[3].z);
           triangle (outer[1].x, outer[1].y, outer[1].z,
                     outer[3].x, outer[3].y, outer[3].z,
                     outer[2].x, outer[2].y, outer[2].z,
@@ -180,8 +177,8 @@ four_tetras (gasketstruct *gp,
 #     define M12 3
 #     define M13 4
 #     define M23 5
-      GL_VECTOR inner[M23+1];
-      GL_VECTOR corner[4];
+      XYZ inner[M23+1];
+      XYZ corner[4];
 
       inner[M01].x = (outer[0].x + outer[1].x) / 2.0;
       inner[M01].y = (outer[0].y + outer[1].y) / 2.0;
@@ -213,25 +210,25 @@ four_tetras (gasketstruct *gp,
       corner[1] = inner[M01];
       corner[2] = inner[M02];
       corner[3] = inner[M03];
-      four_tetras (gp, corner, wireframe_p, countdown, which, countP);
+      four_tetras (gp, corner, normals, wireframe_p, countdown, which, countP);
 
       corner[0] = inner[M01];
       corner[1] = outer[1];
       corner[2] = inner[M12];
       corner[3] = inner[M13];
-      four_tetras (gp, corner, wireframe_p, countdown, which, countP);
+      four_tetras (gp, corner, normals, wireframe_p, countdown, which, countP);
 
       corner[0] = inner[M02];
       corner[1] = inner[M12];
       corner[2] = outer[2];
       corner[3] = inner[M23];
-      four_tetras (gp, corner, wireframe_p, countdown, which, countP);
+      four_tetras (gp, corner, normals, wireframe_p, countdown, which, countP);
 
       corner[0] = inner[M03];
       corner[1] = inner[M13];
       corner[2] = inner[M23];
       corner[3] = outer[3];
-      four_tetras (gp, corner, wireframe_p, countdown, which, countP);
+      four_tetras (gp, corner, normals, wireframe_p, countdown, which, countP);
     }
 }
 
@@ -241,55 +238,27 @@ compile_gasket(ModeInfo *mi, int which)
 {
   Bool wireframe_p = MI_IS_WIREFRAME(mi);
   gasketstruct *gp = &gasket[MI_SCREEN(mi)];
-  int count;
-
-  GL_VECTOR   vertex[5];
-
-  gp->normals[0][0] =  0;
-  gp->normals[0][1] =  0;
-  gp->normals[0][2] = -sqrt(2.0 / 3.0);
-
-  gp->normals[1][0] =  0;
-  gp->normals[1][1] = -sqrt(0.75);
-  gp->normals[1][2] =  sqrt(2.0 / 3.0) / 3.0;
-
-  gp->normals[2][0] =  sqrt (0.5);
-  gp->normals[2][1] =  sqrt(0.75) / 2.0;
-  gp->normals[2][2] =  gp->normals[1][2];
-
-  gp->normals[3][0] = -gp->normals[2][0];
-  gp->normals[3][1] =  gp->normals[2][1];
-  gp->normals[3][2] =  gp->normals[1][2];
-
-
-  /* define verticies */
-  vertex[0].x =  0.5; 
-  vertex[0].y = -(1.0/3.0)*sqrt((2.0/3.0));
-  vertex[0].z = -sqrt(3.0)/6.0;
-
-  vertex[1].x = -0.5; 
-  vertex[1].y = -(1.0/3.0)*sqrt((2.0/3.0)); 
-  vertex[1].z = -sqrt(3.0)/6.0; 
-
-  vertex[2].x = 0.0; 
-  vertex[2].y = (2.0/3.0)*sqrt((2.0/3.0));
-  vertex[2].z = -sqrt(3.0)/6.0; 
-
-  vertex[3].x = 0.0; 
-  vertex[3].y = 0.0; 
-  vertex[3].z = sqrt(3.0)/3.0; 
-
-  vertex[4].x = 0.0;
-  vertex[4].y = 0.0; 
-  vertex[4].z = 0.0;
-  
-  count = 0;
-  four_tetras (gp, vertex, wireframe_p,
+  int count = 0;
+  XYZ vertex[5];
+  XYZ normal[4];
+
+  vertex[0].x = -1; vertex[0].y = -1; vertex[0].z = -1;
+  vertex[1].x =  1; vertex[1].y =  1; vertex[1].z = -1;
+  vertex[2].x =  1; vertex[2].y = -1; vertex[2].z =  1;
+  vertex[3].x = -1; vertex[3].y =  1; vertex[3].z =  1;
+  vertex[4].x =  0; vertex[4].y =  0; vertex[4].z =  0;  /* center */
+
+  normal[0].x =  1; normal[0].y = -1; normal[0].z = -1;
+  normal[1].x = -1; normal[1].y =  1; normal[1].z = -1;
+  normal[2].x = -1; normal[2].y = -1; normal[2].z =  1;
+  normal[3].x =  1; normal[3].y =  1; normal[3].z =  1;
+
+  four_tetras (gp, vertex, normal, wireframe_p,
                (gp->current_depth < 0
                 ? -gp->current_depth : gp->current_depth),
                which,
                &count);
-  mi->polygon_count = count;
+  mi->polygon_count += count;
 }
 
 static void
@@ -366,7 +335,7 @@ draw(ModeInfo *mi)
     glRotatef (z * 360, 0.0, 0.0, 1.0);
   }
 
-  glScalef( 8.0, 8.0, 8.0 );
+  glScalef (4, 4, 4);
 
   glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color0);
   glCallList(gp->gasket0);
@@ -545,6 +514,24 @@ draw_gasket(ModeInfo * mi)
 
   glDrawBuffer(GL_BACK);
 
+  /*  0 =              4 polygons
+      1 =             16 polygons
+      2 =             64 polygons
+      3 =            256 polygons
+      4 =          1,024 polygons
+      5 =          4,096 polygons
+      6 =         16,384 polygons
+      7 =         65,536 polygons,  30 fps (3GHz Core 2 Duo, GeForce 8800 GS)
+      8 =        262,144 polygons,  12 fps
+      9 =      1,048,576 polygons,   4 fps
+     10 =      4,194,304 polygons,   1 fps
+     11 =     16,777,216 polygons, 0.3 fps
+     12 =     67,108,864 polygons,    OOM!
+     13 =    268,435,456 polygons
+     14 =  1,073,741,824 polygons, 31 bits
+     15 =  4,294,967,296 polygons, 33 bits
+     16 = 17,179,869,184 polygons, 35 bits
+   */
   if (max_depth > 10)
     max_depth = 10;
 
diff --git a/hacks/glx/sonar-icmp.c b/hacks/glx/sonar-icmp.c
new file mode 100644 (file)
index 0000000..b389f5e
--- /dev/null
@@ -0,0 +1,1182 @@
+/* sonar, Copyright (c) 1998-2008 Jamie Zawinski and Stephen Martin
+ *
+ * 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.
+ *
+ * This implements the "ping" sensor for sonar.
+ */
+
+#include "screenhackI.h"
+#include "sonar.h"
+#include "version.h"
+
+#undef usleep /* conflicts with unistd.h on OSX */
+
+#if defined(HAVE_ICMP) || defined(HAVE_ICMPHDR)
+# include <unistd.h>
+# include <sys/stat.h>
+# include <limits.h>
+# include <signal.h>
+# include <fcntl.h>
+# include <sys/types.h>
+# include <sys/time.h>
+# include <sys/ipc.h>
+# include <sys/shm.h>
+# include <sys/socket.h>
+# include <netinet/in_systm.h>
+# include <netinet/in.h>
+# include <netinet/ip.h>
+# include <netinet/ip_icmp.h>
+# include <netinet/udp.h>
+# include <arpa/inet.h>
+# include <netdb.h>
+#endif /* HAVE_ICMP || HAVE_ICMPHDR */
+
+#if defined(HAVE_ICMP)
+# define HAVE_PING
+# define ICMP             icmp
+# define ICMP_TYPE(p)     (p)->icmp_type
+# define ICMP_CODE(p)     (p)->icmp_code
+# define ICMP_CHECKSUM(p) (p)->icmp_cksum
+# define ICMP_ID(p)       (p)->icmp_id
+# define ICMP_SEQ(p)      (p)->icmp_seq
+#elif defined(HAVE_ICMPHDR)
+# define HAVE_PING
+# define ICMP             icmphdr
+# define ICMP_TYPE(p)     (p)->type
+# define ICMP_CODE(p)     (p)->code
+# define ICMP_CHECKSUM(p) (p)->checksum
+# define ICMP_ID(p)       (p)->un.echo.id
+# define ICMP_SEQ(p)      (p)->un.echo.sequence
+#else
+# undef HAVE_PING
+#endif
+
+#ifndef HAVE_PING
+
+sonar_sensor_data *
+init_ping (Display *dpy, const char *subnet, int timeout, 
+           Bool resolve_p, Bool times_p, Bool debug_p)
+{
+  if (! (!subnet || !*subnet || !strcmp(subnet, "default")))
+    fprintf (stderr, "%s: not compiled with support for pinging hosts.\n",
+             progname);
+  return 0;
+}
+
+#else /* HAVE_PING -- whole file */
+
+
+#if defined(__DECC) || defined(_IP_VHL)
+   /* This is how you do it on DEC C, and possibly some BSD systems. */
+# define IP_HDRLEN(ip)   ((ip)->ip_vhl & 0x0F)
+#else
+   /* This is how you do it on everything else. */
+# define IP_HDRLEN(ip)   ((ip)->ip_hl)
+#endif
+
+/* yes, there is only one, even when multiple savers are running in the
+   same address space - since we can only open this socket before dropping
+   privs.
+ */
+static int global_icmpsock = 0;
+
+/* Set by a signal handler. */
+static int timer_expired;
+
+
+
+static u_short checksum(u_short *, int);
+static long delta(struct timeval *, struct timeval *);
+
+
+typedef struct {
+  char *version;               /* short version number of xscreensaver */
+  int icmpsock;                        /* socket for sending pings */
+  int pid;                     /* our process ID */
+  int seq;                     /* packet sequence number */
+  int timeout;                 /* packet timeout */
+
+  int target_count;
+  sonar_bogie *targets;                /* the hosts we will ping;
+                                   those that pong end up on ssd->pending. */
+  sonar_bogie *last_pinged;    /* pointer into 'targets' list */
+  double last_ping_time;
+
+  Bool resolve_p;
+  Bool times_p;
+  Bool debug_p;
+
+} ping_data;
+
+typedef struct {
+  struct sockaddr address;     /* ip address */
+} ping_bogie;
+
+
+
+/* Packs an IP address quad into bigendian network order. */
+static unsigned long
+pack_addr (unsigned int a, unsigned int b, unsigned int c, unsigned int d)
+{
+  unsigned long i = (((a & 255) << 24) |
+                     ((b & 255) << 16) |
+                     ((c & 255) <<  8) |
+                     ((d & 255)      ));
+  return htonl (i);
+}
+
+/* Unpacks an IP address quad from bigendian network order. */
+static void
+unpack_addr (unsigned long addr,
+             unsigned int *a, unsigned int *b,
+             unsigned int *c, unsigned int *d)
+{
+  addr = ntohl (addr);
+  *a = (addr >> 24) & 255;
+  *b = (addr >> 16) & 255;
+  *c = (addr >>  8) & 255;
+  *d = (addr      ) & 255;
+}
+
+
+
+
+/* If resolves the bogie's name (either a hostname or ip address string)
+   to a hostent.  Returns 1 if successful, 0 if it failed to resolve.
+ */
+static int
+resolve_bogie_hostname (ping_data *pd, sonar_bogie *sb, Bool resolve_p)
+{
+  ping_bogie *pb = (ping_bogie *) sb->closure;
+  struct hostent *hent;
+  struct sockaddr_in *iaddr;
+
+  unsigned int ip[4];
+  char c;
+
+  iaddr = (struct sockaddr_in *) &(pb->address);
+  iaddr->sin_family = AF_INET;
+
+  if (4 == sscanf (sb->name, " %u.%u.%u.%u %c",
+                   &ip[0], &ip[1], &ip[2], &ip[3], &c))
+    {
+      /* It's an IP address.
+       */
+      if (ip[3] == 0)
+        {
+          if (pd->debug_p > 1)
+            fprintf (stderr, "%s:   ignoring bogus IP %s\n",
+                     progname, sb->name);
+          return 0;
+        }
+
+      iaddr->sin_addr.s_addr = pack_addr (ip[0], ip[1], ip[2], ip[3]);
+      if (resolve_p)
+        hent = gethostbyaddr ((const char *) &iaddr->sin_addr.s_addr,
+                              sizeof(iaddr->sin_addr.s_addr),
+                              AF_INET);
+      else
+        hent = 0;
+
+      if (pd->debug_p > 1)
+        fprintf (stderr, "%s:   %s => %s\n",
+                 progname, sb->name,
+                 ((hent && hent->h_name && *hent->h_name)
+                  ? hent->h_name : "<unknown>"));
+
+      if (hent && hent->h_name && *hent->h_name)
+        sb->name = strdup (hent->h_name);
+    }
+  else
+    {
+      /* It's a host name. */
+
+      /* don't waste time being confused by non-hostname tokens
+         in .ssh/known_hosts */
+      if (!strcmp (sb->name, "ssh-rsa") ||
+          !strcmp (sb->name, "ssh-dsa") ||
+          !strcmp (sb->name, "ssh-dss") ||
+          strlen (sb->name) >= 80)
+        return 0;
+
+      hent = gethostbyname (sb->name);
+      if (!hent)
+        {
+          if (pd->debug_p)
+            fprintf (stderr, "%s: could not resolve host:  %s\n",
+                     progname, sb->name);
+          return 0;
+        }
+
+      memcpy (&iaddr->sin_addr, hent->h_addr_list[0],
+              sizeof(iaddr->sin_addr));
+
+      if (pd->debug_p > 1)
+        {
+          unsigned int a, b, c, d;
+          unpack_addr (iaddr->sin_addr.s_addr, &a, &b, &c, &d);
+          fprintf (stderr, "%s:   %s => %d.%d.%d.%d\n",
+                   progname, sb->name, a, b, c, d);
+        }
+    }
+  return 1;
+}
+
+
+static void
+print_host (FILE *out, unsigned long ip, const char *name)
+{
+  char ips[50];
+  unsigned int a, b, c, d;
+  unpack_addr (ip, &a, &b, &c, &d);            /* ip is in network order */
+  sprintf (ips, "%u.%u.%u.%u", a, b, c, d);
+  if (!name || !*name) name = "<unknown>";
+  fprintf (out, "%-16s %s\n", ips, name);
+}
+
+
+/* Create a sonar_bogie a host name or ip address string.
+   Returns NULL if the name could not be resolved.
+ */
+static sonar_bogie *
+bogie_for_host (sonar_sensor_data *ssd, const char *name, Bool resolve_p)
+{
+  ping_data *pd = (ping_data *) ssd->closure;
+  sonar_bogie *b = (sonar_bogie *) calloc (1, sizeof(*b));
+  ping_bogie *pb = (ping_bogie *) calloc (1, sizeof(*pb));
+  struct sockaddr_in *iaddr;
+  unsigned long ip;
+
+  b->name = strdup (name);
+  b->closure = pb;
+
+  if (! resolve_bogie_hostname (pd, b, resolve_p))
+    goto FAIL;
+
+  iaddr = (struct sockaddr_in *) &(pb->address);
+
+  /* Don't ever use loopback (127.0.0.x) hosts */
+  ip = iaddr->sin_addr.s_addr;
+  if ((ntohl (ip) & 0xFFFFFF00L) == 0x7f000000L)  /* 127.0.0.x */
+    {
+      if (pd->debug_p)
+        fprintf (stderr, "%s:   ignoring loopback host %s\n", 
+                 progname, b->name);
+      goto FAIL;
+    }
+
+  /* Don't ever use broadcast (255.x.x.x) hosts */
+  if ((ntohl (ip) & 0xFF000000L) == 0xFF000000L)  /* 255.x.x.x */
+    {
+      if (pd->debug_p)
+        fprintf (stderr, "%s:   ignoring broadcast host %s\n",
+                 progname, b->name);
+      goto FAIL;
+    }
+
+  if (pd->debug_p > 1)
+    {
+      fprintf (stderr, "%s:   added ", progname);
+      print_host (stderr, ip, b->name);
+    }
+
+  return b;
+
+ FAIL:
+  if (b) free_bogie (ssd, b);
+  return 0;
+}
+
+
+/* Return a list of bogies read from a file.
+   The file can be like /etc/hosts or .ssh/known_hosts or probably
+   just about anything that has host names in it.
+ */
+static sonar_bogie *
+read_hosts_file (sonar_sensor_data *ssd, const char *filename) 
+{
+  ping_data *pd = (ping_data *) ssd->closure;
+  FILE *fp;
+  char buf[LINE_MAX];
+  char *p;
+  sonar_bogie *list = 0;
+  char *addr, *name;
+  sonar_bogie *new;
+
+  /* Kludge: on OSX, variables have not been expanded in the command
+     line arguments, so as a special case, allow the string to begin
+     with literal "$HOME/" or "~/".
+
+     This is so that the "Known Hosts" menu item in sonar.xml works.
+   */
+  if (!strncmp(filename, "~/", 2) || !strncmp(filename, "$HOME/", 6)) 
+    {
+      char *s = strchr (filename, '/');
+      strcpy (buf, getenv("HOME"));
+      strcat (buf, s);
+      filename = buf;
+    }
+
+  fp = fopen(filename, "r");
+  if (!fp)
+    {
+      char buf[1024];
+      sprintf(buf, "%s: %s", progname, filename);
+#ifdef HAVE_COCOA
+      if (pd->debug_p)  /* on OSX don't syslog this */
+#endif
+        perror (buf);
+      return 0;
+    }
+
+  if (pd->debug_p)
+    fprintf (stderr, "%s:  reading \"%s\"\n", progname, filename);
+
+  while ((p = fgets(buf, LINE_MAX, fp)))
+    {
+      while ((*p == ' ') || (*p == '\t'))      /* skip whitespace */
+        p++;
+      if (*p == '#')                           /* skip comments */
+        continue;
+
+      /* Get the name and address */
+
+      name = addr = 0;
+      if ((addr = strtok(buf, " ,;\t\n")))
+        name = strtok(0, " ,;\t\n");
+      else
+        continue;
+
+      /* Check to see if the addr looks like an addr.  If not, assume
+         the addr is a name and there is no addr.  This way, we can
+         handle files whose lines have "xx.xx.xx.xx hostname" as their
+         first two tokens, and also files that have a hostname as their
+         first token (like .ssh/known_hosts and .rhosts.)
+      */
+      {
+        int i; char c;
+        if (4 != sscanf(addr, "%d.%d.%d.%d%c", &i, &i, &i, &i, &c))
+          {
+            name = addr;
+            addr = 0;
+          }
+      }
+
+      /* If the name is all digits, it's not a name. */
+      if (name)
+        {
+          const char *s;
+          for (s = name; *s; s++)
+            if (*s < '0' || *s > '9')
+              break;
+          if (! *s)
+            {
+              if (pd->debug_p > 1)
+                fprintf (stderr, "%s:  skipping bogus name \"%s\" (%s)\n",
+                         progname, name, addr);
+              name = 0;
+            }
+        }
+
+      /* Create a new target using first the name then the address */
+
+      new = 0;
+      if (name)
+        new = bogie_for_host (ssd, name, pd->resolve_p);
+      if (!new && addr)
+        new = bogie_for_host (ssd, addr, pd->resolve_p);
+
+      if (new)
+        {
+          new->next = list;
+          list = new;
+        }
+    }
+
+  fclose(fp);
+  return list;
+}
+
+
+static sonar_bogie *
+delete_duplicate_hosts (sonar_sensor_data *ssd, sonar_bogie *list)
+{
+  ping_data *pd = (ping_data *) ssd->closure;
+  sonar_bogie *head = list;
+  sonar_bogie *sb;
+
+  for (sb = head; sb; sb = sb->next)
+    {
+      ping_bogie *pb = (ping_bogie *) sb->closure;
+      struct sockaddr_in *i1 = (struct sockaddr_in *) &(pb->address);
+      unsigned long ip1 = i1->sin_addr.s_addr;
+
+      sonar_bogie *sb2;
+      for (sb2 = sb; sb2; sb2 = sb2->next)
+        {
+          if (sb2 && sb2->next)
+            {
+              ping_bogie *pb2 = (ping_bogie *) sb2->next->closure;
+              struct sockaddr_in *i2 = (struct sockaddr_in *) &(pb2->address);
+              unsigned long ip2 = i2->sin_addr.s_addr;
+
+              if (ip1 == ip2)
+                {
+                  if (pd->debug_p)
+                    {
+                      fprintf (stderr, "%s: deleted duplicate: ", progname);
+                      print_host (stderr, ip2, sb2->next->name);
+                    }
+                  sb2->next = sb2->next->next;
+                  /* #### sb leaked */
+                }
+            }
+        }
+    }
+
+  return head;
+}
+
+
+/* Generate a list of bogies consisting of all of the entries on
+  the same subnet.  'base' ip is in network order; 0 means localhost.
+ */
+static sonar_bogie *
+subnet_hosts (sonar_sensor_data *ssd, char **error_ret,
+              unsigned long n_base, int subnet_width)
+{
+  ping_data *pd = (ping_data *) ssd->closure;
+  unsigned long h_mask;   /* host order */
+  unsigned long h_base;   /* host order */
+
+  /* Local Variables */
+
+  char hostname[BUFSIZ];
+  char address[BUFSIZ];
+  struct hostent *hent;
+  char *p;
+  int i;
+  sonar_bogie *new;
+  sonar_bogie *list = 0;
+  char buf[1024];
+
+  if (subnet_width < 24)
+    {
+      sprintf (buf,
+               "Pinging %lu hosts is a bad\n"
+               "idea.  Please use a subnet\n"
+               "mask of 24 bits or more.",
+               (unsigned long) (1L << (32 - subnet_width)) - 1);
+      *error_ret = strdup(buf);
+      return 0;
+    }
+  else if (subnet_width > 30)
+    {
+      sprintf (buf, 
+               "An %d-bit subnet\n"
+               "doesn't make sense.\n"
+               "Try \"subnet/24\"\n"
+               "or \"subnet/29\".\n",
+               subnet_width);
+      *error_ret = strdup(buf);
+      return 0;
+    }
+
+
+  if (pd->debug_p)
+    fprintf (stderr, "%s:   adding %d-bit subnet\n", progname, subnet_width);
+
+  /* Get our hostname */
+
+  if (gethostname(hostname, BUFSIZ)) 
+    {
+      *error_ret = strdup ("Unable to determine\n"
+                           "local host name!");
+      return 0;
+    }
+
+  /* Get our IP address and convert it to a string */
+
+  if (! (hent = gethostbyname(hostname)))
+    {
+      sprintf(buf, 
+              "Unable to resolve\n"
+              "local host \"%s\"", 
+              hostname);
+      *error_ret = strdup(buf);
+      return 0;
+    }
+  strcpy (address, inet_ntoa(*((struct in_addr *)hent->h_addr_list[0])));
+
+  /* Construct targets for all addresses in this subnet */
+
+  h_mask = 0;
+  for (i = 0; i < subnet_width; i++)
+    h_mask |= (1L << (31-i));
+
+  /* If no base IP specified, assume localhost. */
+  if (n_base == 0)
+    n_base = pack_addr (hent->h_addr_list[0][0],
+                        hent->h_addr_list[0][1],
+                        hent->h_addr_list[0][2],
+                        hent->h_addr_list[0][3]);
+  h_base = ntohl (n_base);
+
+  if (h_base == 0x7F000001L)   /* 127.0.0.1 in host order */
+    {
+      unsigned int a, b, c, d;
+      unpack_addr (n_base, &a, &b, &c, &d);
+      sprintf (buf,
+               "Unable to determine\n"
+               "local subnet address:\n"
+               "\"%s\"\n"
+               "resolves to\n"
+               "loopback address\n"
+               "%u.%u.%u.%u.",
+               hostname, a, b, c, d);
+      *error_ret = strdup(buf);
+      return 0;
+    }
+
+  for (i = 255; i >= 0; i--) {
+    unsigned int a, b, c, d;
+    int ip = (h_base & 0xFFFFFF00L) | i;     /* host order */
+      
+    if ((ip & h_mask) != (h_base & h_mask))  /* not in mask range at all */
+      continue;
+    if ((ip & ~h_mask) == 0)                 /* broadcast address */
+      continue;
+    if ((ip & ~h_mask) == ~h_mask)           /* broadcast address */
+      continue;
+
+    unpack_addr (htonl (ip), &a, &b, &c, &d);
+    sprintf (address, "%u.%u.%u.%u", a, b, c, d);
+
+    if (pd->debug_p > 1)
+      {
+        unsigned int aa, ab, ac, ad;
+        unsigned int ma, mb, mc, md;
+        unpack_addr (htonl (h_base & h_mask), &aa, &ab, &ac, &ad);
+        unpack_addr (htonl (h_mask),          &ma, &mb, &mc, &md);
+        fprintf (stderr,
+                 "%s:  subnet: %s (%u.%u.%u.%u & %u.%u.%u.%u / %d)\n",
+                 progname, address,
+                 aa, ab, ac, ad,
+                 ma, mb, mc, md,
+                 subnet_width);
+      }
+
+    p = address + strlen(address) + 1;
+    sprintf(p, "%d", i);
+
+    new = bogie_for_host (ssd, address, pd->resolve_p);
+    if (new)
+      {
+        new->next = list;
+        list = new;
+      }
+  }
+
+  return list;
+}
+
+
+/* Send a ping packet.
+ */
+static void
+send_ping (ping_data *pd, const sonar_bogie *b)
+{
+  ping_bogie *pb = (ping_bogie *) b->closure;
+  u_char *packet;
+  struct ICMP *icmph;
+  int result;
+  const char *token = "org.jwz.xscreensaver.sonar";
+
+  int pcktsiz = (sizeof(struct ICMP) + sizeof(struct timeval) + 
+                 strlen(b->name) + 1 +
+                 strlen(token) + 1 + 
+                 strlen(pd->version) + 1);
+
+  /* Create the ICMP packet */
+
+  if (! (packet = (u_char *) calloc(1, pcktsiz)))
+    return;  /* Out of memory */
+
+  icmph = (struct ICMP *) packet;
+  ICMP_TYPE(icmph) = ICMP_ECHO;
+  ICMP_CODE(icmph) = 0;
+  ICMP_CHECKSUM(icmph) = 0;
+  ICMP_ID(icmph) = pd->pid;
+  ICMP_SEQ(icmph) = pd->seq++;
+# ifdef GETTIMEOFDAY_TWO_ARGS
+  gettimeofday((struct timeval *) &packet[sizeof(struct ICMP)],
+               (struct timezone *) 0);
+# else
+  gettimeofday((struct timeval *) &packet[sizeof(struct ICMP)]);
+# endif
+
+  /* We store the name of the host we're pinging in the packet, and parse
+     that out of the return packet later (see get_ping() for why).
+     After that, we also include the name and version of this program,
+     just to give a clue to anyone sniffing and wondering what's up.
+   */
+  sprintf ((char *) &packet[sizeof(struct ICMP) + sizeof(struct timeval)],
+           "%s%c%s %s",
+           b->name, 0, token, pd->version);
+
+  ICMP_CHECKSUM(icmph) = checksum((u_short *)packet, pcktsiz);
+
+  /* Send it */
+
+  if ((result = sendto(pd->icmpsock, packet, pcktsiz, 0, 
+                       &pb->address, sizeof(pb->address)))
+      != pcktsiz)
+    {
+#if 0
+      char buf[BUFSIZ];
+      sprintf(buf, "%s: pinging %s", progname, b->name);
+      perror(buf);
+#endif
+    }
+}
+
+/* signal handler */
+static void
+sigcatcher (int sig)
+{
+  timer_expired = 1;
+}
+
+
+/* Compute the checksum on a ping packet.
+ */
+static u_short
+checksum (u_short *packet, int size) 
+{
+  register int nleft = size;
+  register u_short *w = packet;
+  register int sum = 0;
+  u_short answer = 0;
+
+  /* Using a 32 bit accumulator (sum), we add sequential 16 bit words
+     to it, and at the end, fold back all the carry bits from the
+     top 16 bits into the lower 16 bits.
+   */
+  while (nleft > 1)
+    {
+      sum += *w++;
+      nleft -= 2;
+    }
+
+  /* mop up an odd byte, if necessary */
+
+  if (nleft == 1)
+    {
+      *(u_char *)(&answer) = *(u_char *)w ;
+      *(1 + (u_char *)(&answer)) = 0;
+      sum += answer;
+    }
+
+  /* add back carry outs from top 16 bits to low 16 bits */
+
+  sum = (sum >> 16) + (sum & 0xffff);     /* add hi 16 to low 16 */
+  sum += (sum >> 16);                     /* add carry */
+  answer = ~sum;                          /* truncate to 16 bits */
+
+  return(answer);
+}
+
+
+/* Copies the sonar_bogie and the underlying ping_bogie.
+ */
+static sonar_bogie *
+copy_ping_bogie (sonar_sensor_data *ssd, const sonar_bogie *b)
+{
+  sonar_bogie *b2 = copy_bogie (ssd, b);
+  if (b->closure)
+    {
+      ping_bogie *pb  = (ping_bogie *) b->closure;
+      ping_bogie *pb2 = (ping_bogie *) calloc (1, sizeof(*pb));
+      pb2->address = pb->address;
+      b2->closure = pb2;
+    }
+  return b2;
+}
+
+
+/* Look for all outstanding ping replies.
+ */
+static sonar_bogie *
+get_ping (sonar_sensor_data *ssd)
+{
+  ping_data *pd = (ping_data *) ssd->closure;
+  struct sockaddr from;
+  unsigned int fromlen;  /* Posix says socklen_t, but that's not portable */
+  int result;
+  u_char packet[1024];
+  struct timeval now;
+  struct timeval *then;
+  struct ip *ip;
+  int iphdrlen;
+  struct ICMP *icmph;
+  sonar_bogie *bl = 0;
+  sonar_bogie *new = 0;
+  struct sigaction sa;
+  struct itimerval it;
+  fd_set rfds;
+  struct timeval tv;
+
+  /* Set up a signal to interrupt our wait for a packet */
+
+  sigemptyset(&sa.sa_mask);
+  sa.sa_flags = 0;
+  sa.sa_handler = sigcatcher;
+  if (sigaction(SIGALRM, &sa, 0) == -1) 
+    {
+      char msg[1024];
+      sprintf(msg, "%s: unable to trap SIGALRM", progname);
+      perror(msg);
+      exit(1);
+    }
+
+  /* Set up a timer to interupt us if we don't get a packet */
+
+  it.it_interval.tv_sec = 0;
+  it.it_interval.tv_usec = 0;
+  it.it_value.tv_sec = 0;
+  it.it_value.tv_usec = pd->timeout;
+  timer_expired = 0;
+  setitimer(ITIMER_REAL, &it, 0);
+
+  /* Wait for a result packet */
+
+  fromlen = sizeof(from);
+  while (! timer_expired)
+    {
+      tv.tv_usec = pd->timeout;
+      tv.tv_sec = 0;
+#if 0
+      /* This breaks on BSD, which uses bzero() in the definition of FD_ZERO */
+      FD_ZERO(&rfds);
+#else
+      memset (&rfds, 0, sizeof(rfds));
+#endif
+      FD_SET(pd->icmpsock, &rfds);
+      /* only wait a little while, in case we raced with the timer expiration.
+         From Valentijn Sessink <valentyn@openoffice.nl> */
+      if (select(pd->icmpsock + 1, &rfds, 0, 0, &tv) >0)
+        {
+          result = recvfrom (pd->icmpsock, packet, sizeof(packet),
+                             0, &from, &fromlen);
+
+          /* Check the packet */
+
+# ifdef GETTIMEOFDAY_TWO_ARGS
+          gettimeofday(&now, (struct timezone *) 0);
+# else
+          gettimeofday(&now);
+# endif
+          ip = (struct ip *) packet;
+          iphdrlen = IP_HDRLEN(ip) << 2;
+          icmph = (struct ICMP *) &packet[iphdrlen];
+          then  = (struct timeval *) &packet[iphdrlen + sizeof(struct ICMP)];
+
+
+          /* Ignore anything but ICMP Replies */
+          if (ICMP_TYPE(icmph) != ICMP_ECHOREPLY) 
+            continue;
+
+          /* Ignore packets not set from us */
+          if (ICMP_ID(icmph) != pd->pid)
+           continue;
+
+          /* Find the bogie in 'targets' that corresponds to this packet
+             and copy it, so that this bogie stays in the same spot (th)
+             on the screen, and so that we don't have to resolve it again.
+
+             We could find the bogie by comparing ip->ip_src.s_addr to
+             pb->address, but it is possible that, in certain weird router
+             or NAT situations, that the reply will come back from a 
+             different address than the one we sent it to.  So instead,
+             we parse the name out of the reply packet payload.
+           */
+          {
+            const char *name = (char *) &packet[iphdrlen +
+                                                sizeof(struct ICMP) +
+                                                sizeof(struct timeval)];
+            sonar_bogie *b;
+            for (b = pd->targets; b; b = b->next)
+              if (!strcmp (name, b->name))
+                {
+                  new = copy_ping_bogie (ssd, b);
+                  break;
+                }
+          }
+
+          if (! new)      /* not in targets? */
+            {
+              unsigned int a, b, c, d;
+              unpack_addr (ip->ip_src.s_addr, &a, &b, &c, &d);
+              fprintf (stderr, 
+                       "%s: UNEXPECTED PING REPLY! "
+                       "%4d bytes, icmp_seq=%-4d from %d.%d.%d.%d\n",
+                       progname, result, ICMP_SEQ(icmph), a, b, c, d);
+              continue;
+            }
+
+          new->next = bl;
+          bl = new;
+
+          {
+            double msec = delta(then, &now) / 1000.0;
+
+            if (pd->times_p)
+              {
+                if (new->desc) free (new->desc);
+                new->desc = (char *) malloc (30);
+                if      (msec > 99) sprintf (new->desc, "%.0f ms", msec);
+                else if (msec >  9) sprintf (new->desc, "%.1f ms", msec);
+                else if (msec >  1) sprintf (new->desc, "%.2f ms", msec);
+                else                sprintf (new->desc, "%.3f ms", msec);
+              }
+
+            if (pd->debug_p && pd->times_p)  /* ping-like stdout log */
+              {
+                char *s = strdup(new->name);
+                char *s2 = s;
+                if (strlen(s) > 28)
+                  {
+                    s2 = s + strlen(s) - 28;
+                    strncpy (s2, "...", 3);
+                  }
+                fprintf (stdout, 
+                         "%3d bytes from %28s: icmp_seq=%-4d time=%s\n",
+                         result, s2, ICMP_SEQ(icmph), new->desc);
+                fflush (stdout);
+                free(s);
+              }
+
+            /* The radius must be between 0.0 and 1.0.
+               We want to display ping times on a logarithmic scale,
+               with the three rings being 2.5, 70 and 2,000 milliseconds.
+             */
+            if (msec <= 0) msec = 0.001;
+            new->r = log (msec * 10) / log (20000);
+
+            /* Don't put anyone *too* close to the center of the screen. */
+            if (new->r < 0) new->r = 0;
+            if (new->r < 0.1) new->r += 0.1;
+          }
+        }
+    }
+
+  return bl;
+}
+
+
+/* difference between the two times in microseconds.
+ */
+static long
+delta (struct timeval *then, struct timeval *now) 
+{
+  return (((now->tv_sec - then->tv_sec) * 1000000) + 
+          (now->tv_usec - then->tv_usec));  
+}
+
+
+static void
+ping_free_data (sonar_sensor_data *ssd, void *closure)
+{
+  ping_data *pd = (ping_data *) closure;
+  sonar_bogie *b = pd->targets;
+  while (b)
+    {
+      sonar_bogie *b2 = b->next;
+      free_bogie (ssd, b);
+      b = b2;
+    }
+  free (pd);
+}
+
+static void
+ping_free_bogie_data (sonar_sensor_data *sd, void *closure)
+{
+  free (closure);
+}
+
+
+/* Returns the current time in seconds as a double.
+ */
+static double
+double_time (void)
+{
+  struct timeval now;
+# ifdef GETTIMEOFDAY_TWO_ARGS
+  struct timezone tzp;
+  gettimeofday(&now, &tzp);
+# else
+  gettimeofday(&now);
+# endif
+
+  return (now.tv_sec + ((double) now.tv_usec * 0.000001));
+}
+
+
+/* If a bogie is provided, pings it.
+   Then, returns all outstanding ping replies.
+ */
+static sonar_bogie *
+ping_scan (sonar_sensor_data *ssd)
+{
+  ping_data *pd = (ping_data *) ssd->closure;
+  double now = double_time();
+  double ping_cycle = 10;   /* re-ping a given host every 10 seconds */
+  double ping_interval = ping_cycle / pd->target_count;
+
+  if (now > pd->last_ping_time + ping_interval)   /* time to ping someone */
+    {
+      if (pd->last_pinged)
+        pd->last_pinged = pd->last_pinged->next;
+      if (! pd->last_pinged)
+        pd->last_pinged = pd->targets;
+      send_ping (pd, pd->last_pinged);
+      pd->last_ping_time = now;
+    }
+
+  return get_ping (ssd);
+}
+
+
+/* Returns a list of hosts to ping based on the "-ping" argument.
+ */
+static sonar_bogie *
+parse_mode (sonar_sensor_data *ssd, char **error_ret,
+            const char *ping_arg, Bool ping_works_p)
+{
+  ping_data *pd = (ping_data *) ssd->closure;
+  char *source, *token, *end, dummy;
+  sonar_bogie *hostlist = 0;
+
+  if (!ping_arg || !*ping_arg || !strcmp (ping_arg, "default"))
+    source = strdup("subnet/28");
+  else
+    source = strdup(ping_arg);
+
+  token = source;
+  end = source + strlen(source);
+  while (token < end)
+    {
+      char *next;
+      sonar_bogie *new;
+      struct stat st;
+      unsigned int n0=0, n1=0, n2=0, n3=0, m=0;
+      char d;
+
+      for (next = token;
+           *next &&
+           *next != ',' && *next != ' ' && *next != '\t' && *next != '\n';
+           next++)
+        ;
+      *next = 0;
+
+
+      if (pd->debug_p)
+        fprintf (stderr, "%s: parsing %s\n", progname, token);
+
+      if (!ping_works_p)
+        {
+          *error_ret = strdup ("Sonar must be setuid to ping!\n"
+                               "Running simulation instead.");
+          return 0;
+        }
+
+      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
+           */
+          unsigned long ip = pack_addr (n0, n1, n2, n3);
+          new = subnet_hosts (ssd, error_ret, ip, m);
+        }
+      else if (4 == sscanf (token, "%u.%u.%u.%u %c", &n0, &n1, &n2, &n3, &d))
+        {
+          /* IP: A.B.C.D
+           */
+          new = bogie_for_host (ssd, token, pd->resolve_p);
+        }
+      else if (!strcmp (token, "subnet"))
+        {
+          new = subnet_hosts (ssd, error_ret, 0, 24);
+        }
+      else if (1 == sscanf (token, "subnet/%u %c", &m, &dummy))
+        {
+          new = subnet_hosts (ssd, error_ret, 0, m);
+        }
+      else if (*token == '.' || *token == '/' || 
+               *token == '$' || *token == '~' ||
+               !stat (token, &st))
+        {
+          /* file name
+           */
+          new = read_hosts_file (ssd, token);
+        }
+      else
+        {
+          /* not an existant file - must be a host name
+           */
+          new = bogie_for_host (ssd, token, pd->resolve_p);
+        }
+
+      if (new)
+        {
+          sonar_bogie *nn = new;
+          while (nn && nn->next)
+            nn = nn->next;
+          nn->next = hostlist;
+          hostlist = new;
+        }
+
+      token = next + 1;
+      while (token < end &&
+             (*token == ',' || *token == ' ' ||
+              *token == '\t' || *token == '\n'))
+        token++;
+    }
+
+  free (source);
+  return hostlist;
+}
+
+
+sonar_sensor_data *
+init_ping (Display *dpy, char **error_ret, 
+           const char *subnet, int timeout,
+           Bool resolve_p, Bool times_p, Bool debug_p)
+{
+  sonar_sensor_data *ssd = (sonar_sensor_data *) calloc (1, sizeof(*ssd));
+  ping_data *pd = (ping_data *) calloc (1, sizeof(*pd));
+  sonar_bogie *b;
+  char *s;
+  int i, div;
+
+  Bool socket_initted_p = False;
+  Bool socket_raw_p     = False;
+
+  pd->resolve_p = resolve_p;
+  pd->times_p   = times_p;
+  pd->debug_p   = debug_p;
+
+  ssd->closure       = pd;
+  ssd->scan_cb       = ping_scan;
+  ssd->free_data_cb  = ping_free_data;
+  ssd->free_bogie_cb = ping_free_bogie_data;
+
+  /* Get short version number. */
+  s = strchr (screensaver_id, ' ');
+  pd->version = strdup (s+1);
+  s = strchr (pd->version, ' ');
+  *s = 0;
+
+
+  /* Create the ICMP socket.  Do this before dropping privs.
+
+     Raw sockets can only be opened by root (or setuid root), so we
+     only try to do this when the effective uid is 0.
+
+     We used to just always try, and notice the failure.  But apparently
+     that causes "SELinux" to log spurious warnings when running with the
+     "strict" policy.  So to avoid that, we just don't try unless we
+     know it will work.
+
+     On MacOS X, we can avoid the whole problem by using a
+     non-privileged datagram instead of a raw socket.
+   */
+  if (global_icmpsock)
+    {
+      pd->icmpsock = global_icmpsock;
+      socket_initted_p = True;
+      if (debug_p)
+        fprintf (stderr, "%s: re-using icmp socket\n", progname);
+
+    } 
+  else if ((pd->icmpsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)) >= 0)
+    {
+      socket_initted_p = True;
+    }
+  else if (geteuid() == 0 &&
+           (pd->icmpsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) >= 0)
+    {
+      socket_initted_p = True;
+      socket_raw_p = True;
+    }
+
+  if (socket_initted_p)
+    {
+      global_icmpsock = pd->icmpsock;
+      socket_initted_p = True;
+      if (debug_p)
+        fprintf (stderr, "%s: opened %s icmp socket\n", progname,
+                 (socket_raw_p ? "raw" : "dgram"));
+    } 
+  else if (debug_p)
+    fprintf (stderr, "%s: unable to open icmp socket\n", progname);
+
+  /* Disavow privs */
+  setuid(getuid());
+
+  pd->pid = getpid() & 0xFFFF;
+  pd->seq = 0;
+  pd->timeout = timeout;
+
+  /* Generate a list of targets */
+
+  pd->targets = parse_mode (ssd, error_ret, subnet, socket_initted_p);
+  pd->targets = delete_duplicate_hosts (ssd, pd->targets);
+
+  if (debug_p)
+    {
+      fprintf (stderr, "%s: Target list:\n", progname);
+      for (b = pd->targets; b; b = b->next)
+        {
+          ping_bogie *pb = (ping_bogie *) b->closure;
+          struct sockaddr_in *iaddr = (struct sockaddr_in *) &(pb->address);
+          unsigned long ip = iaddr->sin_addr.s_addr;
+          fprintf (stderr, "%s:   ", progname);
+          print_host (stderr, ip, b->name);
+        }
+    }
+
+  /* Make sure there is something to ping */
+
+  pd->target_count = 0;
+  for (b = pd->targets; b; b = b->next)
+    pd->target_count++;
+
+  if (pd->target_count == 0)
+    {
+      if (! *error_ret)
+        *error_ret = strdup ("No hosts to ping!\n"
+                             "Simulating instead.");
+      if (pd) ping_free_data (ssd, pd);
+      if (ssd) free (ssd);
+      return 0;
+    }
+
+  /* Distribute them evenly around the display field.
+   */
+  div = pd->target_count;
+  if (div > 90) div = 90;  /* no closer together than 4 degrees */
+  for (i = 0, b = pd->targets; b; b = b->next, i++)
+    b->th = M_PI * 2 * ((div - i) % div) / div;
+
+  return ssd;
+}
+
+#endif /* HAVE_PING -- whole file */
diff --git a/hacks/glx/sonar-sim.c b/hacks/glx/sonar-sim.c
new file mode 100644 (file)
index 0000000..f87de66
--- /dev/null
@@ -0,0 +1,112 @@
+/* sonar, Copyright (c) 1998-2008 Jamie Zawinski and Stephen Martin
+ *
+ * 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.
+ *
+ * This implements the "simulation" sensor for sonar.
+ */
+
+#include "screenhackI.h"
+#include "sonar.h"
+
+typedef struct {
+  const char *team_a_name;
+  const char *team_b_name;
+  int team_a_count;
+  int team_b_count;
+  sonar_bogie *targets;
+  Bool debug_p;
+} sim_data;
+
+
+static void
+sim_free_data (sonar_sensor_data *ssd, void *closure)
+{
+  sim_data *sd = (sim_data *) closure;
+  free (sd);
+}
+
+static void
+sim_free_bogie_data (sonar_sensor_data *ssd, void *closure)
+{
+  free (closure);
+}
+
+
+/* Return an updated (moved) copy of the bogies.
+ */
+static sonar_bogie *
+sim_scan (sonar_sensor_data *ssd)
+{
+  sim_data *sd = (sim_data *) ssd->closure;
+  sonar_bogie *b, *b2, *list = 0;
+  double scale = 0.01;
+  for (b = sd->targets; b; b = b->next)
+    {
+      b->r  += scale * (0.5 - frand(1.0));
+      b->th += scale * (0.5 - frand(1.0));
+      while (b->r < 0.2) b->r += scale * 0.1;
+      while (b->r > 0.9) b->r -= scale * 0.1;
+
+      b2 = copy_bogie (ssd, b);
+      b2->next = list;
+      list = b2;
+    }
+  return list;
+}
+
+
+static void
+make_bogies (sonar_sensor_data *ssd)
+{
+  sim_data *sd = (sim_data *) ssd->closure;
+  int i, j;
+
+  for (j = 0; j <= 1; j++)
+    for (i = 0; i < (j ? sd->team_a_count : sd->team_b_count); i++)
+      {
+        sonar_bogie *b = (sonar_bogie *) calloc (1, sizeof(*b));
+        const char *name = (j ? sd->team_a_name : sd->team_b_name);
+        b->name = (char *) malloc (strlen(name) + 10);
+        sprintf (b->name, "%s%03d", name, i+1);
+        b->r = 0.3 + frand(0.5);
+        b->th = frand (M_PI*2);
+        b->next = sd->targets;
+        sd->targets = b;
+        if (sd->debug_p)
+          fprintf (stderr, "%s: %s: %5.2f %5.2f\n", progname,
+                   b->name, b->r, b->th);
+      }
+}
+
+
+sonar_sensor_data *
+init_simulation (Display *dpy, char **error_ret,
+                 const char *team_a_name, const char *team_b_name,
+                 int team_a_count, int team_b_count,
+                 Bool debug_p)
+{
+  sonar_sensor_data *ssd = (sonar_sensor_data *) calloc (1, sizeof(*ssd));
+  sim_data *sd = (sim_data *) calloc (1, sizeof(*sd));
+
+  sd->team_a_name  = team_a_name;
+  sd->team_b_name  = team_b_name;
+  sd->team_a_count = team_a_count;
+  sd->team_b_count = team_b_count;
+  sd->debug_p      = debug_p;
+
+  ssd->closure       = sd;
+  ssd->scan_cb       = sim_scan;
+  ssd->free_data_cb  = sim_free_data;
+  ssd->free_bogie_cb = sim_free_bogie_data;
+
+  make_bogies (ssd);
+
+  return ssd;
+}
+
diff --git a/hacks/glx/sonar.c b/hacks/glx/sonar.c
new file mode 100644 (file)
index 0000000..535b52f
--- /dev/null
@@ -0,0 +1,1012 @@
+/* sonar, Copyright (c) 1998-2008 Jamie Zawinski and Stephen Martin
+ *
+ * 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.
+ */
+
+/* Created in Apr 1998 by Stephen Martin <smartin@vanderfleet-martin.net>
+ * for the  RedHat Screensaver Contest
+ * Heavily hacked by jwz ever since.
+ * Rewritten in OpenGL by jwz, Aug 2008.
+ *
+ * This is an implementation of a general purpose reporting tool in the
+ * format of a Sonar display. It is designed such that a sensor is read
+ * on every movement of a sweep arm and the results of that sensor are
+ * displayed on the screen. The location of the display points (targets) on the
+ * screen are determined by the current localtion of the sweep and a distance
+ * value associated with the target. 
+ *
+ * Currently the only two sensors that are implemented are the simulator
+ * (the default) and the ping sensor. The simulator randomly creates a set
+ * of bogies that move around on the scope while the ping sensor can be
+ * used to display hosts on your network.
+ *
+ * The ping code is only compiled in if you define HAVE_ICMP or HAVE_ICMPHDR,
+ * because, unfortunately, different systems have different ways of creating
+ * these sorts of packets.
+ *
+ * In order to use the ping sensor on most systems, this program must be
+ * installed as setuid root, so that it can create an ICMP RAW socket.  Root
+ * privileges are disavowed shortly after startup (just after connecting to
+ * the X server and reading the resource database) so this is *believed* to
+ * be a safe thing to do, but it is usually recommended that you have as few
+ * setuid programs around as possible, on general principles.
+ *
+ * It is not necessary to make it setuid on MacOS systems, because on those
+ * systems, unprivileged programs can ping by using ICMP DGRAM sockets
+ * instead of ICMP RAW.
+ *
+ * It should be easy to extend this code to support other sorts of sensors.
+ * Some ideas:
+ *   - search the output of "netstat" for the list of hosts to ping;
+ *   - plot the contents of /proc/interrupts;
+ *   - plot the process table, by process size, cpu usage, or total time;
+ *   - plot the logged on users by idle time or cpu usage.
+ *
+ */
+
+#define DEF_FONT "-*-lucidatypewriter-bold-r-normal-*-*-480-*-*-*-*-iso8859-1"
+#define DEF_SPEED        "1.0"
+#define DEF_SWEEP_SIZE   "0.3"
+#define DEF_FONT_SIZE    "12"
+#define DEF_TEAM_A_NAME  "F18"
+#define DEF_TEAM_B_NAME  "MIG"
+#define DEF_TEAM_A_COUNT "4"
+#define DEF_TEAM_B_COUNT "4"
+#define DEF_PING         "default"
+#define DEF_PING_TIMEOUT "3000"
+#define DEF_RESOLVE      "True"
+#define DEF_TIMES        "True"
+#define DEF_WOBBLE       "True"
+#define DEF_DEBUG        "False"
+
+#define DEFAULTS       "*delay:        30000       \n" \
+                       "*font:       " DEF_FONT   "\n" \
+                       "*showFPS:      False       \n" \
+                       "*wireframe:    False       \n" \
+
+
+# define refresh_sonar 0
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>   /* for setuid() */
+#endif
+
+#include "xlockmore.h"
+#include "sonar.h"
+#include "gltrackball.h"
+#include "rotator.h"
+#include "texfont.h"
+#include <ctype.h>
+
+#ifdef USE_GL /* whole file */
+
+typedef struct {
+  double x,y,z;
+} XYZ;
+
+typedef struct {
+  GLXContext *glx_context;
+  trackball_state *trackball;
+  rotator *rot;
+  Bool button_down_p;
+
+  double start_time;
+  GLfloat sweep_offset;
+
+  GLuint screen_list, grid_list, sweep_list, table_list;
+  int screen_polys, grid_polys, sweep_polys, table_polys;
+  GLfloat sweep_th;
+  GLfloat line_thickness;
+
+  texture_font_data *texfont;
+
+  sonar_sensor_data *ssd;
+  char *error;
+
+  sonar_bogie *displayed;      /* on screen and fading */
+  sonar_bogie *pending;                /* returned by sensor, not yet on screen */
+
+} sonar_configuration;
+
+static sonar_configuration *sps = NULL;
+
+static GLfloat speed;
+static GLfloat sweep_size;
+static GLfloat font_size;
+static Bool resolve_p;
+static Bool times_p;
+static Bool wobble_p;
+static Bool debug_p;
+
+static char *team_a_name;
+static char *team_b_name;
+static int team_a_count;
+static int team_b_count;
+static int ping_timeout;
+static char *ping_arg;
+
+static XrmOptionDescRec opts[] = {
+  { "-speed",        ".speed",       XrmoptionSepArg, 0 },
+  { "-sweep-size",   ".sweepSize",   XrmoptionSepArg, 0 },
+  { "-font-size",    ".fontSize",    XrmoptionSepArg, 0 },
+  { "-team-a-name",  ".teamAName",   XrmoptionSepArg, 0 },
+  { "-team-b-name",  ".teamBName",   XrmoptionSepArg, 0 },
+  { "-team-a-count", ".teamACount",  XrmoptionSepArg, 0 },
+  { "-team-b-count", ".teamBCount",  XrmoptionSepArg, 0 },
+  { "-ping",         ".ping",        XrmoptionSepArg, 0 },
+  { "-ping-timeout", ".pingTimeout", XrmoptionSepArg, 0 },
+  { "-dns",          ".resolve",     XrmoptionNoArg, "True" },
+  { "+dns",          ".resolve",     XrmoptionNoArg, "False" },
+  { "-times",        ".times",       XrmoptionNoArg, "True" },
+  { "+times",        ".times",       XrmoptionNoArg, "False" },
+  { "-wobble",       ".wobble",      XrmoptionNoArg, "True" },
+  { "+wobble",       ".wobble",      XrmoptionNoArg, "False" },
+  { "-debug",        ".debug",       XrmoptionNoArg, "True" },
+};
+
+static argtype vars[] = {
+  {&speed,        "speed",       "Speed",       DEF_SPEED,        t_Float},
+  {&sweep_size,   "sweepSize",   "SweepSize",   DEF_SWEEP_SIZE,   t_Float},
+  {&font_size,    "fontSize",    "FontSize",    DEF_FONT_SIZE,    t_Float},
+  {&team_a_name,  "teamAName",   "TeamName",    DEF_TEAM_A_NAME,  t_String},
+  {&team_b_name,  "teamBName",   "TeamName",    DEF_TEAM_B_NAME,  t_String},
+  {&team_a_count, "teamACount",  "TeamCount",   DEF_TEAM_A_COUNT, t_Int},
+  {&team_b_count, "teamBCount",  "TeamCount",   DEF_TEAM_A_COUNT, t_Int},
+  {&ping_arg,     "ping",        "Ping",        DEF_PING,         t_String},
+  {&ping_timeout, "pingTimeout", "PingTimeout", DEF_PING_TIMEOUT, t_Int},
+  {&resolve_p,    "resolve",     "Resolve",     DEF_RESOLVE,      t_Bool},
+  {&times_p,      "times",       "Times",       DEF_TIMES,        t_Bool},
+  {&wobble_p,     "wobble",      "Wobble",      DEF_WOBBLE,       t_Bool},
+  {&debug_p,      "debug",       "Debug",       DEF_DEBUG,        t_Bool},
+};
+
+ENTRYPOINT ModeSpecOpt sonar_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+static int
+draw_screen (ModeInfo *mi, Bool mesh_p, Bool sweep_p)
+{
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+  int wire = MI_IS_WIREFRAME(mi);
+  int polys = 0;
+  int i;
+  int th_steps, r_steps, r_skip, th_skip, th_skip2, outer_r;
+  GLfloat curvature = M_PI * 0.4;
+  GLfloat r0, r1, z0, z1, zoff;
+  XYZ *ring;
+
+  static const GLfloat glass[4]  = {0.0, 0.4, 0.0, 0.5};
+  static const GLfloat lines[4]  = {0.0, 0.7, 0.0, 0.5};
+  static const GLfloat sweepc[4] = {0.2, 1.0, 0.2, 0.5};
+  static const GLfloat spec[4]   = {1.0, 1.0, 1.0, 1.0};
+  static const GLfloat shiny     = 20.0;
+
+  if (wire && !(mesh_p || sweep_p)) return 0;
+
+  glPushAttrib (GL_ENABLE_BIT);
+  glDisable (GL_TEXTURE_2D);
+
+  glFrontFace (GL_CCW);
+  th_steps = 36 * 4;    /* must be a multiple of th_skip2 divisor */
+  r_steps = 40;
+  r_skip = 1;
+  th_skip = 1;
+  th_skip2 = 1;
+  outer_r = 0;
+
+  glMaterialfv (GL_FRONT, GL_SPECULAR,  spec);
+  glMateriali  (GL_FRONT, GL_SHININESS, shiny);
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mesh_p ? lines : glass);
+  if (wire) glColor3fv (lines);
+
+  if (mesh_p) 
+    {
+      th_skip  = th_steps / 12;
+      th_skip2 = th_steps / 36;
+      r_skip = r_steps / 3;
+      outer_r = r_steps * 0.93;
+
+      if (! wire)
+        glLineWidth (sp->line_thickness);
+    }
+
+  ring = (XYZ *) calloc (th_steps, sizeof(*ring));
+
+  for (i = 0; i < th_steps; i++)
+    {
+      double a = M_PI * 2 * i / th_steps;
+      ring[i].x = cos(a);
+      ring[i].y = sin(a);
+    }
+
+  /* place the bottom of the disc on the xy plane. */
+  zoff = cos (curvature/2 * (M_PI/2)) / 2;
+
+  for (i = r_steps; i > 0; i--)
+    {
+      int j0, j1;
+
+      r0 = i     / (GLfloat) r_steps;
+      r1 = (i+1) / (GLfloat) r_steps;
+      z0 = cos (curvature/2 * asin (r0)) / 2 - zoff;
+      z1 = cos (curvature/2 * asin (r1)) / 2 - zoff;
+
+      glBegin(wire || mesh_p ? GL_LINES : GL_QUAD_STRIP);
+      for (j0 = 0; j0 <= th_steps; j0++)
+        {
+          if (mesh_p && 
+              (i < outer_r
+               ? (j0 % th_skip != 0)
+               : (j0 % th_skip2 != 0)))
+            continue;
+
+          if (sweep_p)
+            {
+              GLfloat color[4];
+              GLfloat r = 1 - (j0 / (GLfloat) (th_steps * sweep_size));
+#if 0
+              color[0] = glass[0] + (sweepc[0] - glass[0]) * r;
+              color[1] = glass[1] + (sweepc[1] - glass[1]) * r;
+              color[2] = glass[2] + (sweepc[2] - glass[2]) * r;
+              color[3] = glass[3];
+#else
+              color[0] = sweepc[0];
+              color[1] = sweepc[1];
+              color[2] = sweepc[2];
+              color[3] = r;
+#endif
+              glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color);
+            }
+
+          j1 = j0 % th_steps;
+          glNormal3f (r0 * ring[j1].x, r0 * ring[j1].y, z0);
+          glVertex3f (r0 * ring[j1].x, r0 * ring[j1].y, z0);
+          glNormal3f (r1 * ring[j1].x, r1 * ring[j1].y, z1);
+          glVertex3f (r1 * ring[j1].x, r1 * ring[j1].y, z1);
+          polys++;
+
+          if (sweep_p && j0 >= th_steps * sweep_size)
+            break;
+          if (sweep_p && wire)
+            break;
+        }
+      glEnd();
+
+      if (mesh_p &&
+          (i == outer_r ||
+           i == r_steps ||
+           (i % r_skip == 0 &&
+            i < r_steps - r_skip)))
+        {
+          glBegin(GL_LINE_LOOP);
+          for (j0 = 0; j0 < th_steps; j0++)
+            {
+              glNormal3f (r0 * ring[j0].x, r0 * ring[j0].y, z0);
+              glVertex3f (r0 * ring[j0].x, r0 * ring[j0].y, z0);
+              polys++;
+            }
+          glEnd();
+        }
+    }
+
+  /* one more polygon for the middle */
+  if (!wire && !sweep_p)
+    {
+      glBegin(wire || mesh_p ? GL_LINE_LOOP : GL_POLYGON);
+      glNormal3f (0, 0, 1);
+      for (i = 0; i < th_steps; i++)
+        {
+          glNormal3f (r0 * ring[i].x, r0 * ring[i].y, z0);
+          glVertex3f (r0 * ring[i].x, r0 * ring[i].y, z0);
+        }
+      polys++;
+      glEnd();
+    }
+
+  glPopAttrib();
+  free (ring);
+
+  return polys;
+}
+
+
+static int
+draw_text (ModeInfo *mi, const char *string, GLfloat r, GLfloat th, 
+           GLfloat ttl, GLfloat size)
+{
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+  int wire = MI_IS_WIREFRAME(mi);
+  int polys = 0;
+  GLfloat font_scale = 0.001 * (size > 0 ? size : font_size) / 14.0;
+  int lines = 0, max_w = 0, lh = 0;
+  char *string2 = strdup (string);
+  char *token = string2;
+  char *line;
+  GLfloat color[4];
+
+  if (size <= 0)   /* if size not specified, draw in yellow with alpha */
+    {
+      color[0] = 1;
+      color[1] = 1;
+      color[2] = 0;
+      color[3] = (ttl / (M_PI * 2)) * 1.2;
+      if (color[3] > 1) color[3] = 1;
+
+      glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color);
+      if (wire)
+        glColor3f (color[0]*color[3], color[1]*color[3], color[2]*color[3]);
+    }
+
+  while ((line = strtok (token, "\r\n")))
+    {
+      int w = texture_string_width (sp->texfont, line, &lh);
+      if (w > max_w) max_w = w;
+      lines++;
+      token = 0;
+    }
+
+  glPushMatrix();
+  glTranslatef (r * cos (th), r * sin(th), 0);
+  glScalef (font_scale, font_scale, font_scale);
+
+  if (size <= 0)               /* Draw the dot */
+    {
+      GLfloat s = font_size * 1.7;
+      glDisable (GL_TEXTURE_2D);
+      glFrontFace (GL_CW);
+      glBegin (wire ? GL_LINE_LOOP : GL_QUADS);
+      glVertex3f (0, s, 0);
+      glVertex3f (s, s, 0);
+      glVertex3f (s, 0, 0);
+      glVertex3f (0, 0, 0);
+      glEnd();
+      glTranslatef (-max_w/2, -lh, 0);
+    }
+  else
+    glTranslatef (-max_w/2, -lh/2, 0);
+
+  /* draw each line, centered */
+  if (! wire) glEnable (GL_TEXTURE_2D);
+  free (string2);
+  string2 = strdup (string);
+  token = string2;
+  while ((line = strtok (token, "\r\n")))
+    {
+      int w = texture_string_width (sp->texfont, line, 0);
+      glPushMatrix();
+      glTranslatef ((max_w-w)/2, 0, 0);
+
+      if (wire)
+        {
+          glBegin (GL_LINE_LOOP);
+          glVertex3f (0, 0, 0);
+          glVertex3f (w, 0, 0);
+          glVertex3f (w, lh, 0);
+          glVertex3f (0, lh, 0);
+          glEnd();
+        }
+      else
+        {
+          glFrontFace (GL_CW);
+          print_texture_string (sp->texfont, line);
+        }
+      glPopMatrix();
+      glTranslatef (0, -lh, 0);
+      polys++;
+      token = 0;
+    }
+  glPopMatrix();
+
+  free (string2);
+
+  if (! wire) glEnable (GL_DEPTH_TEST);
+
+  return polys;
+}
+
+
+/* There's a disc with a hole in it around the screen, to act as a mask
+   preventing slightly off-screen bogies from showing up.  This clips 'em.
+ */
+static int
+draw_table (ModeInfo *mi)
+{
+  /*sonar_configuration *sp = &sps[MI_SCREEN(mi)];*/
+  int wire = MI_IS_WIREFRAME(mi);
+  int polys = 0;
+  int i;
+  int th_steps = 36 * 4;    /* same as in draw_screen */
+
+  static const GLfloat color[4]  = {0.0, 0.0, 0.0, 1.0};
+  static const GLfloat text[4]   = {0.15, 0.15, 0.15, 1.0};
+  static const GLfloat spec[4]   = {0.0, 0.0, 0.0, 1.0};
+  static const GLfloat shiny     = 0.0;
+
+  if (wire) return 0;
+
+  glPushAttrib (GL_ENABLE_BIT);
+  glDisable (GL_TEXTURE_2D);
+
+  glMaterialfv (GL_FRONT, GL_SPECULAR,  spec);
+  glMateriali  (GL_FRONT, GL_SHININESS, shiny);
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color);
+
+  glFrontFace (GL_CCW);
+  glBegin(wire ? GL_LINES : GL_QUAD_STRIP);
+  glNormal3f (0, 0, 1);
+  for (i = 0; i <= th_steps; i++)
+    {
+      double a = M_PI * 2 * i / th_steps;
+      double x = cos(a);
+      double y = sin(a);
+      glVertex3f (x, y, 0);
+      glVertex3f (x*10, y*10, 0);
+      polys++;
+    }
+  glEnd();
+  glPopAttrib();
+
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, text);
+  glTranslatef (0, 0, 0.01);
+  for (i = 0; i < 360; i += 10)
+    {
+      char buf[10];
+      GLfloat a = M_PI/2 - (i / 180.0 * M_PI);
+      sprintf (buf, "%d", i);
+      polys += draw_text (mi, buf, 1.07, a, 0, 10.0);
+    }
+
+  return polys;
+}
+
+
+static int
+draw_bogies (ModeInfo *mi)
+{
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+  int polys = 0;
+  sonar_bogie *b;
+
+  for (b = sp->displayed; b; b = b->next)
+    {
+      char *s = (char *) 
+        malloc (strlen (b->name) + (b->desc ? strlen(b->desc) : 0) + 3);
+      strcpy (s, b->name);
+      if (b->desc)
+        {
+          strcat (s, "\n");
+          strcat (s, b->desc);
+        }
+      polys += draw_text (mi, s, b->r, b->th, b->ttl, -1);
+      free (s);
+
+      /* Move *very slightly* forward so that the text is not all in the
+         same plane: this prevents flickering with overlapping text as
+         the textures fight for priority. */
+      glTranslatef(0, 0, 0.00002);
+    }
+
+  return polys;
+}
+
+
+/* called from sonar-sim.c and sonar-icmp.c */
+sonar_bogie *
+copy_bogie (sonar_sensor_data *ssd, const sonar_bogie *b)
+{
+  sonar_bogie *b2 = (sonar_bogie *) calloc (1, sizeof(*b2));
+  b2->name = strdup (b->name);
+  b2->desc = b->desc ? strdup (b->desc) : 0;
+  b2->r    = b->r;
+  b2->th   = b->th;
+  b2->ttl  = b->ttl;
+  /* does not copy b->closure */
+
+  /* Take this opportunity to normalize 'th' to the range [0-2pi). */
+  while (b2->th < 0)       b2->th += M_PI*2;
+  while (b2->th >= M_PI*2) b2->th -= M_PI*2;
+
+  return b2;
+}
+
+
+/* called from sonar-icmp.c */
+void
+free_bogie (sonar_sensor_data *ssd, sonar_bogie *b)
+{
+  if (b->closure)
+    ssd->free_bogie_cb (ssd, b->closure);
+  free (b->name);
+  if (b->desc) free (b->desc);
+  free (b);
+}
+
+/* removes it from the list and frees it
+ */
+static void
+delete_bogie (sonar_sensor_data *ssd, sonar_bogie *b,
+              sonar_bogie **from_list)
+{
+  sonar_bogie *ob, *prev;
+  for (prev = 0, ob = *from_list; ob; prev = ob, ob = ob->next)
+    if (ob == b)
+      {
+        if (prev)
+          prev->next = b->next;
+        else
+          (*from_list) = b->next;
+        free_bogie (ssd, b);
+        break;
+      }
+}
+
+
+/* copies the bogie and adds it to the list.
+   if there's another bogie there with the same name, frees that one.
+ */
+static void
+copy_and_insert_bogie (sonar_sensor_data *ssd, sonar_bogie *b,
+                       sonar_bogie **to_list)
+{
+  sonar_bogie *ob, *prev;
+  if (!b) abort();
+  for (prev = 0, ob = *to_list; ob; prev = ob, ob = ob->next)
+    {
+      if (ob == b) abort();   /* this will end badly */
+      if (!strcmp (ob->name, b->name))  /* match! */
+        {
+          delete_bogie (ssd, ob, to_list);
+          break;
+        }
+    }
+
+  b = copy_bogie (ssd, b);
+  b->next = *to_list;
+  *to_list = b;
+}
+
+
+static void
+update_sensor_data (sonar_configuration *sp)
+{
+  sonar_bogie *new_list = sp->ssd->scan_cb (sp->ssd);
+  sonar_bogie *b2;
+
+  /* If a bogie exists in 'new_list' but not 'pending', add it.
+     If a bogie exists in both, update it in 'pending'.
+   */
+  for (b2 = new_list; b2; b2 = b2->next)
+    {
+      if (debug_p > 2)
+        fprintf (stderr, "%s:   updated: %s (%5.2f %5.2f %5.2f)\n", 
+                 progname, b2->name, b2->r, b2->th, b2->ttl);
+      copy_and_insert_bogie (sp->ssd, b2, &sp->pending);
+    }
+  if (debug_p > 2) fprintf (stderr, "\n");
+}
+
+
+/* Returns whether the given angle lies between two other angles.
+   When those angles cross 0, it assumes the wedge is the smaller one.
+   That is: 5 lies between 10 and 350 degrees (a 20 degree wedge).
+ */
+static Bool
+point_in_wedge (GLfloat th, GLfloat low, GLfloat high)
+{
+  if (low < high)
+    return (th > low && th <= high);
+  else
+    return (th <= high || th > low);
+}
+
+
+/* Returns the current time in seconds as a double.
+ */
+static double
+double_time (void)
+{
+  struct timeval now;
+# ifdef GETTIMEOFDAY_TWO_ARGS
+  struct timezone tzp;
+  gettimeofday(&now, &tzp);
+# else
+  gettimeofday(&now);
+# endif
+
+  return (now.tv_sec + ((double) now.tv_usec * 0.000001));
+}
+
+
+static void
+sweep (sonar_configuration *sp)
+{
+  sonar_bogie *b;
+
+  /* Move the sweep forward (clockwise).
+   */
+  GLfloat prev_sweep, this_sweep, tick;
+  GLfloat cycle_secs = 30 / speed;  /* default to one cycle every N seconds */
+  this_sweep = ((cycle_secs - fmod (double_time() - sp->start_time +
+                                    sp->sweep_offset,
+                                    cycle_secs))
+                / cycle_secs
+                * M_PI * 2);
+  prev_sweep = sp->sweep_th;
+  tick = prev_sweep - this_sweep;
+  while (tick < 0) tick += M_PI*2;
+
+  sp->sweep_th = this_sweep;
+
+  if (this_sweep < 0 || this_sweep >= M_PI*2) abort();
+  if (prev_sweep < 0)  /* skip first time */
+    return;
+
+  if (tick < 0 || tick >= M_PI*2) abort();
+
+
+  /* Go through the 'pending' sensor data, find those bogies who are
+     just now being swept, and move them from 'pending' to 'displayed'.
+     (Leave bogies that have not yet been swept alone: we'll get to
+     them when the sweep moves forward.)
+   */
+  b = sp->pending;
+  while (b)
+    {
+      sonar_bogie *next = b->next;
+      if (point_in_wedge (b->th, this_sweep, prev_sweep))
+        {
+          if (debug_p > 1) {
+            time_t t = time((time_t *) 0);
+            fprintf (stderr,
+                     "%s: sweep hit: %02d:%02d: %s: (%5.2f %5.2f %5.2f;"
+                     " th=[%.2f < %.2f <= %.2f])\n", 
+                     progname,
+                     (int) (t / 60) % 60, (int) t % 60,
+                     b->name, b->r, b->th, b->ttl,
+                     this_sweep, b->th, prev_sweep);
+          }
+          b->ttl = M_PI * 2.1;
+          copy_and_insert_bogie (sp->ssd, b, &sp->displayed);
+          delete_bogie (sp->ssd, b, &sp->pending);
+        }
+      b = next;
+    }
+
+
+  /* Update TTL on all currently-displayed bogies; delete the dead.
+
+     Request sensor updates on the ones just now being swept.
+
+     Any updates go into 'pending' and might not show up until
+     the next time the sweep comes around.  This is to prevent
+     already-drawn bogies from jumping to a new position without
+     having faded out first.
+  */
+  b = sp->displayed;
+  while (b)
+    {
+      sonar_bogie *next = b->next;
+      b->ttl -= tick;
+
+      if (b->ttl <= 0)
+        {
+          if (debug_p > 1)
+            fprintf (stderr, "%s: TTL expired: %s (%5.2f %5.2f %5.2f)\n",
+                     progname, b->name, b->r, b->th, b->ttl);
+          delete_bogie (sp->ssd, b, &sp->displayed);
+        }
+      b = next;
+    }
+
+  update_sensor_data (sp);
+}
+
+
+static void
+draw_startup_blurb (ModeInfo *mi)
+{
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+  const char *msg = (sp->error ? sp->error : "Resolving hosts...");
+  static const GLfloat color[4] = {0, 1, 0, 1};
+
+  if (!sp->error && ping_arg && !strcmp (ping_arg, "simulation"))
+    return;  /* don't bother */
+
+  glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color);
+  glTranslatef (0, 0, 0.3);
+  draw_text (mi, msg, 0, 0, 0, 30.0);
+
+  /* only leave error message up for N seconds */
+  if (sp->error &&
+      sp->start_time + 4 < double_time())
+    {
+      free (sp->error);
+      sp->error = 0;
+    }
+}
+
+
+/* Window management, etc
+ */
+ENTRYPOINT void
+reshape_sonar (ModeInfo *mi, int width, int height)
+{
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+  GLfloat h = (GLfloat) height / (GLfloat) width;
+
+  glViewport (0, 0, (GLint) width, (GLint) height);
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  gluPerspective (30.0, 1/h, 1.0, 100.0);
+
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  gluLookAt( 0.0, 0.0, 30.0,
+             0.0, 0.0, 0.0,
+             0.0, 1.0, 0.0);
+
+  glClear(GL_COLOR_BUFFER_BIT);
+
+  sp->line_thickness = (MI_IS_WIREFRAME (mi) ? 1 : MAX (1, height / 300.0));
+}
+
+
+ENTRYPOINT Bool
+sonar_handle_event (ModeInfo *mi, XEvent *event)
+{
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+
+  if (event->xany.type == ButtonPress &&
+      event->xbutton.button == Button1)
+    {
+      sp->button_down_p = True;
+      gltrackball_start (sp->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)
+    {
+      sp->button_down_p = False;
+      return True;
+    }
+  else if (event->xany.type == ButtonPress &&
+           (event->xbutton.button == Button4 ||
+            event->xbutton.button == Button5 ||
+            event->xbutton.button == Button6 ||
+            event->xbutton.button == Button7))
+    {
+      gltrackball_mousewheel (sp->trackball, event->xbutton.button, 10,
+                              !!event->xbutton.state);
+      return True;
+    }
+  else if (event->xany.type == MotionNotify &&
+           sp->button_down_p)
+    {
+      gltrackball_track (sp->trackball,
+                         event->xmotion.x, event->xmotion.y,
+                         MI_WIDTH (mi), MI_HEIGHT (mi));
+      return True;
+    }
+
+  return False;
+}
+
+
+ENTRYPOINT void 
+init_sonar (ModeInfo *mi)
+{
+  sonar_configuration *sp;
+  int wire = MI_IS_WIREFRAME(mi);
+
+  if (!sps) {
+    sps = (sonar_configuration *)
+      calloc (MI_NUM_SCREENS(mi), sizeof (sonar_configuration));
+    if (!sps) {
+      fprintf(stderr, "%s: out of memory\n", progname);
+      exit(1);
+    }
+  }
+  sp = &sps[MI_SCREEN(mi)];
+  sp->glx_context = init_GL(mi);
+
+  reshape_sonar (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+  if (!wire)
+    {
+      GLfloat pos[4] = {0.05, 0.07, 1.00, 0.0};
+      GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0};
+      GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0};
+      GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0};
+
+      glEnable(GL_TEXTURE_2D);
+      glEnable(GL_LIGHTING);
+      glEnable(GL_LIGHT0);
+      glEnable(GL_CULL_FACE);
+      glEnable(GL_DEPTH_TEST);
+      glEnable(GL_NORMALIZE);
+      glEnable(GL_LINE_SMOOTH);
+      glEnable(GL_BLEND);
+      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+      glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
+      glShadeModel(GL_SMOOTH);
+
+      glLightfv(GL_LIGHT0, GL_POSITION, pos);
+      glLightfv(GL_LIGHT0, GL_AMBIENT,  amb);
+      glLightfv(GL_LIGHT0, GL_DIFFUSE,  dif);
+      glLightfv(GL_LIGHT0, GL_SPECULAR, spc);
+    }
+
+  sp->trackball = gltrackball_init ();
+  sp->rot = make_rotator (0, 0, 0, 0, speed * 0.003, True);
+
+  sp->texfont = load_texture_font (MI_DISPLAY(mi), "font");
+  check_gl_error ("loading font");
+
+  sp->table_list = glGenLists (1);
+  glNewList (sp->table_list, GL_COMPILE);
+  sp->table_polys = draw_table (mi);
+  glEndList ();
+
+  sp->screen_list = glGenLists (1);
+  glNewList (sp->screen_list, GL_COMPILE);
+  sp->screen_polys = draw_screen (mi, False, False);
+  glEndList ();
+
+  sp->grid_list = glGenLists (1);
+  glNewList (sp->grid_list, GL_COMPILE);
+  sp->grid_polys = draw_screen (mi, True,  False);
+  glEndList ();
+
+  sp->sweep_list = glGenLists (1);
+  glNewList (sp->sweep_list, GL_COMPILE);
+  sp->sweep_polys = draw_screen (mi, False, True);
+  glEndList ();
+
+  sp->start_time = double_time ();
+  sp->sweep_offset = random() % 60;
+  sp->sweep_th = -1;
+}
+
+
+static void
+init_sensor (ModeInfo *mi)
+{
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+
+  if (sp->ssd) abort();
+
+  if (!ping_arg || !*ping_arg ||
+      !strcmp(ping_arg, "default") ||
+      !!strcmp (ping_arg, "simulation"))
+    sp->ssd = init_ping (MI_DISPLAY (mi), &sp->error, ping_arg,
+                         ping_timeout, resolve_p, times_p, debug_p);
+
+  /* Disavow privs.  This was already done in init_ping(), but
+     we might not have called that at all, so do it again. */
+  setuid(getuid());
+
+  if (!sp->ssd)
+    sp->ssd = init_simulation (MI_DISPLAY (mi), &sp->error,
+                               team_a_name, team_b_name,
+                               team_a_count, team_b_count,
+                               debug_p);
+  if (!sp->ssd)
+    abort();
+}
+
+
+ENTRYPOINT void
+draw_sonar (ModeInfo *mi)
+{
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+  Display *dpy = MI_DISPLAY(mi);
+  Window window = MI_WINDOW(mi);
+
+  if (!sp->glx_context)
+    return;
+
+  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context));
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+  glPushMatrix ();
+  { GLfloat s = 7; glScalef (s,s,s); }
+
+  gltrackball_rotate (sp->trackball);
+
+  if (wobble_p)
+    {
+      double x, y, z;
+      double max = 40;
+      get_position (sp->rot, &x, &y, &z, !sp->button_down_p);
+      glRotatef (max/2 - x*max, 1, 0, 0);
+      glRotatef (max/2 - z*max, 0, 1, 0);
+    }
+
+  mi->polygon_count = 0;
+
+  glPushMatrix();                                      /* table */
+  glCallList (sp->table_list);
+  mi->polygon_count += sp->table_polys;
+  glPopMatrix();
+
+  glPushMatrix();                                      /* text */
+  glTranslatef (0, 0, -0.01);
+  mi->polygon_count += draw_bogies (mi);
+  glPopMatrix();
+
+  glCallList (sp->screen_list);                                /* glass */
+  mi->polygon_count += sp->screen_polys;
+
+  glTranslatef (0, 0, 0.004);                          /* sweep */
+  glPushMatrix();
+  glRotatef ((sp->sweep_th * 180 / M_PI), 0, 0, 1);
+  if (sp->sweep_th >= 0)
+    glCallList (sp->sweep_list);
+  mi->polygon_count += sp->sweep_polys;
+  glPopMatrix();
+
+  glTranslatef (0, 0, 0.004);                          /* grid */
+  glCallList (sp->grid_list);
+  mi->polygon_count += sp->screen_polys;
+
+  if (! sp->ssd || sp->error)
+    draw_startup_blurb(mi);
+
+  glPopMatrix ();
+
+  if (mi->fps_p) do_fps (mi);
+  glFinish();
+
+  glXSwapBuffers(dpy, window);
+
+  if (! sp->ssd)
+    /* Just starting up.  "Resolving hosts" text printed.  Go stall. */
+    init_sensor (mi);
+  else
+    sweep (sp);
+}
+
+ENTRYPOINT void
+release_sonar (ModeInfo *mi)
+{
+#if 0
+  sonar_configuration *sp = &sps[MI_SCREEN(mi)];
+  sonar_bogie *b = sp->displayed;
+  while (b)
+    {
+      sonar_bogie *next = b->next;
+      free_bogie (sp->ssd, b);
+      b = next;
+    }
+  sp->displayed = 0;
+
+  b = sp->pending;
+  while (b)
+    {
+      sonar_bogie *next = b->next;
+      free_bogie (sp->ssd, b);
+      b = next;
+    }
+  sp->pending = 0;
+
+  sp->ssd->free_data_cb (sp->ssd, sp->ssd->closure);
+  free (sp->ssd);
+  sp->ssd = 0;
+#endif
+}
+
+XSCREENSAVER_MODULE ("Sonar", sonar)
+
+#endif /* USE_GL */
diff --git a/hacks/glx/sonar.h b/hacks/glx/sonar.h
new file mode 100644 (file)
index 0000000..595dcac
--- /dev/null
@@ -0,0 +1,68 @@
+/* sonar, Copyright (c) 1998-2008 Jamie Zawinski and Stephen Martin
+ *
+ * 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.
+ */
+
+#ifndef __SONAR_XSCREENSAVER_H__
+#define __SONAR_XSCREENSAVER_H__
+
+typedef struct sonar_sensor_data sonar_sensor_data;
+typedef struct sonar_bogie sonar_bogie;
+
+struct sonar_bogie {
+  void *closure;
+  char *name;          /* bogie name, e.g., host name */
+  char *desc;          /* second line of text, e.g., ping time */
+  double r;            /* distance, 0 - 1.0 */
+  double th;           /* heading, 0 - 2 pi */
+  double ttl;          /* time to live, 0 - 2 pi */
+  sonar_bogie *next;   /* next one in the list */
+};
+
+struct sonar_sensor_data {
+  void *closure;
+
+  /* Called frequently (every time the sweep moves).
+     Returns a list of new bogies to be added to the display list 
+     once the sweep comes around to their position.
+   */
+  sonar_bogie *(*scan_cb) (sonar_sensor_data *);
+
+  /* Called when a bogie is freed, to free bogie->closure */
+  void (*free_bogie_cb) (sonar_sensor_data *, void *closure);
+
+  /* Called at exit, to free ssd->closure */
+  void (*free_data_cb) (sonar_sensor_data *, void *closure);
+};
+
+/* frees bogie and its contents, including calling the free_bogie_cb. */
+extern void free_bogie (sonar_sensor_data *ssd, sonar_bogie *b);
+
+/* makes a copy of the bogie, not including the 'closure' data. */
+extern sonar_bogie *copy_bogie (sonar_sensor_data *ssd, const sonar_bogie *b);
+
+
+/* Set up and return sensor state for ICMP pings. */
+extern sonar_sensor_data *init_ping (Display *dpy, 
+                                     char **error_ret,
+                                     const char *subnets,
+                                     int ping_timeout,
+                                     Bool resolve_p, Bool times_p,
+                                     Bool debug_p);
+
+/* Set up and return sensor state for the simulation. */
+extern sonar_sensor_data *init_simulation (Display *dpy,
+                                           char **error_ret,
+                                           const char *team_a_name, 
+                                           const char *team_b_name,
+                                           int team_a_count, 
+                                           int team_b_count,
+                                           Bool debug_p);
+
+#endif /* __SONAR_XSCREENSAVER_H__ */
diff --git a/hacks/glx/sonar.man b/hacks/glx/sonar.man
new file mode 100644 (file)
index 0000000..bb3b07e
--- /dev/null
@@ -0,0 +1,163 @@
+.de EX         \"Begin example
+.ne 5
+.if n .sp 1
+.if t .sp .5
+.nf
+.in +.5i
+..
+.de EE
+.fi
+.in -.5i
+.if n .sp 1
+.if t .sp .5
+..
+.TH Sonar 1 "12-Aug-08" "X Version 11"
+.SH NAME
+sonar - display a sonar scope
+.SH SYNOPSIS
+.B sonar
+[\-ping \fIhosts-or-subnets\fP]
+[\-ping\-timeout \fIint\fP]
+[\-delay \fIusecs\fP]
+[\-speed \fIratio\fP]
+[\-sweep-size \fIratio\fP]
+[\-font-size \fIpoints\fP]
+[\-team-a-name \fIstring\fP] 
+[\-team-b-name \fIstring\fP]
+[\-team-a-count \fIint\fP]
+[\-team-b-count \fIint\fP]
+[\-no\-dns] 
+[\-no\-times] 
+[\-no\-wobble] 
+[\-debug] 
+[\-fps]
+.SH DESCRIPTION
+This draws a sonar screen that pings (get it?) the hosts on
+your local network, and plots their distance (response time) from you.
+The three rings represent ping times of approximately 2.5, 70 and 2,000
+milliseconds respectively.
+
+Alternately, it can run a simulation that doesn't involve hosts.
+.SH OPTIONS
+.I sonar
+understands the following options:
+.TP 8
+.B \-ping \fIhosts-or-subnets\fP
+The list of things to ping, separated by commas or spaces. 
+Elements of this list may be:
+.RS 8
+.TP 12
+.B simulation
+Run in simulation mode instead of pinging real hosts.
+.TP 12
+.I hostname
+Ping the given host.
+.TP 12
+.I A.B.C.D
+Ping the given IP address.
+.TP 12
+.B subnet
+Ping the local class C subnet (the nearest 255 addresses).
+.TP 12
+.B subnet/\fINN\fP
+Ping a different-sized local subnet: e.g., \fBsubnet/28\fP would ping
+a 4-bit subnet (the nearest 15 addresses).
+.TP 12
+.I A.B.C.D/NN
+Ping an arbitrary other subnet.  The IP address specifies the base address,
+and the part after the slash is how wide the subnet is.  Typical values
+are /24 (for 255 addresses) and /28 (for 15 addresses).
+.TP 12
+.I filename
+Ping the hosts listed in the given file.  This file can be in the
+format used by \fI/etc/hosts\fP, or it can be any file that has host
+names as the first or second element on each line.  If you use ssh,
+try this:
+
+  sonar -ping $HOME/.ssh/known_hosts
+.RE
+.TP 8
+.B \-ping\-timeout \fIint\fP
+The amount of time in milliseconds the program will wait for an answer
+to a ping.
+.TP 8
+.B \-delay \fIint\fP
+Delay between frames, in microseconds.  Default 20000.
+.TP 8
+.B \-speed \fIratio\fP
+Less than 1 for slower, greater than 1 for faster.  Default 1.
+.TP 8
+.B \-sweep-size \fIratio\fP
+How big the glowing sweep area should be. Default 0.3.
+.TP 8
+.B \-font-size \fIpoints\fP
+How large the text should be.  Default 10 points.
+.TP 8
+.B \-no\-wobble
+Keep the display stationary instead of very slowly wobbling back and forth.
+.TP 8
+.B \-no\-dns
+Do not attempt to resolve IP addresses to hostnames.
+.TP 8
+.B \-no\-times
+Do not display ping times beneath the host names.
+.TP 8
+.B \-team-a-name \fIstring\fP
+In simulation mode, the name of team A.
+.TP 8
+.B \-team-b-name \fIstring\fP
+In simulation mode, the name of team B.
+.TP 8
+.B \-team-a-count \fIint\fP
+In simulation mode, the number of bogies on team A.
+.TP 8
+.B \-team-b-count \fIint\fP
+In simulation mode, the number of bogies on team B.
+.TP 8
+.B \-fps
+Display the current frame rate, polygon count, and CPU load.
+.SH NOTES
+On most Unix systems, this program must be installed as setuid root
+in order to ping hosts.  This is because root privileges are needed
+to create an ICMP RAW socket.  Privileges are disavowed shortly after
+startup (just after connecting to the X server) so this is believed
+to be safe:
+.EX
+chown root:root sonar
+chmod u+s sonar
+.EE
+It is not necessary to make it setuid on MacOS systems, because on
+MacOS, unprivileged programs can ping by using ICMP DGRAM sockets
+instead of ICMP RAW.
+
+In ping-mode, the display is a logarithmic scale, calibrated so that the
+three rings represent ping times of approximately 2.5, 70 and 2,000
+milliseconds respectively.  
+
+This means that if any the hosts you are pinging take longer than 2
+seconds to respond, they won't show up; and if you are pinging several
+hosts with very fast response times, they will all appear close to the
+center of the screen (making their names hard to read.)
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1),
+.BR ping (8)
+.SH COPYRIGHT
+Copyright \(co 2000-2008 by Jamie Zawinski <jwz@jwz.org>
+.RE
+Copyright \(co 1998 by Stephen Martin. <smartin@canada.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.
+
+.SH AUTHORS
+Stephen Martin <smartin@canada.com>, 3-nov-1998.
+
+Subnet support, etc. added by Jamie Zawinski, 17-Jul-2000.
+
+Rewritten using OpenGL instead of X11 by Jamie Zawinski, 12-Aug-2008.
index 9823e03ab9a76d8fbc074fbd399076c4c749f016..b0d4daacdab2c739b2439ade801d8a44d4e8db38 100644 (file)
 # include <unistd.h>
 #endif
 
-#ifdef HAVE_UNAME
-# include <sys/utsname.h>
-#endif /* HAVE_UNAME */
-
 #ifndef HAVE_COCOA
 # include <X11/Intrinsic.h>
 #endif
index f7afb44b5863a346984f611accc619e466c7bcf6..18f38131f4f9b3c1f5eb7d9d4c634890be5e2da4 100644 (file)
@@ -10,6 +10,8 @@
  * implied warranty.
  */
 
+#define GL_GLEXT_PROTOTYPES 1
+
 #include <math.h> /* for log2 */
 
 #define DEFAULTS       "*delay:        30000       \n" \
 
 static float start, end, dilate;
 static Bool do_texture, drawlogo, wire, reverse, do_fog;
-#ifdef GET_SUED_BY_THE_BBC
-static Bool locklogo;
-#endif
+static const char *do_tx1, *do_tx2, *do_tx3, *do_tun1, *do_tun2, *do_tun3;
 
 static XrmOptionDescRec opts[] = {
   {"-texture"  , ".texture",   XrmoptionNoArg, "true" },
+  {"+texture"  , ".texture",   XrmoptionNoArg, "false" },
   {"-start"    , ".start",     XrmoptionSepArg, 0 },
   {"-end"      , ".end",       XrmoptionSepArg, 0 },
   {"-dilate"   , ".dilate",   XrmoptionSepArg, 0 },
-#ifdef GET_SUED_BY_THE_BBC
-  {"-locklogo" , ".locklogo",  XrmoptionNoArg, "true" },
-#endif
-  {"-logo"     , ".drawlogo",   XrmoptionNoArg, "true" },
   {"+logo"     , ".drawlogo",   XrmoptionNoArg, "false" },
   {"-reverse"  , ".reverse",   XrmoptionNoArg, "true" },
-  {"-fog"      , ".fog",       XrmoptionNoArg, "false" },
+  {"+fog"      , ".fog",       XrmoptionNoArg, "false" },
+  {"-marquee"   , ".marquee", XrmoptionSepArg, 0},
+  /* {"+marquee"   , ".marquee", XrmoptionNoArg, "(none)"}, */
+  {"-tardis"   , ".tardis", XrmoptionSepArg, 0},
+  /* {"+tardis"   , ".tardis", XrmoptionNoArg, "(none)"}, */
+  {"-head"   , ".head", XrmoptionSepArg, 0},
+  /* {"+head"   , ".head", XrmoptionNoArg, "(none)"}, */
+  {"-tun1"   , ".tun1", XrmoptionSepArg, 0},
+  /* {"+tun1"   , ".tun1", XrmoptionNoArg, "(none)"}, */
+  {"-tun2"   , ".tun2", XrmoptionSepArg, 0},
+  /* {"+tun2"   , ".tun2", XrmoptionNoArg, "(none)"}, */
+  {"-tun3"   , ".tun3", XrmoptionSepArg, 0},
+  /* {"+tun3"   , ".tun3", XrmoptionNoArg, "(none)"}, */
 };
 
 static argtype vars[] = {
@@ -69,12 +78,15 @@ static argtype vars[] = {
   {&start, "start", "Start", DEF_START, t_Float},
   {&end,     "end",   "End", DEF_END  , t_Float},
   {&dilate,     "dilate",   "Dilate", DEF_DILATE  , t_Float},
-#ifdef GET_SUED_BY_THE_BBC
-  {&locklogo,     "locklogo",   "LockLogo", DEF_LOCKLOGO  , t_Bool},
-#endif
   {&drawlogo,     "drawlogo",   "DrawLogo", DEF_DRAWLOGO  , t_Bool},
   {&reverse,     "reverse",   "Reverse", DEF_REVERSE  , t_Bool},
-  {&do_fog,     "fog",   "Fog", DEF_FOG  , t_Bool},
+  {&do_fog,     "fog",  "Fog", DEF_FOG  , t_Bool},
+  {&do_tx1,    "marquee", "Marquee", "(none)", t_String},
+  {&do_tx2,    "tardis", "Tardis", "(none)", t_String},
+  {&do_tx3,    "head", "Head", "(none)", t_String},
+  {&do_tun1,   "tun1", "Tunnel 1", "(none)", t_String},
+  {&do_tun2,   "tun2", "Tunnel 2", "(none)", t_String},
+  {&do_tun3,   "tun3", "Tunnel 3", "(none)", t_String},
 };
 
 ENTRYPOINT ModeSpecOpt tunnel_opts = {countof(opts), opts, countof(vars), vars, NULL};
@@ -84,12 +96,6 @@ ENTRYPOINT ModeSpecOpt tunnel_opts = {countof(opts), opts, countof(vars), vars,
 #include "images/timetunnel0.xpm"
 #include "images/timetunnel1.xpm"
 #include "images/timetunnel2.xpm"
-#ifdef GET_SUED_BY_THE_BBC
-# include "images/tardis.xpm"
-# include "images/whologo.xpm"
-# include "images/whohead1.xpm"
-/* #include "images/whohead_psy.xpm" */
-# endif /* GET_SUED_BY_THE_BBC */
 
 
 #ifdef USE_GL /* whole file */
@@ -167,7 +173,7 @@ static void init_effects(effect_t *e, int effectnum)
                {8.08, 0.75 , 0.0}, 
                {8.08, 0.0 , 0.0},
                {10.0, 0.0, 0.0}};
-       /* effect 3: cylender. alpha  */
+       /* effect 3: cylinder. alpha  */
        float e3d[5][2] = 
                {{0.0, 0.0}, 
                 {6.41, 0.00},
@@ -262,7 +268,7 @@ static void init_effects(effect_t *e, int effectnum)
        if (effectnum == 2)
                init_effect(e, 8, 3, 1.0,  (float *) e2d);
 
-       /* effect 3: cylender tunnel  */
+       /* effect 3: cylinder tunnel  */
        if (effectnum == 3)
                init_effect(e, 5, 2, 0.889  ,  (float *) e3d);
 
@@ -388,9 +394,7 @@ tunnel_handle_event (ModeInfo *mi, XEvent *event)
     }
   else if (event->xany.type == ButtonPress &&
            (event->xbutton.button == Button4 ||
-            event->xbutton.button == Button5 ||
-            event->xbutton.button == Button6 ||
-            event->xbutton.button == Button7))
+            event->xbutton.button == Button5))
     {
       gltrackball_mousewheel (tc->trackball, event->xbutton.button, 10,
                               !!event->xbutton.state);
@@ -526,7 +530,7 @@ static void draw_sign(ModeInfo *mi, tunnel_configuration *tc, float z,  float al
 } /* draw sign */
 
 
-/* draw a time tunnel.  used for both cylender and diamond tunnels.
+/* draw a time tunnel.  used for both cylinder and diamond tunnels.
    uses texture shifter (indexed by shiftnum) to simulate motion.
    tunnel does not move, and is acutally a display list.  if alpha = 0, skip */
 static void draw_cyl(ModeInfo *mi, tunnel_configuration *tc, float alpha, int texnum, int listnum, int shiftnum)
@@ -843,11 +847,14 @@ static int wrapVal(int val, int min, int max)
     anegative : create b/w image from zero alpha. zero alpha gets bw_color,
                nonzero alpha gets 1.0 - bwcolor, then alpha flipped to 1-alpha.
 
+  Inputs: xpm structure, or filename of xmp image.  if filename == NULL, use structure.
+  Outputs: texture bound to texutre Id texbind.
+
 */
 
 static float mylog2(float x) { return ( log(x) / log(2));}
 
-static void LoadTexture(ModeInfo * mi, char **fn, GLuint texbind, int blur, float bw_color, Bool anegative, Bool onealpha)
+static void LoadTexture(ModeInfo * mi, char **fn, const char *filename, GLuint texbind, int blur, float bw_color, Bool anegative, Bool onealpha)
 {
        /* looping and temporary array index variables */
        int ix, iy, bx, by, indx, indy, boxsize, cchan, tmpidx, dtaidx;
@@ -864,8 +871,14 @@ static void LoadTexture(ModeInfo * mi, char **fn, GLuint texbind, int blur, floa
        boxsize = 2;
        boxdiv = 1.0 / ( boxsize * 2.0 + 1.0) / ( boxsize * 2.0 + 1.0);
 
-        if ((teximage = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi),
-                         MI_COLORMAP(mi), fn)) == None) {
+
+       if (filename) 
+               teximage = xpm_file_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi),
+                         MI_COLORMAP(mi), filename);
+        else 
+               teximage = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi),
+                         MI_COLORMAP(mi), fn);
+       if (teximage == NULL) {
             fprintf(stderr, "%s: error reading the texture.\n", progname);
             glDeleteTextures(1, &texbind);
             do_texture = False;
@@ -987,7 +1000,7 @@ static void LoadTexture(ModeInfo * mi, char **fn, GLuint texbind, int blur, floa
         XDestroyImage(teximage);
 }
 
-/* creates cylender for time tunnel. sides, zmin, zmax, rad(ius) obvious.
+/* creates cylinder for time tunnel. sides, zmin, zmax, rad(ius) obvious.
    stretch scales texture coords; makes tunnel go slower the larger it is.
    not drawn, but put into display list. */
 static void makecyl(int sides, float zmin, float zmax, float rad, float stretch) 
@@ -1080,32 +1093,41 @@ init_tunnel (ModeInfo *mi)
 
   if (do_texture)
   {
+         /* the following textures are loaded, and possible overridden:
+               tunnel 1, tunnel 2, tunnel 3, marquee, tardis, head */
           glGenTextures(MAX_TEXTURE, tc->texture_binds);
          
-         /*LoadTexture(*mi, **fn, texbind, bluralpha, bw_color,  anegative, onealpha)*/
-          LoadTexture(mi, timetunnel0_xpm, tc->texture_binds[0], 0, 0.0, False, False);
-          LoadTexture(mi, timetunnel1_xpm, tc->texture_binds[2], 0, 0.0, False, False);
-          LoadTexture(mi, timetunnel2_xpm, tc->texture_binds[5], 0, 0.0, False, False);
-          LoadTexture(mi, tunnelstar_xpm, tc->texture_binds[4], 0, 0.0, False, False);
-# ifdef GET_SUED_BY_THE_BBC
-         if (locklogo) {
-# endif /* GET_SUED_BY_THE_BBC */
-               LoadTexture(mi, (char **) logo_180_xpm, tc->texture_binds[3],  0,0.0, False, False);
-               tc->texture_binds[1] = tc->texture_binds[3];
-               tc->texture_binds[6] = tc->texture_binds[3];
-               tc->texture_binds[8] = tc->texture_binds[3];
+         /*LoadTexture(*mi, **fn, *filename, texbind, bluralpha, bw_color,  anegative, onealpha)*/
+         if (strcasecmp (do_tun1, "(none)")) /* tunnel 1 */
+               LoadTexture(mi, NULL, do_tun1, tc->texture_binds[0],  0,0.0, False, False);
+         else
+               LoadTexture(mi, timetunnel0_xpm, NULL, tc->texture_binds[0], 0, 0.0, False, False);
+         if (strcasecmp (do_tun2, "(none)")) /* tunnel 2 */
+               LoadTexture(mi, NULL, do_tun2, tc->texture_binds[2],  0,0.0, False, False);
+         else
+               LoadTexture(mi, timetunnel1_xpm, NULL, tc->texture_binds[2], 0, 0.0, False, False);
+         if (strcasecmp (do_tun3, "(none)")) /* tunnel 3 */
+               LoadTexture(mi, NULL, do_tun3, tc->texture_binds[5],  0,0.0, False, False);
+         else
+               LoadTexture(mi, timetunnel2_xpm, NULL, tc->texture_binds[5], 0, 0.0, False, False);
+          LoadTexture(mi, tunnelstar_xpm, NULL, tc->texture_binds[4], 0, 0.0, False, False);
+         if (strcasecmp (do_tx1, "(none)")) /* marquee */
+               LoadTexture(mi, NULL, do_tx1, tc->texture_binds[3],  0,0.0, False, False);
+         else
+               LoadTexture(mi, (char **) logo_180_xpm, NULL, tc->texture_binds[3],  0,0.0, False, False);
+         if (strcasecmp (do_tx2, "(none)")) /* tardis */
+               LoadTexture(mi, NULL, do_tx2, tc->texture_binds[1], 0, 0.0 ,False, False);
+         else
+               LoadTexture(mi, (char **) logo_180_xpm, NULL, tc->texture_binds[1],  0,0.0, False, False);
+         if (strcasecmp (do_tx3, "(none)")) { /* head */
+               LoadTexture(mi,  NULL, do_tx3, tc->texture_binds[6], 0, 0.0 ,False, False);
                /* negative */
-               LoadTexture(mi, (char **) logo_180_xpm, tc->texture_binds[9],  2,1.0, True, True);
-# ifdef GET_SUED_BY_THE_BBC
-        } else {
-               LoadTexture(mi, whologo_xpm, tc->texture_binds[3],  0,0.0, False, False);
-               LoadTexture(mi, tardis_xpm, tc->texture_binds[1], 0, 0.0 ,False, False);
-               LoadTexture(mi, whohead1_xpm, tc->texture_binds[6], 0, 1.0, False, False);
-               /* LoadTexture(mi, whohead_psy_xpm, tc->texture_binds[8], 1, 0.7, False, False); */
+               LoadTexture(mi,  NULL, do_tx3, tc->texture_binds[9],  2,1.0, True, True);
+         } else {
+               LoadTexture(mi, (char **) logo_180_xpm, NULL, tc->texture_binds[6],  0,0.0, False, False);
                /* negative */
-               LoadTexture(mi, whohead1_xpm, tc->texture_binds[9], 2, 1.0, True, True);
+               LoadTexture(mi, (char **) logo_180_xpm, NULL, tc->texture_binds[9],  2,1.0, True, True);
          }
-# endif /* GET_SUED_BY_THE_BBC */
           glEnable(GL_TEXTURE_2D);
          check_gl_error("tex");
   }
@@ -1191,7 +1213,7 @@ draw_tunnel (ModeInfo *mi)
   /* then tardis tunnel */
   make_wall_tunnel(mi, tc, tc->effects[1].state[0], tc->effects[7].state[0]);
 
-  /* then cylender tunnel */
+  /* then cylinder tunnel */
   glEnable(GL_BLEND);
   draw_cyl(mi, tc, tc->effects[3].state[0], 2, tc->cyllist, 1); 
 
@@ -1199,7 +1221,7 @@ draw_tunnel (ModeInfo *mi)
   /* tardis */
   if (drawlogo)
        draw_sign(mi, tc, tc->effects[2].state[0], tc->effects[2].state[1], 2.0, 1, 0);
-  /* logo */
+  /* marquee */
   if (drawlogo)
        draw_sign(mi, tc, tc->effects[5].state[0], tc->effects[5].state[1], 1.0, 3, 0);
   /*who head brite*/
index 1e6f75cf5bebb817a357a448d511a1f1fab76587..cdd6af5ba3ab8393ed31fd1b290a07a96ba20f76 100644 (file)
@@ -10,12 +10,18 @@ timetunnel - Plasma tunnels fade in and out
 [\-start \fInumber\fP]
 [\-end \fInumber\fP]
 [\-dilate \fInumber\fP]
-[\-tunonly]
+[\-no-logo]
 [\-reverse]
-[\-fog]
+[\-no-fog]
 [\-no-texture]
 [\-wireframe]
 [\-fps]
+[\-tardis \fItexture\fP]
+[\-head \fItexture\fP]
+[\-marquee \fItexture\fP]
+[\-tun1 \fItexture\fP]
+[\-tun2 \fItexture\fP]
+[\-tun3 \fItexture\fP]
 .SH DESCRIPTION
 Draws an animation similar to the opening and closing effects on the
 Dr. Who television show.
@@ -40,23 +46,41 @@ End time of loop, 0.0 - 30.00. Default 27.79.  May be identical to start time.
 .B \-dilate \fInumber\fP
 Scale time to speed or slow simulation.  Numbers less than one slow it down.
 .TP 8
-.B \-tunonly
+.B \-no-logo
 Show only tunnels, no logos, etc.
 .TP 8
 .B \-reverse
 Play in reverse, including tunnels.
 .TP 8
-.B \-fog
+.B \-no-fog
 Turn off fog.
 .TP 8
 .B \-no-texture
 Turn off textures.
 .TP 8
 .B \-wireframe
-Show as wire frame
+Show as wire frame.
 .TP 8
-.B \-fps
-Display the current frame rate, CPU load, and polygon count.
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.TP 8
+.B \-tardis \fItexture\fP
+Specify an xpm file to override default tardis texture.
+.TP 8
+.B \-head \fItexture\fP
+Specify an xpm file to override default Dr. Who head texture.
+.TP 8
+.B \-marquee \fItexture\fP
+Specify an xpm file to override default show marquee texture.
+.TP 8
+.B \-tun1 \fItexture\fP
+Specify an xpm file to override default tardis tunnel texture.
+.TP 8
+.B \-tun2 \fItexture\fP
+Specify an xpm file to override default middle tunnel texture.
+.TP 8
+.B \-tun3 \fItexture\fP
+Specify an xpm file to override default final tunnel texture.
 .SH ENVIRONMENT
 .PP
 .TP 8
index ac17b987c25177757b0cb4bd8641681b359cb83c..94578c238b4e148dd9c5ca66d9951aaa065acf76 100644 (file)
@@ -1,5 +1,5 @@
 /* xpm-ximage.c --- converts XPM data to an XImage for use with OpenGL.
- * xscreensaver, Copyright (c) 1998-2006 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1998-2008 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
@@ -224,7 +224,7 @@ xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap,
   if (filename)
     {
       xpm_data = 0;
-      if (! XpmReadFileToData ((char *) filename, &xpm_data))
+      if (XpmSuccess != XpmReadFileToData ((char *) filename, &xpm_data))
         {
           fprintf (stderr, "%s: unable to read XPM file %s\n",
                    progname, filename);
diff --git a/hacks/images/m6502/._amiga.asm b/hacks/images/m6502/._amiga.asm
new file mode 100644 (file)
index 0000000..ebe2f4a
Binary files /dev/null and b/hacks/images/m6502/._amiga.asm differ
diff --git a/hacks/images/m6502/._colors.asm b/hacks/images/m6502/._colors.asm
new file mode 100644 (file)
index 0000000..0548742
Binary files /dev/null and b/hacks/images/m6502/._colors.asm differ
diff --git a/hacks/images/m6502/._disco.asm b/hacks/images/m6502/._disco.asm
new file mode 100644 (file)
index 0000000..3a9265b
Binary files /dev/null and b/hacks/images/m6502/._disco.asm differ
diff --git a/hacks/images/m6502/._softsprite.asm b/hacks/images/m6502/._softsprite.asm
new file mode 100644 (file)
index 0000000..3ee3860
Binary files /dev/null and b/hacks/images/m6502/._softsprite.asm differ
diff --git a/hacks/images/m6502/._starfield2d.asm b/hacks/images/m6502/._starfield2d.asm
new file mode 100644 (file)
index 0000000..4bf10a3
Binary files /dev/null and b/hacks/images/m6502/._starfield2d.asm differ
diff --git a/hacks/images/m6502/amiga.asm b/hacks/images/m6502/amiga.asm
new file mode 100644 (file)
index 0000000..3195d4b
--- /dev/null
@@ -0,0 +1,120 @@
+; super mega amiga emulator :) :) :)
+; (c)by Thorex
+start:
+  lda #$b
+  jsr setcol
+  jsr delay
+  lda #$f
+  jsr setcol
+  jsr delay
+  lda #$1
+  jsr setcol
+  jsr delay
+
+  ldx #0
+cp:
+  lda pic,x
+  sta $200,x
+  lda pic2,x
+  sta $300,x
+  lda pic3,x
+  sta $400,x
+  lda pic4,x
+  sta $500,x
+  dex
+  bne cp
+  rts
+
+setcol:
+  ldx #0
+s:sta $200,x
+  sta $300,x
+  sta $400,x
+  sta $500,x
+  dex
+  bne s
+  rts
+
+delay:
+  ldy #29
+d1:
+  ldx #0
+d2:
+  dex
+  bne d2
+  dey
+  bne d1
+  rts
+
+pic:
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0
+        dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f
+        dcb $f,$f,$f,$f,0,0,0,$f,0,$e,$e,0,1,1,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f
+        dcb $f,$f,$f,$f,0,$e,0,$f,0,$e,$e,$e,0,1,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f
+        dcb $f,$f,$f,$f,0,$e,0,$f,0,$e,$e,$e,$e,0,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f
+        dcb $f,$f,$f,$f,0,0,0,$f,0,$e,$e,$e,$e,0,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,0,0,0
+        dcb 0,0,0,0,0,0,0,0,0,$e,$e,$e,$e,0,1,1
+pic2:
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e
+        dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e
+        dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e
+        dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e
+        dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1
+        dcb 1,1,1,1,1,1,1,0,$e,0,0,0,0,0,0,0
+        dcb 0,0,0,0,0,0,0,0,0,0,0,$e,$e,0,1,1
+        dcb 1,1,1,1,1,1,0,0,$e,0,0,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1
+        dcb 1,1,1,1,1,0,1,0,$e,0,0,0,0,1,1,$e
+        dcb $e,$e,1,$e,1,$e,1,$e,1,1,0,$e,$e,0,1,1
+        dcb 1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1
+
+pic3:
+        dcb 1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1
+        dcb $e,1,$e,1,$e,1,$e,1,1,1,0,$e,$e,0,1,1
+        dcb 1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0
+        dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1
+        dcb 1,0,1,0,1,1,1,1,1,1,0,0,1,1,0,$f
+        dcb 0,1,0,1,1,1,0,0,0,1,0,$e,$e,0,1,1
+        dcb 1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0
+        dcb 0,$f,1,0,1,$f,1,0,1,1,0,$e,$e,0,1,1
+        dcb 1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0
+        dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1
+        dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0
+        dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1
+        dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1
+        dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+
+pic4:
+        dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0
+        dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+        dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+       
\ No newline at end of file
diff --git a/hacks/images/m6502/colors.asm b/hacks/images/m6502/colors.asm
new file mode 100644 (file)
index 0000000..2097f7a
--- /dev/null
@@ -0,0 +1,46 @@
+; submitted by Anonymous
+
+ jmp $700
+ *=$700
+ ldx #0                
+ ldy #0
+ ;init screen
+ lda #0
+ sta $0
+ sta $3
+ lda #2
+ sta $1
+loop:
+ lda colors,x
+ bpl ok
+ inc $0
+ ldx #0
+ lda colors,x
+ok:
+ inx
+ sta ($0),y
+ iny
+ bne ok2
+ inc $1
+ lda $1
+ cmp #6
+ beq end
+ok2:
+ jmp loop
+end:
+ inc $3
+ lda $3
+ and #$3f
+ tax
+ ldy #0
+ lda #2
+ sta $1
+ sty $0
+ jmp loop
+
+colors:
+dcb 0,2,0,2,2,8,2,8,8,7,8,7,7,1,7,1,1,7,1,7,7,8,7,8
+dcb 8,2,8,2,2,0,2,0,2,2,8,2,8,8,7,8,7,7,1,7,1,1,1,1
+dcb 1,1,1,1,7,1,7,7,8,7,8,8,2,8,2,2,255
+
+
diff --git a/hacks/images/m6502/disco.asm b/hacks/images/m6502/disco.asm
new file mode 100644 (file)
index 0000000..bc69d70
--- /dev/null
@@ -0,0 +1,23 @@
+; DISCO DISCO
+; submitted by Anonymous
+start:
+ inx
+ txa
+ sta $200, y
+ sta $300, y
+ sta $400, y
+ sta $500, y
+ iny
+ tya
+ cmp 16
+ bne do
+ iny
+ jmp start
+do:
+ iny
+ iny
+ iny
+ iny
+jmp start
+
diff --git a/hacks/images/m6502/softsprite.asm b/hacks/images/m6502/softsprite.asm
new file mode 100644 (file)
index 0000000..eab6d67
--- /dev/null
@@ -0,0 +1,132 @@
+; software sprites
+; by PJP
+
+loop:
+ ldx $90
+ inx
+ stx $90
+
+ lda #4          ; *** NUMBER OF SPRITES
+ sta $3
+ lda #0
+ sta $4
+
+multiple:
+ lda $90
+ clc
+ adc $4
+ tax
+
+ lda sinus,x
+ ldy cosinus,x
+ asl
+ tax
+ lda ypos,x
+ sta $00
+ inx
+ lda ypos,x
+ sta $01
+ ldx #0
+ lda #5    ; **** HEIGHT OF EACH SPRITE
+ sta $2
+draw:
+ lda image,x
+ sta ($0),y
+ inx
+ iny
+ lda image,x
+ sta ($0),y
+ inx
+ iny
+ lda image,x
+ sta ($0),y
+ inx
+ iny
+ lda image,x
+ sta ($0),y
+ inx
+ iny
+ lda image,x
+ sta ($0),y
+
+
+ tya
+ clc
+ adc #28
+ tay
+ inx
+ dec $2
+ bne draw
+
+ lda $4 
+ clc
+ adc #18        ; *** DISTANCE BETWEEN SPRITES (FROM TABLE)
+ sta $4
+
+ dec $3
+ bne multiple
+
+ jmp loop
+
+; SINUS (AND COSINUS) 
+
+sinus:
+ dcb $0e, $0e, $0e, $0f, $0f, $0f, $10, $10, $10, $11
+ dcb $11, $11, $12, $12, $12, $13, $13, $13, $14, $14
+ dcb $14, $14, $15, $15, $15, $16, $16, $16, $16, $17
+ dcb $17, $17, $17, $18, $18, $18, $18, $19, $19, $19
+ dcb $19, $19, $1a, $1a, $1a, $1a, $1a, $1a, $1a, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+cosinus:
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1a, $1a, $1a, $1a, $1a, $1a, $19, $19, $19, $19
+ dcb $19, $18, $18, $18, $18, $18, $17, $17, $17, $17
+ dcb $16, $16, $16, $15, $15, $15, $15, $14, $14, $14
+ dcb $13, $13, $13, $12, $12, $12, $11, $11, $11, $10
+ dcb $10, $10, $0f, $0f, $0f, $0e, $0e, $0e, $0d, $0d
+ dcb $0d, $0c, $0c, $0c, $0b, $0b, $0b, $0a, $0a, $0a
+ dcb $09, $09, $09, $08, $08, $08, $07, $07, $07, $06
+ dcb $06, $06, $06, $05, $05, $05, $04, $04, $04, $04
+ dcb $03, $03, $03, $03, $03, $02, $02, $02, $02, $02
+ dcb $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $01, $01, $01
+ dcb $01, $01, $01, $01, $02, $02, $02, $02, $02, $03
+ dcb $03, $03, $03, $04, $04, $04, $04, $05, $05, $05
+ dcb $05, $06, $06, $06, $07, $07, $07, $07, $08, $08
+ dcb $08, $09, $09, $09, $0a, $0a, $0a, $0b, $0b, $0b
+ dcb $0c, $0c, $0c, $0d, $0d
+
+ dcb $0e, $0e, $0e, $0f, $0f, $0f, $10, $10, $10, $11
+ dcb $11, $11, $12, $12, $12, $13, $13, $13, $14, $14
+ dcb $14, $14, $15, $15, $15, $16, $16, $16, $16, $17
+ dcb $17, $17, $17, $18, $18, $18, $18, $19, $19, $19
+ dcb $19, $19, $1a, $1a, $1a, $1a, $1a, $1a, $1a, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1a, $1a, $1a, $1a, $1a, $1a, $19, $19, $19, $19
+
+; 5x5 BYTES
+
+image:
+ dcb $0,$0,$0,$0,$0
+ dcb $0,$c,$c,$c,$0
+ dcb $0,$c,$1,$c,$0
+ dcb $0,$c,$c,$c,$0
+ dcb $0,$0,$0,$0,$0
+
+; YPOS LOOKUP TABLE
+
+ypos:
+ dcb $00,$02,$20,$02,$40,$02,$60,$02
+ dcb $80,$02,$a0,$02,$c0,$02,$e0,$02
+ dcb $00,$03,$20,$03,$40,$03,$60,$03
+ dcb $80,$03,$a0,$03,$c0,$03,$e0,$03
+ dcb $00,$04,$20,$04,$40,$04,$60,$04
+ dcb $80,$04,$a0,$04,$c0,$04,$e0,$04
+ dcb $00,$05,$20,$05,$40,$05,$60,$05
+ dcb $80,$05,$a0,$05,$c0,$05,$e0,$05
+
diff --git a/hacks/images/m6502/starfield2d.asm b/hacks/images/m6502/starfield2d.asm
new file mode 100644 (file)
index 0000000..4c26efe
--- /dev/null
@@ -0,0 +1,50 @@
+; 2d starfield
+; Submitted by Anonymous
+
+i:ldx #$7
+g:lda $fe
+  and #3
+  adc #1
+  sta $0,x
+  lda $fe
+  and #$1f
+  sta $20,x
+  dex
+  bpl g
+f:
+  lda #$ff
+  sta $10
+  delay:
+  nop
+  dec $10
+  bne delay
+
+  lda #$00
+  sta $80
+  lda #$02
+  sta $81
+  ldx #$7
+l:lda $20,x
+  pha
+  clc
+  sbc $00,x
+  and #$1f
+  sta $20,x
+  lda $20,x
+  tay
+  lda #1
+  sta ($80),y
+  pla
+  tay
+  lda #0
+  sta ($80),y
+  lda $80
+  clc
+  adc #$80
+  bne n
+  inc $81
+n:sta $80
+  dex
+  bpl l
+  jmp f
+
diff --git a/hacks/jigsaw.c b/hacks/jigsaw.c
deleted file mode 100644 (file)
index 5e2ddc5..0000000
+++ /dev/null
@@ -1,894 +0,0 @@
-/* xscreensaver, Copyright (c) 1997-2008 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
- * 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.
- */
-
-/*
-  TODO:
-
-    =  Rather than just flickering the pieces before swapping them,
-       show them lifting up and moving to their new positions.
-       The path on which they move shouldn't be a straight line;
-       try to avoid having them cross each other by moving them in
-       oppositely-positioned arcs.
-
-    =  Rotate the pieces as well, so that we can swap the corner
-       and edge pieces with each other.
-
-    =  Have it drop all pieces to the "floor" then pick them up to
-       reassemble the picture.
-
-    =  As a joke, maybe sometimes have one piece that doesn't fit?
-       Or lose a piece?
- */
-
-#include "screenhack.h"
-#include "spline.h"
-
-#undef countof
-#define countof(x) (sizeof((x))/sizeof((*x)))
-
-#define CENTER   0
-#define NORTH    1
-#define NORTHEAST 2
-#define EAST     3
-#define SOUTHEAST 4
-#define SOUTH    5
-#define SOUTHWEST 6
-#define WEST     7
-#define NORTHWEST 8
-
-struct piece {
-  int width, height;
-  int x, y;
-  Pixmap pixmap;
-};
-
-struct set {
-  struct piece pieces[9];
-};
-
-#define PIECE_A_HOLLOW 0
-#define PIECE_A_FILLED 1
-#define PIECE_B_HOLLOW 2
-#define PIECE_B_FILLED 3
-
-struct swap_state {
-  int flashing;
-  int x1, y1, x2, y2;
-  Bool draw_p;
-};
-
-struct state {
-  Display *dpy;
-  Window window;
-
-  struct set all_pieces[4];
-
-  int piece_width, piece_height;
-  int width, height;
-  int x_border, y_border;
-  Pixmap source;
-  GC gc;
-  int fg, bg;
-  int border_width;
-  XPoint *state;
-  int delay, delay2;
-
-  int jigstate;
-
-  struct swap_state swap;
-  int clearing;
-
-  async_load_state *img_loader;
-};
-
-
-/* Returns a spline describing one edge of a puzzle piece of the given length.
- */
-static spline *
-make_puzzle_curve (int pixels)
-{
-  double x0 = 0.0000, y0 =  0.0000;
-  double x1 = 0.3333, y1 =  0.1000;
-  double x2 = 0.4333, y2 =  0.0333;
-  double x3 = 0.4666, y3 = -0.0666;
-  double x4 = 0.3333, y4 = -0.1666;
-  double x5 = 0.3666, y5 = -0.2900;
-  double x6 = 0.5000, y6 = -0.3333;
-
-  spline *s = make_spline(20);
-  s->n_controls = 0;
-
-# define PT(x,y) \
-    s->control_x[s->n_controls] = pixels * (x); \
-    s->control_y[s->n_controls] = pixels * (y); \
-    s->n_controls++
-  PT (  x0, y0);
-  PT (  x1, y1);
-  PT (  x2, y2);
-  PT (  x3, y3);
-  PT (  x4, y4);
-  PT (  x5, y5);
-  PT (  x6, y6);
-  PT (1-x5, y5);
-  PT (1-x4, y4);
-  PT (1-x3, y3);
-  PT (1-x2, y2);
-  PT (1-x1, y1);
-  PT (1-x0, y0);
-# undef PT
-
-  compute_spline (s);
-  return s;
-}
-
-
-/* Draws a puzzle piece.  The top/right/bottom/left_type args
-   indicate the direction the tabs point: 1 for out, -1 for in, 0 for flat.
- */
-static void
-draw_puzzle_shape (Display *dpy, Drawable d, GC gc,
-                   int x, int y, int size, int bw,
-                   int top_type, int right_type,
-                   int bottom_type, int left_type,
-                   Bool fill_p)
-{
-  spline *s = make_puzzle_curve (size);
-  XPoint *pts = (XPoint *) malloc (s->n_points * 4 * sizeof(*pts));
-  int i, o;
-
-  /* The border is twice as wide for "flat" edges, otherwise it looks funny. */
-  if (fill_p) 
-    bw = 0;
-  else
-    bw /= 2;
-
-  o = 0;
-  if (top_type == 0) {
-    pts[o].x = x;        pts[o].y = y + bw; o++;
-    pts[o].x = x + size; pts[o].y = y + bw; o++;
-  } else {
-    for (i = 0; i < s->n_points; i++) {
-      pts[o].x = x + s->points[i].x;
-      pts[o].y = y + s->points[i].y * top_type;
-      o++;
-    }
-  }
-
-  if (right_type == 0) {
-    pts[o-1].x -= bw;
-    pts[o].x = x + size - bw; pts[o].y = y + size; o++;
-  } else {
-    for (i = 1; i < s->n_points; i++) {
-      pts[o].x = x + size + s->points[i].y * (-right_type);
-      pts[o].y = y        + s->points[i].x;
-      o++;
-    }
-  }
-
-  if (bottom_type == 0) {
-    pts[o-1].y -= bw;
-    pts[o].x = x; pts[o].y = y + size - bw; o++;
-  } else {
-    for (i = 1; i < s->n_points; i++) {
-      pts[o].x = x        + s->points[s->n_points-i-1].x;
-      pts[o].y = y + size + s->points[s->n_points-i-1].y * (-bottom_type);
-      o++;
-    }
-  }
-
-  if (left_type == 0) {
-    pts[o-1].x += bw;
-    pts[o].x = x + bw; pts[o].y = y; o++;
-  } else {
-    for (i = 1; i < s->n_points; i++) {
-      pts[o].x = x + s->points[s->n_points-i-1].y * left_type;
-      pts[o].y = y + s->points[s->n_points-i-1].x;
-      o++;
-    }
-  }
-
-  free_spline (s);
-
-  if (fill_p)
-    XFillPolygon (dpy, d, gc, pts, o, Complex, CoordModeOrigin);
-  else
-    XDrawLines (dpy, d, gc, pts, o, CoordModeOrigin);
-
-  free (pts);
-}
-
-
-/* Creates two pixmaps for a puzzle piece:
-   - The first is a solid bit-mask with 1 for each pixel inside the piece;
-   - The second is an outline of the piece, where all drawn pixels are
-     contained within the mask.
-
-   The top/right/bottom/left_type args indicate the direction the
-   tabs point: 1 for out, -1 for in, 0 for flat.
-
-   Size is how big the piece should be, from origin to origin.
-
-   Returned x/y is the origin within the pixmaps.
- */
-static void
-make_puzzle_pixmap_pair (Display *dpy, Drawable d, int size, int bw,
-                         int top_type, int right_type, 
-                         int bottom_type, int left_type,
-                         int *x_ret, int *y_ret,
-                         Pixmap *mask_ret, Pixmap *outline_ret)
-{
-  int w = (size ? size * 3 : 2);
-  int h = w;
-  int x = size;
-  int y = size;
-  Pixmap p0 = XCreatePixmap (dpy, d, w, h, 1);
-  Pixmap p1 = XCreatePixmap (dpy, d, w, h, 1);
-  XGCValues gcv;
-  GC gc;
-  gcv.foreground = 0;
-  gcv.background = 0;
-  gc = XCreateGC (dpy, p0, GCForeground|GCBackground, &gcv);
-  XFillRectangle (dpy, p0, gc, 0, 0, w, h);
-  XFillRectangle (dpy, p1, gc, 0, 0, w, h);
-  XSetForeground (dpy, gc, 0);
-
-# ifdef HAVE_COCOA
-  jwxyz_XSetAlphaAllowed (dpy, gc, False);
-# endif
-
-  /* To ensure that each pixel is drawn only once, we render the piece
-     such that it "owns" the left and top edges, but not the right and
-     bottom edges.
-
-         - - +      "#" is this piece.
-         - # +      It overlaps "-" and is overlapped by "+".
-         - + +
-
-     To accomplish this, we clear to black, draw "#" in white,
-     then draw "+" in black.
-   */
-
-  /* Center square */
-  XSetForeground (dpy, gc, 1);
-  draw_puzzle_shape (dpy, p0, gc, x, y, size, bw,
-                     top_type, right_type, bottom_type, left_type,
-                     True);
-
-  /* Top right square */
-  XSetForeground (dpy, gc, 0);
-  draw_puzzle_shape (dpy, p0, gc, x + size, y - size, size, bw,
-                     0, 0, -top_type, -left_type,
-                     True);
-
-  /* Center right square */
-  draw_puzzle_shape (dpy, p0, gc, x + size, y, size, bw,
-                     0, 0, 0, -right_type,
-                     True);
-
-  /* Bottom center square */
-  draw_puzzle_shape (dpy, p0, gc, x, y + size, size, bw,
-                     -bottom_type, 0, 0, 0,
-                     True);
-
-  /* And Charles Nelson Reilly in the bottom right square */
-  draw_puzzle_shape (dpy, p0, gc, x + size, y + size, size, bw,
-                     -bottom_type, -right_type, 0, 0,
-                     True);
-
-  /* Done with p0 (the mask).
-     To make p1 (the outline) draw an outlined piece through the mask.
-   */
-  if (bw < 0)
-    {
-      bw = size / 30;
-      if (bw < 1) bw = 1;
-    }
-
-  if (bw > 0)
-    {
-      XSetForeground (dpy, gc, 1);
-      XSetClipMask (dpy, gc, p0);
-      XSetLineAttributes (dpy, gc, bw, LineSolid, CapButt, JoinRound);
-      draw_puzzle_shape (dpy, p1, gc, x, y, size, bw,
-                         top_type, right_type, bottom_type, left_type,
-                         False);
-    }
-
-  XFreeGC (dpy, gc);
-  *x_ret = x;
-  *y_ret = x;
-  *mask_ret = p0;
-  *outline_ret = p1;
-}
-
-
-static void
-make_puzzle_pixmaps (struct state *st)
-{
-  int i, j;
-
-  int edges[9][4] = {
-    { -1,  1, -1, 1 }, /* CENTER    */
-    {  0,  1, -1, 1 }, /* NORTH     */
-    {  0,  0, -1, 1 }, /* NORTHEAST */
-    { -1,  0, -1, 1 }, /* EAST      */
-    { -1,  0,  0, 1 }, /* SOUTHEAST */
-    { -1,  1,  0, 1 }, /* SOUTH     */
-    { -1,  1,  0, 0 }, /* SOUTHWEST */
-    { -1,  1, -1, 0 }, /* WEST      */
-    {  0,  1, -1, 0 }, /* NORTHWEST */
-  };
-
-  /* sometimes swap direction of horizontal edges */
-  if (random() & 1)
-    for (j = 0; j < countof(edges); j++) {
-      edges[j][0] = -edges[j][0];
-      edges[j][2] = -edges[j][2];
-    }
-
-  /* sometimes swap direction of vertical edges */
-  if (random() & 1)
-    for (j = 0; j < countof(edges); j++) {
-      edges[j][1] = -edges[j][1];
-      edges[j][3] = -edges[j][3];
-    }
-
-  for (j = 0; j < 9; j++) {
-    for (i = 0; i < 2; i++) {
-      int x, y;
-      int top, right, bottom, left;
-      Pixmap mask, outline;
-      top    = edges[j][0];
-      right  = edges[j][1];
-      bottom = edges[j][2];
-      left   = edges[j][3];
-      if (i) {
-        top    = -top; 
-        right  = -right; 
-        bottom = -bottom; 
-        left   = -left;
-      }
-      make_puzzle_pixmap_pair (st->dpy, st->window, st->piece_width,
-                               st->border_width,
-                               top, right, bottom, left,
-                               &x, &y, &mask, &outline);
-
-      st->all_pieces[i*2].pieces[j].x = x;
-      st->all_pieces[i*2].pieces[j].y = y;
-      st->all_pieces[i*2].pieces[j].pixmap = outline;
-
-      st->all_pieces[i*2+1].pieces[j].x = x;
-      st->all_pieces[i*2+1].pieces[j].y = y;
-      st->all_pieces[i*2+1].pieces[j].pixmap = mask;
-    }
-  }
-}
-
-static void
-free_puzzle_pixmaps (struct state *st)
-{
-  int i, j;
-  for (i = 0; i < countof(st->all_pieces); i++)
-    for (j = 0; j < countof (st->all_pieces[i].pieces); j++)
-      if (st->all_pieces[i].pieces[j].pixmap) {
-        XFreePixmap (st->dpy, st->all_pieces[i].pieces[j].pixmap);
-        st->all_pieces[i].pieces[j].pixmap = 0;
-      }
-}
-
-
-static void
-jigsaw_init_1 (struct state *st)
-{
-  XWindowAttributes xgwa;
-  int x, y;
-  XGCValues gcv;
-  Colormap cmap;
-
-  XGetWindowAttributes (st->dpy, st->window, &xgwa);
-
-  st->piece_width = 40 + (random() % 100);
-  if (xgwa.width / st->piece_width < 4)
-    st->piece_width = xgwa.width / 4;
-  st->piece_height = st->piece_width;
-
-  free_puzzle_pixmaps (st);
-  make_puzzle_pixmaps (st);
-
-  cmap = xgwa.colormap;
-  st->width  = (st->piece_width ? xgwa.width  / st->piece_width : 0);
-  st->height = (st->piece_height ? xgwa.height / st->piece_height : 0);
-  st->x_border = (xgwa.width  - (st->width  * st->piece_width)) / 2;
-  st->y_border = (xgwa.height - (st->height * st->piece_width)) / 2;
-
-  if (st->width  < 4) st->width  = 4, st->x_border = 0;
-  if (st->height < 4) st->height = 4, st->y_border = 0;
-
-  if (st->state) free (st->state);
-  st->state = (XPoint *) malloc (st->width * st->height * sizeof(*st->state));
-
-  if (!st->gc)
-    {
-      XColor fgc, bgc;
-      char *fgs = get_string_resource(st->dpy, "foreground", "Foreground");
-      char *bgs = get_string_resource(st->dpy, "background", "Background");
-      Bool fg_ok, bg_ok;
-
-      st->gc = XCreateGC (st->dpy, st->window, 0, &gcv);
-
-# ifdef HAVE_COCOA
-      jwxyz_XSetAlphaAllowed (st->dpy, st->gc, False);
-# endif
-
-      if (!XParseColor (st->dpy, cmap, fgs, &fgc))
-        XParseColor (st->dpy, cmap, "gray", &fgc);
-      if (!XParseColor (st->dpy, cmap, bgs, &bgc))
-        XParseColor (st->dpy, cmap, "black", &bgc);
-
-      free (fgs);
-      free (bgs);
-      fgs = bgs = 0;
-
-      fg_ok = XAllocColor (st->dpy, cmap, &fgc);
-      bg_ok = XAllocColor (st->dpy, cmap, &bgc);
-
-      /* If we weren't able to allocate the two colors we want from the
-         colormap (which is likely if the screen has been grabbed on an
-         8-bit SGI visual -- don't ask) then just go through the map
-         and find the closest color to the ones we wanted, and use those
-         pixels without actually allocating them.
-      */
-      if (fg_ok)
-        st->fg = fgc.pixel;
-      else
-        st->fg = 0;
-
-      if (bg_ok)
-        st->bg = bgc.pixel;
-      else
-        st->bg = 1;
-
-#ifndef HAVE_COCOA
-      if (!fg_ok || bg_ok)
-        {
-          int i;
-          unsigned long fgd = ~0;
-          unsigned long bgd = ~0;
-          int max = visual_cells (xgwa.screen, xgwa.visual);
-          XColor *all = (XColor *) calloc(sizeof (*all), max);
-          for (i = 0; i < max; i++)
-            {
-              all[i].flags = DoRed|DoGreen|DoBlue;
-              all[i].pixel = i;
-            }
-          XQueryColors (st->dpy, cmap, all, max);
-          for(i = 0; i < max; i++)
-            {
-              long rd, gd, bd;
-              unsigned long d;
-              if (!fg_ok)
-                {
-                  rd = (all[i].red   >> 8) - (fgc.red   >> 8);
-                  gd = (all[i].green >> 8) - (fgc.green >> 8);
-                  bd = (all[i].blue  >> 8) - (fgc.blue  >> 8);
-                  if (rd < 0) rd = -rd;
-                  if (gd < 0) gd = -gd;
-                  if (bd < 0) bd = -bd;
-                  d = (rd << 1) + (gd << 2) + bd;
-                  if (d < fgd)
-                    {
-                      fgd = d;
-                      st->fg = all[i].pixel;
-                      if (d == 0)
-                        fg_ok = True;
-                    }
-                }
-
-              if (!bg_ok)
-                {
-                  rd = (all[i].red   >> 8) - (bgc.red   >> 8);
-                  gd = (all[i].green >> 8) - (bgc.green >> 8);
-                  bd = (all[i].blue  >> 8) - (bgc.blue  >> 8);
-                  if (rd < 0) rd = -rd;
-                  if (gd < 0) gd = -gd;
-                  if (bd < 0) bd = -bd;
-                  d = (rd << 1) + (gd << 2) + bd;
-                  if (d < bgd)
-                    {
-                      bgd = d;
-                      st->bg = all[i].pixel;
-                      if (d == 0)
-                        bg_ok = True;
-                    }
-                }
-
-              if (fg_ok && bg_ok)
-                break;
-            }
-          XFree(all);
-        }
-#endif /* HAVE_COCOA */
-    }
-
-  /* Reset the window's background color... */
-  XSetWindowBackground (st->dpy, st->window, st->bg);
-  XClearWindow(st->dpy, st->window);
-
-  for (y = 0; y < st->height; y++)
-    for (x = 0; x < st->width; x++)
-      {
-       st->state[y * st->width + x].x = x;
-       st->state[y * st->width + x].y = y;
-      }
-
-  if (st->source)
-    XFreePixmap (st->dpy, st->source);
-  st->source = XCreatePixmap (st->dpy, st->window, xgwa.width, xgwa.height,
-                              xgwa.depth);
-
-  st->img_loader = load_image_async_simple (0, xgwa.screen, st->window,
-                                            st->source, 0, 0);
-}
-
-
-static void
-get_piece (struct state *st, 
-           int x, int y, struct piece **hollow, struct piece **filled)
-{
-  int p;
-  Bool which = (x & 1) == (y & 1);
-
-  if      (x == 0           && y == 0)           p = NORTHWEST;
-  else if (x == st->width-1 && y == 0)           p = NORTHEAST;
-  else if (x == st->width-1 && y == st->height-1) p = SOUTHEAST;
-  else if (x == 0           && y == st->height-1) p = SOUTHWEST;
-  else if (y == 0)                               p = NORTH;
-  else if (x == st->width-1)                     p = EAST;
-  else if (y == st->height-1)                    p = SOUTH;
-  else if (x == 0)                               p = WEST;
-  else                                           p = CENTER;
-
-  if (hollow)
-    *hollow = (which
-              ? &st->all_pieces[PIECE_A_HOLLOW].pieces[p]
-              : &st->all_pieces[PIECE_B_HOLLOW].pieces[p]);
-  if (filled)
-    *filled = (which
-              ? &st->all_pieces[PIECE_A_FILLED].pieces[p]
-              : &st->all_pieces[PIECE_B_FILLED].pieces[p]);
-}
-
-
-static void
-draw_piece (struct state *st, int x, int y, int clear_p)
-{
-  struct piece *hollow, *filled;
-  int from_x = st->state[y * st->width + x].x;
-  int from_y = st->state[y * st->width + x].y;
-
-  get_piece(st, x, y, &hollow, &filled);
-         
-  XSetClipMask(st->dpy, st->gc, filled->pixmap);
-  XSetClipOrigin(st->dpy, st->gc,
-                st->x_border + (x * st->piece_width) - filled->x - 1,
-                st->y_border + (y * st->piece_width) - filled->y - 1);
-
-  if (clear_p)
-    {
-      XSetForeground(st->dpy, st->gc, st->bg);
-      XFillRectangle(st->dpy, st->window, st->gc,
-                    st->x_border + (x * st->piece_width)  -st->piece_width/2,
-                    st->y_border + (y * st->piece_height) -st->piece_height/2,
-                    st->piece_width*2, st->piece_height*2);
-    }
-  else
-    XCopyArea(st->dpy, st->source, st->window, st->gc,
-             st->x_border + (from_x * st->piece_width)  - st->piece_width/2,
-             st->y_border + (from_y * st->piece_height) - st->piece_height/2,
-             st->piece_width*2, st->piece_height*2,
-             st->x_border + (x * st->piece_width)  - st->piece_width/2,
-             st->y_border + (y * st->piece_height) - st->piece_height/2);
-
-  if (clear_p > 1)
-    return;
-
-  XSetForeground(st->dpy, st->gc, st->fg);
-  XSetClipMask(st->dpy, st->gc, hollow->pixmap);
-  XSetClipOrigin(st->dpy, st->gc,
-                st->x_border + (x * st->piece_width) - hollow->x - 1,
-                st->y_border + (y * st->piece_width) - hollow->y - 1);
-  XFillRectangle(st->dpy, st->window, st->gc,
-                st->x_border + (x * st->piece_width)  - st->piece_width/2,
-                st->y_border + (y * st->piece_height) - st->piece_height/2,
-                st->piece_width*2, st->piece_height*2);
-}
-
-
-static int
-animate_swap (struct state *st, struct swap_state *sw)
-{
-  XPoint swap;
-
-  if (sw->flashing > 1)
-    {
-      draw_piece(st, sw->x1, sw->y1, sw->flashing & 1);
-      draw_piece(st, sw->x2, sw->y2, sw->flashing & 1);
-      sw->flashing--;
-      return st->delay;
-    }
-
-  swap = st->state[sw->y1 * st->width + sw->x1];
-  st->state[sw->y1 * st->width + sw->x1] =
-    st->state[sw->y2 * st->width + sw->x2];
-  st->state[sw->y2 * st->width + sw->x2] = swap;
-  
-  if (sw->draw_p)
-    {
-      draw_piece(st, sw->x1, sw->y1, 0);
-      draw_piece(st, sw->x2, sw->y2, 0);
-      sw->flashing = 0;
-    }
-
-  return 0;
-}
-
-
-static int
-swap_pieces (struct state *st,
-             int src_x, int src_y, int dst_x, int dst_y,
-             Bool draw_p)
-{
-  struct swap_state *sw = &st->swap;
-  
-  sw->x1 = src_x;
-  sw->y1 = src_y;
-  sw->x2 = dst_x;
-  sw->y2 = dst_y;
-  sw->draw_p = draw_p;
-
-  /* if animating, plan to flash the pieces on and off a few times */
-  sw->flashing = sw->draw_p ? 7 : 0;
-
-  return animate_swap(st, sw);
-}
-
-
-static Bool
-done (struct state *st)
-{
-  int x, y;
-  for (y = 0; y < st->height; y++)
-    for (x = 0; x < st->width; x++)
-      {
-       int x2 = st->state[y * st->width + x].x;
-       int y2 = st->state[y * st->width + x].y;
-       if (x != x2 || y != y2)
-         return False;
-      }
-  return True;
-}
-
-
-static int
-shuffle (struct state *st, Bool draw_p)
-{
-  struct piece *p1, *p2;
-  int src_x, src_y, dst_x = -1, dst_y = -1;
-
- AGAIN:
-  p1 = p2 = 0;
-  src_x = random() % st->width;
-  src_y = random() % st->height;
-
-  get_piece(st, src_x, src_y, &p1, 0);
-
-  /* Pick random coordinates until we find one that has the same kind of
-     piece as the first one we picked.  Note that it's possible for there
-     to be only one piece of a particular shape on the board (this always
-     happens with the four corner pieces.)
-   */
-  while (p1 != p2)
-    {
-      dst_x = random() % st->width;
-      dst_y = random() % st->height;
-      get_piece(st, dst_x, dst_y, &p2, 0);
-    }
-
-  if (src_x == dst_x && src_y == dst_y)
-    goto AGAIN;
-
-  return swap_pieces(st, src_x, src_y, dst_x, dst_y, draw_p);
-}
-
-
-static void
-shuffle_all (struct state *st)
-{
-  int j;
-  for (j = 0; j < 5; j++) {
-    /* swap each piece with another 5x */
-    int i = (st->width * st->height * 5);
-    while (--i > 0)
-      shuffle (st, False);
-
-    /* and do that whole process up to 5x if we ended up with a solved
-       board (this often happens with 4x4 boards.) */
-    if (!done(st)) 
-      break;
-  }
-}
-
-
-static int
-unshuffle (struct state *st)
-{
-  int i;
-  for (i = 0; i < st->width * st->height * 4; i++)
-    {
-      int x = random() % st->width;
-      int y = random() % st->height;
-      int x2 = st->state[y * st->width + x].x;
-      int y2 = st->state[y * st->width + x].y;
-      if (x != x2 || y != y2)
-       {
-         return swap_pieces(st, x, y, x2, y2, True);
-       }
-    }
-  return 0;
-}
-
-
-static int
-animate_clear (struct state *st)
-{
-  while (st->clearing > 0)
-    {
-      int x = random() % st->width;
-      int y = random() % st->height;
-      XPoint *p = &st->state[y * st->width + x];
-      if (p->x == -1)
-       continue;
-      draw_piece(st, p->x, p->y, 2);
-      p->x = p->y = -1;
-      st->clearing--;
-      return st->delay;
-    }
-  return 0;
-}
-
-
-static int
-clear_all (struct state *st)
-{
-  st->clearing = st->width * st->height;
-  return animate_clear(st);
-}
-
-
-static void *
-jigsaw_init (Display *dpy, Window window)
-{
-  struct state *st = (struct state *) calloc (1, sizeof(*st));
-  st->dpy = dpy;
-  st->window = window;
-  st->delay = get_integer_resource (st->dpy, "delay", "Integer");
-  st->delay2 = get_integer_resource (st->dpy, "delay2", "Integer") * 1000000;
-  st->border_width = get_integer_resource (st->dpy, "pieceBorderWidth",
-                                           "Integer");
-  if (st->delay == 0) st->delay = 1; /* kludge */
-  return st;
-}
-
-
-static unsigned long
-jigsaw_draw (Display *dpy, Window window, void *closure)
-{
-  struct state *st = (struct state *) closure;
-  int x, y;
-  int delay = 0;
-
-  if (st->img_loader)   /* still loading */
-    {
-      st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0);
-      if (! st->img_loader) {  /* just finished */
-       shuffle_all (st);
-       for (y = 0; y < st->height; y++)
-         for (x = 0; x < st->width; x++)
-           draw_piece(st, x, y, 0);
-      }
-      return st->delay;
-    }
-
-  if (st->swap.flashing)
-    delay = animate_swap (st, &st->swap);
-  else if (st->clearing)
-    delay = animate_clear (st);
-
-  if (!delay) {
-    if (st->jigstate == 0)
-      {
-       jigsaw_init_1 (st);
-       st->jigstate = 1;
-      }
-    else if (st->jigstate == 1)
-      {
-       if (done(st))
-         {
-           st->jigstate = 2;
-           delay = st->delay2;
-         }
-       else
-         {
-           delay = unshuffle(st);
-         }
-      }
-    else if (st->jigstate == 2)
-      {
-       st->jigstate = 0;
-       delay = clear_all(st);    
-      }
-    else
-      abort();
-  }
-
-  if (delay == 1) delay = 0; /* kludge */
-  return (delay ? delay : st->delay * 10);
-}
-
-static void
-jigsaw_reshape (Display *dpy, Window window, void *closure, 
-                 unsigned int w, unsigned int h)
-{
-  /* window size is checked each time a new puzzle begins */
-}
-
-static Bool
-jigsaw_event (Display *dpy, Window window, void *closure, XEvent *event)
-{
-  return False;
-}
-
-static void
-jigsaw_free (Display *dpy, Window window, void *closure)
-{
-  struct state *st = (struct state *) closure;
-  free_puzzle_pixmaps (st);
-  if (st->state) free (st->state);
-  if (st->gc) XFreeGC (dpy, st->gc);
-  if (st->source) XFreePixmap (dpy, st->source);
-  free (st);
-}
-
-\f
-
-static const char *jigsaw_defaults [] = {
-  ".background:                Black",
-  ".foreground:                #AAAAAA",
-  "*fpsSolid:          true",
-  "*delay:             70000",
-  "*delay2:            5",
-  "*pieceBorderWidth:   -1",
-#ifdef __sgi    /* really, HAVE_READ_DISPLAY_EXTENSION */
-  "*visualID:          Best",
-#endif
-  0
-};
-
-static XrmOptionDescRec jigsaw_options [] = {
-  { "-delay",          ".delay",               XrmoptionSepArg, 0 },
-  { "-delay2",         ".delay2",              XrmoptionSepArg, 0 },
-  { "-bw",             ".pieceBorderWidth",    XrmoptionSepArg, 0 },
-  { "-border-width",   ".pieceBorderWidth",    XrmoptionSepArg, 0 },
-  { 0, 0, 0, 0 }
-};
-
-
-XSCREENSAVER_MODULE ("Jigsaw", jigsaw)
diff --git a/hacks/jigsaw.man b/hacks/jigsaw.man
deleted file mode 100644 (file)
index 33a693f..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-.TH XScreenSaver 1 "25-Nov-97" "X Version 11"
-.SH NAME
-jigsaw - permute the screen image like a jigsaw puzzle
-.SH SYNOPSIS
-.B jigsaw
-[\-display \fIhost:display.screen\fP] [\-background \fIcolor\fP]
-[\-delay \fIusecs\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP]
-[\-fps]
-.SH DESCRIPTION
-The \fIjigsaw\fP program takes an image, carves it up into
-a jigsaw puzzle, shuffles it, and then solves it.
-
-The image that it manipulates will be grabbed from the portion of
-the screen underlying the window, or from the system's video input,
-or from a random file on disk, as indicated by
-the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP,
-and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP
-file; see
-.BR xscreensaver-demo (1)
-for more details.
-.SH OPTIONS
-.I jigsaw
-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 long to wait between shuffling pieces; default 70000, or 0.07 seconds.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 1997 by Jamie Zawinski.  Permission to use, copy, modify, 
-distribute, and sell this software and its documentation for any purpose is 
-hereby granted without fee, provided that 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
-Jamie Zawinski <jwz@jwz.org>, 25-Nov-97.
diff --git a/hacks/laser.man b/hacks/laser.man
deleted file mode 100644 (file)
index 77367af..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-.TH XScreenSaver 1 "10-May-97" "X Version 11"
-.SH NAME
-laser - draws vaguely laser-like moving lines
-.SH SYNOPSIS
-.B laser
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-cycles \fIinteger\fP] [\-count \fIinteger\fP]
-
-[\-fps]
-.SH DESCRIPTION
-The \fIlaser\fP program draws vaguely laser-like moving lines
-.SH OPTIONS
-.I laser
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-ncolors \fIinteger\fP
-How many colors should be used (if possible).  Default 64.
-The colors used cycle through the hue, making N stops around the color wheel.
-.TP 8
-.B \-cycles \fIinteger\fP
-Default 200.
-.TP 8
-.B \-count \fIinteger\fP
-Default 10.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 xlock (1)
-.SH COPYRIGHT
-Copyright \(co 1995 by Pascal Pensa.
-
-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. 
-.SH AUTHOR
-Pascal Pensa <pensa@aurora.unice.fr>, 1995.
-
-Ability to run standalone or with \fIxscreensaver\fP added by 
-Jamie Zawinski <jwz@jwz.org>, 10-May-97.
diff --git a/hacks/lightning.man b/hacks/lightning.man
deleted file mode 100644 (file)
index 65386d3..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-.TH XScreenSaver 1 "10-May-97" "X Version 11"
-.SH NAME
-lightning - draws fractal lightning bolts
-.SH SYNOPSIS
-.B lightning
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP]
-
-[\-fps]
-.SH DESCRIPTION
-The \fIlightning\fP program draws fractal lightning bolts
-.SH OPTIONS
-.I lightning
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-ncolors \fIinteger\fP
-How many colors should be used (if possible).  Default 64.
-The colors are chosen randomly.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 xlock (1)
-.SH COPYRIGHT
-Copyright \(co 1996 by Keith Romberg.
-
-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. 
-.SH AUTHOR
-Keith Romberg <kromberg@saxe.com>, 27-Jun-96.
-
-Ability to run standalone or with \fIxscreensaver\fP added by 
-Jamie Zawinski <jwz@jwz.org>, 10-May-97.
diff --git a/hacks/lisa.man b/hacks/lisa.man
deleted file mode 100644 (file)
index 2bfd7f4..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-.TH XScreenSaver 1 "27-May-97" "X Version 11"
-.SH NAME
-lisa - draws animated full-loop lissajous figures
-.SH SYNOPSIS
-.B lisa
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-cycles \fIinteger\fP] [\-count \fIinteger\fP] [\-size \fIinteger\fP]
-
-[\-fps]
-.SH DESCRIPTION
-The \fIlisa\fP program draws animated full-loop lissajous figures.
-.SH OPTIONS
-.I lisa
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-ncolors \fIinteger\fP
-How many colors should be used (if possible).  Default 200.
-The colors are chosen randomly.
-.TP 8
-.B \-cycles \fIinteger\fP
-
-.TP 8
-.B \-count \fIinteger\fP
-
-.TP 8
-.B \-size \fIinteger\fP
-
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 xlock (1)
-.SH COPYRIGHT
-Copyright \(co 1997 by Caleb Cullen.
-
-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. 
-.SH AUTHOR
-Caleb Cullen, 1997.
-
-Ability to run standalone or with \fIxscreensaver\fP added by 
-Jamie Zawinski <jwz@jwz.org>, 27-May-97.
diff --git a/hacks/lissie.man b/hacks/lissie.man
deleted file mode 100644 (file)
index 43123b2..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-.TH XScreenSaver 1 "" "X Version 11"
-.SH NAME
-lissie - lissajous figure.
-.SH SYNOPSIS
-.B lissie
-[\-display \fIhost:display.screen\fP]
-[\-visual \fIvisual\fP]
-[\-window]
-[\-root]
-[\-count \fInumber\fP]
-[\-cycles \fInumber\fP]
-[\-delay \fInumber\fP]
-[\-ncolors \fInumber\fP]
-[\-size \fInumber\fP]
-[\-fps]
-.SH DESCRIPTION
-Another Lissajous figure. This one draws the progress of circular shapes
-along a path.
-.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 \-count \fInumber\fP
-Count. 0 - 20.  Default: 1.
-.TP 8
-.B \-cycles \fInumber\fP
-Timeout. Default: 20000.
-.TP 8
-.B \-delay \fInumber\fP
-Per-frame delay, in microseconds.  Default: 10000 (0.01 seconds.).
-.TP 8
-.B \-ncolors \fInumber\fP
-Number of Colors.  Default: 200.
-.TP 8
-.B \-size \fInumber\fP
-Size.  -500 to +500.  Default: -200.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 2002 by Alexander Jolk.  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
-Alexander Jolk.
diff --git a/hacks/lmorph.man b/hacks/lmorph.man
deleted file mode 100644 (file)
index be8e19e..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-.TH LMORPH 1 "xscreensaver hack"
-.SH NAME
-lmorph \- morphing lines
-.SH SYNOPSIS
-.B lmorph
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-points \fIint\fP] [\-steps \fIint\fP] [\-delay \fIusecs\fP] [\-figtype \fItype\fP]
-[\-fps]
-.SH DESCRIPTION
-The \fIlmorph\fP program generates random spline-ish line drawings and
-morphs between them.
-.SH OPTIONS
-.I lmorph
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-points \fIinteger\fP
-Number of points in each line drawing. Default is 200 points.
-.TP 8
-.B \-steps \fIinteger\fP
-Interpolation steps from one drawing to the next. Default is 150. You
-may specify 0, to get a random number between 100 and 500.
-.TP 8
-.B \-delay \fImicroseconds\fP
-How much of a delay should be introduced between steps of the animation.
-Default 70000.
-.TP 8
-.B \-figtype \fItype\fP
-Limit the figures to only open or closed figures. Possible types are
-"all" (default), "open" and "closed".
-.TP 8
-.B \-linewidth \fIinteger\fP
-Width of lines. Default is 5 pixels.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 AUTHOR
-Sverre H. Huseby <sverrehu@online.no> and Glenn T. Lines <glennli@ifi.uio.no>,
-built on top of the screen saver routines by Jamie Zawinski <jwz@jwz.org>.
index 717958f66bcf004d8772dde8a5a58f8d8f37cac9..d963ad3e754ac48ef77664ab6eb86d409a66ac18 100644 (file)
@@ -1,6 +1,12 @@
 /******************************************************************************
  * [ maze ] ...
  *
+ * modified:  [ 13-08-08 ] Jamie Zawinski <jwz@jwz.org>
+ *              Removed the bridge option: it didn't look good, and it made
+ *              the code a lot harder to understand.
+ *              Made the maze stay out of the area used for the -fps display.
+ *              Cleaned up and commented.
+ *
  * modified:  [ 1-04-00 ]  Johannes Keukelaar <johannes@nada.kth.se>
  *              Added -ignorant option (not the default) to remove knowlege
  *              of the direction in which the exit lies.
@@ -144,10 +150,12 @@ struct state {
 
   GC   gc, cgc, tgc, sgc, ugc, logo_gc, erase_gc;
   Pixmap logo_map;
-  int logo_width, logo_height; /* in pixels */
+
+  int logo_x, logo_y;          /* in grid cells (or -1) */
+  int logo_width, logo_height; /* in pixels */
+  int fps_width, fps_height;   /* in pixels */
 
   int solve_delay, pre_solve_delay, post_solve_delay;
-  int logo_x, logo_y;
 
   unsigned short maze[MAX_MAZE_SIZE_X][MAX_MAZE_SIZE_Y];
 
@@ -163,7 +171,7 @@ struct state {
 
   int x, y, restart, stop, state, max_length;
   int sync_p, sync_tick;
-  int bridge_p, ignorant_p;
+  int ignorant_p;
 
   struct solve_state *solve_state;
 
@@ -180,6 +188,11 @@ struct state {
 };
 
 
+static void draw_wall (struct state *, int, int, int, GC);
+static void draw_solid_square (struct state *, int, int, int, GC);
+static void build_wall (struct state *, int, int, int);
+
+
 static void
 set_maze_sizes (struct state *st, int width, int height)
 {
@@ -191,13 +204,18 @@ set_maze_sizes (struct state *st, int width, int height)
 }
 
 
+/* Resets the maze grid, picks the starting and ending points,
+   and the position of the logo, if any.
+ */
 static void
-initialize_maze (struct state *st) /* draw the surrounding wall and start/end squares */
+initialize_maze (struct state *st)
 {
-  register int i, j, wall;
+  int i, j, wall;
   int logow = 1 + st->logo_width / st->grid_width;
   int logoh = 1 + st->logo_height / st->grid_height;
   
+ AGAIN:
+
   /* initialize all squares */
   for ( i=0; i<st->maze_size_x; i++) {
     for ( j=0; j<st->maze_size_y; j++) {
@@ -285,38 +303,65 @@ initialize_maze (struct state *st) /* draw the surrounding wall and start/end sq
   /* set logo */
   if ((st->maze_size_x-logow >= 6) && (st->maze_size_y-logoh >= 6))
     {
-      /* not closer than 3 grid units from a wall */
+      /* not closer than 3 grid units from a wall, to ensure that it
+         won't overlap the entrance or exit. */
       st->logo_x = get_random (st->maze_size_x - logow - 5) + 3;
       st->logo_y = get_random (st->maze_size_y - logoh - 5) + 3;
       for (i=0; i<logow; i++)
        for (j=0; j<logoh; j++)
-         st->maze[st->logo_x + i][st->logo_y + j] |= DOOR_IN_TOP;
+          /* mark as having doors to prevent these cells being used in maze. */
+         st->maze[st->logo_x + i][st->logo_y + j] |= DOOR_IN_ANY;
     }
   else
     st->logo_y = st->logo_x = -1;
 
-  /* #### should mask out the cells covered by the FPS display if "doFPS"
-          is true.  But that's hard, because the "logo_x" crap that does
-          that trick for the logo is scattered all around the code... */
+  /* mask out the fps area */
+  if (st->fps_width > 0)
+    {
+      int fpsw = 1 + st->fps_width  / st->grid_width;
+      int fpsh = 1 + st->fps_height / st->grid_width;
+
+      /* if the chosen logo position overlapped the fps area, try again! */
+      if (st->logo_x < fpsw+3 && st->logo_y+logoh > st->maze_size_y-fpsh-4)
+        goto AGAIN;
+
+      /* if the start or end point is inside the fps area, try again! */
+      if ((st->start_x <= fpsw && st->start_y >= st->maze_size_y-fpsh-1) ||
+          (st->end_x   <= fpsw && st->end_y   >= st->maze_size_y-fpsh-1))
+        goto AGAIN;
+
+      for (i=0; i<fpsw; i++)
+       for (j=0; j<fpsh; j++) {
+          /* mark as having doors to prevent these cells being used in maze.
+             mark as visit to prevent it being colored "unreachable". */
+         st->maze[i][st->maze_size_y - j - 1] |= DOOR_IN_ANY|SOLVER_VISIT;
+          /* take off left/bottom wall or the FPS text overlaps it */
+         st->maze[i][st->maze_size_y - j - 1] &= ~(WALL_BOTTOM|WALL_LEFT);
+        }
+    }
 }
 
-static int choose_door (struct state *st);
-static int backup (struct state *st);
-static void draw_wall (struct state *, int, int, int, GC);
-static void draw_solid_square (struct state *, int, int, int, GC);
-/*static void enter_square (struct state *, int);*/
-static void build_wall (struct state *, int, int, int);
-/*static void break_wall (struct state *, int, int, int);*/
 
-static void join_sets(struct state *, int, int);
+/****************************************************************************
+ Generator 2: Set-based maze generator.
+
+ Put each square in the maze in a separate set.  Also, make a list of all the
+ hedges.  Randomize that list.  Walk through the list. If, for a certain
+ hedge, the two squares on both sides of it are in different sets, union the
+ sets and remove the hedge.  Continue until all hedges have been processed or
+ only one set remains.
 
-#define DEBUG_SETS 0
+ This is essentially the "Kruskal" algorithm.
+
+ ****************************************************************************/
+
+static void mask_out_set_rect(struct state *st, int x, int y, int w, int h);
 
 /* Initialise the sets. */
 static void 
 init_sets(struct state *st)
 {
-  int i, t, r, xx, yy;
+  int i, t, r;
 
   if(st->sets)
     free(st->sets);
@@ -346,86 +391,21 @@ init_sets(struct state *st)
     {
       st->hedges[2*((st->maze_size_y-1)*st->maze_size_x+i)] = -1;
     }
-  /* Mask out a possible logo. */
+
+  /* Mask out the logo area. */
   if(st->logo_x!=-1)
     {
-      int logow = 1 + st->logo_width / st->grid_width;
+      int logow = 1 + st->logo_width  / st->grid_width;
       int logoh = 1 + st->logo_height / st->grid_height;
-      int bridge_dir, bridge_c;
-
-      if(st->bridge_p && logoh>=3 && logow>=3)
-       {
-         bridge_dir = 1+random()%2;
-         if(bridge_dir==1)
-           {
-             bridge_c = st->logo_y+random()%(logoh-2)+1;
-           }
-         else
-           {
-             bridge_c = st->logo_x+random()%(logow-2)+1;
-           }
-       }
-      else
-       {
-         bridge_dir = 0;
-         bridge_c = -1;
-       }
+      mask_out_set_rect(st, st->logo_x, st->logo_y, logow, logoh);
+    }
 
-      for(xx = st->logo_x; xx < st->logo_x+logow; xx++)
-       for(yy = st->logo_y; yy < st->logo_y+logoh; yy++)
-         {
-           /* I should check for the bridge here, except that I join the
-             * bridge together below.
-             */
-           st->hedges[2*(xx+st->maze_size_x*yy)+1] = -1;
-           st->hedges[2*(xx+st->maze_size_x*yy)] = -1;
-         }
-      for(xx = st->logo_x; xx < st->logo_x+logow; xx++)
-       {
-         if(!(bridge_dir==2 && xx==bridge_c))
-           {
-             build_wall(st, xx, st->logo_y, 0);
-             build_wall(st, xx, st->logo_y+logoh, 0);
-           }
-         st->hedges[2*(xx+st->maze_size_x*(st->logo_y-1))] = -1;
-         if(bridge_dir==1)
-           {
-             build_wall(st, xx, bridge_c, 0);
-             build_wall(st, xx, bridge_c, 2);
-           }
-       }
-      for(yy = st->logo_y; yy < st->logo_y+logoh; yy++)
-       {
-         if(!(bridge_dir==1 && yy==bridge_c))
-           {
-             build_wall(st, st->logo_x, yy, 3);
-             build_wall(st, st->logo_x+logow, yy, 3);
-           }
-         st->hedges[2*(st->logo_x-1+st->maze_size_x*yy)+1] = -1;
-         if(bridge_dir==2)
-           {
-             build_wall(st, bridge_c, yy, 1);
-             build_wall(st, bridge_c, yy, 3);
-           }
-       }
-      /* Join the whole bridge together. */
-      if(st->bridge_p)
-       {
-         if(bridge_dir==1)
-           {
-             xx = st->logo_x-1;
-             yy = bridge_c;
-             for(i = st->logo_x; i < st->logo_x+logow+1; i++)
-               join_sets(st, xx+yy*st->maze_size_x, i+yy*st->maze_size_x);
-           }
-         else
-           {
-             yy = st->logo_y-1;
-             xx = bridge_c;
-             for(i = st->logo_y; i < st->logo_y+logoh+1; i++)
-               join_sets(st, xx+yy*st->maze_size_x, xx+i*st->maze_size_x);
-           }
-       }
+  /* Mask out the FPS area. */
+  if(st->fps_width > 0)
+    {
+      int fpsw = 1 + st->fps_width  / st->grid_width;
+      int fpsh = 1 + st->fps_height / st->grid_height;
+      mask_out_set_rect(st, 0, st->maze_size_y-fpsh, fpsw, fpsh);
     }
 
   for(i = 0; i < st->maze_size_x*st->maze_size_y*2; i++)
@@ -480,42 +460,11 @@ exit_sets(struct state *st)
   st->sets = 0;
 }
 
-#if DEBUG_SETS
-/* Temporary hack. */
-static void
-show_set(int num, GC gc)
-{
-  int st->x, st->y, set;
-
-  set = get_set(num);
 
-  for(st->x = 0; st->x < st->maze_size_x; st->x++)
-    for(st->y = 0; st->y < st->maze_size_y; st->y++)
-      {
-       if(get_set(st->x+st->y*st->maze_size_x)==set)
-         {
-           XFillRectangle(st->dpy, st->window, st->gc,  border_x + st->bw + st->grid_width * st->x, 
-                        border_y + st->bw + st->grid_height * st->y, 
-                        st->grid_width-2*st->bw , st->grid_height-2*st->bw);
-         }
-      }
-}
-#endif
-
-/* Second alternative maze creator: Put each square in the maze in a 
- * separate set. Also, make a list of all the hedges. Randomize that list.
- * Walk through the list. If, for a certain hedge, the two squares on both
- * sides of it are in different sets, union the sets and remove the hedge.
- * Continue until all hedges have been processed or only one set remains.
- */
 static void
 set_create_maze(struct state *st)
 {
   int i, h, xx, yy, dir, v, w;
-#if DEBUG_SETS
-  int cont = 0;
-  char c;
-#endif
 
   /* Do almost all the setup. */
   init_sets(st);
@@ -545,48 +494,62 @@ set_create_maze(struct state *st)
          break;
        }
 
-#if DEBUG_SETS
-      show_set(st, xx+yy*st->maze_size_x, st->logo_gc);
-      show_set(st, v+w*st->maze_size_x, st->tgc);
-#endif
       if(get_set(st, xx+yy*st->maze_size_x)!=get_set(st, v+w*st->maze_size_x))
        {
-#if DEBUG_SETS
-         printf("Join!");
-#endif
          join_sets(st, xx+yy*st->maze_size_x, v+w*st->maze_size_x);
          /* Don't draw the wall. */
        }
       else
        {
-#if DEBUG_SETS
-         printf("Build.");
-#endif
          /* Don't join the sets. */
          build_wall(st, xx, yy, dir); 
        }
-#if DEBUG_SETS
-      if(!cont)
-       {
-         XSync(st->dpy, False);
-         c = getchar();
-         if(c=='c')
-           cont = 1;
-       }
-      show_set(xx+yy*st->maze_size_x, st->erase_gc);
-      show_set(v+w*st->maze_size_x, st->erase_gc);
-#endif
     }
 
   /* Free some memory. */
   exit_sets(st);
 }
 
-/* First alternative maze creator: Pick a random, empty corner in the maze.
- * Pick a random direction. Draw a wall in that direction, from that corner
- * until we hit a wall. Option: Only draw the wall if it's going to be 
- * shorter than a certain length. Otherwise we get lots of long walls.
- */
+/* mark a rectangle as being unavailable for usage in the maze */
+static void
+mask_out_set_rect(struct state *st, int x, int y, int w, int h)
+{
+  int xx, yy;
+  for(xx = x; xx < x+w; xx++)
+    for(yy = y; yy < y+h; yy++)
+      {
+        st->hedges[2*(xx+st->maze_size_x*yy)+1] = -1;
+        st->hedges[2*(xx+st->maze_size_x*yy)] = -1;
+      }
+  for(xx = x; xx < x+w; xx++)
+    {
+      build_wall(st, xx, y, 0);
+      build_wall(st, xx, y+h, 0);
+      st->hedges[2*(xx+st->maze_size_x*(y-1))] = -1;
+    }
+  for(yy = y; yy < y+h; yy++)
+    {
+      build_wall(st, x, yy, 3);
+      build_wall(st, x+w, yy, 3);
+      st->hedges[2*(x-1+st->maze_size_x*yy)+1] = -1;
+    }
+}
+
+
+/****************************************************************************
+ Generator 1: Wall-building maze generator.
+
+ Pick a random, empty corner in the maze.  Pick a random direction. Draw a
+ wall in that direction, from that corner until we hit a wall.  Option: Only
+ draw the wall if it's going to be shorter than a certain length.  Otherwise
+ we get lots of long walls.
+
+ This is essentially the "Prim" algorithm.
+ ****************************************************************************/
+
+static void alt_mask_out_rect(struct state *st, char *corners, 
+                              int x, int y, int w, int h);
+
 static void
 alt_create_maze(struct state *st)
 {
@@ -631,159 +594,21 @@ alt_create_maze(struct state *st)
       corners[i*width] = 1;
       corners[i*width+width-1] = 1;
     }
-  /* Walls around logo. In fact, inside the logo, too. */
-  /* Also draw the walls. */
+
+  /* mask out the logo area */
   if(st->logo_x!=-1)
     {
       int logow = 1 + st->logo_width / st->grid_width;
       int logoh = 1 + st->logo_height / st->grid_height;
-      int bridge_dir, bridge_c;
+      alt_mask_out_rect (st, corners, st->logo_x, st->logo_y, logow, logoh);
+    }
 
-      if(st->bridge_p && logoh>=3 && logow>=3)
-       {
-         bridge_dir = 1+random()%2;
-         if(bridge_dir==1)
-           {
-             bridge_c = st->logo_y+random()%(logoh-2)+1;
-           }
-         else
-           {
-             bridge_c = st->logo_x+random()%(logow-2)+1;
-           }
-       }
-      else
-       {
-         bridge_dir = 0;
-         bridge_c = -1;
-       }
-      for(i = st->logo_x; i <= st->logo_x + logow; i++)
-       {
-         for(j = st->logo_y; j <= st->logo_y + logoh; j++)
-           {
-             corners[i+width*j] = 1;
-           }
-       }
-      for(xx = st->logo_x; xx < st->logo_x+logow; xx++)
-       {
-         if(!(bridge_dir==2 && xx==bridge_c))
-           {
-             build_wall(st, xx, st->logo_y, 0);
-             build_wall(st, xx, st->logo_y+logoh, 0);
-           }
-         if(bridge_dir==1)
-           {
-             build_wall(st, xx, bridge_c, 0);
-             build_wall(st, xx, bridge_c, 2);
-           }
-       }
-      for(yy = st->logo_y; yy < st->logo_y+logoh; yy++)
-       {
-         if(!(bridge_dir==1 && yy==bridge_c))
-           {
-             build_wall(st, st->logo_x, yy, 3);
-             build_wall(st, st->logo_x+logow, yy, 3);
-           }
-         if(bridge_dir==2)
-           {
-             build_wall(st, bridge_c, yy, 1);
-             build_wall(st, bridge_c, yy, 3);
-           }
-       }
-      /* Connect one wall of the logo with an outside wall. */
-      if(st->bridge_p)
-       dir = (bridge_dir+1)%4;
-      else
-       dir = random()%4;
-      switch(dir)
-       {
-       case 0:
-         xx = st->logo_x+(random()%(logow+1));
-         yy = st->logo_y;
-         break;
-       case 1:
-         xx = st->logo_x+logow;
-         yy = st->logo_y+(random()%(logoh+1));
-         break;
-       case 2:
-         xx = st->logo_x+(random()%(logow+1));
-         yy = st->logo_y+logoh;
-         break;
-       case 3:
-         xx = st->logo_x;
-         yy = st->logo_y+(random()%(logoh+1));
-         break;
-       }
-      do
-       {
-         corners[xx+width*yy] = 1;
-         switch(dir)
-           {
-           case 0:
-             build_wall(st, xx-1, yy-1, 1);
-             yy--;
-             break;
-           case 1:
-             build_wall(st, xx, yy, 0);
-             xx++;
-             break;
-           case 2:
-             build_wall(st, xx, yy, 3);
-             yy++;
-             break;
-           case 3:
-             build_wall(st, xx-1, yy-1, 2);
-             xx--;
-             break;      
-           }
-       }
-      while(!corners[xx+width*yy]);
-      if(st->bridge_p)
-       {
-         dir = (dir+2)%4;
-         switch(dir)
-           {
-           case 0:
-             xx = st->logo_x+(random()%(logow+1));
-             yy = st->logo_y;
-             break;
-           case 1:
-             xx = st->logo_x+logow;
-             yy = st->logo_y+(random()%(logoh+1));
-             break;
-           case 2:
-             xx = st->logo_x+(random()%(logow+1));
-             yy = st->logo_y+logoh;
-             break;
-           case 3:
-             xx = st->logo_x;
-             yy = st->logo_y+(random()%(logoh+1));
-             break;
-           }
-         do
-           {
-             corners[xx+width*yy] = 1;
-             switch(dir)
-               {
-               case 0:
-                 build_wall(st, xx-1, yy-1, 1);
-                 yy--;
-                 break;
-               case 1:
-                 build_wall(st, xx, yy, 0);
-                 xx++;
-                 break;
-               case 2:
-                 build_wall(st, xx, yy, 3);
-                 yy++;
-                 break;
-               case 3:
-                 build_wall(st, xx-1, yy-1, 2);
-                 xx--;
-                 break;          
-               }
-           }
-         while(!corners[xx+width*yy]);
-       }
+  /* mask out the FPS area */
+  if(st->fps_width>0)
+    {
+      int fpsw = 1 + st->fps_width  / st->grid_width;
+      int fpsh = 1 + st->fps_height / st->grid_height;
+      alt_mask_out_rect (st, corners, 0, st->maze_size_y-fpsh, fpsw, fpsh);
     }
 
   /* Count open gridpoints. */
@@ -867,54 +692,51 @@ alt_create_maze(struct state *st)
   free(c_idx);
 }
 
-/* The original maze creator. Start somewhere. Take a step in a random 
- * direction. Keep doing this until we hit a wall. Then, backtrack until
- * we find a point where we can go in another direction.
- */
+
+/* mark a rectangle as being unavailable for usage in the maze */
 static void
-create_maze (struct state *st)    /* create a maze layout given the initialized maze */
+alt_mask_out_rect(struct state *st, char *corners, int x, int y, int w, int h)
 {
-  register int i, newdoor = 0;
-  int logow = 1 + st->logo_width / st->grid_width;
-  int logoh = 1 + st->logo_height / st->grid_height;
-  
-  /* Maybe we should make a bridge? */
-  if(st->bridge_p && st->logo_x >= 0 && logow>=3 && logoh>=3)
-    {
-      int bridge_dir, bridge_c;
+  int i, j, xx, yy;
+  int mazew = st->maze_size_x+1;
 
-      bridge_dir = 1+random()%2;
-      if(bridge_dir==1)
-       {
-         if(logoh>=3)
-           bridge_c = st->logo_y+random()%(logoh-2)+1;
-         else
-           bridge_c = st->logo_y+random()%logoh;
-       }
-      else
-       {
-         if(logow>=3)
-           bridge_c = st->logo_x+random()%(logow-2)+1;
-         else
-           bridge_c = st->logo_x+random()%logow;
-       }
+  for(i = x; i <= x+w; i++)
+    for(j = y; j <= y+h; j++)
+      corners[i+mazew*j] = 1;
 
-      if(bridge_dir==1)
-       {
-         for(i = st->logo_x; i < st->logo_x+logow; i++)
-           {
-             st->maze[i][bridge_c] &= ~DOOR_IN_TOP;
-           }
-       }
-      else
-       {
-         for(i = st->logo_y; i < st->logo_y+logoh; i++)
-           {
-             st->maze[bridge_c][i] &= ~DOOR_IN_TOP;
-           }
-       }
+  for(xx = x; xx < x+w; xx++)
+    {
+      build_wall(st, xx, y, 0);
+      if (y+h < st->maze_size_y)
+        build_wall(st, xx, y+h, 0);
     }
+  for(yy = y; yy < y+h; yy++)
+    {
+      if (x > 0)
+        build_wall(st, x, yy, 3);
+      build_wall(st, x+w, yy, 3);
+    }
+}
+
+
+/****************************************************************************
+ Generator 0: The original maze generator.
 
+ Start somewhere.  Take a step in a random direction.  Keep doing this until
+ we hit a wall.  Then, backtrack until we find a point where we can go in
+ another direction.
+
+ This is essentially the "depth-first recursive backtracker" algorithm.
+ ****************************************************************************/
+
+static int choose_door (struct state *st);
+static int backup (struct state *st);
+
+static void
+create_maze (struct state *st)    /* create a maze layout given the initialized maze */
+{
+  int i, newdoor = 0;
+  
   do {
     st->move_list[st->sqnum].x = st->cur_sq_x;
     st->move_list[st->sqnum].y = st->cur_sq_y;
@@ -962,7 +784,7 @@ static int
 choose_door (struct state *st)                                   /* pick a new path */
 {
   int candidates[3];
-  register int num_candidates;
+  int num_candidates;
   
   num_candidates = 0;
   
@@ -1049,12 +871,16 @@ backup (struct state *st)                                          /* back up a
 }
 
 
+/****************************************************************************
+ Drawing the maze
+ ****************************************************************************/
+
+/* draws the maze outline, and the logo */
 static void
-draw_maze_border (struct state *st)                         /* draw the maze outline */
+draw_maze_border (struct state *st)
 {
-  register int i, j;
-  
-  
+  int i, j;
+
   for ( i=0; i<st->maze_size_x; i++) {
     if ( st->maze[i][0] & WALL_TOP ) {
       XDrawLine(st->dpy, st->window, st->gc,
@@ -1130,6 +956,40 @@ draw_maze_border (struct state *st)                         /* draw the maze out
 }
 
 
+/* Mark the maze grid as having a wall at the given coordinate,
+   and draw that wall on the screen. */
+static void
+build_wall(struct state *st, int i, int j, int dir)
+{
+  /* Draw it on the screen. */
+  draw_wall(st, i, j, dir, st->gc);
+  /* Put it in the maze. */
+  switch(dir)
+    {
+    case 0:
+      st->maze[i][j] |= WALL_TOP;
+      if(j>0)
+       st->maze[i][j-1] |= WALL_BOTTOM;
+      break;
+    case 1:
+      st->maze[i][j] |= WALL_RIGHT;
+      if(i<st->maze_size_x-1)
+       st->maze[i+1][j] |= WALL_LEFT;
+      break;
+    case 2:
+      st->maze[i][j] |= WALL_BOTTOM;
+      if(j<st->maze_size_y-1)
+       st->maze[i][j+1] |= WALL_TOP;
+      break;
+    case 3:
+      st->maze[i][j] |= WALL_LEFT;
+      if(i>0)
+       st->maze[i-1][j] |= WALL_RIGHT;
+      break;
+    }
+}
+
+
 static void
 draw_wall(struct state *st, int i, int j, int dir, GC with_gc)                /* draw a single wall */
 {
@@ -1176,77 +1036,10 @@ draw_wall(struct state *st, int i, int j, int dir, GC with_gc)                /*
   }
 }
 
-/* Actually build a wall. */
-static void
-build_wall(struct state *st, int i, int j, int dir)
-{
-  /* Draw it on the screen. */
-  draw_wall(st, i, j, dir, st->gc);
-  /* Put it in the maze. */
-  switch(dir)
-    {
-    case 0:
-      st->maze[i][j] |= WALL_TOP;
-      if(j>0)
-       st->maze[i][j-1] |= WALL_BOTTOM;
-      break;
-    case 1:
-      st->maze[i][j] |= WALL_RIGHT;
-      if(i<st->maze_size_x-1)
-       st->maze[i+1][j] |= WALL_LEFT;
-      break;
-    case 2:
-      st->maze[i][j] |= WALL_BOTTOM;
-      if(j<st->maze_size_y-1)
-       st->maze[i][j+1] |= WALL_TOP;
-      break;
-    case 3:
-      st->maze[i][j] |= WALL_LEFT;
-      if(i>0)
-       st->maze[i-1][j] |= WALL_RIGHT;
-      break;
-    }
-}
-
-/* Break out a wall. */
-#if 0
-static void
-break_wall(i, j, dir)
-     int i, j, dir;
-{
-  /* Draw it on the screen. */
-  draw_wall(i, j, dir, st->erase_gc);
-  /* Put it in the maze. */
-  switch(dir)
-    {
-    case 0:
-      st->maze[i][j] &= ~WALL_TOP;
-      if(j>0)
-       maze[i][j-1] &= ~WALL_BOTTOM;
-      break;
-    case 1:
-      st->maze[i][j] &= ~WALL_RIGHT;
-      if(i<st->maze_size_x-1)
-       maze[i+1][j] &= ~WALL_LEFT;
-      break;
-    case 2:
-      st->maze[i][j] &= ~WALL_BOTTOM;
-      if(j<st->maze_size_y-1)
-       maze[i][j+1] &= ~WALL_BOTTOM;
-      break;
-    case 3:
-      st->maze[i][j] &= ~WALL_LEFT;
-      if(i>0)
-       maze[i-1][j] &= ~WALL_RIGHT;
-      break;
-    }
-}
-#endif /* 0 */
-
 
 static void
 draw_solid_square(struct state *st, 
-                  int i, int j,          /* draw a solid square in a square */
+                  int i, int j,
                  int dir, GC with_gc)
 {
   switch (dir) {
@@ -1277,6 +1070,10 @@ draw_solid_square(struct state *st,
   }
 }
 
+/****************************************************************************
+ Solving the maze
+ ****************************************************************************/
+
 static int
 longdeadend_p(struct state *st, int x1, int y1, int x2, int y2, int endwall)
 {
@@ -1380,8 +1177,9 @@ find_dead_regions(struct state *st)
       }
 }
 
+/* solve the maze by one more tick */
 static int
-solve_maze (struct state *st)                     /* solve it with graphical feedback */
+solve_maze (struct state *st)
 {
   struct solve_state *ss = st->solve_state;
   if (!ss)
@@ -1542,37 +1340,10 @@ solve_maze (struct state *st)                     /* solve it with graphical fee
     return 0;
 } 
 
-#if 0
-static void
-enter_square (int n)                      /* move into a neighboring square */
-{
-  draw_solid_square( (int)st->path[n].x, (int)st->path[n].y, 
-                   (int)st->path[n].dir, st->tgc);
-  
-  st->path[n+1].dir = -1;
-  switch (st->path[n].dir) {
-  case 0: st->path[n+1].x = st->path[n].x;
-    st->path[n+1].y = st->path[n].y - 1;
-    break;
-  case 1: st->path[n+1].x = st->path[n].x + 1;
-    st->path[n+1].y = st->path[n].y;
-    break;
-  case 2: st->path[n+1].x = st->path[n].x;
-    st->path[n+1].y = st->path[n].y + 1;
-    break;
-  case 3: st->path[n+1].x = st->path[n].x - 1;
-    st->path[n+1].y = st->path[n].y;
-    break;
-  }
-}
-#endif /* 0 */
-
 
-/*
- *  jmr additions for Jamie Zawinski's <jwz@jwz.org> screensaver stuff,
- *  note that the code above this has probably been hacked about in some
- *  arbitrary way.
- */
+/****************************************************************************
+ XScreenSaver boilerplate: resources, command line options, and main loop.
+ ****************************************************************************/
 
 static const char *maze_defaults[] = {
   ".background:           black",
@@ -1581,7 +1352,6 @@ static const char *maze_defaults[] = {
   "*gridSize:     0",
   "*generator:     -1",
   "*maxLength:     5",
-  "*bridge:        False",
   "*ignorant:      False",
 
   "*solveDelay:           10000",
@@ -1611,8 +1381,6 @@ static XrmOptionDescRec maze_options[] = {
   { "-surround-color", ".surroundColor",XrmoptionSepArg, 0 },
   { "-generator",       ".generator",   XrmoptionSepArg, 0 },
   { "-max-length",      ".maxLength",   XrmoptionSepArg, 0 },
-  { "-bridge",          ".bridge",      XrmoptionNoArg, "True" },
-  { "-no-bridge",       ".bridge",      XrmoptionNoArg, "False" },
   { 0, 0, 0, 0 }
 };
 
@@ -1622,9 +1390,6 @@ static void *
 maze_init (Display *dpy_arg, Window window_arg)
 {
   struct state *st = (struct state *) calloc (1, sizeof(*st));
-# ifdef DO_STIPPLE
-  Pixmap gray;
-# endif
   int size;
   XWindowAttributes xgwa;
   unsigned long bg, fg, pfg, pbg, sfg, ufg;
@@ -1645,9 +1410,15 @@ maze_init (Display *dpy_arg, Window window_arg)
   st->post_solve_delay = get_integer_resource (st->dpy, "postDelay", "Integer");
   generator = get_integer_resource(st->dpy, "generator", "Integer");
   st->max_length = get_integer_resource(st->dpy, "maxLength", "Integer");
-  st->bridge_p = get_boolean_resource(st->dpy, "bridge", "Boolean");
   st->ignorant_p = get_boolean_resource(st->dpy, "ignorant", "Boolean");
 
+  if (get_boolean_resource (st->dpy, "doFPS", "DoFPS"))
+    {
+      /* Just guess, rather than loading and measuring the "fpsFont"... */
+      st->fps_width = 210;
+      st->fps_height = 62;
+    }
+
   if (!size) st->ifrandom = 1;
 
   if (size < 2) size = 7 + (random () % 30);
@@ -1669,10 +1440,6 @@ maze_init (Display *dpy_arg, Window window_arg)
   st->logo_gc = XCreateGC(st->dpy, st->window, 0, 0);
   st->erase_gc = XCreateGC(st->dpy, st->window, 0, 0);
   
-# ifdef DO_STIPPLE
-  gray = XCreateBitmapFromData (st->dpy,st->window,gray1_bits,gray1_width,gray1_height);
-# endif
-
   bg  = get_pixel_resource (st->dpy, xgwa.colormap, "background","Background");
   fg  = get_pixel_resource (st->dpy, xgwa.colormap, "foreground","Foreground");
   pfg = get_pixel_resource (st->dpy, xgwa.colormap, "liveColor", "Foreground");
@@ -1695,15 +1462,6 @@ maze_init (Display *dpy_arg, Window window_arg)
   XSetForeground (st->dpy, st->erase_gc, bg);
   XSetBackground (st->dpy, st->erase_gc, bg);
 
-# ifdef DO_STIPPLE
-  XSetStipple (st->dpy, st->cgc, gray);
-  XSetFillStyle (st->dpy, st->cgc, FillOpaqueStippled);
-  XSetStipple (st->dpy, st->sgc, gray);
-  XSetFillStyle (st->dpy, st->sgc, FillOpaqueStippled);
-  XSetStipple (st->dpy, st->ugc, gray);
-  XSetFillStyle (st->dpy, st->ugc, FillOpaqueStippled);
-# endif
-  
   {
     Window r;
     int x, y;
diff --git a/hacks/mismunch.c b/hacks/mismunch.c
deleted file mode 100644 (file)
index 008345e..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/* mismunch.c
- * Munch Errors
- * Copyright (c) 2004 Steven Hazel <sah@thalassocracy.org>
- *
- * 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.
- *
- * Based on munch.c
- * A munching squares implementation for X
- * Copyright 1997, Tim Showalter <tjs@andrew.cmu.edu>
- *
- * Some code stolen from / This is meant to work with
- * xscreensaver, Copyright (c) 1992, 1995, 1996 Jamie Zawinski <jwz@jwz.org>
- *
- */
-
-#include <math.h>
-#include "screenhack.h"
-
-typedef struct _muncher {
-  int width;
-  int atX, atY;
-  int kX, kT, kY;
-  int grav;
-  XColor fgc;
-  int yshadow, xshadow;
-  int x, y, t;
-  int doom;
-  int done;
-} muncher;
-
-
-struct state {
-  Display *dpy;
-  Window window;
-
-  GC gc;
-  int delay, simul, clear, xor;
-  int logminwidth, logmaxwidth;
-  int restart, window_width, window_height;
-
-  int draw_n;  /* number of squares before we have to clear */
-  int draw_i;
-
-  muncher **munchers;
-};
-
-
-/*
- * dumb way to get # of digits in number.  Probably faster than actually
- * doing a log and a division, maybe.
- */
-static int dumb_log_2(int k) 
-{
-  int r = -1;
-  while (k > 0) {
-    k >>= 1; r++;
-  }
-  return r;
-}
-
-
-static void calc_logwidths (struct state *st) 
-{
-  /* Choose a range of square sizes based on the window size.  We want
-     a power of 2 for the square width or the munch doesn't fill up.
-     Also, if a square doesn't fit inside an area 20% smaller than the
-     window, it's too big.  Mismunched squares that big make things
-     look too noisy. */
-
-  if (st->window_height < st->window_width) {
-    st->logmaxwidth = (int)dumb_log_2(st->window_height * 0.8);
-  } else {
-    st->logmaxwidth = (int)dumb_log_2(st->window_width * 0.8);
-  }
-
-  if (st->logmaxwidth < 2) {
-    st->logmaxwidth = 2;
-  }
-
-  /* we always want three sizes of squares */
-  st->logminwidth = st->logmaxwidth - 2;
-
-  if (st->logminwidth < 2) {
-    st->logminwidth = 2;
-  }
-}
-
-
-
-static muncher *make_muncher (struct state *st) 
-{
-  int logwidth;
-  XWindowAttributes xgwa;
-  muncher *m = (muncher *) malloc(sizeof(muncher));
-
-  XGetWindowAttributes(st->dpy, st->window, &xgwa);
-
-  /* choose size -- power of two */
-  logwidth = (st->logminwidth +
-              (random() % (1 + st->logmaxwidth - st->logminwidth)));
-
-  m->width = 1 << logwidth;
-
-  /* draw at this location */
-  m->atX = (random() % (xgwa.width <= m->width ? 1
-                        : xgwa.width - m->width));
-  m->atY = (random() % (xgwa.height <= m->width ? 1
-                        : xgwa.width - m->width));
-
-  /* wrap-around by these values; no need to % as we end up doing that
-     later anyway */
-  m->kX = ((random() % 2)
-           ? (random() % m->width) : 0);
-  m->kT = ((random() % 2)
-           ? (random() % m->width) : 0);
-  m->kY = ((random() % 2)
-           ? (random() % m->width) : 0);
-
-  /* set the gravity of the munch, or rather, which direction we draw
-     stuff in. */
-  m->grav = random() % 2;
-
-  /* I like this color scheme better than random colors. */
-  switch (random() % 4) {
-    case 0:
-      m->fgc.red = random() % 65536;
-      m->fgc.blue = random() % 32768;
-      m->fgc.green = random() % 16384;
-      break;
-
-    case 1:
-      m->fgc.red = 0;
-      m->fgc.blue = random() % 65536;
-      m->fgc.green = random() % 16384;
-      break;
-
-    case 2:
-      m->fgc.red = random() % 8192;
-      m->fgc.blue = random() % 8192;
-      m->fgc.green = random() % 49152;
-      break;
-
-    case 3:
-      m->fgc.red = random() % 65536;
-      m->fgc.green = m->fgc.red;
-      m->fgc.blue = m->fgc.red;
-      break;
-  }
-
-  /* Sometimes draw a mostly-overlapping copy of the square.  This
-     generates all kinds of neat blocky graphics when drawing in xor
-     mode. */
-  if (random() % 4) {
-    m->xshadow = 0;
-    m->yshadow = 0;
-  } else {
-    m->xshadow = (random() % (m->width/3)) - (m->width/6);
-    m->yshadow = (random() % (m->width/3)) - (m->width/6);
-  }
-
-  /* Start with a random y value -- this sort of controls the type of
-     deformities seen in the squares. */
-  m->y = random() % 256;
-
-  m->t = 0;
-
-  /*
-    Doom each square to be aborted at some random point.
-    (When doom == (width - 1), the entire square will be drawn.)
-  */
-  m->doom = random() % m->width;
-
-  m->done = 0;
-
-  return m;
-}
-
-
-static void munch (struct state *st, muncher *m) 
-{
-  int drawX, drawY;
-  XWindowAttributes xgwa;
-
-  if (m->done) {
-    return;
-  }
-
-  XGetWindowAttributes(st->dpy, st->window, &xgwa);
-
-  if (!mono_p) {
-    /* XXX there are probably bugs with this. */
-    if (XAllocColor(st->dpy, xgwa.colormap, &m->fgc)) {
-      XSetForeground(st->dpy, st->gc, m->fgc.pixel);
-    }
-  }
-
-  /* Finally draw this pass of the munching error. */
-
-  for(m->x = 0; m->x < m->width; m->x++) {
-    /* figure out the next point */
-
-    /*
-      The ordinary Munching Squares calculation is:
-      m->y = ((m->x ^ ((m->t + m->kT) % m->width)) + m->kY) % m->width;
-
-      We create some feedback by plugging in y in place of x, and
-      make a couple of values negative so that some parts of some
-      squares get drawn in the wrong place.
-    */
-    m->y = ((-m->y ^ ((-m->t + m->kT) % m->width)) + m->kY) % m->width;
-
-    drawX = ((m->x + m->kX) % m->width) + m->atX;
-    drawY = (m->grav ? m->y + m->atY : m->atY + m->width - 1 - m->y);
-
-    XDrawPoint(st->dpy, st->window, st->gc, drawX, drawY);
-    if ((m->xshadow != 0) || (m->yshadow != 0)) {
-      /* draw the corresponding shadow point */
-      XDrawPoint(st->dpy, st->window, st->gc, drawX + m->xshadow, drawY + m->yshadow);
-    }
-    /* XXX may want to change this to XDrawPoints,
-       but it's fast enough without it for the moment. */
-
-  }
-
-  m->t++;
-  if (m->t > m->doom) {
-    m->done = 1;
-  }
-}
-
-
-static void *
-mismunch_init (Display *dpy, Window w)
-{
-  struct state *st = (struct state *) calloc (1, sizeof(*st));
-  XWindowAttributes xgwa;
-  XGCValues gcv;
-  int i;
-
-  st->dpy = dpy;
-  st->window = w;
-  st->restart = 0;
-
-  /* get the dimensions of the window */
-  XGetWindowAttributes(st->dpy, w, &xgwa);
-
-  /* create the gc */
-  gcv.foreground= get_pixel_resource(st->dpy, xgwa.colormap,
-                                     "foreground","Foreground");
-  gcv.background= get_pixel_resource(st->dpy, xgwa.colormap,
-                                     "background","Background");
-
-  st->gc = XCreateGC(st->dpy, w, GCForeground|GCBackground, &gcv);
-
-  st->delay = get_integer_resource(st->dpy, "delay", "Integer");
-  if (st->delay < 0) st->delay = 0;
-
-  st->simul = get_integer_resource(st->dpy, "simul", "Integer");
-  if (st->simul < 1) st->simul = 1;
-
-  st->clear = get_integer_resource(st->dpy, "clear", "Integer");
-  if (st->clear < 0) st->clear = 0;
-
-  st->xor = get_boolean_resource(st->dpy, "xor", "Boolean");
-
-  st->window_width = xgwa.width;
-  st->window_height = xgwa.height;
-
-  calc_logwidths(st);
-
-  /* always draw xor on mono. */
-  if (mono_p || st->xor) {
-    XSetFunction(st->dpy, st->gc, GXxor);
-  }
-
-  st->munchers = (muncher **) calloc(st->simul, sizeof(muncher *));
-  for (i = 0; i < st->simul; i++) {
-    st->munchers[i] = make_muncher(st);
-  }
-
-  return st;
-}
-
-static unsigned long
-mismunch_draw (Display *dpy, Window w, void *closure)
-{
-  struct state *st = (struct state *) closure;
-  int i;
-
-  for (i = 0; i < 5; i++) {
-
-  /* for (draw_i = 0; draw_i < simul; draw_i++)  */
-  {
-    munch(st, st->munchers[st->draw_i]);
-
-    if (st->munchers[st->draw_i]->done) {
-      st->draw_n++;
-
-      free(st->munchers[st->draw_i]);
-      st->munchers[st->draw_i] = make_muncher(st);
-    }
-  }
-
-  st->draw_i++;
-  if (st->draw_i >= st->simul) {
-    int i = 0;
-    st->draw_i = 0;
-    if (st->restart || (st->clear && st->draw_n >= st->clear)) {
-      for (i = 0; i < st->simul; i++) {
-        free(st->munchers[i]);
-        st->munchers[i] = make_muncher(st);
-      }
-
-      XClearWindow(st->dpy, w);
-      st->draw_n = 0;
-      st->restart = 0;
-    }
-  }
-
-  }
-
-  return st->delay;
-}
-
-
-static void
-mismunch_reshape (Display *dpy, Window window, void *closure, 
-                 unsigned int w, unsigned int h)
-{
-  struct state *st = (struct state *) closure;
-  if (w != st->window_width ||
-      h != st->window_height) {
-    st->window_width = w;
-    st->window_height = h;
-    calc_logwidths(st);
-    st->restart = 1;
-    st->draw_i = 0;
-  }
-}
-
-static Bool
-mismunch_event (Display *dpy, Window window, void *closure, XEvent *event)
-{
-  return False;
-}
-
-static void
-mismunch_free (Display *dpy, Window window, void *closure)
-{
-  struct state *st = (struct state *) closure;
-  free (st);
-}
-
-
-static const char *mismunch_defaults [] = {
-  ".background:       black",
-  ".foreground:       white",
-  "*fpsSolid:        true",
-  "*delay:            10000",
-  "*simul:            5",
-  "*clear:            65",
-  "*xor:              True",
-  0
-};
-
-static XrmOptionDescRec mismunch_options [] = {
-  { "-delay",         ".delay",       XrmoptionSepArg,  0 },
-  { "-simul",         ".simul",       XrmoptionSepArg,  0 },
-  { "-clear",         ".clear",       XrmoptionSepArg, "true" },
-  { "-xor",           ".xor",         XrmoptionNoArg,  "true" },
-  { "-no-xor",        ".xor",         XrmoptionNoArg,  "false" },
-  { 0, 0, 0, 0 }
-};
-
-
-XSCREENSAVER_MODULE ("Mismunch", mismunch)
diff --git a/hacks/mismunch.man b/hacks/mismunch.man
deleted file mode 100644 (file)
index d18c844..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-.TH XScreenSaver 1 "10-Feb-04" "X Version 11"
-.SH NAME
-mismunch - munches errors
-.SH SYNOPSIS
-.B mismunch
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP]
-[\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install]
-[\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-xor] [\-noxor] 
-[\-clear \fInumber\fP] [\-simul \fInumber\fP]
-[\-fps]
-.SH DESCRIPTION
-The
-.I mismunch
-program is a creatively broken misimplementation of the classic
-munching squares graphics hack.
-.SH OPTIONS
-.I mismunch
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \fIusecs\fP
-The delay between steps of the animation, in microseconds.  Default: 2500.
-.TP 8
-.B \-xor
-Use the XOR drawing function.  This is the default.
-.TP 8
-.B \-no\-xor
-Don't use the XOR drawing function.
-.TP 8
-.B \-clear \fInumber\fP
-Number of squares to misdraw before clearing the display.  Default: 65.
-.TP 8
-.B \-simul \fInumber\fP
-Number of squares to misdraw simultaneously.  Default: 5.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 munch (MANSUFFIX)
-.SH COPYRIGHT
-Copyright \(co 2004 Steven Hazel.  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.
-
-Based on the munch screensaver Copyright \(co 1997, 
-Tim Showalter <tjs@andrew.cmu.edu>.
-.SH AUTHOR
-Steven Hazel <sah@thalassocracy.org>, 10-Feb-04
index 9ab053fa2066b37cb625ef37f07eb267faf0e876..2636375edf4bcab802c8ecafebdf9399884febfe 100644 (file)
@@ -1,45 +1,91 @@
-/* munch.c
- * A munching squares implementation for X
- * Tim Showalter <tjs@andrew.cmu.edu>
+/* Munching Squares and Mismunch
+ *
+ * Portions copyright 1992-2008 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 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.
+ *
+ * Portions Copyright 1997, Tim Showalter
+ *
+ *   Permission is granted to copy, modify, and use this as long
+ *   as this notice remains intact.  No warranties are expressed or
+ *   implied.  CMU Sucks.
  * 
- * Copyright 1997, Tim Showalter
- * Permission is granted to copy, modify, and use this as long
- * as this notice remains intact.  No warranties are expressed or implied.
- * CMU Sucks.
+ * Portions Copyright 2004 Steven Hazel <sah@thalassocracy.org>
+ *
+ *   (The "mismunch" part).
  * 
- * Some code stolen from / This is meant to work with
- * xscreensaver, Copyright (c) 1992, 1995, 1996
- * Jamie Zawinski <jwz@jwz.org>
+ * "munch.c" and "mismunch.c" merged by jwz, 29-Aug-2008.
  *
- * 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.
- */
-
-/* Munching Squares is this simplistic, silly screen hack (according
-   to HAKMEM, discovered by Jackson Wright in 1962) where you take
-   Y = X XOR T and graph it over and over.  According to HAKMEM, it 
-   takes 5 instructions of PDP-1 assembly.  This is a little more
-   complicated than that, mostly X's fault, but it does some other
-   random things.
-
-   http://www.inwap.com/pdp10/hbaker/hakmem/hacks.html#item146
+ *
+ *
+ ***********************************************************************
+ *
+ * HAKMEM
+ *
+ * MIT AI Memo 239, Feb. 29, 1972.
+ * Beeler, M., Gosper, R.W., and Schroeppel, R.
+ *
+ * http://www.inwap.com/pdp10/hbaker/hakmem/hacks.html#item146
+ *
+ ***********************************************************************
+ *
+ * ITEM 146: MUNCHING SQUARES
+ *
+ *     Another simple display program. It is thought that this was
+ *     discovered by Jackson Wright on the RLE PDP-1 circa 1962.
+ *
+ *          DATAI 2
+ *          ADDB 1,2
+ *          ROTC 2,-22
+ *          XOR 1,2
+ *          JRST .-4
+ *
+ *     2=X, 3=Y. Try things like 1001002 in data switches. This also
+ *     does * interesting things with operations other than XOR, and
+ *     rotations * other than -22. (Try IOR; AND; TSC; FADR; FDV(!);
+ *     ROT * -14, -9, -20, * ...)
+ *
+ * ITEM 147 (Schroeppel):
+ *
+ *     Munching squares is just views of the graph Y = X XOR T for
+ *     consecutive values of T = time.
+ *
+ * ITEM 147 (Cohen, Beeler):
+ *
+ *     A modification to munching squares which reveals them in frozen
+ *     states through opening and closing curtains: insert FADR 2,1
+ *     before the XOR. Try data switches =
+ *
+ *          4000,,4         1000,,2002      2000,,4        0,,1002
+ *
+ *     (Notation: <left half>,,<right half>)
+ *     Also try the FADR after the XOR, switches = 1001,,1.
+ *
+ ***********************************************************************
  */
 
 #include <math.h>
-/*#include <assert.h>*/
 #include "screenhack.h"
 
-/* flags for random things.  Must be < log2(random's maximum), incidentially.
- */
-#define SHIFT_KX (0x01)
-#define SHIFT_KT (0x02)
-#define SHIFT_KY (0x04)
-#define GRAV     (0x08)
+typedef struct _muncher {
+  int mismunch;
+  int width;
+  int atX, atY;
+  int kX, kT, kY;
+  int grav;
+  XColor fgc;
+  int yshadow, xshadow;
+  int x, y, t;
+  int doom;
+  int done;
+} muncher;
 
 
 struct state {
@@ -47,214 +93,325 @@ struct state {
   Window window;
 
   GC gc;
-  int delay, hold, clear, logminwidth, shiftk, xor;
-
-  int logmaxwidth;
-  int maxwidth;
-  int randflags;
-  int thiswidth;
-  XWindowAttributes xgwa;
+  int delay, simul, clear, xor;
+  int logminwidth, logmaxwidth;
+  int restart, window_width, window_height;
 
-  int munch_t;
+  int draw_n;  /* number of squares before we have to clear */
+  int draw_i;
+  int mismunch;
 
-  int reset;
-  int atX, atY, kX, kT, kY, grav;
-  int square_count;
+  muncher **munchers;
 };
 
 
-static int munchOnce (struct state *st, int width)
+/*
+ * dumb way to get # of digits in number.  Probably faster than actually
+ * doing a log and a division, maybe.
+ */
+static int dumb_log_2(int k) 
 {
+  int r = -1;
+  while (k > 0) {
+    k >>= 1; r++;
+  }
+  return r;
+}
 
-    if (st->munch_t == 0) {
-      /*
-        fprintf(stderr,"Doing width %d at %d %d shift %d %d %d grav %d\n",
-        width, atX, atY, kX, kT, kY, grav);
-      */
-    
-      if (!mono_p) {
-        XColor fgc;
-       fgc.red = random() % 65535;
-       fgc.green = random() % 65535;
-       fgc.blue = random() % 65535;
-    
-       if (XAllocColor(st->dpy, st->xgwa.colormap, &fgc)) {
-          XSetForeground(st->dpy, st->gc, fgc.pixel);
-       }
-      }
-    }
-    
-    /* Finally draw this munching square. */
-    /* for(munch_t = 0; munch_t < width; munch_t++) */
-    {
-      int x;
-      for(x = 0; x < width; x++) {
-        /* figure out the next point */
-        int y = ((x ^ ((st->munch_t + st->kT) % width)) + st->kY) % width;
-        int drawX = ((x + st->kX) % width) + st->atX;
-        int drawY = (st->grav ? y + st->atY : st->atY + width - 1 - y);
-
-        /* used to be bugs where it would draw partially offscreen.
-           while that might be a pretty feature, I didn'munch_t want it to do
-           that yet.  if these trigger, please let me know.
-        */
-        /*         assert(drawX >= 0 && drawX < xgwa.width);
-          assert(drawY >= 0 && drawY < xgwa.height);
-        */
-
-        XDrawPoint(st->dpy, st->window, st->gc, drawX, drawY);
-        /* XXX may want to change this to XDrawPoints,
-           but it's fast enough without it for the moment. */
-           
-      }
-    }
 
-    st->munch_t++;
-    if (st->munch_t >= width) {
-      st->munch_t = 0;
-      return 1;
-    }
+static void calc_logwidths (struct state *st) 
+{
+  /* Choose a range of square sizes based on the window size.  We want
+     a power of 2 for the square width or the munch doesn't fill up.
+     Also, if a square doesn't fit inside an area 20% smaller than the
+     window, it's too big.  Mismunched squares that big make things
+     look too noisy. */
+
+  if (st->window_height < st->window_width) {
+    st->logmaxwidth = (int)dumb_log_2(st->window_height * 0.8);
+  } else {
+    st->logmaxwidth = (int)dumb_log_2(st->window_width * 0.8);
+  }
+
+  if (st->logmaxwidth < 2) {
+    st->logmaxwidth = 2;
+  }
+
+  /* we always want three sizes of squares */
+  st->logminwidth = st->logmaxwidth - 2;
+
+  if (st->logminwidth < 2) {
+    st->logminwidth = 2;
+  }
+}
+
 
-    return 0;
+
+static muncher *make_muncher (struct state *st) 
+{
+  int logwidth;
+  XWindowAttributes xgwa;
+  muncher *m = (muncher *) malloc(sizeof(muncher));
+
+  XGetWindowAttributes(st->dpy, st->window, &xgwa);
+
+  m->mismunch = st->mismunch;
+
+  /* choose size -- power of two */
+  logwidth = (st->logminwidth +
+              (random() % (1 + st->logmaxwidth - st->logminwidth)));
+
+  m->width = 1 << logwidth;
+
+  /* draw at this location */
+  m->atX = (random() % (xgwa.width <= m->width ? 1
+                        : xgwa.width - m->width));
+  m->atY = (random() % (xgwa.height <= m->width ? 1
+                        : xgwa.width - m->width));
+
+  /* wrap-around by these values; no need to % as we end up doing that
+     later anyway */
+  m->kX = ((random() % 2)
+           ? (random() % m->width) : 0);
+  m->kT = ((random() % 2)
+           ? (random() % m->width) : 0);
+  m->kY = ((random() % 2)
+           ? (random() % m->width) : 0);
+
+  /* set the gravity of the munch, or rather, which direction we draw
+     stuff in. */
+  m->grav = random() % 2;
+
+  /* I like this color scheme better than random colors. */
+  switch (random() % 4) {
+    case 0:
+      m->fgc.red = random() % 65536;
+      m->fgc.blue = random() % 32768;
+      m->fgc.green = random() % 16384;
+      break;
+
+    case 1:
+      m->fgc.red = 0;
+      m->fgc.blue = random() % 65536;
+      m->fgc.green = random() % 16384;
+      break;
+
+    case 2:
+      m->fgc.red = random() % 8192;
+      m->fgc.blue = random() % 8192;
+      m->fgc.green = random() % 49152;
+      break;
+
+    case 3:
+      m->fgc.red = random() % 65536;
+      m->fgc.green = m->fgc.red;
+      m->fgc.blue = m->fgc.red;
+      break;
+  }
+
+  /* Sometimes draw a mostly-overlapping copy of the square.  This
+     generates all kinds of neat blocky graphics when drawing in xor
+     mode. */
+  if (!m->mismunch || (random() % 4)) {
+    m->xshadow = 0;
+    m->yshadow = 0;
+  } else {
+    m->xshadow = (random() % (m->width/3)) - (m->width/6);
+    m->yshadow = (random() % (m->width/3)) - (m->width/6);
+  }
+
+  /* Start with a random y value -- this sort of controls the type of
+     deformities seen in the squares. */
+  m->y = random() % 256;
+
+  m->t = 0;
+
+  /*
+    Doom each square to be aborted at some random point.
+    (When doom == (width - 1), the entire square will be drawn.)
+  */
+  m->doom = (m->mismunch ? (random() % m->width) : (m->width - 1));
+  m->done = 0;
+
+  return m;
 }
 
-/*
- * dumb way to get # of digits in number.  Probably faster than actually
- * doing a log and a division, maybe.
- */
-static int dumb_log_2(int k)
+
+static void munch (struct state *st, muncher *m) 
 {
-    int r = -1;
-    while (k > 0) {
-       k >>= 1; r++;
+  int drawX, drawY;
+  XWindowAttributes xgwa;
+
+  if (m->done) {
+    return;
+  }
+
+  XGetWindowAttributes(st->dpy, st->window, &xgwa);
+
+  if (!mono_p) {
+    /* XXX there are probably bugs with this. */
+    if (XAllocColor(st->dpy, xgwa.colormap, &m->fgc)) {
+      XSetForeground(st->dpy, st->gc, m->fgc.pixel);
     }
-    return r;
+  }
+
+  /* Finally draw this pass of the munching error. */
+
+  for(m->x = 0; m->x < m->width; m->x++) {
+    /* figure out the next point */
+
+    /*
+      The ordinary Munching Squares calculation is:
+      m->y = ((m->x ^ ((m->t + m->kT) % m->width)) + m->kY) % m->width;
+
+      We create some feedback by plugging in y in place of x, and
+      make a couple of values negative so that some parts of some
+      squares get drawn in the wrong place.
+    */
+    if (m->mismunch)
+      m->y = ((-m->y ^ ((-m->t + m->kT) % m->width)) + m->kY) % m->width;
+    else
+      m->y = ((m->x ^ ((m->t + m->kT) % m->width)) + m->kY) % m->width;
+
+    drawX = ((m->x + m->kX) % m->width) + m->atX;
+    drawY = (m->grav ? m->y + m->atY : m->atY + m->width - 1 - m->y);
+
+    XDrawPoint(st->dpy, st->window, st->gc, drawX, drawY);
+    if ((m->xshadow != 0) || (m->yshadow != 0)) {
+      /* draw the corresponding shadow point */
+      XDrawPoint(st->dpy, st->window, st->gc, drawX + m->xshadow, drawY + m->yshadow);
+    }
+    /* XXX may want to change this to XDrawPoints,
+       but it's fast enough without it for the moment. */
+
+  }
+
+  m->t++;
+  if (m->t > m->doom) {
+    m->done = 1;
+  }
 }
 
+
 static void *
 munch_init (Display *dpy, Window w)
 {
-    struct state *st = (struct state *) calloc (1, sizeof(*st));
-    XGCValues gcv;
-    
-    st->dpy = dpy;
-    st->window = w;
-
-    /* get the dimensions of the window */
-    XGetWindowAttributes (st->dpy, w, &st->xgwa);
-    
-    /* We need a square; limit on screen size? */
-    /* we want a power of 2 for the width or the munch doesn't fill up.
-     */
-    st->logmaxwidth = (int)
-       dumb_log_2(st->xgwa.height < st->xgwa.width ? st->xgwa.height : st->xgwa.width);
-
-    st->maxwidth = 1 << st->logmaxwidth;
-
-    if (st->logmaxwidth < st->logminwidth) {
-       /* off-by-one error here?  Anyone running on < 640x480? */
-       fprintf(stderr, "munch: screen too small; use -logminwidth\n");
-       fprintf(stderr, "\t(width is %d; log is %d; log must be at least "
-               "%d)\n", 
-               (st->xgwa.height < st->xgwa.width ? st->xgwa.height : st->xgwa.width),
-               st->logmaxwidth, st->logminwidth);
-       exit(0);
-    }
-    
-    /* create the gc */
-    gcv.foreground= get_pixel_resource(st->dpy, st->xgwa.colormap,
-                                       "foreground","Foreground");
-    gcv.background= get_pixel_resource(st->dpy, st->xgwa.colormap,
-                                       "background","Background");
-    
-    st->gc = XCreateGC(st->dpy, w, GCForeground|GCBackground, &gcv);
-    
-    st->delay = get_integer_resource (st->dpy, "delay", "Integer");
-    if (st->delay < 0) st->delay = 0;
-    
-    st->hold = get_integer_resource (st->dpy, "hold", "Integer");
-    if (st->hold < 0) st->hold = 0;
-    
-    st->clear = get_integer_resource (st->dpy, "clear", "Integer");
-    if (st->clear < 0) st->clear = 0;
-
-    st->logminwidth = get_integer_resource (st->dpy, "logminwidth", "Integer");
-    if (st->logminwidth < 2) st->logminwidth = 2;
-
-    st->shiftk = get_boolean_resource(st->dpy, "shift", "Boolean");
-
-    st->xor = get_boolean_resource(st->dpy, "xor", "Boolean");
-
-    /* always draw xor on mono. */
-    if (mono_p || st->xor) {
-       XSetFunction(st->dpy, st->gc, GXxor);
-    }
+  struct state *st = (struct state *) calloc (1, sizeof(*st));
+  XWindowAttributes xgwa;
+  XGCValues gcv;
+  int i;
+  char *mm;
+
+  st->dpy = dpy;
+  st->window = w;
+  st->restart = 0;
+
+  /* get the dimensions of the window */
+  XGetWindowAttributes(st->dpy, w, &xgwa);
+
+  /* create the gc */
+  gcv.foreground= get_pixel_resource(st->dpy, xgwa.colormap,
+                                     "foreground","Foreground");
+  gcv.background= get_pixel_resource(st->dpy, xgwa.colormap,
+                                     "background","Background");
+
+  st->gc = XCreateGC(st->dpy, w, GCForeground|GCBackground, &gcv);
+
+  st->delay = get_integer_resource(st->dpy, "delay", "Integer");
+  if (st->delay < 0) st->delay = 0;
+
+  st->simul = get_integer_resource(st->dpy, "simul", "Integer");
+  if (st->simul < 1) st->simul = 1;
+
+  st->clear = get_integer_resource(st->dpy, "clear", "Integer");
+  if (st->clear < 0) st->clear = 0;
+
+  st->xor = get_boolean_resource(st->dpy, "xor", "Boolean");
+
+  mm = get_string_resource (st->dpy, "mismunch", "Mismunch");
+  if (!mm || !*mm || !strcmp(mm, "random"))
+    st->mismunch = random() & 1;
+  else
+    st->mismunch = get_boolean_resource (st->dpy, "mismunch", "Mismunch");
 
-    st->reset = 1;
+  st->window_width = xgwa.width;
+  st->window_height = xgwa.height;
 
-    return st;
+  calc_logwidths(st);
+
+  /* always draw xor on mono. */
+  if (mono_p || st->xor) {
+    XSetFunction(st->dpy, st->gc, GXxor);
+  }
+
+  st->munchers = (muncher **) calloc(st->simul, sizeof(muncher *));
+  for (i = 0; i < st->simul; i++) {
+    st->munchers[i] = make_muncher(st);
+  }
+
+  return st;
 }
 
 static unsigned long
 munch_draw (Display *dpy, Window w, void *closure)
 {
   struct state *st = (struct state *) closure;
-  int this_delay = st->delay;
+  int i;
+
+  for (i = 0; i < 5; i++) {
+
+  /* for (draw_i = 0; draw_i < simul; draw_i++)  */
+  {
+    munch(st, st->munchers[st->draw_i]);
 
-  if (st->reset)
-    {
-      st->reset = 0;
+    if (st->munchers[st->draw_i]->done) {
+      st->draw_n++;
 
-      this_delay = st->hold;
-      /* saves some calls to random.  big deal */
-      st->randflags = random();
+      free(st->munchers[st->draw_i]);
+      st->munchers[st->draw_i] = make_muncher(st);
+    }
+  }
+
+  st->draw_i++;
+  if (st->draw_i >= st->simul) {
+    int i = 0;
+    st->draw_i = 0;
+    if (st->restart || (st->clear && st->draw_n >= st->clear)) {
 
-      /* choose size -- power of two */
-      st->thiswidth = 1 << (st->logminwidth +
-                        (random() % (1 + st->logmaxwidth - st->logminwidth)));
+      char *mm = get_string_resource (st->dpy, "mismunch", "Mismunch");
+      if (!mm || !*mm || !strcmp(mm, "random"))
+        st->mismunch = random() & 1;
 
-      if (st->clear && ++st->square_count >= st->clear) {
-        XClearWindow(st->dpy, w);
-        st->square_count = 0;
+      for (i = 0; i < st->simul; i++) {
+        free(st->munchers[i]);
+        st->munchers[i] = make_muncher(st);
       }
 
-      /* draw at this location */
-      st->atX = (random() % (st->xgwa.width <= st->thiswidth ? 1
-                         : st->xgwa.width - st->thiswidth));
-      st->atY = (random() % (st->xgwa.height <= st->thiswidth ? 1
-                         : st->xgwa.width - st->thiswidth));
-                 
-      /* wrap-around by these values; no need to %
-         as we end up doing that later anyway*/
-      st->kX = ((st->shiftk && (st->randflags & SHIFT_KX))
-            ? (random() % st->thiswidth) : 0);
-      st->kT = ((st->shiftk && (st->randflags & SHIFT_KT))
-            ? (random() % st->thiswidth) : 0);
-      st->kY = ((st->shiftk && (st->randflags & SHIFT_KY))
-            ? (random() % st->thiswidth) : 0);
-                 
-      /* set the gravity of the munch, or rather,
-         which direction we draw stuff in. */
-      st->grav = (st->randflags & GRAV);
+      XClearWindow(st->dpy, w);
+      st->draw_n = 0;
+      st->restart = 0;
     }
+  }
 
-  if (munchOnce (st, st->thiswidth))
-    st->reset = 1;
+  }
 
-/*  printf("%d\n",this_delay);*/
-  return this_delay;
+  return st->delay;
 }
 
+
 static void
 munch_reshape (Display *dpy, Window window, void *closure, 
                  unsigned int w, unsigned int h)
 {
   struct state *st = (struct state *) closure;
-  st->xgwa.width = w;
-  st->xgwa.height = h;
-  st->logmaxwidth = (int)
-    dumb_log_2(st->xgwa.height < st->xgwa.width ? st->xgwa.height : st->xgwa.width);
-  st->maxwidth = 1 << st->logmaxwidth;
+  if (w != st->window_width ||
+      h != st->window_height) {
+    st->window_width = w;
+    st->window_height = h;
+    calc_logwidths(st);
+    st->restart = 1;
+    st->draw_i = 0;
+  }
 }
 
 static Bool
@@ -270,30 +427,30 @@ munch_free (Display *dpy, Window window, void *closure)
   free (st);
 }
 
-\f
+
 static const char *munch_defaults [] = {
-    ".background:      black",
-    ".foreground:      white",
-    "*fpsSolid:                true",
-    "*delay:           10000",
-    "*hold:            100000",
-    "*clear:           50",
-    "*logminwidth:     7",
-    "*shift:           True",
-    "*xor:             True",
-    0
+  ".background:       black",
+  ".foreground:       white",
+  "*fpsSolid:        true",
+  "*delay:            10000",
+  "*mismunch:         random",
+  "*simul:            5",
+  "*clear:            65",
+  "*xor:              True",
+  0
 };
 
 static XrmOptionDescRec munch_options [] = {
-    { "-delay",                ".delay",       XrmoptionSepArg, 0 },
-    { "-hold",         ".hold",        XrmoptionSepArg, 0 },
-    { "-clear",         ".clear",       XrmoptionSepArg, "true" },
-    { "-shift",         ".shift",       XrmoptionNoArg, "true" },
-    { "-no-shift",     ".shift",       XrmoptionNoArg, "false" },
-    { "-logminwidth",  ".logminwidth", XrmoptionSepArg, 0 },
-    { "-xor",           ".xor",                XrmoptionNoArg, "true" },
-    { "-no-xor",       ".xor",         XrmoptionNoArg, "false" },
-    { 0, 0, 0, 0 }
+  { "-delay",         ".delay",       XrmoptionSepArg,  0 },
+  { "-simul",         ".simul",       XrmoptionSepArg,  0 },
+  { "-clear",         ".clear",       XrmoptionSepArg, "true" },
+  { "-xor",           ".xor",         XrmoptionNoArg,  "true" },
+  { "-no-xor",        ".xor",         XrmoptionNoArg,  "false" },
+  { "-classic",       ".mismunch",    XrmoptionNoArg,  "false" },
+  { "-mismunch",      ".mismunch",    XrmoptionNoArg,  "true" },
+  { "-random",        ".mismunch",    XrmoptionNoArg,  "random" },
+  { 0, 0, 0, 0 }
 };
 
+
 XSCREENSAVER_MODULE ("Munch", munch)
index 0cb170baa15e40ca0981a20a8166efb4d190bdd6..d5423c9876b24af42c979d922fff16ca447f670d 100644 (file)
 .if n .sp 1
 .if t .sp .5
 ..
-.TH XScreenSaver 1 "17-Jun-97" "X Version 11"
+.TH XScreenSaver 1 "29-Aug-2008" "X Version 11"
 .SH NAME
-munch - munching squares screen hack
+munch - munching squares
 .SH SYNOPSIS
 .B munch
 [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP]
 [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install]
-[\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-xor] [\-noxor] [\-shift]
-[\-noshift] [\-logminwidth \fIminimum width\fP]
+[\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-xor] [\-noxor] 
+[\-clear \fInumber\fP] [\-simul \fInumber\fP]
+[\-classic | \-mismunch | \-random]
 [\-fps]
 .SH DESCRIPTION
 The
 .I munch
-program performs the munching squares hack until killed.  It picks square
-size, position, and gravity randomly; configurable options are listed
-below.
-.PP
+program performs the munching squares hack.  It picks square
+size, position, and gravity randomly.  It also displays a
+creatively broken misimplementation of the classic algorithm.
+
 The munching squares hack consists of drawing Y = X XOR T for a range of X
 and T over and over until all the possible combinations of X and T have
 come up.  It was reportedly discovered by Jackson Wright in 1962 and took 5
@@ -52,24 +53,29 @@ Install a private colormap for the window.
 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 long to wait before starting over.  Default 5000.
+.B \-delay \fIusecs\fP
+The delay between steps of the animation, in microseconds.  Default: 2500.
 .TP 8
 .B \-xor
-Use the XOR drawing function.  (Default.)
+Use the XOR drawing function.  This is the default.
 .TP 8
 .B \-no\-xor
 Don't use the XOR drawing function.
 .TP 8
-.B \-shift
-Start drawing the square at weird starting points.  (Default.)
+.B \-clear \fInumber\fP
+Number of squares to misdraw before clearing the display.  Default: 65.
+.TP 8
+.B \-simul \fInumber\fP
+Number of squares to misdraw simultaneously.  Default: 5.
+.TP 8
+.B \-classic
+Draw classic munching squares only.
 .TP 8
-.B \-no\-shift
-Don't shift and start drawing the square at weird starting points.
+.B \-mismunch
+Draw "mismunch" only.
 .TP 8
-.B \-logminwidth \fIminimum\-width\fP
-The logarithm (base 2) of the minimum with of a square (must be a power of
-2, or some parts of the square aren't.)
+.B \-random
+Do one or the other.
 .TP 8
 .B \-fps
 Display the current frame rate and CPU load.
@@ -85,13 +91,18 @@ stored in the RESOURCE_MANAGER property.
 .SH SEE ALSO
 .BR X (1),
 .BR xscreensaver (1),
-.BR http://www.inwap.com/pdp10/hbaker/hakmem/hakmem.html,
-.BR http://www.comedia.com/Hot/jargon_3.0/JARGON_M/MUNCHSQR.HTML
+.RS 0
+.BR http://www.inwap.com/pdp10/hbaker/hakmem/hakmem.html
 .SH HISTORY
-Quoted from HAKMEM, for historical interest.  As that document says, "Unless
-otherwise stated, all computer programs are in PDP-6/10 assembly language."
-.TP 8
+HAKMEM: MIT AI Memo 239, Feb. 29, 1972.
+.RS 8
+Beeler, M., Gosper, R.W., and Schroeppel, R.
+
+"Unless otherwise stated, all computer programs are in PDP-6/10
+assembly language."
+.TP 4
 ITEM 146: MUNCHING SQUARES
+
 Another simple display program. It is thought that this was discovered by
 Jackson Wright on the RLE PDP-1 circa 1962.
 
@@ -102,17 +113,19 @@ Jackson Wright on the RLE PDP-1 circa 1962.
     XOR 1,2
     JRST .-4
 .EE
-.RS 8
+.RS 4
 2=X, 3=Y. Try things like 1001002 in data switches. This also does
 interesting things with operations other than XOR, and rotations other 
 than -22. (Try IOR; AND; TSC; FADR; FDV(!); ROT -14, -9, -20, ...)
 .RE
-.TP 8
+.TP 4
 ITEM 147 (Schroeppel):
+
 Munching squares is just views of the graph Y = X XOR T for consecutive
 values of T = time.
-.TP 8
+.TP 4
 ITEM 148 (Cohen, Beeler):
+
 A modification to munching squares which reveals them in frozen states
 through opening and closing curtains: insert FADR 2,1 before the XOR. Try
 data switches =
@@ -120,18 +133,21 @@ data switches =
 .EX
     4000,,4    1000,,2002    2000,,4    0,,1002
 .EE
-.RS 8
+.RS 4
 (Notation: <left half>,,<right half>)
-
+.RS 0
 Also try the FADR after the XOR, switches = 1001,,1. 
 .SH COPYRIGHT
-Copyright \(co 1997 by Tim Showalter.  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
-Tim Showalter <tjs@andrew.cmu.edu>, 17-Jun-97, based on what's in the
-Jargon File and stealing stuff from existing xscreensaver modules.
+Copyright 1997 Tim Showalter.
+.RS 0
+Copyright 2004 Steven Hazel.
+.RS 0
+Copyright 1992-2008 Jamie Zawinski.
+.PP
+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.
index d8b2bb9567fbc22de1e8e5f49a52b2fe5485b740..12f923dce3b5969b4a37f5fde14f08f40a64ef05 100755 (executable)
@@ -18,48 +18,87 @@ use diagnostics;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.2 $ }; $version =~ s/^[^\d]+([\d.]+).*/$1/;
+my $version = q{ $Revision: 1.3 $ }; $version =~ s/^[^\d]+([\d.]+).*/$1/;
 
 my $verbose = 0;
 
-# These are marked as disabled by default in the .ad file.
+# 1 means disabled: marked with "-" by default in the .ad file.
+# 2 means retired: not mentioned in .ad at all.
 #
 my %disable = ( 
-   'abstractile' => 1,
-   'antinspect' => 1,
-   'antmaze' => 1,
-   'ant' => 1,
-   'carousel' => 1,
-   'critical' => 1,
-   'demon' => 1,
-   'dnalogo' => 1,
-   'glblur' => 1,
-   'glforestfire' => 1,
-   'glslideshow' => 1,
-   'hyperball' => 1,
-   'juggle' => 1,
-   'laser' => 1,
-   'lcdscrub' => 1,
-   'lightning' => 1,
-   'lisa' => 1,
-   'lissie' => 1,
-   'lmorph' => 1,
-   'loop' => 1,
-   'rotor' => 1,
-   'sballs' => 1,
-   'sierpinski' => 1,
-   'sphere' => 1,
-   'spiral' => 1,
-   'thornbird' => 1,
-   'vidwhacker' => 1,
-   'vines' => 1,
-   'webcollage' => 1,
-   'worm' => 1,
+   'abstractile'       => 1,
+   'ant'               => 1,
+   'antinspect'                => 1,
+   'antmaze'           => 1,
+   'antspotlight'      => 1,
+   'braid'             => 1,
+   'critical'          => 1,
+   'crystal'           => 1,
+   'demon'             => 1,
+   'dnalogo'           => 1,
+   'fadeplot'          => 1,
+   'glblur'            => 1,
+   'glforestfire'      => 1,
+   'glplanet'          => 1,
+   'glslideshow'       => 1,
+   'hyperball'         => 1,
+   'hypercube'         => 1,
+   'jigglypuff'                => 1,
+   'juggle'            => 1,
+   'kaleidescope'      => 1,
+   'laser'             => 1,
+   'lcdscrub'          => 1,
+   'lightning'         => 1,
+   'lisa'              => 1,
+   'lissie'            => 1,
+   'lmorph'            => 1,
+   'loop'              => 1,
+   'nerverot'          => 1,
+   'noseguy'           => 1,
+   'polyominoes'       => 1,
+   'providence'                => 1,
+   'pyro'              => 1,
+   'rdbomb'            => 2,  # alternate name
+   'rocks'             => 1,
+   'rotor'             => 1,
+   'sballs'            => 1,
+   'sierpinski'                => 1,
+   'sphere'            => 1,
+   'spiral'            => 1,
+   'thornbird'         => 1,
+   'vidwhacker'                => 1,
+   'vines'             => 1,
+   'webcollage'                => 1,
+   'worm'              => 1,
+   'xsublim'           => 2,
   );
 
 
+# Parse the RETIRED_EXES variable from the Makefiles to populate %disable.
+#
+sub parse_makefiles() {
+  foreach my $mf ( "Makefile.in", "glx/Makefile.in" ) {
+    my $body = '';
+    local *IN;
+    open (IN, "<$mf") || error ("$mf: $!");
+    while (<IN>) { $body .= $_; }
+    close IN;
+
+    $body =~ s/\\\n//gs;
+    my ($var) = ($body =~ m/^RETIRED_EXES\s*=\s*(.*)$/mi);
+    error ("no RETIRED_EXES in $mf") unless $var;
+    foreach my $hack (split (/\s+/, $var)) {
+      $disable{$hack} = 2;
+    }
+  }
+}
+
+
 sub munge_ad($) {
   my ($file) = @_;
+
+  parse_makefiles();
+
   my $body = '';
   local *IN;
   open (IN, "<$file") || error ("$file: $!");
@@ -78,7 +117,7 @@ sub munge_ad($) {
   #
   my $dir = $file;
   $dir =~ s@/[^/]*$@@s;
-  my @counts = (0,0,0,0,0,0);
+  my @counts = (0,0,0,0,0,0,0,0,0,0);
   foreach my $xml (sort (glob ("$dir/../hacks/config/*.xml"))) {
     my $b = '';
     open (IN, "<$xml") || error ("$xml: $!");
@@ -94,7 +133,7 @@ sub munge_ad($) {
     if ($name ne $name2) {
       my $s = sprintf("*hacks.%s.name:", $xml);
       $mid2 .= sprintf ("%-28s%s\n", $s, $name);
-      $counts[1]++;
+      $counts[9]++;
     }
 
     # Grab the year.
@@ -102,7 +141,6 @@ sub munge_ad($) {
       ($b =~ m/<_description>.*Written by.*?;\s+(19[6-9]\d|20\d\d)\b/si);
     error ("no year in $xml.xml") unless $year;
     $hacks{$xml} = $year;
-    $counts[0]++;
   }
 
   # Splice in new names.
@@ -122,15 +160,25 @@ sub munge_ad($) {
     my $cmd = "$hack -root";
     my $ts = (length($cmd) / 8) * 8;
     while ($ts < 40) { $cmd .= "\t"; $ts += 8; }
-    next if ($hack eq 'ant' || $hack eq 'rdbomb');
+
+    my $dis = $disable{$hack} || 0;
 
     my $glp;
     my $glep = ($hack eq 'extrusion');
     if (-f "$hack.c" || -f "$hack") { $glp = 0; }
     elsif (-f "glx/$hack.c") { $glp = 1; }
-    else { error ("is $hack X or GL?"); }
+    elsif ($dis != 2) { error ("is $hack X or GL?"); }
+
+    $counts[($disable{$hack} || 0)]++;
+    if ($glp) {
+      $counts[6+($disable{$hack} || 0)]++;
+    } else {
+      $counts[3+($disable{$hack} || 0)]++;
+    }
+
+    next if ($dis == 2);
 
-    my $dis = ($disable{$hack} ? '-' : '');
+    $dis = ($dis ? '-' : '');
     my $vis = ($glp
                ? (($dis ? '' : $glep ? '@GLE_KLUDGE@' : '@GL_KLUDGE@') .
                   ' GL: ')
@@ -139,10 +187,8 @@ sub munge_ad($) {
 
     if ($glp) {
       ($segregate_p ? $ghacks : $xhacks) .= $cmd;
-      $counts[4+defined($disable{$hack})]++;
     } else {
       $xhacks .= $cmd;
-      $counts[2+defined($disable{$hack})]++;
     }
   }
 
@@ -157,9 +203,11 @@ sub munge_ad($) {
   error ("unparsable") unless $mid;
   $body = $top . $mid2 . $bot;
 
-  print STDERR "$progname: Total: $counts[0]; " .
-    "X11: $counts[2]+$counts[3]; GL: $counts[4]+$counts[5]; " .
-      "Names: $counts[1]\n"
+  print STDERR "$progname: " .
+    "Total: $counts[0]+$counts[1]+$counts[2]; " .
+      "X11: $counts[3]+$counts[4]+$counts[5]; " .
+       "GL: $counts[6]+$counts[7]+$counts[8]; " .
+    "Names: $counts[9]\n"
         if ($verbose);
 
   # Write file if changed.
diff --git a/hacks/rotor.man b/hacks/rotor.man
deleted file mode 100644 (file)
index 58590ed..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-.TH XScreenSaver 1 "" "X Version 11"
-.SH NAME
-rotor - screen saver.
-.SH SYNOPSIS
-.B rotor
-[\-display \fIhost:display.screen\fP]
-[\-visual \fIvisual\fP]
-[\-window]
-[\-root]
-[\-count \fInumber\fP]
-[\-cycles \fInumber\fP]
-[\-delay \fInumber\fP]
-[\-ncolors \fInumber\fP]
-[\-size \fInumber\fP]
-[\-fps]
-.SH DESCRIPTION
-This draws a line segment moving along a complex spiraling curve.
-.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 \-count \fInumber\fP
-Count. 0 - 20.  Default: 4.
-.TP 8
-.B \-cycles \fInumber\fP
-Length.  2 - 100.  Default: 20.
-.TP 8
-.B \-delay \fInumber\fP
-Per-frame delay, in microseconds.  Default: 10000 (0.01 seconds.).
-.TP 8
-.B \-ncolors \fInumber\fP
-Number of Colors.  Default: 200.
-.TP 8
-.B \-size \fInumber\fP
-Size.  -50 - 50.  Default: -6.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 2002 by Tom Lawrence.  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
-Tom Lawrence.
diff --git a/hacks/sonar.c b/hacks/sonar.c
deleted file mode 100644 (file)
index 7e81555..0000000
+++ /dev/null
@@ -1,2292 +0,0 @@
-/* sonar.c --- Simulate a sonar screen.
- * Copyright (C) 1998-2008 by Stephen Martin and Jamie Zawinski
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * 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.
- *
- * This is an implementation of a general purpose reporting tool in the
- * format of a Sonar display. It is designed such that a sensor is read
- * on every movement of a sweep arm and the results of that sensor are
- * displayed on the screen. The location of the display points (targets) on the
- * screen are determined by the current localtion of the sweep and a distance
- * value associated with the target. 
- *
- * Currently the only two sensors that are implemented are the simulator
- * (the default) and the ping sensor. The simulator randomly creates a set
- * of bogies that move around on the scope while the ping sensor can be
- * used to display hosts on your network.
- *
- * The ping code is only compiled in if you define HAVE_ICMP or HAVE_ICMPHDR,
- * because, unfortunately, different systems have different ways of creating
- * these sorts of packets.
- *
- * In order to use the ping sensor on most systems, this program must be
- * installed as setuid root, so that it can create an ICMP RAW socket.  Root
- * privileges are disavowed shortly after startup (just after connecting to
- * the X server and reading the resource database) so this is *believed* to
- * be a safe thing to do, but it is usually recommended that you have as few
- * setuid programs around as possible, on general principles.
- *
- * It is not necessary to make it setuid on MacOS systems, because on those
- * systems, unprivileged programs can ping by using ICMP DGRAM sockets
- * instead of ICMP RAW.
- *
- * It should be easy to extend this code to support other sorts of sensors.
- * Some ideas:
- *   - search the output of "netstat" for the list of hosts to ping;
- *   - plot the contents of /proc/interrupts;
- *   - plot the process table, by process size, cpu usage, or total time;
- *   - plot the logged on users by idle time or cpu usage.
- *
- * $Revision: 1.60 $
- *
- * Version 1.0 April 27, 1998.
- * - Initial version, by Stephen Martin <smartin@vanderfleet-martin.net>
- * - Submitted to RedHat Screensaver Contest
- * 
- * Version 1.1 November 3, 1998.
- * - Added simulation mode.
- * - Added enhancements by Thomas Bahls <thommy@cs.tu-berlin.de>
- * - Fixed huge memory leak.
- * - Submitted to xscreensavers
- * 
- * Version 1.2
- * - All ping code is now ifdef-ed by the compile time symbol HAVE_PING;
- *   use -DHAVE_PING to include it when you compile.
- * - Sweep now uses gradients.
- * - Fixed portability problems with icmphdr on some systems.
- * - removed lowColor option/resource.
- * - changed copyright notice so that it could be included in the xscreensavers
- *   collection.
- *
- * Version 1.3 November 16, 1998.
- * - All ping code is now ifdef-ed by the compile time symbol PING use -DPING
- *   to include it when you compile.
- * - Sweep now uses gradients.
- * - Fixed portability problems with icmphdr on some systems.
- * - removed lowcolour option/resource.
- * - changed copyright notice so that it could be included in the xscreensavers
- *   collection.
- *
- * Version 1.4 November 18, 1998.
- * - More ping portability fixes.
- *
- * Version 1.5 November 19, 1998.
- * - Synced up with jwz's changes.
- * - Now need to define HAVE_PING to compile in the ping stuff.
- */
-
-
-/* These are computed by configure now:
-   #define HAVE_ICMP
-   #define HAVE_ICMPHDR
- */
-
-
-/* Include Files */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-#include <sys/stat.h>
-
-#include "screenhack.h"
-#include "colors.h"
-#include "hsv.h"
-
-#undef usleep /* conflicts with unistd.h on OSX */
-
-#if defined(HAVE_ICMP) || defined(HAVE_ICMPHDR)
-# include <unistd.h>
-# include <limits.h>
-# include <signal.h>
-# include <fcntl.h>
-# include <sys/types.h>
-# include <sys/time.h>
-# include <sys/ipc.h>
-# include <sys/shm.h>
-# include <sys/socket.h>
-# include <netinet/in_systm.h>
-# include <netinet/in.h>
-# include <netinet/ip.h>
-# include <netinet/ip_icmp.h>
-# include <netinet/udp.h>
-# include <arpa/inet.h>
-# include <netdb.h>
-#endif /* HAVE_ICMP || HAVE_ICMPHDR */
-
-
-/* Defines */
-
-#undef MY_MIN
-#define MY_MIN(a,b) ((a)<(b)?(a - 50):(b - 10))
-
-#ifndef LINE_MAX
-# define LINE_MAX 2048
-#endif
-
-/* Frigging icmp */
-
-#if defined(HAVE_ICMP)
-# define HAVE_PING
-# define ICMP             icmp
-# define ICMP_TYPE(p)     (p)->icmp_type
-# define ICMP_CODE(p)     (p)->icmp_code
-# define ICMP_CHECKSUM(p) (p)->icmp_cksum
-# define ICMP_ID(p)       (p)->icmp_id
-# define ICMP_SEQ(p)      (p)->icmp_seq
-#elif defined(HAVE_ICMPHDR)
-# define HAVE_PING
-# define ICMP             icmphdr
-# define ICMP_TYPE(p)     (p)->type
-# define ICMP_CODE(p)     (p)->code
-# define ICMP_CHECKSUM(p) (p)->checksum
-# define ICMP_ID(p)       (p)->un.echo.id
-# define ICMP_SEQ(p)      (p)->un.echo.sequence
-#else
-# undef HAVE_PING
-#endif
-
-
-#ifdef HAVE_PING
-# if defined(__DECC) || defined(_IP_VHL)
-   /* This is how you do it on DEC C, and possibly some BSD systems. */
-#  define IP_HDRLEN(ip)   ((ip)->ip_vhl & 0x0F)
-# else
-   /* This is how you do it on everything else. */
-#  define IP_HDRLEN(ip)   ((ip)->ip_hl)
-# endif
-#endif /* HAVE_PING */
-
-
-/* Forward References */
-
-#ifdef HAVE_PING
-static u_short checksum(u_short *, int);
-#endif
-static long delta(struct timeval *, struct timeval *);
-
-
-/* Data Structures */
-
-/*
- * The Bogie.
- *
- * This represents an object that is visible on the scope.
- */
-
-typedef struct Bogie {
-    char *name;                        /* The name of the thing being displayed */
-    char *desc;                        /* Beneath the name (e.g., ping time) */
-    int distance;              /* The distance to this thing (0 - 100) */
-    int tick;                  /* The tick that it was found on */
-    int ttl;                   /* The time to live */
-    int age;                    /* How long it's been around */
-    struct Bogie *next;                /* The next one in the list */
-} Bogie;
-
-/*
- * Sonar Information.
- *
- * This contains all of the runtime information about the sonar scope.
- */
-
-typedef struct ping_target ping_target;
-
-typedef struct sonar_info sonar_info;
-struct sonar_info {
-    Display *dpy;              /* The X display */
-    Window win;                        /* The window */
-    GC hi,                     /* The leading edge of the sweep */
-       lo,                     /* The trailing part of the sweep */
-       erase,                  /* Used to erase things */
-       grid,                   /* Used to draw the grid */
-       text;                   /* Used to draw text */
-    Colormap cmap;             /* The colormap */
-    XFontStruct *font;          /* The font to use for the labels */
-    int text_steps;            /* How many steps to fade text. */
-    XColor *text_colors;       /* Pixel values used to fade text */
-    int sweep_degrees;         /* How much of the circle the sweep uses */
-    int sweep_segs;            /* How many gradients in the sweep. */
-    XColor *sweep_colors;        /* The sweep pixel values */
-    int width, height;         /* Window dimensions */
-    int minx, miny, maxx, maxy, /* Bounds of the scope */
-       centrex, centrey, radius; /* Parts of the scope circle */
-    Bogie *visible;            /* List of visible objects */
-    int current;               /* Current position of sweep */
-    int sweepnum;               /* The current id of the sweep */
-    int delay;                 /* how long between each frame of the anim */
-
-    int TTL;                   /* The number of ticks that bogies are visible
-                                   on the screen before they fade away. */
-
-  ping_target *last_ptr;
-
-  Bogie *(*sensor)(sonar_info *, void *); /* The current sensor */
-  void *sensor_info;                     /* Information about the sensor */
-
-};
-
-static Bool debug_p = False;
-static Bool resolve_p = True;
-static Bool times_p = True;
-
-
-/*
- * A list of targets to ping.
- */
-
-struct ping_target {
-    char *name;                        /* The name of the target */
-#ifdef HAVE_PING
-    struct sockaddr address;   /* The address of the target */
-#endif /* HAVE_PING */
-    struct ping_target *next;  /* The next one in the list */
-};
-
-
-#ifdef HAVE_PING
-/*
- * Ping Information.
- *
- * This contains the information for the ping sensor.
- */
-
-typedef struct {
-    int icmpsock;              /* Socket for sending pings */
-    int pid;                   /* Our process ID */
-    int seq;                   /* Packet sequence number */
-    int timeout;               /* Timeout value for pings */
-    ping_target *targets;      /* List of targets to ping */
-    int numtargets;             /* The number of targets to ping */
-} ping_info;
-
-/* Flag to indicate that the timer has expired on us */
-
-static int timer_expired;
-
-#endif /* HAVE_PING */
-
-/*
- * A list of targets for the simulator
- */
-
-typedef struct sim_target {
-    char *name;                        /* The name of the target */
-    int nexttick;              /* The next tick that this will be seen */
-    int nextdist;              /* The distance on that tick */
-    int movedonsweep;          /* The number of the sweep this last moved */
-} sim_target;
-
-/*
- * Simulator Information.
- *
- * This contains the information for the simulator mode.
- */
-
-typedef struct {
-    sim_target *teamA;         /* The bogies for the A team */
-    int numA;                  /* The number of bogies in team A */
-    char *teamAID;             /* The identifier for bogies in team A */
-    sim_target *teamB;         /* The bogies for the B team */
-    int numB;                  /* The number of bogies in team B */
-    char *teamBID;             /* The identifier for bogies in team B */
-} sim_info;
-
-
-
-/*
- * Create a new Bogie and set some initial values.
- *
- * Args:
- *    name     - The name of the bogie.
- *    distance - The distance value.
- *    tick     - The tick value.
- *    ttl      - The time to live value.
- *
- * Returns:
- *    The newly allocated bogie or null if a memory problem occured.
- */
-
-static Bogie *
-newBogie(char *name, int distance, int tick, int ttl) 
-{
-
-    /* Local Variables */
-
-    Bogie *new;
-
-    distance *= 1000;
-    /* Allocate a bogie and initialize it */
-
-    if ((new = (Bogie *) calloc(1, sizeof(Bogie))) == NULL) {
-       fprintf(stderr, "%s: Out of Memory\n", progname);
-       return NULL;
-    }
-    new->name = name;
-    new->distance = distance;
-    new->tick = tick;
-    new->ttl = ttl;
-    new->age = 0;
-    new->next = (Bogie *) 0;
-    return new;
-}
-
-/*
- * Free a Bogie.
- *
- * Args:
- *    b - The bogie to free.
- */
-
-
-static void
-freeBogie(Bogie *b) 
-{
-    if (b->name != (char *) 0)
-       free(b->name);
-    free(b);
-}
-
-/*
- * Find a bogie by name in a list.
- *
- * This does a simple linear search of the list for a given name.
- *
- * Args:
- *    bl   - The Bogie list to search.
- *    name - The name to look for.
- *
- * Returns:
- *    The requested Bogie or null if it wasn't found.
- */
-
-static Bogie *
-findNode(Bogie *bl, char *name) 
-{
-
-    /* Local Variables */
-
-    Bogie *p;
-
-    /* Abort if the list is empty or no name is given */
-
-    if ((name == NULL) || (bl == NULL))
-       return NULL;
-
-    /* Search the list for the desired name */
-
-    p = bl;
-    while (p != NULL) {
-       if (strcmp(p->name, name) == 0)
-           return p;
-       p = p->next;
-    }
-
-    /* Not found */
-
-    return NULL;
-}
-
-#ifdef HAVE_PING
-
-/* Packs an IP address quad into bigendian network order. */
-static unsigned long
-pack_addr (unsigned int a, unsigned int b, unsigned int c, unsigned int d)
-{
-  unsigned long i = (((a & 255) << 24) |
-                     ((b & 255) << 16) |
-                     ((c & 255) <<  8) |
-                     ((d & 255)      ));
-  return htonl (i);
-}
-
-/* Unpacks an IP address quad from bigendian network order. */
-static void
-unpack_addr (unsigned long addr,
-             unsigned int *a, unsigned int *b,
-             unsigned int *c, unsigned int *d)
-{
-  addr = ntohl (addr);
-  *a = (addr >> 24) & 255;
-  *b = (addr >> 16) & 255;
-  *c = (addr >>  8) & 255;
-  *d = (addr      ) & 255;
-}
-
-
-/*
- * Lookup the address for a ping target;
- *
- * Args:
- *    target - The ping_target fill in the address for.
- *
- * Returns:
- *    1 if the host was successfully resolved, 0 otherwise.
- */
-
-static int
-lookupHost(ping_target *target) 
-{
-  struct hostent *hent;
-  struct sockaddr_in *iaddr;
-
-  unsigned int ip[4];
-  char c;
-
-  iaddr = (struct sockaddr_in *) &(target->address);
-  iaddr->sin_family = AF_INET;
-
-  if (4 == sscanf (target->name, " %u.%u.%u.%u %c",
-                   &ip[0], &ip[1], &ip[2], &ip[3], &c))
-    {
-      /* It's an IP address.
-       */
-      if (ip[3] == 0)
-        {
-          if (debug_p > 1)
-            fprintf (stderr, "%s:   ignoring bogus IP %s\n",
-                     progname, target->name);
-          return 0;
-        }
-
-      iaddr->sin_addr.s_addr = pack_addr (ip[0], ip[1], ip[2], ip[3]);
-      if (resolve_p)
-        hent = gethostbyaddr ((const char *) &iaddr->sin_addr.s_addr,
-                              sizeof(iaddr->sin_addr.s_addr),
-                              AF_INET);
-      else
-        hent = 0;
-
-      if (debug_p > 1)
-        fprintf (stderr, "%s:   %s => %s\n",
-                 progname, target->name,
-                 ((hent && hent->h_name && *hent->h_name)
-                  ? hent->h_name : "<unknown>"));
-
-      if (hent && hent->h_name && *hent->h_name)
-        target->name = strdup (hent->h_name);
-    }
-  else
-    {
-      /* It's a host name.
-       */
-
-
-      /* don't waste time being confused by non-hostname tokens
-         in .ssh/known_hosts */
-      if (!strcmp (target->name, "ssh-rsa") ||
-          !strcmp (target->name, "ssh-dsa") ||
-          !strcmp (target->name, "ssh-dss") ||
-          strlen (target->name) >= 80)
-        return 0;
-
-      hent = gethostbyname (target->name);
-      if (!hent)
-        {
-          if (debug_p)
-            fprintf (stderr, "%s: could not resolve host:  %s\n",
-                     progname, target->name);
-          return 0;
-        }
-
-      memcpy (&iaddr->sin_addr, hent->h_addr_list[0],
-              sizeof(iaddr->sin_addr));
-
-      if (debug_p > 1)
-        {
-          unsigned int a, b, c, d;
-          unpack_addr (iaddr->sin_addr.s_addr, &a, &b, &c, &d);
-          fprintf (stderr, "%s:   %s => %d.%d.%d.%d\n",
-                   progname, target->name, a, b, c, d);
-        }
-    }
-  return 1;
-}
-
-
-static void
-print_host (FILE *out, unsigned long ip, const char *name)
-{
-  char ips[50];
-  unsigned int a, b, c, d;
-  unpack_addr (ip, &a, &b, &c, &d);            /* ip is in network order */
-  sprintf (ips, "%u.%u.%u.%u", a, b, c, d);
-  if (!name || !*name) name = "<unknown>";
-  fprintf (out, "%-16s %s\n", ips, name);
-}
-
-
-/*
- * Create a target for a host.
- *
- * Args:
- *    name - The name of the host.
- *
- * Returns:
- *    A newly allocated target or null if the host could not be resolved.
- */
-
-static ping_target *
-newHost(char *name) 
-{
-
-    /* Local Variables */
-
-    ping_target *target = NULL;
-
-    /* Create the target */
-
-    if ((target = calloc(1, sizeof(ping_target))) == NULL) {
-       fprintf(stderr, "%s: Out of Memory\n", progname);
-       goto target_init_error;
-    }
-    if ((target->name = strdup(name)) == NULL) {
-       fprintf(stderr, "%s: Out of Memory\n", progname);
-       goto target_init_error;
-    }
-
-    /* Lookup the host */
-
-    if (! lookupHost(target))
-       goto target_init_error;
-
-    /* Don't ever use loopback (127.0.0.x) hosts */
-    {
-      struct sockaddr_in *iaddr = (struct sockaddr_in *) &(target->address);
-      unsigned long ip = iaddr->sin_addr.s_addr;
-
-      if ((ntohl (ip) & 0xFFFFFF00L) == 0x7f000000L)  /* 127.0.0.x */
-        {
-          if (debug_p)
-            fprintf (stderr, "%s:   ignoring loopback host %s\n",
-                     progname, target->name);
-          goto target_init_error;
-        }
-    }
-
-    /* Don't ever use broadcast (255.x.x.x) hosts */
-    {
-      struct sockaddr_in *iaddr = (struct sockaddr_in *) &(target->address);
-      unsigned long ip = iaddr->sin_addr.s_addr;
-      if ((ntohl (ip) & 0xFF000000L) == 0xFF000000L)  /* 255.x.x.x */
-        {
-          if (debug_p)
-            fprintf (stderr, "%s:   ignoring broadcast host %s\n",
-                     progname, target->name);
-          goto target_init_error;
-        }
-    }
-
-    /* Done */
-
-    if (debug_p)
-      {
-        struct sockaddr_in *iaddr = (struct sockaddr_in *) &(target->address);
-        unsigned long ip = iaddr->sin_addr.s_addr;
-        fprintf (stderr, "%s:   added ", progname);
-        print_host (stderr, ip, target->name);
-      }
-
-    return target;
-
-    /* Handle errors here */
-
-target_init_error:
-    if (target != NULL)
-       free(target);
-    return NULL;
-}
-
-/*
- * Generate a list of ping targets from the entries in a file.
- *
- * Args:
- *    fname - The name of the file. This file is expected to be in the same
- *            format as /etc/hosts.
- *
- * Returns:
- *    A list of targets to ping or null if an error occured.
- */
-
-static ping_target *
-readPingHostsFile(char *fname) 
-{
-    /* Local Variables */
-
-    FILE *fp;
-    char buf[LINE_MAX];
-    char *p;
-    ping_target *list = NULL;
-    char *addr, *name;
-    ping_target *new;
-
-    /* Make sure we in fact have a file to process */
-
-    if ((fname == NULL) || (fname[0] == '\0')) {
-       fprintf(stderr, "%s: invalid ping host file name\n", progname);
-       return NULL;
-    }
-
-    /* Kludge: on OSX, variables have not been expanded in the command
-       line arguments, so as a special case, allow the string to begin
-       with literal "$HOME/" or "~/".
-
-       This is so that the "Known Hosts" menu item in sonar.xml works.
-     */
-    if (!strncmp(fname, "~/", 2) || !strncmp(fname, "$HOME/", 6)) {
-      char *s = strchr (fname, '/');
-      strcpy (buf, getenv("HOME"));
-      strcat (buf, s);
-      fname = buf;
-    }
-
-    /* Open the file */
-
-    if ((fp = fopen(fname, "r")) == NULL) {
-       char msg[1024];
-        sprintf(msg, "%s: unable to open host file %s", progname, fname);
-#ifdef HAVE_COCOA
-        if (debug_p)  /* on OSX don't syslog this */
-#endif
-          perror(msg);
-       return NULL;
-    }
-
-    if (debug_p)
-      fprintf (stderr, "%s:  reading file %s\n", progname, fname);
-
-    /* Read the file line by line */
-
-    while ((p = fgets(buf, LINE_MAX, fp)) != NULL) {
-
-       /*
-        * Parse the line skipping those that start with '#'.
-        * The rest of the lines in the file should be in the same
-        * format as a /etc/hosts file. We are only concerned with
-        * the first two field, the IP address and the name
-        */
-
-       while ((*p == ' ') || (*p == '\t'))
-           p++;
-       if (*p == '#')
-           continue;
-
-       /* Get the name and address */
-
-       name = addr = NULL;
-       if ((addr = strtok(buf, " ,;\t\n")) != NULL)
-           name = strtok(NULL, " ,;\t\n");
-       else
-           continue;
-
-        /* Check to see if the addr looks like an addr.  If not, assume
-           the addr is a name and there is no addr.  This way, we can
-           handle files whose lines have "xx.xx.xx.xx hostname" as their
-           first two tokens, and also files that have a hostname as their
-           first token (like .ssh/known_hosts and .rhosts.)
-         */
-        {
-          int i; char c;
-          if (4 != sscanf(addr, "%d.%d.%d.%d%c", &i, &i, &i, &i, &c))
-            {
-              name = addr;
-              addr = NULL;
-            }
-        }
-
-        /* If the name is all digits, it's not a name. */
-        if (name)
-          {
-            const char *s;
-            for (s = name; *s; s++)
-              if (*s < '0' || *s > '9')
-                break;
-            if (! *s)
-              {
-                if (debug_p > 1)
-                  fprintf (stderr, "%s:  skipping bogus name \"%s\" (%s)\n",
-                           progname, name, addr);
-                name = NULL;
-              }
-          }
-
-       /* Create a new target using first the name then the address */
-
-       new = NULL;
-       if (name != NULL)
-           new = newHost(name);
-       if (new == NULL && addr != NULL)
-           new = newHost(addr);
-
-       /* Add it to the list if we got one */
-
-       if (new != NULL) {
-           new->next = list;
-           list = new;
-       }
-    }
-
-    /* Close the file and return the list */
-
-    fclose(fp);
-    return list;
-}
-
-
-static ping_target *
-delete_duplicate_hosts (ping_target *list)
-{
-  ping_target *head = list;
-  ping_target *rest;
-
-  for (rest = head; rest; rest = rest->next)
-    {
-      struct sockaddr_in *i1 = (struct sockaddr_in *) &(rest->address);
-      unsigned long ip1 = i1->sin_addr.s_addr;
-
-      ping_target *rest2;
-      for (rest2 = rest; rest2; rest2 = rest2->next)
-        {
-          if (rest2 && rest2->next)
-            {
-              struct sockaddr_in *i2 = (struct sockaddr_in *)
-                &(rest2->next->address);
-              unsigned long ip2 = i2->sin_addr.s_addr;
-
-              if (ip1 == ip2)
-                {
-                  if (debug_p)
-                    {
-                      fprintf (stderr, "%s: deleted duplicate: ", progname);
-                      print_host (stderr, ip2, rest2->next->name);
-                    }
-                  rest2->next = rest2->next->next;
-                }
-            }
-        }
-    }
-
-  return head;
-}
-
-
-
-
-/*
- * Generate a list ping targets consisting of all of the entries on
- * the same subnet.  'base' ip is in network order; 0 means localhost.
- *
- * Returns:
- *    A list of all of the hosts on this net.
- */
-
-static ping_target *
-subnetHostsList(unsigned long n_base, int subnet_width)
-{
-    unsigned long h_mask;   /* host order */
-    unsigned long h_base;   /* host order */
-
-    /* Local Variables */
-
-    char hostname[BUFSIZ];
-    char address[BUFSIZ];
-    struct hostent *hent;
-    char *p;
-    int i;
-    ping_target *new;
-    ping_target *list = NULL;
-
-    if (subnet_width < 24)
-      {
-        fprintf (stderr,
-   "%s: pinging %lu hosts is a bad idea; please use a subnet mask of 24 bits\n"
-                 "       or more (255 hosts max.)\n",
-                 progname, (unsigned long) (1L << (32 - subnet_width)) - 1);
-        exit (1);
-      }
-    else if (subnet_width > 30)
-      {
-        fprintf (stderr, "%s: a subnet of %d bits doesn't make sense:"
-                 " try \"subnet/24\" or \"subnet/29\".\n",
-                 progname, subnet_width);
-        exit (1);
-      }
-
-
-    if (debug_p)
-      fprintf (stderr, "%s:   adding %d-bit subnet\n", progname, subnet_width);
-
-    /* Get our hostname */
-
-    if (gethostname(hostname, BUFSIZ)) {
-       fprintf(stderr, "%s: unable to get local hostname\n", progname);
-       return NULL;
-    }
-
-    /* Get our IP address and convert it to a string */
-
-    if ((hent = gethostbyname(hostname)) == NULL) {
-       fprintf(stderr, "%s: unable to lookup our IP address\n", progname);
-       return NULL;
-    }
-    strcpy(address, inet_ntoa(*((struct in_addr *)hent->h_addr_list[0])));
-
-    /* Construct targets for all addresses in this subnet */
-
-    h_mask = 0;
-    for (i = 0; i < subnet_width; i++)
-      h_mask |= (1L << (31-i));
-
-    /* If no base IP specified, assume localhost. */
-    if (n_base == 0)
-      n_base = pack_addr (hent->h_addr_list[0][0],
-                          hent->h_addr_list[0][1],
-                          hent->h_addr_list[0][2],
-                          hent->h_addr_list[0][3]);
-    h_base = ntohl (n_base);
-
-    if (h_base == 0x7F000001L)   /* 127.0.0.1 in host order */
-      {
-        unsigned int a, b, c, d;
-        unpack_addr (n_base, &a, &b, &c, &d);
-        fprintf (stderr,
-                 "%s: unable to determine local subnet address: \"%s\"\n"
-                 "       resolves to loopback address %u.%u.%u.%u.\n",
-                 progname, hostname, a, b, c, d);
-        return NULL;
-      }
-
-    for (i = 255; i >= 0; i--) {
-        unsigned int a, b, c, d;
-        int ip = (h_base & 0xFFFFFF00L) | i;     /* host order */
-      
-        if ((ip & h_mask) != (h_base & h_mask))  /* not in mask range at all */
-          continue;
-        if ((ip & ~h_mask) == 0)                 /* broadcast address */
-          continue;
-        if ((ip & ~h_mask) == ~h_mask)           /* broadcast address */
-          continue;
-
-        unpack_addr (htonl (ip), &a, &b, &c, &d);
-        sprintf (address, "%u.%u.%u.%u", a, b, c, d);
-
-        if (debug_p > 1)
-          {
-            unsigned int aa, ab, ac, ad;
-            unsigned int ma, mb, mc, md;
-            unpack_addr (htonl (h_base & h_mask), &aa, &ab, &ac, &ad);
-            unpack_addr (htonl (h_mask),          &ma, &mb, &mc, &md);
-            fprintf (stderr,
-                     "%s:  subnet: %s (%u.%u.%u.%u & %u.%u.%u.%u / %d)\n",
-                     progname, address,
-                     aa, ab, ac, ad,
-                     ma, mb, mc, md,
-                     subnet_width);
-          }
-
-        p = address + strlen(address) + 1;
-       sprintf(p, "%d", i);
-
-       new = newHost(address);
-       if (new != NULL) {
-           new->next = list;
-           list = new;
-       }
-    }
-
-    /* Done */
-
-    return list;
-}
-
-/*
- * Initialize the ping sensor.
- *
- * Returns:
- *    A newly allocated ping_info structure or null if an error occured.
- */
-
-static ping_target *parse_mode (sonar_info *, Bool ping_works_p);
-
-/* yes, there is only one, even when multiple savers are running in the
-   same address space - since we can only open this socket before dropping
-   privs.
- */
-static int global_icmpsock = 0;
-
-static ping_info *
-init_ping(sonar_info *si)
-{
-
-  Bool socket_initted_p = False;
-  Bool socket_raw_p = False;
-
-    /* Local Variables */
-
-    ping_info *pi = NULL;              /* The new ping_info struct */
-    ping_target *pt;                   /* Used to count the targets */
-
-    /* Create the ping info structure */
-
-    if ((pi = (ping_info *) calloc(1, sizeof(ping_info))) == NULL) {
-       fprintf(stderr, "%s: Out of memory\n", progname);
-       goto ping_init_error;
-    }
-
-    /* Create the ICMP socket.  Do this before dropping privs.
-
-       Raw sockets can only be opened by root (or setuid root), so we
-       only try to do this when the effective uid is 0.
-
-       We used to just always try, and notice the failure.  But apparently
-       that causes "SELinux" to log spurious warnings when running with the
-       "strict" policy.  So to avoid that, we just don't try unless we
-       know it will work.
-
-       On MacOS X, we can avoid the whole problem by using a
-       non-privileged datagram instead of a raw socket.
-     */
-    if (global_icmpsock) {
-      pi->icmpsock = global_icmpsock;
-      socket_initted_p = True;
-      if (debug_p)
-        fprintf (stderr, "%s: re-using icmp socket\n", progname);
-
-    } else if ((pi->icmpsock = 
-                socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)) >= 0) {
-      socket_initted_p = True;
-
-    } else if (geteuid() == 0 &&
-               (pi->icmpsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) >= 0) {
-        socket_initted_p = True;
-        socket_raw_p = True;
-    }
-
-    if (socket_initted_p) {
-      global_icmpsock = pi->icmpsock;
-      socket_initted_p = True;
-      if (debug_p)
-        fprintf (stderr, "%s: opened %s icmp socket\n", progname,
-                 (socket_raw_p ? "raw" : "dgram"));
-    } else if (debug_p)
-      fprintf (stderr, "%s: unable to open icmp socket\n", progname);
-
-    /* Disavow privs */
-
-    setuid(getuid());
-
-
-    pi->pid = getpid() & 0xFFFF;
-    pi->seq = 0;
-    pi->timeout = get_integer_resource(si->dpy, "pingTimeout", "PingTimeout");
-
-    /* Generate a list of targets */
-
-    pi->targets = parse_mode (si, socket_initted_p);
-    pi->targets = delete_duplicate_hosts (pi->targets);
-
-
-    if (debug_p)
-      {
-        ping_target *t;
-        fprintf (stderr, "%s: Target list:\n", progname);
-        for (t = pi->targets; t; t = t->next)
-          {
-            struct sockaddr_in *iaddr = (struct sockaddr_in *) &(t->address);
-            unsigned long ip = iaddr->sin_addr.s_addr;
-            fprintf (stderr, "%s:   ", progname);
-            print_host (stderr, ip, t->name);
-          }
-      }
-
-    /* Make sure there is something to ping */
-
-    if (pi->targets == NULL) {
-      goto ping_init_error;
-    }
-
-    /* Count the targets */
-
-    pt = pi->targets;
-    pi->numtargets = 0;
-    while (pt != NULL) {
-       pi->numtargets++;
-       pt = pt->next;
-    }
-
-    /* Done */
-
-    return pi;
-
-    /* Handle initialization errors here */
-
-ping_init_error:
-    if (pi != NULL)
-       free(pi);
-    return NULL;
-}
-
-
-/*
- * Ping a host.
- *
- * Args:
- *    pi   - The ping information strcuture.
- *    host - The name or IP address of the host to ping (in ascii).
- */
-
-static void
-sendping(ping_info *pi, ping_target *pt) 
-{
-
-    /* Local Variables */
-
-    u_char *packet;
-    struct ICMP *icmph;
-    int result;
-
-    /*
-     * Note, we will send the character name of the host that we are
-     * pinging in the packet so that we don't have to keep track of the
-     * name or do an address lookup when it comes back.
-     */
-
-    int pcktsiz = sizeof(struct ICMP) + sizeof(struct timeval) +
-       strlen(pt->name) + 1;
-
-    /* Create the ICMP packet */
-
-    if ((packet = (u_char *) malloc(pcktsiz)) == (void *) 0)
-       return;  /* Out of memory */
-    icmph = (struct ICMP *) packet;
-    ICMP_TYPE(icmph) = ICMP_ECHO;
-    ICMP_CODE(icmph) = 0;
-    ICMP_CHECKSUM(icmph) = 0;
-    ICMP_ID(icmph) = pi->pid;
-    ICMP_SEQ(icmph) = pi->seq++;
-# ifdef GETTIMEOFDAY_TWO_ARGS
-    gettimeofday((struct timeval *) &packet[sizeof(struct ICMP)],
-                (struct timezone *) 0);
-# else
-    gettimeofday((struct timeval *) &packet[sizeof(struct ICMP)]);
-# endif
-
-    strcpy((char *) &packet[sizeof(struct ICMP) + sizeof(struct timeval)],
-          pt->name);
-    ICMP_CHECKSUM(icmph) = checksum((u_short *)packet, pcktsiz);
-
-    /* Send it */
-
-    if ((result = sendto(pi->icmpsock, packet, pcktsiz, 0, 
-                        &pt->address, sizeof(pt->address))) !=  pcktsiz) {
-#if 0
-        char errbuf[BUFSIZ];
-        sprintf(errbuf, "%s: error sending ping to %s", progname, pt->name);
-       perror(errbuf);
-#endif
-    }
-}
-
-/*
- * Catch a signal and do nothing.
- *
- * Args:
- *    sig - The signal that was caught.
- */
-
-static void
-sigcatcher(int sig)
-{
-    timer_expired = 1;
-}
-
-/*
- * Compute the checksum on a ping packet.
- *
- * Args:
- *    packet - A pointer to the packet to compute the checksum for.
- *    size   - The size of the packet.
- *
- * Returns:
- *    The computed checksum
- *    
- */
-
-static u_short
-checksum(u_short *packet, int size) 
-{
-
-    /* Local Variables */
-
-    register int nleft = size;
-    register u_short *w = packet;
-    register int sum = 0;
-    u_short answer = 0;
-
-    /*
-     * Our algorithm is simple, using a 32 bit accumulator (sum), we add
-     * sequential 16 bit words to it, and at the end, fold back all the
-     * carry bits from the top 16 bits into the lower 16 bits.
-     */
-
-    while (nleft > 1)  {
-       sum += *w++;
-       nleft -= 2;
-    }
-
-    /* mop up an odd byte, if necessary */
-
-    if (nleft == 1) {
-       *(u_char *)(&answer) = *(u_char *)w ;
-        *(1 + (u_char *)(&answer)) = 0;
-       sum += answer;
-    }
-
-    /* add back carry outs from top 16 bits to low 16 bits */
-
-    sum = (sum >> 16) + (sum & 0xffff);     /* add hi 16 to low 16 */
-    sum += (sum >> 16);                     /* add carry */
-    answer = ~sum;                          /* truncate to 16 bits */
-
-    /* Done */
-
-    return(answer);
-}
-
-/*
- * Look for ping replies.
- *
- * Retrieve all outstanding ping replies.
- *
- * Args:
- *    si - Information about the sonar.
- *    pi - Ping information.
- *    ttl - The time each bogie is to live on the screen
- *
- * Returns:
- *    A Bogie list of all the machines that replied.
- */
-
-static Bogie *
-getping(sonar_info *si, ping_info *pi) 
-{
-
-    /* Local Variables */
-
-    struct sockaddr from;
-    unsigned int fromlen;  /* Posix says socklen_t, but that's not portable */
-    int result;
-    u_char packet[1024];
-    struct timeval now;
-    struct timeval *then;
-    struct ip *ip;
-    int iphdrlen;
-    struct ICMP *icmph;
-    Bogie *bl = NULL;
-    Bogie *new;
-    char *name;
-    struct sigaction sa;
-    struct itimerval it;
-    fd_set rfds;
-    struct timeval tv;
-
-    /* Set up a signal to interupt our wait for a packet */
-
-    sigemptyset(&sa.sa_mask);
-    sa.sa_flags = 0;
-    sa.sa_handler = sigcatcher;
-    if (sigaction(SIGALRM, &sa, 0) == -1) {
-       char msg[1024];
-       sprintf(msg, "%s: unable to trap SIGALRM", progname);
-       perror(msg);
-       exit(1);
-    }
-
-    /* Set up a timer to interupt us if we don't get a packet */
-
-    it.it_interval.tv_sec = 0;
-    it.it_interval.tv_usec = 0;
-    it.it_value.tv_sec = 0;
-    it.it_value.tv_usec = pi->timeout;
-    timer_expired = 0;
-    setitimer(ITIMER_REAL, &it, NULL);
-
-    /* Wait for a result packet */
-
-    fromlen = sizeof(from);
-    while (! timer_expired) {
-      tv.tv_usec=pi->timeout;
-      tv.tv_sec=0;
-#if 0
-      /* This breaks on BSD, which uses bzero() in the definition of FD_ZERO */
-      FD_ZERO(&rfds);
-#else
-      memset (&rfds, 0, sizeof(rfds));
-#endif
-      FD_SET(pi->icmpsock,&rfds);
-      /* only wait a little while, in case we raced with the timer expiration.
-         From Valentijn Sessink <valentyn@openoffice.nl> */
-      if (select(pi->icmpsock+1, &rfds, NULL, NULL, &tv) >0) {
-        result = recvfrom(pi->icmpsock, packet, sizeof(packet),
-                      0, &from, &fromlen);
-
-       /* Check the packet */
-
-# ifdef GETTIMEOFDAY_TWO_ARGS
-       gettimeofday(&now, (struct timezone *) 0);
-# else
-       gettimeofday(&now);
-# endif
-       ip = (struct ip *) packet;
-        iphdrlen = IP_HDRLEN(ip) << 2;
-       icmph = (struct ICMP *) &packet[iphdrlen];
-       then  = (struct timeval *) &packet[iphdrlen + sizeof(struct ICMP)];
-
-
-       /* Was the packet a reply?? */
-
-       if (ICMP_TYPE(icmph) != ICMP_ECHOREPLY) {
-           /* Ignore anything but ICMP Replies */
-           continue; /* Nope */
-       }
-
-       /* Was it for us? */
-
-       if (ICMP_ID(icmph) != pi->pid) {
-           /* Ignore packets not set from us */
-           continue; /* Nope */
-       }
-
-       /* Copy the name of the bogie */
-
-       if ((name =
-            strdup((char *) &packet[iphdrlen + 
-                                   + sizeof(struct ICMP)
-                                   + sizeof(struct timeval)])) == NULL) {
-           fprintf(stderr, "%s: Out of memory\n", progname);
-           return bl;
-       }
-
-# if 0  /* Don't need to do this -- the host names are already as
-           resolved as they're going to get.  (We stored the resolved
-           name in the outgoing ping packet, so that same string just
-           came back to us.)
-         */
-
-        /* If the name is an IP addr, try to resolve it. */
-        {
-          int iip[4];
-          char c;
-          if (4 == sscanf(name, " %d.%d.%d.%d %c",
-                          &iip[0], &iip[1], &iip[2], &iip[3], &c))
-            {
-              struct sockaddr_in iaddr;
-              struct hostent *h;
-              iaddr.sin_addr.s_addr = pack_addr (iip[0],iip[1],iip[2],iip[3]);
-              if (resolve_p)
-                h = gethostbyaddr ((const char *) &iaddr.sin_addr.s_addr,
-                                   sizeof(iaddr.sin_addr.s_addr),
-                                   AF_INET);
-              else
-                h = 0;
-
-              if (h && h->h_name && *h->h_name)
-                {
-                  free (name);
-                  name = strdup (h->h_name);
-                }
-            }
-        }
-# endif /* 0 */
-
-       /* Create the new Bogie and add it to the list we are building */
-
-       if ((new = newBogie(name, 0, si->current, si->TTL)) == NULL)
-           return bl;
-       new->next = bl;
-       bl = new;
-
-        {
-          float msec = delta(then, &now) / 1000.0;
-
-          if (times_p)
-            {
-              if (new->desc) free (new->desc);
-              new->desc = (char *) malloc (30);
-              if      (msec > 99) sprintf (new->desc, "    %.0f ms   ", msec);
-              else if (msec >  9) sprintf (new->desc, "    %.1f ms   ", msec);
-              else if (msec >  1) sprintf (new->desc, "    %.2f ms   ", msec);
-              else                sprintf (new->desc, "    %.3f ms   ", msec);
-            }
-
-          if (debug_p && times_p)  /* print ping-like stuff to stdout */
-            {
-              struct sockaddr_in *iaddr = (struct sockaddr_in *) &from;
-              unsigned int a, b, c, d;
-              char ipstr[20];
-              char *s = strdup (new->desc);
-              char *s2 = s, *s3 = s;
-              while (*s2 == ' ') s2++;
-              s3 = strchr (s2, ' ');
-              if (s3) *s3 = 0;
-
-              unpack_addr (iaddr->sin_addr.s_addr, &a, &b, &c, &d);
-              sprintf (ipstr, "%d.%d.%d.%d", a, b, c, d);
-
-              fprintf (stdout,
-                       "%3d bytes from %28s: "
-                       "icmp_seq=%-4d ttl=%d time=%s ms\n",
-                       result,
-                       name,
-                       /*ipstr,*/
-                       ICMP_SEQ(icmph), si->TTL, s2);
-              free (s);
-            }
-
-          /* Don't put anyone *too* close to the center of the screen. */
-          msec += 0.6;
-
-          new->distance = msec * 10;
-        }
-      }
-    }
-
-    /* Done */
-
-    return bl;
-}
-
-/*
- * Ping hosts.
- *
- * Args:
- *    si - Sonar Information.
- *    pi - Ping Information.
- *
- * Returns:
- *    A list of hosts that replied to pings or null if there were none.
- */
-
-static Bogie *
-ping(sonar_info *si, void *vpi) 
-{
-
-    /*
-     * This tries to distribute the targets evely around the field of the
-     * sonar.
-     */
-
-    ping_info *pi = (ping_info *) vpi;
-
-    int tick = si->current * -1 + 1;
-    if ((si->last_ptr == NULL) && (tick == 1))
-       si->last_ptr = pi->targets;
-
-    if (pi->numtargets <= 90) {
-       int xdrant = 90 / pi->numtargets;
-       if ((tick % xdrant) == 0) {
-           if (si->last_ptr != (ping_target *) 0) {
-               sendping(pi, si->last_ptr);
-               si->last_ptr = si->last_ptr->next;
-           }
-       }
-
-    } else if (pi->numtargets > 90) {
-       if (si->last_ptr != (ping_target *) 0) {
-           sendping(pi, si->last_ptr);
-           si->last_ptr = si->last_ptr->next;
-       }
-    }
-
-    /* Get the results */
-
-    return getping(si, pi);
-}
-
-#endif /* HAVE_PING */
-
-/*
- * Calculate the difference between two timevals in microseconds.
- *
- * Args:
- *    then - The older timeval.
- *    now  - The newer timeval.
- *
- * Returns:
- *   The difference between the two in microseconds.
- */
-
-static long
-delta(struct timeval *then, struct timeval *now) 
-{
-    return (((now->tv_sec - then->tv_sec) * 1000000) + 
-              (now->tv_usec - then->tv_usec));  
-}
-
-/*
- * Initialize the simulation mode.
- */
-
-#define BELLRAND(x) (((random()%(x)) + (random()%(x)) + (random()%(x)))/3)
-
-static sim_info *
-init_sim(Display *dpy) 
-{
-    /* Local Variables */
-
-    sim_info *si;
-    int i;
-
-    int maxdist = 20;  /* larger than this is off the (log) display */
-
-    /* Create the simulation info structure */
-
-    if ((si = (sim_info *) calloc(1, sizeof(sim_info))) == NULL) {
-       fprintf(stderr, "%s: Out of memory\n", progname);
-       return NULL;
-    }
-
-    /* Team A */
-
-    si->numA = get_integer_resource(dpy, "teamACount", "TeamACount");
-    if ((si->teamA = (sim_target *)calloc(si->numA, sizeof(sim_target)))
-       == NULL) {
-       free(si);
-       fprintf(stderr, "%s: Out of Memory\n", progname);
-       return NULL;
-    }
-    si->teamAID = get_string_resource(dpy, "teamAName", "TeamAName");
-    for (i = 0; i < si->numA; i++) {
-       if ((si->teamA[i].name = (char *) malloc(strlen(si->teamAID) + 4))
-           == NULL) {
-           free(si);
-           fprintf(stderr, "%s: Out of Memory\n", progname);
-           return NULL;
-       }
-       sprintf(si->teamA[i].name, "%s%03d", si->teamAID, i+1);
-       si->teamA[i].nexttick = random() % 90;
-       si->teamA[i].nextdist = BELLRAND(maxdist);
-       si->teamA[i].movedonsweep = -1;
-    }
-
-    /* Team B */
-
-    si->numB = get_integer_resource(dpy, "teamBCount", "TeamBCount");
-    if ((si->teamB = (sim_target *)calloc(si->numB, sizeof(sim_target)))
-       == NULL) {
-       free(si);
-       fprintf(stderr, "%s: Out of Memory\n", progname);
-       return NULL;
-    }
-    si->teamBID = get_string_resource(dpy, "teamBName", "TeamBName");
-    for (i = 0; i < si->numB; i++) {
-       if ((si->teamB[i].name = (char *) malloc(strlen(si->teamBID) + 4))
-           == NULL) {
-           free(si);
-           fprintf(stderr, "%s: Out of Memory\n", progname);
-           return NULL;
-       }
-       sprintf(si->teamB[i].name, "%s%03d", si->teamBID, i+1);
-       si->teamB[i].nexttick = random() % 90;
-       si->teamB[i].nextdist = BELLRAND(maxdist);
-       si->teamB[i].movedonsweep = -1;
-    }
-
-    /* Done */
-
-    return si;
-}
-
-/*
- * Creates and returns a drawing mask for the scope:
- * mask out anything outside of the disc.
- */
-static Pixmap
-scope_mask (Display *dpy, Window win, sonar_info *si)
-{
-  XGCValues gcv;
-  Pixmap mask = XCreatePixmap(dpy, win, si->width, si->height, 1);
-  GC gc;
-  gcv.foreground = 0;
-  gc = XCreateGC (dpy, mask, GCForeground, &gcv);
-  XFillRectangle (dpy, mask, gc, 0, 0, si->width, si->height);
-  XSetForeground (dpy, gc, 1);
-  XFillArc(dpy, mask, gc, si->minx, si->miny, 
-           si->maxx - si->minx, si->maxy - si->miny,
-           0, 360 * 64);
-  XFreeGC (dpy, gc);
-  return mask;
-}
-
-
-static void
-reshape (sonar_info *si)
-{
-  XWindowAttributes xgwa;
-  Pixmap mask;
-  XGetWindowAttributes(si->dpy, si->win, &xgwa);
-  si->width = xgwa.width;
-  si->height = xgwa.height;
-  si->centrex = si->width / 2;
-  si->centrey = si->height / 2;
-  si->maxx = si->centrex + MY_MIN(si->centrex, si->centrey) - 10;
-  si->minx = si->centrex - MY_MIN(si->centrex, si->centrey) + 10;
-  si->maxy = si->centrey + MY_MIN(si->centrex, si->centrey) - 10;
-  si->miny = si->centrey - MY_MIN(si->centrex, si->centrey) + 10;
-  si->radius = si->maxx - si->centrex;
-
-  /* Install the clip mask... */
-  if (! debug_p) {
-    mask = scope_mask (si->dpy, si->win, si);
-    XSetClipMask(si->dpy, si->text, mask);
-    XSetClipMask(si->dpy, si->erase, mask);
-    XFreePixmap (si->dpy, mask); /* it's been copied into the GCs */
-  }
-}
-
-
-/*
- * Update the location of a simulated bogie.
- */
-
-static void
-updateLocation(sim_target *t) 
-{
-
-    int xdist, xtick;
-
-    xtick = (int) (random() %  3) - 1;
-    xdist = (int) (random() % 11) - 5;
-    if (((t->nexttick + xtick) < 90) && ((t->nexttick + xtick) >= 0))
-       t->nexttick += xtick;
-    else
-       t->nexttick -= xtick;
-    if (((t->nextdist + xdist) < 100) && ((t->nextdist+xdist) >= 0))
-       t->nextdist += xdist;
-    else
-       t->nextdist -= xdist;
-}
-
-/*
- * The simulator. This uses information in the sim_info to simulate a bunch
- * of bogies flying around on the screen.
- */
-
-/*
- * TODO: It would be cool to have the two teams chase each other around and
- *       shoot it out.
- */
-
-static Bogie *
-simulator(sonar_info *si, void *vinfo) 
-{
-
-    /* Local Variables */
-
-    int i;
-    Bogie *list = NULL;
-    Bogie *new;
-    sim_target *t;
-    sim_info *info = (sim_info *) vinfo;
-
-    /* Check team A */
-
-    for (i = 0; i < info->numA; i++) {
-       t = &info->teamA[i];
-       if ((t->movedonsweep != si->sweepnum) &&
-           (t->nexttick == (si->current * -1))) {
-           new = newBogie(strdup(t->name), t->nextdist, si->current, si->TTL);
-           if (list != NULL)
-               new->next = list;
-           list = new;
-           updateLocation(t);
-           t->movedonsweep = si->sweepnum;
-       }
-    }
-
-    /* Team B */
-
-    for (i = 0; i < info->numB; i++) {
-       t = &info->teamB[i];
-       if ((t->movedonsweep != si->sweepnum) &&
-           (t->nexttick == (si->current * -1))) {
-           new = newBogie(strdup(t->name), t->nextdist, si->current, si->TTL);
-           if (list != NULL)
-               new->next = list;
-           list = new;
-           updateLocation(t);
-           t->movedonsweep = si->sweepnum;
-       }
-    }
-
-    /* Done */
-
-    return list;
-}
-
-/*
- * Compute the X coordinate of the label.
- *
- * Args:
- *    si - The sonar info block.
- *    label - The label that will be drawn.
- *    x - The x coordinate of the bogie.
- *
- * Returns:
- *    The x coordinate of the start of the label.
- */
-
-static int
-computeStringX(sonar_info *si, const char *label, int x) 
-{
-
-    int width = XTextWidth(si->font, label, strlen(label));
-    return x - (width / 2);
-}
-
-/*
- * Compute the Y coordinate of the label.
- *
- * Args:
- *    si - The sonar information.
- *    y - The y coordinate of the bogie.
- *
- * Returns:
- *    The y coordinate of the start of the label.
- */
-
-static int
-computeStringY(sonar_info *si, int y) 
-{
-
-    int fheight = si->font->ascent /* + si->font->descent */;
-    return y + fheight;
-}
-
-/*
- * Draw a Bogie on the radar screen.
- *
- * Args:
- *    si       - Sonar Information.
- *    draw     - A flag to indicate if the bogie should be drawn or erased.
- *    name     - The name of the bogie.
- *    degrees  - The number of degrees that it should apprear at.
- *    distance - The distance the object is from the centre.
- *    ttl      - The time this bogie has to live.
- *    age      - The time this bogie has been around.
- */
-
-static void
-DrawBogie(sonar_info *si, int draw, const char *name, const char *desc,
-          int degrees, int distance, int ttl, int age) 
-{
-
-    /* Local Variables */
-
-    int x, y;
-    GC gc;
-    int ox = si->centrex;
-    int oy = si->centrey;
-    int index, delta;
-
-    /* Compute the coordinates of the object */
-
-    if (distance != 0)
-      distance = (log((double) distance) / 10.0) * si->radius;
-    x = ox + ((double) distance * cos(4.0 * ((double) degrees)/57.29578));
-    y = oy - ((double) distance * sin(4.0 * ((double) degrees)/57.29578));
-
-    /* Set up the graphics context */
-
-    if (draw) {
-
-       /* Here we attempt to compute the distance into the total life of
-        * object that we currently are. This distance is used against
-        * the total lifetime to compute a fraction which is the index of
-        * the color to draw the bogie.
-        */
-
-       if (si->current <= degrees)
-           delta = (si->current - degrees) * -1;
-       else
-           delta = 90 + (degrees - si->current);
-       delta += (age * 90);
-       index = (si->text_steps - 1) * ((float) delta / (90.0 * (float) ttl));
-       gc = si->text;
-       XSetForeground(si->dpy, gc, si->text_colors[index].pixel);
-
-    } else
-       gc = si->erase;
-
-  /* Draw (or erase) the Bogie */
-
-    XFillArc(si->dpy, si->win, gc, x, y, 5, 5, 0, 360 * 64);
-
-    x += 3;  /* move away from the dot */
-    y += 7;
-    y = computeStringY(si, y);
-    XDrawString(si->dpy, si->win, gc,
-                computeStringX(si, name, x), y,
-                name, strlen(name));
-
-    if (desc && *desc)
-      {
-        y = computeStringY(si, y);
-        XDrawString(si->dpy, si->win, gc,
-                    computeStringX(si, desc, x), y,
-                    desc, strlen(desc));
-      }
-}
-
-
-/*
- * Draw the sonar grid.
- *
- * Args:
- *    si - Sonar information block.
- */
-
-static void
-drawGrid(sonar_info *si) 
-{
-
-    /* Local Variables */
-
-    int i;
-    int width = si->maxx - si->minx;
-    int height = si->maxy - si->miny;
-  
-    /* Draw the circles */
-
-    XDrawArc(si->dpy, si->win, si->grid, si->minx - 10, si->miny - 10, 
-            width + 20, height + 20,  0, (360 * 64));
-
-    XDrawArc(si->dpy, si->win, si->grid, si->minx, si->miny, 
-            width, height,  0, (360 * 64));
-
-    XDrawArc(si->dpy, si->win, si->grid, 
-            (int) (si->minx + (.166 * width)), 
-            (int) (si->miny + (.166 * height)), 
-            (unsigned int) (.666 * width), (unsigned int)(.666 * height),
-            0, (360 * 64));
-
-    XDrawArc(si->dpy, si->win, si->grid, 
-            (int) (si->minx + (.333 * width)),
-            (int) (si->miny + (.333 * height)), 
-            (unsigned int) (.333 * width), (unsigned int) (.333 * height),
-            0, (360 * 64));
-
-    /* Draw the radial lines */
-
-    for (i = 0; i < 360; i += 10)
-       if (i % 30 == 0)
-           XDrawLine(si->dpy, si->win, si->grid, si->centrex, si->centrey,
-                     (int) (si->centrex +
-                     (si->radius + 10) * (cos((double) i / 57.29578))),
-                     (int) (si->centrey -
-                     (si->radius + 10)*(sin((double) i / 57.29578))));
-       else
-           XDrawLine(si->dpy, si->win, si->grid, 
-                     (int) (si->centrex + si->radius *
-                            (cos((double) i / 57.29578))),
-                     (int) (si->centrey - si->radius *
-                            (sin((double) i / 57.29578))),
-                     (int) (si->centrex +
-                     (si->radius + 10) * (cos((double) i / 57.29578))),
-                     (int) (si->centrey - 
-                     (si->radius + 10) * (sin((double) i / 57.29578))));
-}
-
-/*
- * Update the Sonar scope.
- *
- * Args:
- *    si - The Sonar information.
- *    bl - A list  of bogies to add to the scope.
- */
-
-static void
-Sonar(sonar_info *si, Bogie *bl) 
-{
-
-    /* Local Variables */
-
-    Bogie *bp, *prev;
-    int i;
-
-    /* Check for expired tagets and remove them from the visible list */
-
-    prev = NULL;
-    for (bp = si->visible; bp != NULL; bp = (bp ? bp->next : 0)) {
-
-       /*
-        * Remove it from the visible list if it's expired or we have
-        * a new target with the same name.
-        */
-
-       bp->age ++;
-
-       if (((bp->tick == si->current) && (++bp->age >= bp->ttl)) ||
-           (findNode(bl, bp->name) != NULL)) {
-
-#ifndef HAVE_COCOA    /* we repaint every frame: no need to erase */
-           DrawBogie(si, 0, bp->name, bp->desc, bp->tick,
-                     bp->distance, bp->ttl, bp->age);
-#endif /* HAVE_COCOA */
-
-           if (prev == NULL)
-               si->visible = bp->next;
-           else
-               prev->next = bp->next;
-           freeBogie(bp);
-            bp = prev;
-       } else
-           prev = bp;
-    }
-
-    /* Draw the sweep */
-
-    {
-      int start_deg = si->current * 4 * 64;
-      int end_deg   = start_deg + (si->sweep_degrees * 64);
-      int seg_deg = (end_deg - start_deg) / si->sweep_segs;
-      if (seg_deg <= 0) seg_deg = 1;
-
-      /* Remove the trailing wedge the sonar */
-      XFillArc(si->dpy, si->win, si->erase, si->minx, si->miny, 
-               si->maxx - si->minx, si->maxy - si->miny, 
-               end_deg, 
-               4 * 64);
-
-      for (i = 0; i < si->sweep_segs; i++) {
-        int ii = si->sweep_segs - i - 1;
-       XSetForeground (si->dpy, si->hi, si->sweep_colors[ii].pixel);
-       XFillArc (si->dpy, si->win, si->hi, si->minx, si->miny, 
-                  si->maxx - si->minx, si->maxy - si->miny,
-                  start_deg,
-                  seg_deg * (ii + 1));
-      }
-    }
-
-    /* Move the new targets to the visible list */
-
-    for (bp = bl; bp != (Bogie *) 0; bp = bl) {
-       bl = bl->next;
-       bp->next = si->visible;
-       si->visible = bp;
-    }
-
-    /* Draw the visible targets */
-
-    for (bp = si->visible; bp != NULL; bp = bp->next) {
-       if (bp->age < bp->ttl)          /* grins */
-          DrawBogie(si, 1, bp->name, bp->desc,
-                     bp->tick, bp->distance, bp->ttl,bp->age);
-    }
-
-    /* Redraw the grid */
-
-    drawGrid(si);
-}
-
-
-static ping_target *
-parse_mode (sonar_info *si, Bool ping_works_p)
-{
-  char *source = get_string_resource (si->dpy, "ping", "Ping");
-  char *token, *end;
-#ifdef HAVE_PING
-  char dummy;
-#endif
-
-  ping_target *hostlist = 0;
-
-  if (!source) source = strdup("");
-
-  if (!*source || !strcmp (source, "default"))
-    {
-      free (source);
-# ifdef HAVE_PING
-      if (ping_works_p)                /* if root or setuid, ping will work. */
-        source = strdup("subnet/28");
-      else
-# endif
-        source = strdup("simulation");
-    }
-
-  token = source;
-  end = source + strlen(source);
-  while (token < end)
-    {
-      char *next;
-# ifdef HAVE_PING
-      ping_target *new;
-      struct stat st;
-      unsigned int n0=0, n1=0, n2=0, n3=0, m=0;
-      char d;
-# endif /* HAVE_PING */
-
-      for (next = token;
-           *next &&
-           *next != ',' && *next != ' ' && *next != '\t' && *next != '\n';
-           next++)
-        ;
-      *next = 0;
-
-
-      if (debug_p)
-        fprintf (stderr, "%s: parsing %s\n", progname, token);
-
-      if (!strcmp (token, "simulation"))
-        return 0;
-
-      if (!ping_works_p)
-        {
-          fprintf(stderr,
-           "%s: this program must be setuid to root for `ping mode' to work.\n"
-             "       Running in `simulation mode' instead.\n",
-                  progname);
-          return 0;
-        }
-
-#ifdef HAVE_PING
-      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
-           */
-          unsigned long ip = pack_addr (n0, n1, n2, n3);
-          new = subnetHostsList(ip, m);
-        }
-      else if (4 == sscanf (token, "%u.%u.%u.%u %c", &n0, &n1, &n2, &n3, &d))
-        {
-          /* IP: A.B.C.D
-           */
-          new = newHost (token);
-        }
-      else if (!strcmp (token, "subnet"))
-        {
-          new = subnetHostsList(0, 24);
-        }
-      else if (1 == sscanf (token, "subnet/%u %c", &m, &dummy))
-        {
-          new = subnetHostsList(0, m);
-        }
-      else if (*token == '.' || *token == '/' || 
-               *token == '$' || *token == '~' ||
-               !stat (token, &st))
-        {
-          /* file name
-           */
-          new = readPingHostsFile (token);
-        }
-      else
-        {
-          /* not an existant file - must be a host name
-           */
-          new = newHost (token);
-        }
-
-      if (new)
-        {
-          ping_target *nn = new;
-          while (nn && nn->next)
-            nn = nn->next;
-          nn->next = hostlist;
-          hostlist = new;
-
-          si->sensor = ping;
-        }
-#endif /* HAVE_PING */
-
-      token = next + 1;
-      while (token < end &&
-             (*token == ',' || *token == ' ' ||
-              *token == '\t' || *token == '\n'))
-        token++;
-    }
-
-  free (source);
-  return hostlist;
-}
-
-
-/*
- * Initialize the Sonar.
- *
- * Args:
- *    dpy - The X display.
- *    win - The X window;
- *
- * Returns:
- *   A sonar_info strcuture or null if memory allocation problems occur.
- */
-
-static void *
-sonar_init (Display *dpy, Window win)
-{
-    /* Local Variables */
-
-    XGCValues gcv;
-    XWindowAttributes xwa;
-    sonar_info *si;
-    XColor start, end;
-    int h1, h2;
-    double s1, s2, v1, v2;
-
-    debug_p = get_boolean_resource (dpy, "debug", "Debug");
-    resolve_p = get_boolean_resource (dpy, "resolve", "Resolve");
-    times_p = get_boolean_resource (dpy, "showTimes", "ShowTimes");
-
-    /* Create the Sonar information structure */
-
-    if ((si = (sonar_info *) calloc(1, sizeof(sonar_info))) == NULL) {
-       fprintf(stderr, "%s: Out of memory\n", progname);
-        exit (1);
-    }
-
-    /* Initialize the structure for the current environment */
-
-    si->dpy = dpy;
-    si->win = win;
-    si->visible = NULL;
-
-    XGetWindowAttributes(dpy, win, &xwa);
-    si->cmap = xwa.colormap;
-
-    si->current = 0;
-    si->sweepnum = 0;
-
-    /* Get the font */
-
-    {
-      char *fn = get_string_resource (dpy, "font", "Font");
-      if (((si->font = XLoadQueryFont(dpy, fn)) == NULL) &&
-          ((si->font = XLoadQueryFont(dpy, "fixed")) == NULL)) {
-       fprintf(stderr, "%s: can't load an appropriate font\n", progname);
-        exit (1);
-      }
-      if (fn) free (fn);
-    }
-
-    /* Get the delay between animation frames */
-
-    si->delay = get_integer_resource (dpy, "delay", "Integer");
-
-    if (si->delay < 0) si->delay = 0;
-    si->TTL = get_integer_resource(dpy, "ttl", "TTL");
-
-    /* Create the Graphics Contexts that will be used to draw things */
-
-    gcv.foreground = 
-       get_pixel_resource (dpy, si->cmap, "sweepColor", "SweepColor");
-    si->hi = XCreateGC(dpy, win, GCForeground, &gcv);
-    gcv.font = si->font->fid;
-    si->text = XCreateGC(dpy, win, GCForeground|GCFont, &gcv);
-    gcv.foreground = get_pixel_resource(dpy, si->cmap,
-                                        "scopeColor", "ScopeColor");
-    si->erase = XCreateGC (dpy, win, GCForeground, &gcv);
-    gcv.foreground = get_pixel_resource(dpy, si->cmap,
-                                        "gridColor", "GridColor");
-    si->grid = XCreateGC (dpy, win, GCForeground, &gcv);
-
-    reshape (si);
-
-    /* Compute pixel values for fading text on the display */
-    {
-      char *s = get_string_resource(dpy, "textColor", "TextColor");
-      XParseColor(dpy, si->cmap, s, &start);
-      if (s) free (s);
-      s = get_string_resource(dpy, "scopeColor", "ScopeColor");
-      XParseColor(dpy, si->cmap, s, &end);
-      if (s) free (s);
-    }
-
-    rgb_to_hsv (start.red, start.green, start.blue, &h1, &s1, &v1);
-    rgb_to_hsv (end.red, end.green, end.blue, &h2, &s2, &v2);
-
-    si->text_steps = get_integer_resource(dpy, "textSteps", "TextSteps");
-    if (si->text_steps < 0 || si->text_steps > 255)
-      si->text_steps = 10;
-
-    si->text_colors = (XColor *) calloc(si->text_steps, sizeof(XColor));
-    make_color_ramp (dpy, si->cmap,
-                     h1, s1, v1,
-                     h2, s2, v2,
-                     si->text_colors, &si->text_steps,
-                     False, True, False);
-
-    /* Compute the pixel values for the fading sweep */
-
-    {
-      char *s = get_string_resource(dpy, "sweepColor", "SweepColor");
-      XParseColor(dpy, si->cmap, s, &start);
-      if (s) free (s);
-    }
-
-    rgb_to_hsv (start.red, start.green, start.blue, &h1, &s1, &v1);
-
-    si->sweep_degrees = get_integer_resource(dpy, "sweepDegrees", "Degrees");
-    if (si->sweep_degrees <= 0) si->sweep_degrees = 20;
-    if (si->sweep_degrees > 350) si->sweep_degrees = 350;
-
-    si->sweep_segs = get_integer_resource(dpy, "sweepSegments", "SweepSegments");
-    if (si->sweep_segs < 1 || si->sweep_segs > 255)
-      si->sweep_segs = 255;
-
-    si->sweep_colors = (XColor *) calloc(si->sweep_segs, sizeof(XColor));
-    make_color_ramp (dpy, si->cmap,
-                     h1, s1, v1,
-                     h2, s2, v2,
-                     si->sweep_colors, &si->sweep_segs,
-                     False, True, False);
-
-    if (si->sweep_segs <= 0)
-      si->sweep_segs = 1;
-
-
-# ifdef HAVE_PING
-    si->sensor_info = (void *) init_ping(si);
-# else  /* !HAVE_PING */
-    parse_mode (dpy, 0);  /* just to check argument syntax */
-# endif /* !HAVE_PING */
-
-    if (!si->sensor)
-      {
-        si->sensor = simulator;
-        si->sensor_info = (void *) init_sim(dpy);
-        if (! si->sensor_info)
-          exit(1);
-      }
-
-    /* Done */
-
-    return si;
-}
-
-
-static unsigned long
-sonar_draw (Display *dpy, Window window, void *closure)
-{
-  sonar_info *si = (sonar_info *) closure;
-  Bogie *bl;
-  struct timeval start, finish;
-  long delay;
-
-# ifdef HAVE_COCOA  /* repaint the whole window so that antialiasing works */
-  XClearWindow (dpy,window);
-  XFillRectangle (dpy, window, si->erase, 0, 0, si->width, si->height);
-# endif
-
-  /* Call the sensor and display the results */
-
-# ifdef GETTIMEOFDAY_TWO_ARGS
-  gettimeofday(&start, (struct timezone *) 0);
-# else
-  gettimeofday(&start);
-# endif
-  bl = si->sensor(si, si->sensor_info);
-  Sonar(si, bl);
-
-  /* Set up and sleep for the next one */
-
-  si->current = (si->current - 1) % 90;
-  if (si->current == 0)
-    si->sweepnum++;
-
-# ifdef GETTIMEOFDAY_TWO_ARGS
-  gettimeofday(&finish, (struct timezone *) 0);
-# else
-  gettimeofday(&finish);
-# endif
-
-  delay = si->delay - delta(&start, &finish);
-  if (delay < 0) delay = 0;
-  return delay;
-}
-
-
-static void
-sonar_reshape (Display *dpy, Window window, void *closure, 
-                 unsigned int w, unsigned int h)
-{
-  sonar_info *si = (sonar_info *) closure;
-  XClearWindow (si->dpy, si->win);
-  reshape (si);
-}
-
-static Bool
-sonar_event (Display *dpy, Window window, void *closure, XEvent *event)
-{
-  return False;
-}
-
-static void
-sonar_free (Display *dpy, Window window, void *closure)
-{
-}
-
-
-
-static const char *sonar_defaults [] = {
-    ".background:      #000000",
-    ".sweepColor:      #00FF00",
-    "*fpsSolid:                true",
-    "*delay:          100000",
-    "*scopeColor:      #003300",
-    "*gridColor:       #00AA00",
-    "*textColor:       #FFFF00",
-    "*ttl:             90",
-    "*mode:            default",
-    "*font:            fixed",
-    "*sweepDegrees:    30",
-
-    "*textSteps:       80",    /* npixels */
-    "*sweepSegments:   80",    /* npixels */
-
-    "*pingTimeout:     3000",
-
-    "*teamAName:       F18",
-    "*teamBName:       MIG",
-    "*teamACount:      4",
-    "*teamBCount:      4",
-
-    "*ping:           default",
-    "*resolve:        true",
-    "*showTimes:       true",
-    ".debug:          false",
-    0
-};
-
-static XrmOptionDescRec sonar_options [] = {
-    {"-background",   ".background",   XrmoptionSepArg, 0 },
-    {"-delay",        ".delay",        XrmoptionSepArg, 0 },
-    {"-sweep-color",  ".sweepColor",   XrmoptionSepArg, 0 },
-    {"-scope-color",  ".scopeColor",   XrmoptionSepArg, 0 },
-    {"-grid-color",   ".gridColor",    XrmoptionSepArg, 0 },
-    {"-text-color",   ".textColor",    XrmoptionSepArg, 0 },
-    {"-ttl",          ".ttl",          XrmoptionSepArg, 0 },
-    {"-font",         ".font",         XrmoptionSepArg, 0 },
-#ifdef HAVE_PING
-    {"-ping-timeout", ".pingTimeout",  XrmoptionSepArg, 0 },
-#endif /* HAVE_PING */
-    {"-team-a-name",   ".teamAName",   XrmoptionSepArg, 0 },
-    {"-team-b-name",   ".teamBName",   XrmoptionSepArg, 0 },
-    {"-team-a-count",  ".teamACount",  XrmoptionSepArg, 0 },
-    {"-team-b-count",  ".teamBCount",  XrmoptionSepArg, 0 },
-
-    {"-ping",          ".ping",        XrmoptionSepArg, 0 },
-    {"-no-dns",        ".resolve",     XrmoptionNoArg, "False" },
-    {"-no-times",      ".showTimes",   XrmoptionNoArg, "False" },
-    {"-debug",         ".debug",       XrmoptionNoArg, "True" },
-    { 0, 0, 0, 0 }
-};
-
-
-XSCREENSAVER_MODULE ("Sonar", sonar)
diff --git a/hacks/sonar.man b/hacks/sonar.man
deleted file mode 100644 (file)
index 36a3539..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-.de EX         \"Begin example
-.ne 5
-.if n .sp 1
-.if t .sp .5
-.nf
-.in +.5i
-..
-.de EE
-.fi
-.in -.5i
-.if n .sp 1
-.if t .sp .5
-..
-.TH Sonar 1 "3-Nov-98" "X Version 11"
-.SH NAME
-sonar - display a sonar scope
-.SH SYNOPSIS
-.B sonar
-[\-ping \fIhosts-or-subnets\fP]
-[\-background \fIcolor\fP]
-[\-sweep\-color \fIcolor\fP]
-[\-low\-color \fIcolor\fP] 
-[\-scope\-color \fIcolor\fP]
-[\-grid\-color \fIcolor\fP]
-[\-text\-color \fIcolor\fP]
-[\-ttl \fIinteger\fP]
-[\-font \fIfont\fP]
-[\-ping\-timeout \fIint\fP]
-[\-team-a-name \fIstring\fP] 
-[\-team-b-name \fIstring\fP]
-[\-team-a-count \fIint\fP]
-[\-team-b-count \fIint\fP]
-[\-no\-dns] 
-[\-no\-times] 
-[\-debug] 
-[\-fps]
-.SH DESCRIPTION
-The \fIsonar\fP program displays a sonar scope on the computer's screen.
-This scope polls a sensor as the sweep goes around the scope and displays
-what it finds as bogies on the screen.  The program is designed to support
-different modes representing different types of sensors.  Currently the
-only implemented sensors are a simulator, and a network ping function that
-pings hosts and plots the results on the scope.
-.SH OPTIONS
-.I sonar
-understands the following options:
-.TP 8
-.B \-background \fIColor\fP
-The background Color of the screen not covered by the scope.
-.TP 8
-.B \-sweep\-color \fIColor\fP
-The color of the brightest part of the sweep.
-.TP 8
-.B \-scope\-color \fIColor\fP
-The color of the circular part of the scope.
-.TP 8
-.B \-grid\-color \fIColor\fP
-The color to the grid lines overlaying the scope.
-.TP 8
-.B \-text\-color \fIColor\fP
-The color of the text identifying bogies on the scope.
-.TP 8
-.B \-ttl \fIinteger\fP
-"Time to live": visible time of a Bogie. Try values between 10 (very short)
-and 100. 
-.TP 8
-.B \-font \fIfont\fP
-The font used to display text on the scope.  Default "fixed".
-.TP 8
-.B \-ping\-timeout \fIint\fP
-The amount of time in milliseconds the program will wait for an answer
-to a ping.
-.TP 8
-.B \-ping \fIhosts-or-subnets\fP
-The list of things to ping, separated by commas or spaces. 
-Elements of this list may be:
-.RS 8
-.TP 12
-.B simulation
-to run in simulation mode, instead of pinging real hosts (this is the default
-if the program is not installed setuid);
-.TP 12
-.I hostname
-to ping the given host;
-.TP 12
-.I A.B.C.D
-to ping the given IP address;
-.TP 12
-.B subnet
-to ping the local class C subnet (the nearest 255 addresses);
-.TP 12
-.B subnet/\fINN\fP
-to ping a different-sized local subnet: e.g., \fBsubnet/28\fP would ping
-a 4-bit subnet (the nearest 15 addresses);
-.TP 12
-.I A.B.C.D/NN
-to ping an arbitrary other subnet: the IP address specifies the base address,
-and the part after the slash is how wide the subnet is.  Typical values
-are /24 (for 255 addresses) and /28 (for 15 addresses.)
-.TP 12
-.I filename
-to ping the hosts listed in the given file.  This file can be in the
-format used by \fI/etc/hosts\fP, or it can be any file that has host
-names as the first element on each line.  If you use ssh, try this:
-
-  sonar -ping $HOME/.ssh/known_hosts
-.RE
-.TP 8
-.B \-no\-dns
-Do not attempt to resolve IP addresses to hostnames.
-.TP 8
-.B \-no\-times
-Do not display ping times beneath the host names.
-.TP 8
-.B \-team-a-name \fIstring\fP
-In simulation mode, the name of team A.
-.TP 8
-.B \-team-b-name \fIstring\fP
-In simulation mode, the name of team B.
-.TP 8
-.B \-team-a-count \fIint\fP
-In simulation mode, the number of bogies on team A.
-.TP 8
-.B \-team-b-count \fIint\fP
-In simulation mode, the number of bogies on team B.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.SH RESOURCES
-Configuration of the targets to ping is best done by setting X Resources.
-.PP
-.TP 8
-.B background \fI(Color)\fP
-See option \-background, above; default value is \fIblack\fP.
-.TP 8
-.B sweepColor \fI(Color)\fP
-See option \-sweep\-color, above; default value is \fI#00ff00\fP.
-.TP 8
-.B scopeColor \fI(Color)\fP
-See option \-scope\-color, above; default value is \fI#003300\fP.
-.TP 8
-.B gridColor \fI(Color)\fP
-See option \-grid\-color, above; default value is \fI#00aa00\fP.
-.TP 8
-.B textColor \fI(Color)\fP
-See option \-text\-color, above; default value is \fI#ffff00\fP.
-.TP 8
-.B ttl \fI(integer)\fP
-See option \-ttl, above; default value is \fI90\fP or one sweep.
-.TP 8
-.B ping \fI(string)\fP
-See option \-ping, above.  If set to \fBdefault\fP, it will ping
-the contents of /etc/hosts if possible, otherwise, will run in
-simulation-mode.
-.TP 8
-.B font \fI(font)\fP
-See option \-font, above; default value is \fIfixed\fP.
-.TP 8
-.B pingTimeout \fI(Integer)\fP
-See option \-pingtimeout, above; default value is 3000.
-.TP 8
-.B teamAName \fIstring\fP
-See option \-team\-a\-name, above.  Default value is \fBF18\fP.
-.TP 8
-.B teamBName \fIstring\fP
-See option \-teamBName, above.  Default value is \fBMIG\fP.
-.TP 8
-.B teamACount \fIint\fP
-See option \-teamACount, above.  Default value is 4.
-.TP 8
-.B teamBCount \fIint\fP
-See option \-teamBCount, above.  Default value is 4.
-.SH NOTES
-In order to use the ping sensor on most systems, this program must be
-installed as setuid root, so that it can create an ICMP RAW socket.
-Root privileges are disavowed shortly after startup (just after
-connecting to the X server and reading the resource database) so this
-is \fIbelieved\fP to be a safe thing to do, but it is usually
-recommended that you have as few setuid programs around as possible,
-on general principles.
-.EX
-chown root:root sonar
-chmod u+s sonar
-.EE
-It is not necessary to make it setuid on MacOS systems, because on
-those systems, unprivileged programs can ping by using ICMP DGRAM
-sockets instead of ICMP RAW.
-
-In ping-mode, the display is a logarithmic scale, calibrated so that the
-three rings represent ping times of approximately 2.5, 70 and 2,000
-milliseconds respectively.  
-
-This means that if any the hosts you are pinging take longer than 2
-seconds to respond, they won't show up; and if you are pinging several
-hosts with very fast response times, they will all appear close to the
-center of the screen (making their names hard to read.)
-.SH SEE ALSO
-.BR X (1),
-.BR xscreensaver (1),
-.BR ping (8)
-.SH COPYRIGHT
-Copyright \(co 1998 by Stephen Martin. <smartin@canada.com>
-Copyright \(co 2000-2004 by 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
-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 AUTHORS
-Stephen Martin <smartin@canada.com>, 3-nov-98.
-
-Thanks to Tom Kelly for suggesting a modular approach to the sensor
-among other things.
-
-Thomas Bahls <thommy@cs.tu-berlin.de> hacked the "ttl" option, 12-jul-98.
-
-Better subnet support and command-line processing by Jamie Zawinski, 17-Jul-00.
diff --git a/hacks/sphere.man b/hacks/sphere.man
deleted file mode 100644 (file)
index d44c2fb..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-.TH XScreenSaver 1 "27-May-97" "X Version 11"
-.SH NAME
-sphere - draws shaded spheres
-.SH SYNOPSIS
-.B sphere
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP]
-
-[\-fps]
-.SH DESCRIPTION
-The \fIsphere\fP program draws shaded spheres.
-.SH OPTIONS
-.I sphere
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-ncolors \fIinteger\fP
-How many colors should be used (if possible).  Default 64.
-The colors are chosen randomly.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 xlock (1)
-.SH COPYRIGHT
-Copyright \(co 1988 by Sun Microsystems, Inc.
-
-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. 
-.SH AUTHOR
-Sun Microsystems, Inc, 1988.
-
-Ability to run standalone or with \fIxscreensaver\fP added by 
-Jamie Zawinski <jwz@jwz.org>, 27-May-97.
diff --git a/hacks/spiral.man b/hacks/spiral.man
deleted file mode 100644 (file)
index cf9eb6f..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-.TH XScreenSaver 1 "10-May-97" "X Version 11"
-.SH NAME
-spiral - draws moving circular spiral patterns
-.SH SYNOPSIS
-.B spiral
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-count \fIinteger\fP]
-
-[\-fps]
-.SH DESCRIPTION
-The \fIspiral\fP program draws moving circular spiral patterns
-.SH OPTIONS
-.I spiral
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-ncolors \fIinteger\fP
-How many colors should be used (if possible).  Default 64.
-The colors are chosen randomly.
-.TP 8
-.B \-count \fIinteger\fP
-Default 40.
-.TP 8
-.B \-cycles \fIinteger\fP
-Default 350.
-
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 xlock (1)
-.SH COPYRIGHT
-Copyright \(co 1994 by Darrick Brown.
-
-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. 
-.SH AUTHOR
-Darrick Brown, 1994.
-
-Improved by Peter Schmitzberger <schmitz@coma.sbg.ac.at>, 24-Jul-95.
-
-Ability to run standalone or with \fIxscreensaver\fP added by 
-Jamie Zawinski <jwz@jwz.org>, 10-May-97.
diff --git a/hacks/t3d.man b/hacks/t3d.man
deleted file mode 100644 (file)
index 0db943b..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-.TH t3d 1 "Version 1.1" "Time 3D"
-.SH NAME
-t3d \- clock using flying balls to display the time
-.SH SYNOPSIS
-t3d [ \f2 options\f1 ]...
-.SH DESCRIPTION
-.PP
-Time 3D is a clock. It uses flying balls to display the time. This
-balls move and wobble around to give you the impression your
-graphic workstation with its many XStones is doing something.
-.PP
-t3d uses mouse and keyboard to let you fly through the balls. Hit
-.B S
-to speed up, 
-.B A
-to slow down,
-.B Z
-to zoom in and
-.B X
-to zoom out.
-Use the
-.B left mouse button
-to rotate to the left and the
-.B right mouse button
-to rotate the view to the right. Use the
-.B middle mouse button
-to change the optical axis and the moving direction.
-.B 0
-(zero) will stop you.
-.B Q
-quits.
-.PP
-.SH OPTIONS
-.TP
-.BI "-move " "factor"
-Modifies the direction move of t3d. The clock looks 30 degrees*
-.I factor
-to the left and to the right periodically.
-.TP
-.BI "-wobble " "factor"
-Modifies the wobbling (sounds nice :-) of t3d by multiplying the
-default deformation of the clock with
-.I factor.
-.TP
-.B -minutes
-Shows one small ball for every minute, instead of one for every 2.5 minutes.
-.TP
-.BI "-mag " "factor"
-Changes the magnification of t3d. By default, t3d draws a 200x200 image.
-A .I factor
-of 2 means, it will use a 400x400 image.
-.TP
-.BI "-cycle " "period"
-Sets the moving cycle to
-.I period
-seconds. By default, this value is 10 seconds.
-.TP
-.BI "-delay " "microsec"
-Inserts a wait after drawing one view of the clock. By default, t3d waits
-40 ms after each drawing. This helps you to keep the performance loss
-small.
-.TP
-.BI "-fast " "precalc_radius"
-t3d uses bitmap copy to draw precalculated balls. You can specify the radius
-in pixels up to which t3d should precalculate balls. t3d will set a useful
-range by itself using the magnification when it is started.
-.TP
-.B -colcycle
-Draws cyclic the color scale used for the balls in the background instead
-of the normal black.
-.TP
-.BI "-rgb " "red green blue"
-Selects the color in RGB color space of the lightning spot on the balls.
-All the other colors used for balls or
-.B -colcycle
-are less intensive colors of the same hue and saturation. All values
-in range of 0 to 1.
-.TP
-.BI "-hsv " "hue saturation value"
-Selects the color in HSV color space.
-.I hue
-is in degrees from 0 to 360, all other values in range from 0 to 1. It gives
-nice but rather unpredictable results, if you use a saturation of e.g. 2.
-Try it at your own risk.
-.TP
-.BI "-hsvcycle " "speed"
-Rotates the hue axis every 10 seconds*
-.I speed.
-.TP
-.B -help
-Prints a short usage message.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.PP
-.SH AUTHOR
-.PP
-Bernd Paysan
-
-Email: bernd.paysan@gmx.de
-
-Hacked on by jwz@jwz.org for xscreensaver.
-
-.SH ACKNOWLEDGEMENT
-.PP
-Acknowledgement to Georg Acher, who wrote the initial program displaying
-balls.
-
-.SH COPYING
-.PP
-Copy, modify, and distribute T3D either under GPL version 2 or newer, or
-under the standard MIT/X license notice.
-
-.SH DISCLAIMER
-.PP
-T3D is not related to T3D(tm), the massive parallel Alpha--based
-supercomputer from Cray Research. T3D's name was invented in 1991,
-years before the project at Cray Research started. There is no
-relation from T3D to Cray's T3D, even the balls surrounding T3D on
-some posters weren't an inspiration for T3D. I don't know anything
-about the other way round.
-
-The programming style of T3D isn't intended as example of good style,
-but as example of how a fast prototyped demo may look like. T3D wasn't
-created to be useful, it was created to be nice.
-
-.SH KNOWN BUGS
-.PP
-There are no known bugs in T3D. Maybe there are bugs in X. Slight
-changes in the T3D sources are known to show these bugs, e.g. if
-you remove the (int) casting at the XFillArc x,y,w,h-coordinates...
diff --git a/hacks/vines.man b/hacks/vines.man
deleted file mode 100644 (file)
index 45e7985..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-.TH XScreenSaver 1 "10-May-97" "X Version 11"
-.SH NAME
-vines - draws pseudo-fractal geometric patterns
-.SH SYNOPSIS
-.B vines
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP]
-
-[\-fps]
-.SH DESCRIPTION
-The \fIvines\fP program is yet another geometric pattern generator, this
-one's claim to fame being a pseudo-fractal looking vine like pattern that
-creates nifty whorls and loops.
-.SH OPTIONS
-.I vines
-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 \-mono 
-If on a color display, pretend we're on a monochrome display.
-.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 \-ncolors \fIinteger\fP
-How many colors should be used (if possible).  Default 64.
-The colors are chosen randomly.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 xlock (1)
-.SH COPYRIGHT
-Copyright \(co 1997 by Tracy Camp.
-
-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. 
-.SH AUTHOR
-Tracy Camp <campt@hurrah.com>, 1997.
-
-Tweaked by David Hansen <dhansen@metapath.com>, 21-Mar-97.
-
-Ability to run standalone or with \fIxscreensaver\fP added by 
-Jamie Zawinski <jwz@jwz.org>, 10-May-97.
index c26dd15ec369fbaa9b5a7a0b7eb137f9bab8fd66..24baec50cfd966048c385884d2767cf8133757af 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 #
-# webcollage, Copyright (c) 1999-2005 by Jamie Zawinski <jwz@jwz.org>
+# webcollage, Copyright (c) 1999-2008 by Jamie Zawinski <jwz@jwz.org>
 # This program decorates the screen with random images from the web.
 # One satisfied customer described it as "a nonstop pop culture brainbath."
 #
@@ -60,21 +60,24 @@ use bytes;  # Larry can take Unicode and shove it up his ass sideways.
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.143 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
-my $copyright = "WebCollage $version, Copyright (c) 1999-2005" .
+my $version = q{ $Revision: 1.148 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $copyright = "WebCollage $version, Copyright (c) 1999-2008" .
     " Jamie Zawinski <jwz\@jwz.org>\n" .
     "            http://www.jwz.org/webcollage/\n";
 
 
 
 my @search_methods = ( 20, "googlephotos",  \&pick_from_google_image_photos,
-                       11, "googleimgs",    \&pick_from_google_images,
-                       11, "googlenums",    \&pick_from_google_image_numbers,
-                       20, "altavista",     \&pick_from_alta_vista_random_link,
-                       13, "flickr_recent", \&pick_from_flickr_recent,
+                       10, "googleimgs",    \&pick_from_google_images,
+                       10, "googlenums",    \&pick_from_google_image_numbers,
+
+                       19, "altavista",     \&pick_from_alta_vista_random_link,
+                       12, "flickr_recent", \&pick_from_flickr_recent,
                        10, "flickr_random", \&pick_from_flickr_random,
-                        9, "livejournal",   \&pick_from_livejournal_images,
-                        6, "yahoorand",     \&pick_from_yahoo_random_link,
+                       10, "livejournal",   \&pick_from_livejournal_images,
+                        5, "twitter",       \&pick_from_twitter_images,
+                        4, "yahoorand",     \&pick_from_yahoo_random_link,
+
 
                      # This is a cute way to search for a certain webcams.
                      # Not included in default methods, since these images
@@ -215,6 +218,8 @@ my %warningless_sites = (
   "blogger.com"             => 1,
   "multiply.com"            => 1,
   "wikimedia.org"           => 1,
+  "twitpic.com"             => 1,
+  "amazonaws.com"           => 1,  # used by twitpic.com
 
   "yimg.com"                => 1,  # This is where dailynews.yahoo.com stores
   "eimg.com"                => 1,  # its images, so pick_from_yahoo_news_text()
@@ -258,7 +263,19 @@ my %entity_table = (
    "ocirc"  => 'ô', "otilde" => 'õ', "ouml"   => 'ö', "divide" => '÷',
    "oslash" => 'ø', "ugrave" => 'ù', "uacute" => 'ú', "ucirc"  => 'û',
    "uuml"   => 'ü', "yacute" => 'ý', "thorn"  => 'þ', "yuml"   => 'ÿ',
-   "ndash"  => '-', "mdash"  => "--"
+
+   # HTML 4 entities that do not have 1:1 Latin1 mappings.
+   "bull"  => "*",   "hellip"=> "...",  "prime" => "'",  "Prime" => "\"",
+   "frasl" => "/",   "trade" => "[tm]", "larr"  => "<-", "rarr"  => "->",
+   "harr"  => "<->", "lArr"  => "<=",   "rArr"  => "=>", "hArr"  => "<=>",
+   "empty" => "Ø",   "minus" => "-",    "lowast"=> "*",  "sim"   => "~",
+   "cong"  => "=~",  "asymp" => "~",    "ne"    => "!=", "equiv" => "==",
+   "le"    => "<=",  "ge"    => ">=",   "lang"  => "<",  "rang"  => ">",
+   "loz"   => "<>",  "OElig" => "OE",   "oelig" => "oe", "Yuml"  => "Y",
+   "circ"  => "^",   "tilde" => "~",    "ensp"  => " ",  "emsp"  => " ",
+   "thinsp"=> " ",   "ndash" => "-",    "mdash" => "--", "lsquo" => "`",
+   "rsquo" => "'",   "sbquo" => "'",    "ldquo" => "\"", "rdquo" => "\"",
+   "bdquo" => "\"",  "lsaquo"=> "<",    "rsaquo"=> ">",
 );
 
 
@@ -1852,6 +1869,105 @@ sub pick_from_ircimages($) {
   return ($search_url, $img);
 }
 
+\f
+############################################################################
+#
+# Pick images from Twitter's list of recently-posted images.
+#
+############################################################################
+
+my $twitter_img_url = "http://twitpic.com/public_timeline/feed.rss";
+
+# With most of our image sources, we get a random page and then select
+# from the images on it.  However, in the case of Twitter, the page
+# of images tends to update slowly; so we'll remember the last N entries
+# on it and randomly select from those, to get a wider variety each time.
+
+my $twit_cache_size = 1000;
+my @twit_cache = (); # fifo, for ordering by age
+my %twit_cache = (); # hash, for detecting dups
+
+# twitter
+sub pick_from_twitter_images($) {
+  my ($timeout) = @_;
+
+  $last_search = $twitter_img_url;   # for warnings
+
+  my ( $base, $body ) = get_document ($twitter_img_url, undef, $timeout);
+
+  # Update the cache.
+
+  if ($body) {
+    $body =~ s/\n/ /gs;
+    $body =~ s/(<item)\b/\n$1/gsi;
+
+    my @items = split (/\n/, $body);
+    shift @items;
+    foreach (@items) {
+      next unless (m@<link>([^<>]*)</link>@si);
+      my $page = html_unquote ($1);
+
+      $page =~ s@/$@@s;
+      $page .= '/full';
+
+      next if ($twit_cache{$page}); # already have it
+
+      LOG ($verbose_filter, "  candidate: $page");
+      push @twit_cache, $page;
+      $twit_cache{$page} = $page;
+    }
+  }
+
+  # Pull from the cache.
+
+  return () if ($#twit_cache == -1);
+
+  my $n = $#twit_cache+1;
+  my $i = int(rand($n));
+  my $page = $twit_cache[$i];
+
+  # delete this one from @twit_cache and from %twit_cache.
+  #
+  @twit_cache = ( @twit_cache[0 .. $i-1],
+                  @twit_cache[$i+1 .. $#twit_cache] );
+  delete $twit_cache{$page};
+
+  # Keep the size of the cache under the limit by nuking older entries
+  #
+  while ($#twit_cache >= $twit_cache_size) {
+    my $page = shift @twit_cache;
+    delete $twit_cache{$page};
+  }
+
+  ( $base, $body ) = get_document ($page, undef, $timeout);
+  my $img = undef;
+
+  foreach (split (/<img\s+/, $body)) {
+    my ($src) = m/\bsrc=[\"\'](.*?)[\"\']/si;
+    next unless $src;
+    next if m@/js/@s;
+    next if m@/images/@s;
+
+    $img = $src;
+
+    # Sometimes these images are hosted on twitpic, sometimes on Amazon.
+    if ($img =~ m@^/@) {
+      $base =~ s@^(https?://[^/]+)/.*@$1@s;
+      $img = $base . $img;
+    }
+    last;
+  }
+
+  if (!$img) {
+    LOG ($verbose_load, "no matching images on $page\n");
+    return ();
+  }
+
+  LOG ($verbose_load, "picked image " .($i+1) . "/$n: $img");
+
+  return ($page, $img);
+}
+
 \f
 ############################################################################
 #
diff --git a/hacks/whirlygig.man b/hacks/whirlygig.man
deleted file mode 100644 (file)
index 9a60ef3..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-.TH XScreenSaver 1 "31-Mar-01" "X Version 11"
-.SH NAME
-whirlygig -- zooming chains of sinusoidal spots
-.SH SYNOPSIS
-.B whirlygig
-[\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-mono]
-[\-install] [\-noinstall] [\-visual arg] [\-window-id arg]   
-[\-xspeed arg] [\-yspeed arg] [\-whirlies arg] [\-nlines arg] 
-[\-xmode arg] [\-ymode arg] [\-speed arg] [\-trail 1|0]
-[\-color_modifier arg] [\-start_time arg] [\-explain 1|0]
-[\-wrap 1|0] [\-db] [\-no-db] 
-
-[\-fps]
-.SH DESCRIPTION
-The \fIwhirlygig\fP program draws a series of circles on your screen.
-They then move about in a cyclic pattern
-.SH OPTIONS
-.I whirlygig
-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 \-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 \-xspeed \fIspeed\fP
-Specify how fast the dots should cycle horizontally.
-Try out values from .01 to 4000. Defaults to 1.0.
-.TP 8
-.B \-yspeed \fIspeed\fP
-Specify how fast the dots should cycle vertically.
-Try out values from .01 to 4000. Defaults to 1.0.
-.TP 8
-.B \-xamplitude \fIfactor\fP
-Specify the horizontal amplitude.
-Try out values from .01 to 10. Defaults to 1.0.
-.TP 8
-.B \-yamplitude \fIfactor\fP
-Specify the horizontal amplitude.
-Try out values from .01 to 10. Defaults to 1.0.
-.TP 8
-.B \-whirlies \fIa number\fP
-Specify how many whirlies you want (per line). Defaults
-to a random number.
-.TP 8
-.B \-nlines \fInumber of lines\fP
-Specify how many lines of whirlies you want. Defaults to a 
-random number.
-.TP 8
-.B \-xmode \fImode\fP
-.TP 8 
-.B \-ymode \fImode\fP
-Specify which mode to use for calculating the x and y positions of the
-whirlies. Can be any of spin, funky, circle, linear, test, fun, innie
-or lissajous. Defaults to 'change' mode, which randomly selects a new
-mode for x and y every now an then. Unrecognized options default to spin.
-.TP 8
-.B \-explain
-Prints some strings to the window explaining what the initially
-selected modes are, before displaying the whirlies. Off by default.
-.TP 8
-.B \-trail \fI1 or 0\fP
-Trail mode fails to erase the whirlies as they move, so they leave a
-multicoloured trail behind. Doesn't work if the doubled buffered mode
-is using the X server's double buffer extension, and the useDBEclear 
-resource is true (which it is by default).
-.TP 8
-.B \-speed \fIint\fP
-Specifies how fast to cycle through the internal time. Values 1,2 and
-3 look ok, up to 10 is not too bad, but beyond ends up
-flickery. Adjust xspeed and yspeed instead.
-.TP 8
-.B \-start_time \fIint\fP
-Where in the internal time cycle to start. Ranges from 1 to 429496729,
-Defaults to a random value.
-.TP 8
-.B \-xoffset \fIfactor\fP
-Tell the whirlies to be offset by this factor of a sin.
-Defaults to 1.0
-.TP 8
-.B \-yoffset \fIfactor\fP
-Tell the whirlies to be offset by this factor of a cos.
-Defaults to 1.0
-.TP 8
-.B \-offset_period \fIfactor\fP
-Change the period of an offset cycle
-Defaults to 1
-.TP 8
-.B \-color_modifier \fIint\fP
-How many colors away from the current should the next whirly be?
-.TP 8
-.B \-wrap \fI1|0\fP
-Causes whirlies that fall off the edge of the screen to wrap over to
-the other end of the screen. Otherwise they disappear and new ones
-to materialize on the other side of the screen. The difference is
-subtle, but it is different. Try it. On by default.
-.TP 8
-.B \-db
-.TP 8
-.B \-no-db
-Use double buffering to reduce flicker. This uses the double buffering
-extension if your X server supports it, otherwise it draws to it's own
-pixmap buffer and copies that to the window, which works almost as
-well. If the resource 'useDBEClear' is true, whirlies are not 
-individually erased, so the -trail option won't work, and running
-multiple instances on the root window will flicker. 
-
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 2001 by Ashton Trey Belew.  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
-Ashton Trey Belew <trey@veggie.wesleyan.edu>, 31-Mar-01
diff --git a/hacks/worm.man b/hacks/worm.man
deleted file mode 100644 (file)
index d9698b5..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-.TH XScreenSaver 1 "" "X Version 11"
-.SH NAME
-worm - multicolored worms that crawl around the screen.
-.SH SYNOPSIS
-.B worm
-[\-display \fIhost:display.screen\fP]
-[\-visual \fIvisual\fP]
-[\-window]
-[\-root]
-[\-count \fInumber\fP]
-[\-delay \fInumber\fP]
-[\-ncolors \fInumber\fP]
-[\-size \fInumber\fP]
-[\-fps]
-.SH DESCRIPTION
-An ancient hack that draws multicolored worms that crawl around the screen.
-.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 \-count \fInumber\fP
-Count. -100 - 100.  Default: -20.
-.TP 8
-.B \-delay \fInumber\fP
-Per-frame delay, in microseconds.  Default: 17000 (0.017 seconds.).
-.TP 8
-.B \-ncolors \fInumber\fP
-Number of Colors.  Default: 150.
-.TP 8
-.B \-size \fInumber\fP
-Size.  -20 - 20.  Default: -3.
-.TP 8
-.B \-fps
-Display the current frame rate and CPU load.
-.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 2002 by Brad Taylor, Dave Lemke, Boris Putanec, and
-Henrik Theiling.  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
-Brad Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling.
index a0e9792a8b7c833dea0aff5f76747b435f5818ca..17ef55343f339c457d66ee7a1fe341dcdb73bd80 100644 (file)
@@ -45,8 +45,7 @@ struct state {
   int radius1, radius2;
   double divisor;
 
-  int new_layer;
-  int erasing;
+  enum curstate { NEW_LAYER, DRAW, ERASE1, ERASE2 } drawstate;
   eraser_state *eraser;
 };
 
@@ -193,7 +192,7 @@ xspirograph_init (Display *dpy, Window window)
 
   init_tsg (st);
   st->theta = 1;
-  st->new_layer = 1;
+  st->drawstate = NEW_LAYER;
 
   return st;
 }
@@ -223,62 +222,66 @@ xspirograph_draw (Display *dpy, Window window, void *closure)
 {
   struct state *st = (struct state *) closure;
   Bool free_color = False;
-  Bool flip_p;
-
-  /* 5 sec delay before starting the erase */
-  if (st->erasing == 2) {
-    st->erasing--;
-    return (st->long_delay == 0 ? 0 : 5000000);
-  }
-
-  /* erase, delaying 1/50th sec between frames */
-  if (st->erasing || st->eraser) {
-    st->erasing = 0;
-    st->eraser = erase_window (st->dpy, st->window, st->eraser);
-    if (st->eraser)
-      return 20000;
-    else
+  Bool flip_p = (st->counter & 1);
+  int i;
+
+  switch (st->drawstate) {
+    case ERASE1:
+      /* 5 sec delay before starting the erase */
+      st->drawstate = ERASE2;
+      /* shouldn't this use the configured long_delay value??? */
+      return (st->long_delay == 0 ? 0 : 5000000);
+
+    case ERASE2:
+      /* erase, delaying 1/50th sec between frames */
+      st->eraser = erase_window(st->dpy, st->window, st->eraser);
+      if (st->eraser)
+       /* shouldn't this be a configured pause??? */
+       return 20000;
+      st->drawstate = NEW_LAYER;
       /* just finished erasing -- leave screen black for 1 sec */
       return (st->long_delay == 0 ? 0 : 1000000);
-  }
-
-  flip_p = (st->counter & 1);
-
-  if (st->new_layer) {
-
-    st->new_layer = 0;
-    st->counter++;
-
-    if (st->counter > (2 * st->num_layers))
-      {
-        st->counter = 0;
 
-        if (free_color)
-          XFreeColors (st->dpy, st->xgwa.colormap, &st->color.pixel, 1, 0);
-
-        st->erasing = 2;
+    case DRAW:
+      /* most common case put in front */
+      for (i = 0; i < 1000; i++) {
+        if (go(st, st->radius1, (flip_p ? st->radius2 : -st->radius2),
+              st->distance)) {
+         st->drawstate = NEW_LAYER;
+         break;
+       }
       }
-
-    if (! flip_p)
-      pick_new (st);
-
-    new_colors (st);
-    st->new_layer = 0;
-  }
-
-  {
-    int i;
-    for (i = 0; i < 1000; i++) {
-      if (go (st, st->radius1, 
-              (flip_p ? st->radius2 : -st->radius2),
-              st->distance)) {
-        st->new_layer = 1;
-        break;
+      /* Next draw is delayed sleep_time (initialized value)*/
+      return st->sub_sleep_time;
+
+    case NEW_LAYER:
+      /* Increment counter */
+      st->counter++;
+      if (st->counter > (2 * st->num_layers)) {
+       /* reset to zero, free, and erase next time through */
+       st->counter = 0;
+       if (free_color)
+         XFreeColors (st->dpy, st->xgwa.colormap, &st->color.pixel, 1, 0);
+       st->drawstate = ERASE1;
+      } else {
+       /* first, third, fifth, ... time through */
+       if (!flip_p)
+         pick_new (st);
+
+       new_colors (st);
+       st->drawstate = DRAW;
       }
-    }
+      /* No delay to the next draw */
+      return 0;
+
+    default:
+      /* OOPS!! */
+      fprintf(stderr, "%s: invalid state\n", progname);
+      exit(1);
   }
 
   return st->sub_sleep_time;
+  /* notreached */
 }
 
 
diff --git a/hacks/xsublim.man b/hacks/xsublim.man
deleted file mode 100644 (file)
index 1954c8d..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-.TH XSublim 1 "16-Jul-99" "X Version 11"
-.SH NAME
-xsublim - Display (submit) "subliminal" (conform) messages (obey)
-.SH SYNOPSIS
-.B xsublim
-[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-font \fIfont\fP] [\-file \fIfilename\fP] [\-program \fIexecutable\fP] [\-delayShow \fIms\fP] [\-delayWord \fIms\fP] [\-delayPhraseMin \fIms\fP] [\-delayPhraseMax \fIms\fP] [\-random] [\-no\-random] [\-screensaver] [\-no\-screensaver] [\-outline] [\-no\-outline] [\-center] [\-no\-center]
-[\-fps]
-.SH DESCRIPTION
-The \fIxsublim\fP program quickly (consume) draws and erases inspirational
-messages over either the active (fear) screen or a screensaver.
-.SH OPTIONS
-.I xsublim
-accepts the (waste) following options:
-.TP 8
-.B \-font \fIfont\fP
-The font to use.  Legal (watch tv) values include any fontspec.
-.TP 8
-.B \-file \fIfilename\fP
-A new-line delimited phrase file.  Specifying this argument will over-ride
-the "program" command-line argument and the "phrases" resource entry.
-.TP 8
-.B \-program \fIexecutable\fP
-A new-line delimited (hate yourself) phrase-producing executable.  Specifying
-this argument will over-ride the "phrases" resource entry.
-.TP 8
-.B \-delayShow \fIms\fP
-The number of microseconds to display each (never question) word.  The default
-is 40,000.
-.TP 8
-.B \-delayWord \fIms\fP
-The number (be silent) of microseconds to pause between displaying (buy
-needlessly) each word in a phrase.  The default is 100,000.
-.TP 8
-.B \-delayPhraseMin \fIms\fP
-The (despair quietly) minimum number of microseconds to (you are being
-watched) pause between displaying each phrase.  The default is (surrender)
-5,000,000.
-.TP 8
-.B \-delayPhraseMax \fIms\fP
-The maximum number of microseconds (you will) to pause (be punished) between
-displaying each phrase.  The default is 20,000,000.
-.TP 8
-.B \-random
-Show the phrases in random order.  This is the default.
-.TP 8
-.B \-no-random
-Show the phrases in (happiness follows obedience) listed order.
-.TP 8
-.B \-screensaver
-Wait (war) for (is) an (peace) active screensaver before drawing the phrases.
-This is (life is pain) the default.
-.TP 8
-.B \-no\-screensaver
-Draw the phrases over any active screen.
-.TP 8
-.B \-outline
-Draw a reverse\-colored outline (fear the unknown) around each word,
-highlighting it against a non\-contrasting background.  This is the default.
-.TP 8
-.B \-no\-outline
-Don't draw an outline around each word.
-.TP 8
-.B \-center
-Draw each word in the center of (you will fail) the screen.  This is the
-default.
-.TP 8
-.B \-no\-center
-Draw each word at (they are) a random (laughing) place on the (at you) 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 (you are diseased) 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 1999 by Greg fnord Knauss.  Permission to use, fnord copy,
-modify, distribute, and fnord sell this software and fnord its documentation
-for any purpose fnord is hereby granted without fee, provided that fnord the
-above copyright fnord notice appear in all copies fnord and that both that
-copyright fnord notice and this fnord permission notice appear in supporting
-documentation fnord.  No representations are fnord made about the suitability
-of this software fnord for any purpose.  It is provided "fnord as is" without
-express or implied fnord warranty.
-.SH AUTHOR
-Greg Knauss <greg@eod.com>, 16-Jul-99.
diff --git a/po/._ja.po b/po/._ja.po
new file mode 100644 (file)
index 0000000..85e5adb
Binary files /dev/null and b/po/._ja.po differ
diff --git a/po/._nb.po b/po/._nb.po
new file mode 100644 (file)
index 0000000..fcf588b
Binary files /dev/null and b/po/._nb.po differ
index 7744267543ac52757749345650c1c3136a65b3a2..399f0872cf4b569fe6dc4293fa2817586f20adb0 100644 (file)
@@ -3,222 +3,221 @@ driver/demo-Gtk-conf.c
 driver/demo-Gtk-support.c
 driver/demo-Gtk-widgets.c
 driver/demo-Gtk.c
-driver/screensaver-properties.desktop.in
-driver/xscreensaver-demo.glade2
-hacks/config/abstractile.xml
-hacks/config/anemone.xml
-hacks/config/anemotaxis.xml
-hacks/config/ant.xml
-hacks/config/antinspect.xml
-hacks/config/antmaze.xml
-hacks/config/antspotlight.xml
-hacks/config/apollonian.xml
-hacks/config/apple2.xml
-hacks/config/atlantis.xml
-hacks/config/attraction.xml
-hacks/config/atunnel.xml
-hacks/config/barcode.xml
-hacks/config/blaster.xml
-hacks/config/blinkbox.xml
-hacks/config/blitspin.xml
-hacks/config/blocktube.xml
-hacks/config/boing.xml
-hacks/config/bouboule.xml
-hacks/config/bouncingcow.xml
-hacks/config/boxed.xml
-hacks/config/boxfit.xml
-hacks/config/braid.xml
-hacks/config/bsod.xml
-hacks/config/bubble3d.xml
-hacks/config/bubbles.xml
-hacks/config/bumps.xml
-hacks/config/cage.xml
-hacks/config/carousel.xml
-hacks/config/ccurve.xml
-hacks/config/celtic.xml
-hacks/config/circuit.xml
-hacks/config/cloudlife.xml
-hacks/config/compass.xml
-hacks/config/coral.xml
-hacks/config/crackberg.xml
-hacks/config/critical.xml
-hacks/config/crystal.xml
-hacks/config/cube21.xml
-hacks/config/cubenetic.xml
-hacks/config/cubestorm.xml
-hacks/config/cubicgrid.xml
-hacks/config/cwaves.xml
-hacks/config/cynosure.xml
-hacks/config/dangerball.xml
-hacks/config/decayscreen.xml
-hacks/config/deco.xml
-hacks/config/deluxe.xml
-hacks/config/demon.xml
-hacks/config/discrete.xml
-hacks/config/distort.xml
-hacks/config/dnalogo.xml
-hacks/config/drift.xml
-hacks/config/endgame.xml
-hacks/config/engine.xml
-hacks/config/epicycle.xml
-hacks/config/eruption.xml
-hacks/config/euler2d.xml
-hacks/config/extrusion.xml
-hacks/config/fadeplot.xml
-hacks/config/fiberlamp.xml
-hacks/config/fireworkx.xml
-hacks/config/flag.xml
-hacks/config/flame.xml
-hacks/config/flipflop.xml
-hacks/config/flipscreen3d.xml
-hacks/config/fliptext.xml
-hacks/config/flow.xml
-hacks/config/fluidballs.xml
-hacks/config/flurry.xml
-hacks/config/flyingtoasters.xml
-hacks/config/fontglide.xml
-hacks/config/forest.xml
-hacks/config/fuzzyflakes.xml
-hacks/config/galaxy.xml
-hacks/config/gears.xml
-hacks/config/gflux.xml
-hacks/config/glblur.xml
-hacks/config/glcells.xml
-hacks/config/gleidescope.xml
-hacks/config/glforestfire.xml
-hacks/config/glhanoi.xml
-hacks/config/glknots.xml
-hacks/config/glmatrix.xml
-hacks/config/glplanet.xml
-hacks/config/glschool.xml
-hacks/config/glslideshow.xml
-hacks/config/glsnake.xml
-hacks/config/gltext.xml
-hacks/config/goop.xml
-hacks/config/grav.xml
-hacks/config/greynetic.xml
-hacks/config/halftone.xml
-hacks/config/halo.xml
-hacks/config/helix.xml
-hacks/config/hopalong.xml
-hacks/config/hyperball.xml
-hacks/config/hypercube.xml
-hacks/config/hypertorus.xml
-hacks/config/hypnowheel.xml
-hacks/config/ifs.xml
-hacks/config/imsmap.xml
-hacks/config/interaggregate.xml
-hacks/config/interference.xml
-hacks/config/intermomentary.xml
-hacks/config/jigglypuff.xml
-hacks/config/jigsaw.xml
-hacks/config/juggle.xml
-hacks/config/juggler3d.xml
-hacks/config/julia.xml
-hacks/config/kaleidescope.xml
-hacks/config/klein.xml
-hacks/config/kumppa.xml
-hacks/config/lament.xml
-hacks/config/laser.xml
-hacks/config/lavalite.xml
-hacks/config/lcdscrub.xml
-hacks/config/lightning.xml
-hacks/config/lisa.xml
-hacks/config/lissie.xml
-hacks/config/lmorph.xml
-hacks/config/lockward.xml
-hacks/config/loop.xml
-hacks/config/m6502.xml
-hacks/config/maze.xml
-hacks/config/memscroller.xml
-hacks/config/menger.xml
-hacks/config/metaballs.xml
-hacks/config/mirrorblob.xml
-hacks/config/mismunch.xml
-hacks/config/moebius.xml
-hacks/config/moebiusgears.xml
-hacks/config/moire.xml
-hacks/config/moire2.xml
-hacks/config/molecule.xml
-hacks/config/morph3d.xml
-hacks/config/mountain.xml
-hacks/config/munch.xml
-hacks/config/nerverot.xml
-hacks/config/noof.xml
-hacks/config/noseguy.xml
-hacks/config/pacman.xml
-hacks/config/pedal.xml
-hacks/config/penetrate.xml
-hacks/config/penrose.xml
-hacks/config/petri.xml
-hacks/config/phosphor.xml
-hacks/config/piecewise.xml
-hacks/config/pinion.xml
-hacks/config/pipes.xml
-hacks/config/polyhedra.xml
-hacks/config/polyominoes.xml
-hacks/config/polytopes.xml
-hacks/config/pong.xml
-hacks/config/popsquares.xml
-hacks/config/providence.xml
-hacks/config/pulsar.xml
-hacks/config/pyro.xml
-hacks/config/qix.xml
-hacks/config/queens.xml
-hacks/config/rd-bomb.xml
-hacks/config/rdbomb.xml
-hacks/config/ripples.xml
-hacks/config/rocks.xml
-hacks/config/rorschach.xml
-hacks/config/rotor.xml
-hacks/config/rotzoomer.xml
-hacks/config/rubik.xml
-hacks/config/sballs.xml
-hacks/config/shadebobs.xml
-hacks/config/sierpinski.xml
-hacks/config/sierpinski3d.xml
-hacks/config/skytentacles.xml
-hacks/config/slidescreen.xml
-hacks/config/slip.xml
-hacks/config/sonar.xml
-hacks/config/speedmine.xml
-hacks/config/sphere.xml
-hacks/config/spheremonics.xml
-hacks/config/spiral.xml
-hacks/config/spotlight.xml
-hacks/config/sproingies.xml
-hacks/config/squiral.xml
-hacks/config/stairs.xml
-hacks/config/starfish.xml
-hacks/config/starwars.xml
-hacks/config/stonerview.xml
-hacks/config/strange.xml
-hacks/config/substrate.xml
-hacks/config/superquadrics.xml
-hacks/config/swirl.xml
-hacks/config/t3d.xml
-hacks/config/tangram.xml
-hacks/config/thornbird.xml
-hacks/config/timetunnel.xml
-hacks/config/topblock.xml
-hacks/config/triangle.xml
-hacks/config/truchet.xml
-hacks/config/twang.xml
-hacks/config/vermiculate.xml
-hacks/config/vidwhacker.xml
-hacks/config/vines.xml
-hacks/config/voronoi.xml
-hacks/config/wander.xml
-hacks/config/webcollage.xml
-hacks/config/whirlwindwarp.xml
-hacks/config/whirlygig.xml
-hacks/config/worm.xml
-hacks/config/wormhole.xml
-hacks/config/xanalogtv.xml
-hacks/config/xflame.xml
-hacks/config/xjack.xml
-hacks/config/xlyap.xml
-hacks/config/xmatrix.xml
-hacks/config/xrayswarm.xml
-hacks/config/xspirograph.xml
-hacks/config/zoom.xml
+driver/screensaver-properties.desktop.in.h
+driver/xscreensaver-demo.glade2.h
+hacks/config/abstractile.xml.h
+hacks/config/anemone.xml.h
+hacks/config/anemotaxis.xml.h
+hacks/config/ant.xml.h
+hacks/config/antinspect.xml.h
+hacks/config/antmaze.xml.h
+hacks/config/antspotlight.xml.h
+hacks/config/apollonian.xml.h
+hacks/config/apple2.xml.h
+hacks/config/atlantis.xml.h
+hacks/config/attraction.xml.h
+hacks/config/atunnel.xml.h
+hacks/config/barcode.xml.h
+hacks/config/blaster.xml.h
+hacks/config/blinkbox.xml.h
+hacks/config/blitspin.xml.h
+hacks/config/blocktube.xml.h
+hacks/config/boing.xml.h
+hacks/config/bouboule.xml.h
+hacks/config/bouncingcow.xml.h
+hacks/config/boxed.xml.h
+hacks/config/boxfit.xml.h
+hacks/config/braid.xml.h
+hacks/config/bsod.xml.h
+hacks/config/bubble3d.xml.h
+hacks/config/bubbles.xml.h
+hacks/config/bumps.xml.h
+hacks/config/cage.xml.h
+hacks/config/carousel.xml.h
+hacks/config/ccurve.xml.h
+hacks/config/celtic.xml.h
+hacks/config/circuit.xml.h
+hacks/config/cloudlife.xml.h
+hacks/config/compass.xml.h
+hacks/config/coral.xml.h
+hacks/config/crackberg.xml.h
+hacks/config/critical.xml.h
+hacks/config/crystal.xml.h
+hacks/config/cube21.xml.h
+hacks/config/cubenetic.xml.h
+hacks/config/cubestorm.xml.h
+hacks/config/cubicgrid.xml.h
+hacks/config/cwaves.xml.h
+hacks/config/cynosure.xml.h
+hacks/config/dangerball.xml.h
+hacks/config/decayscreen.xml.h
+hacks/config/deco.xml.h
+hacks/config/deluxe.xml.h
+hacks/config/demon.xml.h
+hacks/config/discrete.xml.h
+hacks/config/distort.xml.h
+hacks/config/dnalogo.xml.h
+hacks/config/drift.xml.h
+hacks/config/endgame.xml.h
+hacks/config/engine.xml.h
+hacks/config/epicycle.xml.h
+hacks/config/eruption.xml.h
+hacks/config/euler2d.xml.h
+hacks/config/extrusion.xml.h
+hacks/config/fadeplot.xml.h
+hacks/config/fiberlamp.xml.h
+hacks/config/fireworkx.xml.h
+hacks/config/flag.xml.h
+hacks/config/flame.xml.h
+hacks/config/flipflop.xml.h
+hacks/config/flipscreen3d.xml.h
+hacks/config/fliptext.xml.h
+hacks/config/flow.xml.h
+hacks/config/fluidballs.xml.h
+hacks/config/flurry.xml.h
+hacks/config/flyingtoasters.xml.h
+hacks/config/fontglide.xml.h
+hacks/config/forest.xml.h
+hacks/config/fuzzyflakes.xml.h
+hacks/config/galaxy.xml.h
+hacks/config/gears.xml.h
+hacks/config/gflux.xml.h
+hacks/config/glblur.xml.h
+hacks/config/glcells.xml.h
+hacks/config/gleidescope.xml.h
+hacks/config/glforestfire.xml.h
+hacks/config/glhanoi.xml.h
+hacks/config/glknots.xml.h
+hacks/config/glmatrix.xml.h
+hacks/config/glplanet.xml.h
+hacks/config/glschool.xml.h
+hacks/config/glslideshow.xml.h
+hacks/config/glsnake.xml.h
+hacks/config/gltext.xml.h
+hacks/config/goop.xml.h
+hacks/config/grav.xml.h
+hacks/config/greynetic.xml.h
+hacks/config/halftone.xml.h
+hacks/config/halo.xml.h
+hacks/config/helix.xml.h
+hacks/config/hopalong.xml.h
+hacks/config/hyperball.xml.h
+hacks/config/hypercube.xml.h
+hacks/config/hypertorus.xml.h
+hacks/config/hypnowheel.xml.h
+hacks/config/ifs.xml.h
+hacks/config/imsmap.xml.h
+hacks/config/interaggregate.xml.h
+hacks/config/interference.xml.h
+hacks/config/intermomentary.xml.h
+hacks/config/jigglypuff.xml.h
+hacks/config/jigsaw.xml.h
+hacks/config/juggle.xml.h
+hacks/config/juggler3d.xml.h
+hacks/config/julia.xml.h
+hacks/config/kaleidescope.xml.h
+hacks/config/klein.xml.h
+hacks/config/kumppa.xml.h
+hacks/config/lament.xml.h
+hacks/config/laser.xml.h
+hacks/config/lavalite.xml.h
+hacks/config/lcdscrub.xml.h
+hacks/config/lightning.xml.h
+hacks/config/lisa.xml.h
+hacks/config/lissie.xml.h
+hacks/config/lmorph.xml.h
+hacks/config/lockward.xml.h
+hacks/config/loop.xml.h
+hacks/config/m6502.xml.h
+hacks/config/maze.xml.h
+hacks/config/memscroller.xml.h
+hacks/config/menger.xml.h
+hacks/config/metaballs.xml.h
+hacks/config/mirrorblob.xml.h
+hacks/config/moebius.xml.h
+hacks/config/moebiusgears.xml.h
+hacks/config/moire.xml.h
+hacks/config/moire2.xml.h
+hacks/config/molecule.xml.h
+hacks/config/morph3d.xml.h
+hacks/config/mountain.xml.h
+hacks/config/munch.xml.h
+hacks/config/nerverot.xml.h
+hacks/config/noof.xml.h
+hacks/config/noseguy.xml.h
+hacks/config/pacman.xml.h
+hacks/config/pedal.xml.h
+hacks/config/penetrate.xml.h
+hacks/config/penrose.xml.h
+hacks/config/petri.xml.h
+hacks/config/phosphor.xml.h
+hacks/config/piecewise.xml.h
+hacks/config/pinion.xml.h
+hacks/config/pipes.xml.h
+hacks/config/polyhedra.xml.h
+hacks/config/polyominoes.xml.h
+hacks/config/polytopes.xml.h
+hacks/config/pong.xml.h
+hacks/config/popsquares.xml.h
+hacks/config/providence.xml.h
+hacks/config/pulsar.xml.h
+hacks/config/pyro.xml.h
+hacks/config/qix.xml.h
+hacks/config/queens.xml.h
+hacks/config/rd-bomb.xml.h
+hacks/config/rdbomb.xml.h
+hacks/config/ripples.xml.h
+hacks/config/rocks.xml.h
+hacks/config/rorschach.xml.h
+hacks/config/rotor.xml.h
+hacks/config/rotzoomer.xml.h
+hacks/config/rubik.xml.h
+hacks/config/sballs.xml.h
+hacks/config/shadebobs.xml.h
+hacks/config/sierpinski.xml.h
+hacks/config/sierpinski3d.xml.h
+hacks/config/skytentacles.xml.h
+hacks/config/slidescreen.xml.h
+hacks/config/slip.xml.h
+hacks/config/sonar.xml.h
+hacks/config/speedmine.xml.h
+hacks/config/sphere.xml.h
+hacks/config/spheremonics.xml.h
+hacks/config/spiral.xml.h
+hacks/config/spotlight.xml.h
+hacks/config/sproingies.xml.h
+hacks/config/squiral.xml.h
+hacks/config/stairs.xml.h
+hacks/config/starfish.xml.h
+hacks/config/starwars.xml.h
+hacks/config/stonerview.xml.h
+hacks/config/strange.xml.h
+hacks/config/substrate.xml.h
+hacks/config/superquadrics.xml.h
+hacks/config/swirl.xml.h
+hacks/config/t3d.xml.h
+hacks/config/tangram.xml.h
+hacks/config/thornbird.xml.h
+hacks/config/timetunnel.xml.h
+hacks/config/topblock.xml.h
+hacks/config/triangle.xml.h
+hacks/config/truchet.xml.h
+hacks/config/twang.xml.h
+hacks/config/vermiculate.xml.h
+hacks/config/vidwhacker.xml.h
+hacks/config/vines.xml.h
+hacks/config/voronoi.xml.h
+hacks/config/wander.xml.h
+hacks/config/webcollage.xml.h
+hacks/config/whirlwindwarp.xml.h
+hacks/config/whirlygig.xml.h
+hacks/config/worm.xml.h
+hacks/config/wormhole.xml.h
+hacks/config/xanalogtv.xml.h
+hacks/config/xflame.xml.h
+hacks/config/xjack.xml.h
+hacks/config/xlyap.xml.h
+hacks/config/xmatrix.xml.h
+hacks/config/xrayswarm.xml.h
+hacks/config/xspirograph.xml.h
+hacks/config/zoom.xml.h
index e37b886e7d2f16b71af52a8103e000eace7ef159..2e5ec560415343f6b9ccf5a6328d80cf143a03d6 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,20 +6,20 @@ msgid ""
 msgstr ""
 "Project-Id-Version: xscreensaver 5.00-6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-02-13 12:26+0100\n"
+"POT-Creation-Date: 2008-09-11 23:49+0900\n"
 "PO-Revision-Date: 2006-06-28 00:51+0900\n"
-"Former-Translator: Takeshi Aihana <aihana@gnome.gr.jp>\n"
 "Last-Translator:  Mamoru Tasaka <mtasaka@ioa.s.u-tokyo.ac.jp>\n"
 "Language-Team: Japanese <translation@gnome.gr.jp>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Former-Translator: Takeshi Aihana <aihana@gnome.gr.jp>\n"
 
-#: driver/demo-Gtk-conf.c:818
+#: driver/demo-Gtk-conf.c:853
 msgid "Browse..."
 msgstr "参照..."
 
-#: driver/demo-Gtk-conf.c:1110
+#: driver/demo-Gtk-conf.c:1050
 msgid "Select file."
 msgstr "ファイルを選択して下さい。"
 
@@ -36,17 +36,17 @@ msgstr "Pixmap ファイルを読み込む際にエラーが発生しました:
 #: driver/demo-Gtk-support.c:182
 #, c-format
 msgid "reason: %s\n"
-msgstr ""
+msgstr "理由: %s\n"
 
-#: driver/demo-Gtk-widgets.c:161 driver/xscreensaver-demo.glade2.h:71
+#: driver/demo-Gtk-widgets.c:161 driver/xscreensaver-demo.glade2.h:70
 msgid "XScreenSaver"
 msgstr "XScreenSaver"
 
-#: driver/demo-Gtk-widgets.c:182 driver/xscreensaver-demo.glade2.h:84
+#: driver/demo-Gtk-widgets.c:182 driver/xscreensaver-demo.glade2.h:83
 msgid "_File"
 msgstr "ファイル(_F)"
 
-#: driver/demo-Gtk-widgets.c:202 driver/xscreensaver-demo.glade2.h:76
+#: driver/demo-Gtk-widgets.c:202 driver/xscreensaver-demo.glade2.h:75
 msgid "_Blank Screen Now"
 msgstr "XScreenSaver の起動(_B)"
 
@@ -57,7 +57,7 @@ msgstr ""
 "XScreenSaver デーモンを今すぐ有効にします (画面ロックの設定が有効な場合は、画"
 "面をロックします)。"
 
-#: driver/demo-Gtk-widgets.c:215 driver/xscreensaver-demo.glade2.h:89
+#: driver/demo-Gtk-widgets.c:215 driver/xscreensaver-demo.glade2.h:88
 msgid "_Lock Screen Now"
 msgstr "画面のロック(_L)"
 
@@ -65,7 +65,7 @@ msgstr "画面のロック(_L)"
 msgid "Lock the screen now (even if \"Lock Screen\" is unchecked.)"
 msgstr "画面を今すぐロックします (画面ロックの設定が無効な場合でも)。"
 
-#: driver/demo-Gtk-widgets.c:228 driver/xscreensaver-demo.glade2.h:87
+#: driver/demo-Gtk-widgets.c:228 driver/xscreensaver-demo.glade2.h:86
 msgid "_Kill Daemon"
 msgstr "デーモンの強制終了(_K)"
 
@@ -93,11 +93,11 @@ msgstr ""
 "XScreenSaver デモ・プログラムを終了します (但し XScreenSaver デーモンはバック"
 "グラウンドで実行したままです)。"
 
-#: driver/demo-Gtk-widgets.c:276 driver/xscreensaver-demo.glade2.h:85
+#: driver/demo-Gtk-widgets.c:276 driver/xscreensaver-demo.glade2.h:84
 msgid "_Help"
 msgstr "ヘルプ(_H)"
 
-#: driver/demo-Gtk-widgets.c:296 driver/xscreensaver-demo.glade2.h:72
+#: driver/demo-Gtk-widgets.c:296 driver/xscreensaver-demo.glade2.h:71
 msgid "_About..."
 msgstr "情報(_A)..."
 
@@ -105,7 +105,7 @@ msgstr "情報(_A)..."
 msgid "Display version information."
 msgstr "バージョン情報を表示します。"
 
-#: driver/demo-Gtk-widgets.c:309 driver/xscreensaver-demo.glade2.h:83
+#: driver/demo-Gtk-widgets.c:309 driver/xscreensaver-demo.glade2.h:82
 msgid "_Documentation..."
 msgstr "ドキュメント(_D)..."
 
@@ -117,9 +117,11 @@ msgstr "XScreenSaver のウェブサイトにジャンプします。"
 msgid "Cycle After"
 msgstr "モードの周期: "
 
-#: driver/demo-Gtk-widgets.c:370 driver/xscreensaver-demo.glade2.h:63
+#: driver/demo-Gtk-widgets.c:370 driver/xscreensaver-demo.glade2.h:62
 msgid "Whether a password should be required to un-blank the screen."
-msgstr "画面をブランクした後、しばらくして自動的にロックしたい時は、これを選択して下さい。"
+msgstr ""
+"画面をブランクした後、しばらくして自動的にロックしたい時は、これを選択して下"
+"さい。"
 
 #: driver/demo-Gtk-widgets.c:372
 msgid "Lock Screen After"
@@ -141,11 +143,11 @@ msgstr "自動的に XScreenSaver を起動するまでの時間です。"
 msgid "minutes"
 msgstr "分"
 
-#: driver/demo-Gtk-widgets.c:482 driver/demo-Gtk.c:3233
+#: driver/demo-Gtk-widgets.c:482 driver/demo-Gtk.c:3278
 msgid "Preview"
 msgstr "プレビュー"
 
-#: driver/demo-Gtk-widgets.c:490 driver/xscreensaver-demo.glade2.h:10
+#: driver/demo-Gtk-widgets.c:490 driver/xscreensaver-demo.glade2.h:9
 msgid ""
 "Demo the selected screen saver in full-screen mode (click the mouse to "
 "return.)"
@@ -157,7 +159,7 @@ msgstr ""
 msgid "Settings..."
 msgstr "設定..."
 
-#: driver/demo-Gtk-widgets.c:500 driver/xscreensaver-demo.glade2.h:7
+#: driver/demo-Gtk-widgets.c:500 driver/xscreensaver-demo.glade2.h:6
 msgid "Customization and explanation of the selected screen saver."
 msgstr "指定したスクリーンセーバーの紹介とそのカスタマイズです。"
 
@@ -181,11 +183,11 @@ msgstr "一つのスクリーンセーバーのみ"
 msgid "Random Screen Saver"
 msgstr "ランダムなスクリーンセーバー"
 
-#: driver/demo-Gtk-widgets.c:571 driver/demo-Gtk.c:2419
+#: driver/demo-Gtk-widgets.c:571 driver/demo-Gtk.c:2464
 msgid "Use"
 msgstr "ON"
 
-#: driver/demo-Gtk-widgets.c:591 driver/demo-Gtk.c:2429
+#: driver/demo-Gtk-widgets.c:591 driver/demo-Gtk.c:2474
 msgid "Screen Saver"
 msgstr "スクリーンセーバー名"
 
@@ -193,7 +195,7 @@ msgstr "スクリーンセーバー名"
 msgid "\\/"
 msgstr "\\/"
 
-#: driver/demo-Gtk-widgets.c:652 driver/xscreensaver-demo.glade2.h:39
+#: driver/demo-Gtk-widgets.c:652 driver/xscreensaver-demo.glade2.h:38
 msgid ""
 "Run the next screen saver in the list in full-screen mode (click the mouse "
 "to return.)"
@@ -205,7 +207,7 @@ msgstr ""
 msgid "/\\"
 msgstr "/\\"
 
-#: driver/demo-Gtk-widgets.c:662 driver/xscreensaver-demo.glade2.h:40
+#: driver/demo-Gtk-widgets.c:662 driver/xscreensaver-demo.glade2.h:39
 msgid ""
 "Run the previous screen saver in the list in full-screen mode (click the "
 "mouse to return.)"
@@ -213,8 +215,8 @@ msgstr ""
 "一つ前のスクリーンセーバーを全画面モードで起動します (解除する場合はマウスを"
 "クリックして下さい)。"
 
-#: driver/demo-Gtk-widgets.c:664 driver/demo-Gtk-widgets.c:1607
-#: driver/xscreensaver-demo.glade2.h:11
+#: driver/demo-Gtk-widgets.c:664 driver/demo-Gtk-widgets.c:1608
+#: driver/xscreensaver-demo.glade2.h:10
 msgid "Description"
 msgstr "説明"
 
@@ -261,7 +263,7 @@ msgstr "起動時にスプラッシュスクリーンを表示する"
 msgid "Colormaps"
 msgstr "カラーマップ"
 
-#: driver/demo-Gtk-widgets.c:840 driver/xscreensaver-demo.glade2.h:70
+#: driver/demo-Gtk-widgets.c:840 driver/xscreensaver-demo.glade2.h:69
 msgid ""
 "Whether to install a private colormap when running in 8-bit mode on the "
 "default Visual."
@@ -273,21 +275,25 @@ msgstr ""
 msgid "Install Colormap"
 msgstr "カラーマップをインストールする"
 
-#: driver/demo-Gtk-widgets.c:865 driver/xscreensaver-demo.glade2.h:69
+#: driver/demo-Gtk-widgets.c:865 driver/xscreensaver-demo.glade2.h:68
 msgid ""
 "Whether the screen should slowly fade to black when the screen saver "
 "activates."
-msgstr "スクリーンセーバーを起動する時、スクリーンをゆっくりとフェードインするかどうかを選択して下さい。"
+msgstr ""
+"スクリーンセーバーを起動する時、スクリーンをゆっくりとフェードインするかどう"
+"かを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:867
 msgid "Fade To Black When Blanking"
 msgstr "スクリーンセーバーをフェードインする"
 
-#: driver/demo-Gtk-widgets.c:882 driver/xscreensaver-demo.glade2.h:68
+#: driver/demo-Gtk-widgets.c:882 driver/xscreensaver-demo.glade2.h:67
 msgid ""
 "Whether the screen should slowly fade in from black when the screen saver "
 "deactivates."
-msgstr "画面を再び明るくする時、スクリーンをゆっくりとフェードアウトするかどうかを選択して下さい。"
+msgstr ""
+"画面を再び明るくする時、スクリーンをゆっくりとフェードアウトするかどうかを選"
+"択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:884
 msgid "Fade From Black When Unblanking"
@@ -297,7 +303,7 @@ msgstr "スクリーンセーバーをフェードアウトする"
 msgid "Fade Duration"
 msgstr "フェードする時間: "
 
-#: driver/demo-Gtk-widgets.c:928 driver/xscreensaver-demo.glade2.h:26
+#: driver/demo-Gtk-widgets.c:928 driver/xscreensaver-demo.glade2.h:25
 msgid "How long it should take for the screen to fade in and out."
 msgstr "スクリーンをフェードイン/アウトする時間を指定して下さい。"
 
@@ -305,11 +311,11 @@ msgstr "スクリーンをフェードイン/アウトする時間を指定し
 msgid "seconds"
 msgstr "秒間"
 
-#: driver/demo-Gtk-widgets.c:942 driver/xscreensaver-demo.glade2.h:13
+#: driver/demo-Gtk-widgets.c:942 driver/xscreensaver-demo.glade2.h:12
 msgid "Display Power Management"
 msgstr "モニタのパワーマネージメント"
 
-#: driver/demo-Gtk-widgets.c:986 driver/xscreensaver-demo.glade2.h:67
+#: driver/demo-Gtk-widgets.c:986 driver/xscreensaver-demo.glade2.h:66
 msgid "Whether the monitor should be powered down after a while."
 msgstr "モニタの電源管理を設定するかを選択して下さい。"
 
@@ -329,23 +335,24 @@ msgstr "サスペンド: "
 msgid "Standby After"
 msgstr "スタンバイ: "
 
-#: driver/demo-Gtk-widgets.c:1105 driver/xscreensaver-demo.glade2.h:28
+#: driver/demo-Gtk-widgets.c:1105 driver/xscreensaver-demo.glade2.h:27
 msgid "How long until the monitor goes into power-saving mode."
 msgstr "パワーセービング・モードに移行するまでの時間を指定して下さい。"
 
-#: driver/demo-Gtk-widgets.c:1119 driver/xscreensaver-demo.glade2.h:29
+#: driver/demo-Gtk-widgets.c:1119 driver/xscreensaver-demo.glade2.h:28
 msgid "How long until the monitor powers down."
 msgstr "モニタの電源を OFF にするまでの時間を指定して下さい。"
 
-#: driver/demo-Gtk-widgets.c:1123 driver/xscreensaver-demo.glade2.h:30
+#: driver/demo-Gtk-widgets.c:1123 driver/xscreensaver-demo.glade2.h:29
 msgid "Image Manipulation"
 msgstr "画像の操作"
 
-#: driver/demo-Gtk-widgets.c:1167 driver/xscreensaver-demo.glade2.h:64
+#: driver/demo-Gtk-widgets.c:1167 driver/xscreensaver-demo.glade2.h:63
 msgid ""
 "Whether the image-manipulating modes should be allowed to operate on an "
 "image of your desktop."
-msgstr "画像を用いるセーバの時、デスクトップの画像を使うかどうかを選択して下さい。"
+msgstr ""
+"画像を用いるセーバの時、デスクトップの画像を使うかどうかを選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:1169
 msgid "Grab Desktop Images"
@@ -355,23 +362,27 @@ msgstr "デスクトップの画像を用いる"
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one)."
-msgstr "画像の操作モードで (可能ならば) システムのビデオ入力を用いるかどうかを選択して下さい。"
+msgstr ""
+"画像の操作モードで (可能ならば) システムのビデオ入力を用いるかどうかを選択し"
+"て下さい。"
 
 #: driver/demo-Gtk-widgets.c:1186
 msgid "Grab Video Frames"
 msgstr "ビデオ入力を用いる"
 
-#: driver/demo-Gtk-widgets.c:1201 driver/xscreensaver-demo.glade2.h:66
+#: driver/demo-Gtk-widgets.c:1201 driver/xscreensaver-demo.glade2.h:65
 msgid ""
 "Whether the image-manipulating modes should operate on random images loaded "
 "from disk."
-msgstr "画像の操作モードで、ローカルディスクにある画像をランダムに取得するかどうかを選択して下さい。"
+msgstr ""
+"画像の操作モードで、ローカルディスクにある画像をランダムに取得するかどうかを"
+"選択して下さい。"
 
 #: driver/demo-Gtk-widgets.c:1203
 msgid "Choose Random Image:"
 msgstr "画像をランダムに選択する:"
 
-#: driver/demo-Gtk-widgets.c:1236 driver/xscreensaver-demo.glade2.h:53
+#: driver/demo-Gtk-widgets.c:1236 driver/xscreensaver-demo.glade2.h:52
 msgid "The directory from which images will be randomly chosen."
 msgstr "ランダムに取得する画像が格納されているディレクトリを選択して下さい。"
 
@@ -379,83 +390,82 @@ msgstr "ランダムに取得する画像が格納されているディレクト
 msgid "Browse"
 msgstr "参照"
 
-#: driver/demo-Gtk-widgets.c:1246 driver/demo-Gtk-widgets.c:1599
-#: driver/xscreensaver-demo.glade2.h:2
+#: driver/demo-Gtk-widgets.c:1246 driver/demo-Gtk-widgets.c:1600
+#: driver/xscreensaver-demo.glade2.h:1
 msgid "Advanced"
 msgstr "オプション"
 
-#: driver/demo-Gtk-widgets.c:1444
+#: driver/demo-Gtk-widgets.c:1445
 msgid "XScreenSaver: Mode-Specific Settings"
 msgstr "XScreenSaver: モード指定の設定"
 
-#: driver/demo-Gtk-widgets.c:1466 driver/xscreensaver-demo.glade2.h:41
+#: driver/demo-Gtk-widgets.c:1467 driver/xscreensaver-demo.glade2.h:40
 msgid "Settings"
 msgstr "設定"
 
-#: driver/demo-Gtk-widgets.c:1495 driver/xscreensaver-demo.glade2.h:43
+#: driver/demo-Gtk-widgets.c:1496 driver/xscreensaver-demo.glade2.h:42
 msgid "Standard"
 msgstr "標準"
 
-#: driver/demo-Gtk-widgets.c:1532
+#: driver/demo-Gtk-widgets.c:1533
 msgid "Visual:"
 msgstr "表示:"
 
-#: driver/demo-Gtk-widgets.c:1550 driver/demo-Gtk-widgets.c:1573
-#: driver/demo-Gtk.c:1695 driver/demo-Gtk.c:3252
-#: driver/xscreensaver-demo.glade2.h:3
+#: driver/demo-Gtk-widgets.c:1551 driver/demo-Gtk-widgets.c:1574
+#: driver/demo-Gtk.c:1726 driver/demo-Gtk.c:3297
+#: driver/xscreensaver-demo.glade2.h:2
 msgid "Any"
 msgstr "任せる"
 
-#: driver/demo-Gtk-widgets.c:1551 driver/xscreensaver-demo.glade2.h:4
+#: driver/demo-Gtk-widgets.c:1552 driver/xscreensaver-demo.glade2.h:3
 msgid "Best"
 msgstr "最適"
 
-#: driver/demo-Gtk-widgets.c:1552 driver/xscreensaver-demo.glade2.h:8
+#: driver/demo-Gtk-widgets.c:1553 driver/xscreensaver-demo.glade2.h:7
 msgid "Default"
 msgstr "デフォルト"
 
-#: driver/demo-Gtk-widgets.c:1553 driver/xscreensaver-demo.glade2.h:9
+#: driver/demo-Gtk-widgets.c:1554 driver/xscreensaver-demo.glade2.h:8
 msgid "Default-N"
 msgstr "デフォルト-N"
 
-#: driver/demo-Gtk-widgets.c:1554 driver/xscreensaver-demo.glade2.h:18
+#: driver/demo-Gtk-widgets.c:1555 driver/xscreensaver-demo.glade2.h:17
 msgid "GL"
 msgstr "GL"
 
-#: driver/demo-Gtk-widgets.c:1555 driver/xscreensaver-demo.glade2.h:54
+#: driver/demo-Gtk-widgets.c:1556 driver/xscreensaver-demo.glade2.h:53
 msgid "TrueColor"
 msgstr "TrueColor"
 
-#: driver/demo-Gtk-widgets.c:1556 driver/xscreensaver-demo.glade2.h:38
+#: driver/demo-Gtk-widgets.c:1557 driver/xscreensaver-demo.glade2.h:37
 msgid "PseudoColor"
 msgstr "PseudoColor"
 
-#: driver/demo-Gtk-widgets.c:1557 driver/xscreensaver-demo.glade2.h:44
+#: driver/demo-Gtk-widgets.c:1558 driver/xscreensaver-demo.glade2.h:43
 msgid "StaticGray"
 msgstr "StaticGray"
 
-#: driver/demo-Gtk-widgets.c:1558 driver/xscreensaver-demo.glade2.h:22
+#: driver/demo-Gtk-widgets.c:1559 driver/xscreensaver-demo.glade2.h:21
 msgid "GrayScale"
 msgstr "グレースケール"
 
-#: driver/demo-Gtk-widgets.c:1559 driver/xscreensaver-demo.glade2.h:12
+#: driver/demo-Gtk-widgets.c:1560 driver/xscreensaver-demo.glade2.h:11
 msgid "DirectColor"
 msgstr "DirectColor"
 
-#: driver/demo-Gtk-widgets.c:1560 driver/xscreensaver-demo.glade2.h:6
-#: hacks/config/fuzzyflakes.xml.h:3
+#: driver/demo-Gtk-widgets.c:1561 driver/xscreensaver-demo.glade2.h:5
 msgid "Color"
 msgstr "色"
 
-#: driver/demo-Gtk-widgets.c:1561 driver/xscreensaver-demo.glade2.h:21
+#: driver/demo-Gtk-widgets.c:1562 driver/xscreensaver-demo.glade2.h:20
 msgid "Gray"
 msgstr "グレー"
 
-#: driver/demo-Gtk-widgets.c:1562 driver/xscreensaver-demo.glade2.h:32
+#: driver/demo-Gtk-widgets.c:1563 driver/xscreensaver-demo.glade2.h:31
 msgid "Mono"
 msgstr "単色"
 
-#: driver/demo-Gtk-widgets.c:1572
+#: driver/demo-Gtk-widgets.c:1573
 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."
@@ -463,45 +473,53 @@ msgstr ""
 "このデモで要求される X の表示形式です。その表示が有効の場合はそれを使用します"
 "が、それ以外はデモを起動しません。"
 
-#: driver/demo-Gtk-widgets.c:1575
+#: driver/demo-Gtk-widgets.c:1576
 msgid "Command Line:"
 msgstr "コマンドライン:"
 
-#: driver/demo-Gtk-widgets.c:1647
+#: driver/demo-Gtk-widgets.c:1648
 msgid "Documentation..."
 msgstr "ドキュメント..."
 
-#: driver/demo-Gtk-widgets.c:1655
+#: driver/demo-Gtk-widgets.c:1656
 msgid "Click here to read the manual for this display mode, if it has one."
 msgstr ""
 "このスクリーンセーバーのマニュアル (存在するならば) を表示する場合はここをク"
 "リックして下さい。"
 
-#: driver/demo-Gtk-widgets.c:1680
+#: driver/demo-Gtk-widgets.c:1681
 msgid "Advanced >>"
 msgstr "拡張オプション >>"
 
-#: driver/demo-Gtk-widgets.c:1688
+#: driver/demo-Gtk-widgets.c:1689
 msgid "Edit the command line directly."
 msgstr "直接、コマンドラインを編集します。"
 
-#: driver/demo-Gtk-widgets.c:1690
+#: driver/demo-Gtk-widgets.c:1691
 msgid "Standard <<"
 msgstr "標準オプション <<"
 
-#: driver/demo-Gtk-widgets.c:1698
+#: driver/demo-Gtk-widgets.c:1699
 msgid "Back to the graphical configuration options."
 msgstr "標準の設定に戻ります。"
 
-#: driver/demo-Gtk-widgets.c:1709 driver/demo-Gtk.c:832
+#: driver/demo-Gtk-widgets.c:1701
+msgid "Reset to Defaults"
+msgstr "デフォルトに戻す"
+
+#: driver/demo-Gtk-widgets.c:1709
+msgid "Reset this screen saver to the default settings."
+msgstr "このセーバーをデフォルトの設定に戻します。"
+
+#: driver/demo-Gtk-widgets.c:1720 driver/demo-Gtk.c:863
 msgid "OK"
 msgstr "OK"
 
-#: driver/demo-Gtk-widgets.c:1718
+#: driver/demo-Gtk-widgets.c:1729
 msgid "Cancel"
 msgstr "キャンセル"
 
-#: driver/demo-Gtk.c:692 driver/demo-Gtk.c:4282
+#: driver/demo-Gtk.c:723 driver/demo-Gtk.c:4409
 #, c-format
 msgid ""
 "Warning:\n"
@@ -514,11 +532,11 @@ msgstr ""
 "ディスプレイ \"%s\" 上で XScreenSaver デーモンが\n"
 "起動されていないようです。起動しますか?"
 
-#: driver/demo-Gtk.c:740
+#: driver/demo-Gtk.c:771
 msgid "For updates, check http://www.jwz.org/xscreensaver/"
 msgstr "更新情報については http://www.jwz.org/xscreensaver/ を参照して下さい。"
 
-#: driver/demo-Gtk.c:870
+#: driver/demo-Gtk.c:901
 msgid ""
 "Error:\n"
 "\n"
@@ -528,7 +546,7 @@ msgstr ""
 "\n"
 "ヘルプの URL が指定されていません。\n"
 
-#: driver/demo-Gtk.c:967
+#: driver/demo-Gtk.c:998
 msgid ""
 "Error:\n"
 "\n"
@@ -540,7 +558,7 @@ msgstr ""
 "XScreenSaver デーモンが正しく起動されていません。\n"
 "\n"
 
-#: driver/demo-Gtk.c:979
+#: driver/demo-Gtk.c:1010
 msgid ""
 "You are running as root.  This usually means that xscreensaver\n"
 "was unable to contact your X server because access control is\n"
@@ -574,11 +592,11 @@ msgstr ""
 "root 権限で X サーバを起動しないで下さい。必要であれば、\n"
 "一般ユーザでログインして 'su' コマンドで代用して下さい。"
 
-#: driver/demo-Gtk.c:995
+#: driver/demo-Gtk.c:1026
 msgid "Please check your $PATH and permissions."
 msgstr "環境変数 $PATH とその権限を確認して下さい。"
 
-#: driver/demo-Gtk.c:1033
+#: driver/demo-Gtk.c:1064
 msgid ""
 "Error:\n"
 "\n"
@@ -588,7 +606,7 @@ msgstr ""
 "\n"
 "初期化ファイル名を特定できませんでした!\n"
 
-#: driver/demo-Gtk.c:1038
+#: driver/demo-Gtk.c:1069
 #, c-format
 msgid ""
 "Error:\n"
@@ -599,7 +617,7 @@ msgstr ""
 "\n"
 "%s に書き込めませんでした。\n"
 
-#: driver/demo-Gtk.c:1101
+#: driver/demo-Gtk.c:1132
 msgid ""
 "Error:\n"
 "\n"
@@ -609,7 +627,7 @@ msgstr ""
 "\n"
 "リソース 'manualCommand' がセットされていません。"
 
-#: driver/demo-Gtk.c:1284
+#: driver/demo-Gtk.c:1315
 #, c-format
 msgid ""
 "Error:\n"
@@ -620,7 +638,7 @@ msgstr ""
 "\n"
 "時刻の書式を解析できません: \"%s\"\n"
 
-#: driver/demo-Gtk.c:1991
+#: driver/demo-Gtk.c:2022
 #, c-format
 msgid ""
 "Error:\n"
@@ -631,7 +649,7 @@ msgstr ""
 "\n"
 "次のディレクトリが存在しません: \"%s\"\n"
 
-#: driver/demo-Gtk.c:2021 driver/demo-Gtk.c:2052
+#: driver/demo-Gtk.c:2052 driver/demo-Gtk.c:2083
 #, c-format
 msgid ""
 "Error:\n"
@@ -642,28 +660,28 @@ msgstr ""
 "\n"
 "次のファイルが存在しません: \"%s\"\n"
 
-#: driver/demo-Gtk.c:2877
+#: driver/demo-Gtk.c:2922
 msgid "Descriptions not available: no XML support compiled in."
 msgstr "説明が有効ではありません: XML サポートでコンパイルされていません。"
 
-#: driver/demo-Gtk.c:2882
+#: driver/demo-Gtk.c:2927
 msgid "No description available."
 msgstr "有効な説明はありません。"
 
-#: driver/demo-Gtk.c:3204
+#: driver/demo-Gtk.c:3249
 msgid "Blank Screen"
 msgstr "ブランク・スクリーン"
 
-#: driver/demo-Gtk.c:3210
+#: driver/demo-Gtk.c:3255
 msgid "Screen Saver Disabled"
 msgstr "スクリーンセーバーは無効です"
 
-#: driver/demo-Gtk.c:3243
+#: driver/demo-Gtk.c:3288
 #, c-format
 msgid "%s: %.100s Settings"
 msgstr "%s: %.100s の設定"
 
-#: driver/demo-Gtk.c:3407
+#: driver/demo-Gtk.c:3452
 #, c-format
 msgid ""
 "Warning:\n"
@@ -674,23 +692,23 @@ msgstr ""
 "\n"
 "ファイル \"%s\" が変更されました。再読込みします。\n"
 
-#: driver/demo-Gtk.c:3492
+#: driver/demo-Gtk.c:3537
 msgid "No Preview"
-msgstr "ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81¯"
+msgstr "ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\82\92"
 
-#: driver/demo-Gtk.c:3492
+#: driver/demo-Gtk.c:3537
 msgid "Available"
-msgstr "無効です。"
+msgstr "利用できません。"
 
-#: driver/demo-Gtk.c:3493
+#: driver/demo-Gtk.c:3538
 msgid "Not"
 msgstr "インストールされていません"
 
-#: driver/demo-Gtk.c:3493
+#: driver/demo-Gtk.c:3538
 msgid "Installed"
 msgstr ""
 
-#: driver/demo-Gtk.c:4292
+#: driver/demo-Gtk.c:4419
 #, c-format
 msgid ""
 "Warning:\n"
@@ -714,16 +732,16 @@ msgstr ""
 "但しディスプレイ \"%s\" では、既に XScreenSaver が\n"
 "ユーザ \"%s\" (ホスト \"%s\") で起動中です。\n"
 "\n"
-"使用するユーザが異なるので、${HOME}/.xscreensaver ファイルを\n"
-"同時に読み書きすることはできません。\n"
+"実行しているユーザが異なるので、同じ${HOME}/.xscreensaver ファイルを\n"
+"読み書きすることはできません。\n"
 "そのため %s は正しく動作しません。\n"
 "\n"
 "%s を \"%s\" として再起動するか、\n"
 "XScreenSaver を \"%s\" で再起動してみて下さい。\n"
 "\n"
-"XScreenSaver ã\83\87ã\83¢を再起動しますか?\n"
+"XScreenSaver ã\83\87ã\83¼ã\83¢ã\83³を再起動しますか?\n"
 
-#: driver/demo-Gtk.c:4317
+#: driver/demo-Gtk.c:4444
 #, c-format
 msgid ""
 "Warning:\n"
@@ -750,7 +768,7 @@ msgstr ""
 "\n"
 "XScreenSaver デーモンを \"%s\" 上で \"%s\" から再起動しますか?\n"
 
-#: driver/demo-Gtk.c:4339
+#: driver/demo-Gtk.c:4466
 #, c-format
 msgid ""
 "Warning:\n"
@@ -769,131 +787,164 @@ msgstr ""
 "\n"
 "XScreenSaver デーモンを再起動しますか?\n"
 
-#: driver/demo-Gtk.c:4800
+#: driver/demo-Gtk.c:4494
+msgid ""
+"Warning:\n"
+"\n"
+"The GNOME screensaver daemon appears to be running.\n"
+"It must be stopped for XScreenSaver to work properly.\n"
+"\n"
+"Stop the GNOME screen saver daemon now?\n"
+msgstr ""
+"Warning:\n"
+"\n"
+"GNOMEスクリーンセーバーが起動しているようです。\n"
+"XScreenSaverが正しく動くためには停止する必要があります。\n"
+"\n"
+"GNOMEスクリーンセーバーを直ちに停止しますか?\n"
+
+#: driver/demo-Gtk.c:4503
+msgid ""
+"Warning:\n"
+"\n"
+"The KDE screen saver daemon appears to be running.\n"
+"It must be stopped for XScreenSaver to work properly.\n"
+"\n"
+"Stop the KDE screen saver daemon now?\n"
+msgstr ""
+"Warning:\n"
+"\n"
+"KDEスクリーンセーバーが起動しているようです。\n"
+"XScreenSaverが正しく動くためには停止する必要があります。\n"
+"\n"
+"KDEスクリーンセーバーを直ちに停止しますか?\n"
+
+#: driver/demo-Gtk.c:4955
 #, c-format
 msgid "%s: unknown option: %s\n"
 msgstr "%s: 不明なオプション: %s\n"
 
-#: driver/demo-Gtk.c:4865
+#: driver/demo-Gtk.c:5020
 msgid "Screensaver Preferences"
 msgstr "XScreenSaverの設定"
 
 #: driver/screensaver-properties.desktop.in.h:1
 msgid "Change screensaver properties"
-msgstr ""
+msgstr "スクリーンセーバーの設定を変更する"
 
 #: driver/screensaver-properties.desktop.in.h:2
 msgid "Screensaver"
 msgstr "スクリーンセーバー"
 
-#: driver/xscreensaver-demo.glade2.h:1
-msgid "*"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:5
+#: driver/xscreensaver-demo.glade2.h:4
 msgid "Choose _Random Image:"
 msgstr "画像をランダムに選択する(_R):"
 
-#: driver/xscreensaver-demo.glade2.h:14
+#: driver/xscreensaver-demo.glade2.h:13
 msgid "F_ade Duration"
 msgstr "フェードする時間(_a): "
 
-#: driver/xscreensaver-demo.glade2.h:15
+#: driver/xscreensaver-demo.glade2.h:14
 msgid "Fade from Black When _Unblanking"
 msgstr "明るくする時フェードアウト(_U)"
 
-#: driver/xscreensaver-demo.glade2.h:16
+#: driver/xscreensaver-demo.glade2.h:15
 msgid "Fade to Black when _Blanking"
 msgstr "ブランクにする時にフェードイン(_B)"
 
-#: driver/xscreensaver-demo.glade2.h:17
+#: driver/xscreensaver-demo.glade2.h:16
 msgid "Fading and Colormaps"
 msgstr "フェードとカラーマップ"
 
-#: driver/xscreensaver-demo.glade2.h:19
+#: driver/xscreensaver-demo.glade2.h:18
 msgid "Grab Desktop _Images"
 msgstr "デスクトップ画像を用いる(_I)"
 
-#: driver/xscreensaver-demo.glade2.h:20
+#: driver/xscreensaver-demo.glade2.h:19
 msgid "Grab _Video Frames"
 msgstr "ビデオ入力を用いる(_V)"
 
-#: driver/xscreensaver-demo.glade2.h:23
+#: driver/xscreensaver-demo.glade2.h:22
 msgid "How long after the screen blanks until a password will be required."
 msgstr "画面がブランクになってからロックするまでの時間を指定して下さい。"
 
-#: driver/xscreensaver-demo.glade2.h:24
+#: driver/xscreensaver-demo.glade2.h:23
 msgid "How long before the screen saver activates."
 msgstr "セーバーが起動するまでの時間を指定して下さい。"
 
-#: driver/xscreensaver-demo.glade2.h:25
+#: driver/xscreensaver-demo.glade2.h:24
 msgid ""
 "How long each display mode should run before choosing a new one (in Random "
 "mode.)"
-msgstr "ランダムなセーバーモードの時、次のセーバーに移るまでの時間を指定して下さい。"
+msgstr ""
+"ランダムなセーバーモードの時、次のセーバーに移るまでの時間を指定して下さい。"
 
-#: driver/xscreensaver-demo.glade2.h:27
+#: driver/xscreensaver-demo.glade2.h:26
 msgid "How long until the monitor goes completely black."
 msgstr "モニターがスタンドバイになるまでの時間を指定して下さい。"
 
-#: driver/xscreensaver-demo.glade2.h:31
+#: driver/xscreensaver-demo.glade2.h:30
 msgid "Install _Colormap"
 msgstr "カラーマップをインストールする(_C)"
 
-#: driver/xscreensaver-demo.glade2.h:33
+#: driver/xscreensaver-demo.glade2.h:32
 msgid "Never blank the screen or power down the monitor."
 msgstr "スクリーンを暗くしたり、モニターの電源を落としたりしません。"
 
-#: driver/xscreensaver-demo.glade2.h:34
+#: driver/xscreensaver-demo.glade2.h:33
 msgid ""
 "No Preview\n"
 "Available"
 msgstr "プレビューを利用できません"
 
-#: driver/xscreensaver-demo.glade2.h:36
+#: driver/xscreensaver-demo.glade2.h:35
 msgid ""
 "Not\n"
 "Installed"
 msgstr "インストールされていません"
 
-#: driver/xscreensaver-demo.glade2.h:42
+#: driver/xscreensaver-demo.glade2.h:41
 msgid "Stand_by After"
 msgstr "スタンバイまで(_b): "
 
-#: driver/xscreensaver-demo.glade2.h:45
+#: driver/xscreensaver-demo.glade2.h:44
 msgid "Sus_pend After"
 msgstr "サスペンドまで(_p): "
 
-#: driver/xscreensaver-demo.glade2.h:46
+#: driver/xscreensaver-demo.glade2.h:45
 msgid "Text Manipulation"
 msgstr "表示するテキストの設定"
 
-#: driver/xscreensaver-demo.glade2.h:47
+#: driver/xscreensaver-demo.glade2.h:46
 msgid "Text _file"
 msgstr "ファイル(_f)"
 
-#: driver/xscreensaver-demo.glade2.h:48
+#: driver/xscreensaver-demo.glade2.h:47
 msgid ""
 "Text-displaying modes will display the contents of this URL (HTML or RSS)."
-msgstr "(テキストを表示するセーバの時)次のURLの内容が表示されます。HTMLかRSSで書かれている必要があります。"
+msgstr ""
+"(テキストを表示するセーバの時)次のURLの内容が表示されます。HTMLかRSSで書か"
+"れている必要があります。"
 
-#: driver/xscreensaver-demo.glade2.h:49
+#: driver/xscreensaver-demo.glade2.h:48
 msgid "Text-displaying modes will display the contents of this file."
-msgstr "(テキストを表示するセーバの時は)次のテキストファイルの内容が表示されます。"
+msgstr ""
+"(テキストを表示するセーバの時は)次のテキストファイルの内容が表示されます。"
 
-#: driver/xscreensaver-demo.glade2.h:50
+#: driver/xscreensaver-demo.glade2.h:49
 msgid "Text-displaying modes will display the local host name, date, and time."
 msgstr "(テキストを表示するセーバの時は)ホスト名と、日時が表示されます。"
 
-#: driver/xscreensaver-demo.glade2.h:51
+#: driver/xscreensaver-demo.glade2.h:50
 msgid "Text-displaying modes will display the output of this program."
-msgstr "(テキストを表示するセーバの時は)次のプログラムの出力結果が表示されます。"
+msgstr ""
+"(テキストを表示するセーバの時は)次のプログラムの出力結果が表示されます。"
 
-#: driver/xscreensaver-demo.glade2.h:52
+#: driver/xscreensaver-demo.glade2.h:51
 msgid "Text-displaying modes will display the text typed here."
 msgstr "(テキストを表示するセーバの時は)次の文字列が出力されます。"
 
-#: driver/xscreensaver-demo.glade2.h:55
+#: driver/xscreensaver-demo.glade2.h:54
 msgid ""
 "Very few (or no) screen savers appear to be available.\n"
 "\n"
@@ -905,108 +956,121 @@ msgstr ""
 "\"xscreensaver-gl-extras\"のパッケージがインストールされていない\n"
 "ためだと思われます。"
 
-#: driver/xscreensaver-demo.glade2.h:59
+#: driver/xscreensaver-demo.glade2.h:58
 msgid "When idle or locked, blacken the screen only."
 msgstr "セーバーが起動した時、ただ単にスクリーンを真っ暗にします。"
 
-#: driver/xscreensaver-demo.glade2.h:60
+#: driver/xscreensaver-demo.glade2.h:59
 msgid ""
 "When idle or locked, choose a random display mode from among the checked "
 "items in the list below."
-msgstr "セーバーが起動した時、下のリストでチェックが入っているモードからランダムに選択して、(代る代る)モニターに表示します。"
+msgstr ""
+"セーバーが起動した時、下のリストでチェックが入っているモードからランダムに選"
+"択して、(代る代る)モニターに表示します。"
 
-#: driver/xscreensaver-demo.glade2.h:61
+#: driver/xscreensaver-demo.glade2.h:60
 msgid ""
 "When idle or locked, choose a random display mode from among the checked "
 "items in the list below.  Run that same mode on each monitor."
-msgstr "セーバーが起動した時、下のリストでチェックが入っているモードからランダムに選択して、(代る代る)モニターに表示します。各モニターには同じモードが表示されます。"
+msgstr ""
+"セーバーが起動した時、下のリストでチェックが入っているモードからランダムに選"
+"択して、(代る代る)モニターに表示します。各モニターには同じモードが表示され"
+"ます。"
 
-#: driver/xscreensaver-demo.glade2.h:62
+#: driver/xscreensaver-demo.glade2.h:61
 msgid "When idle or locked, run the display mode selected below."
-msgstr "セーバーが起動した時、下のリストで選択された(一つの)モードをモニターに表示します。"
+msgstr ""
+"セーバーが起動した時、下のリストで選択された(一つの)モードをモニターに表示"
+"します。"
 
-#: driver/xscreensaver-demo.glade2.h:65
+#: driver/xscreensaver-demo.glade2.h:64
 msgid ""
 "Whether the image-manipulating modes should operate on images captured from "
 "the system's video input (if there is one.)"
-msgstr "画像の操作モードで (可能な時) ビデオ入力の画像を使うかどうかを選択して下さい。"
+msgstr ""
+"画像の操作モードで (可能な時) ビデオ入力の画像を使うかどうかを選択して下さ"
+"い。"
 
-#: driver/xscreensaver-demo.glade2.h:73
+#: driver/xscreensaver-demo.glade2.h:72
 msgid "_Advanced"
 msgstr "拡張オプション(_A)"
 
-#: driver/xscreensaver-demo.glade2.h:74
+#: driver/xscreensaver-demo.glade2.h:73
 msgid "_Advanced >>"
 msgstr "拡張オプション(_A)>>"
 
-#: driver/xscreensaver-demo.glade2.h:75
+#: driver/xscreensaver-demo.glade2.h:74
 msgid "_Blank After"
 msgstr "ブランクになるまで(_B): "
 
-#: driver/xscreensaver-demo.glade2.h:77
+#: driver/xscreensaver-demo.glade2.h:76
 msgid "_Blank Screen Only"
 msgstr "ブランク・スクリーンのみ(_B)"
 
-#: driver/xscreensaver-demo.glade2.h:78
+#: driver/xscreensaver-demo.glade2.h:77
 msgid "_Browse"
 msgstr "参照(_B)"
 
-#: driver/xscreensaver-demo.glade2.h:79
+#: driver/xscreensaver-demo.glade2.h:78
 msgid "_Command Line:"
 msgstr "コマンド(_C):"
 
-#: driver/xscreensaver-demo.glade2.h:80
+#: driver/xscreensaver-demo.glade2.h:79
 msgid "_Cycle After"
 msgstr "セーバーの周期(_C): "
 
-#: driver/xscreensaver-demo.glade2.h:81
+#: driver/xscreensaver-demo.glade2.h:80
 msgid "_Disable Screen Saver"
 msgstr "セーバーを無効にする(_D)"
 
-#: driver/xscreensaver-demo.glade2.h:82
+#: driver/xscreensaver-demo.glade2.h:81
 msgid "_Display Modes"
 msgstr "表示モード"
 
-#: driver/xscreensaver-demo.glade2.h:86
+#: driver/xscreensaver-demo.glade2.h:85
 msgid "_Host Name and Time"
 msgstr "ホスト名と日時(_H)"
 
-#: driver/xscreensaver-demo.glade2.h:88
+#: driver/xscreensaver-demo.glade2.h:87
 msgid "_Lock Screen After  "
 msgstr "画面をロックするまで(_L): "
 
-#: driver/xscreensaver-demo.glade2.h:90
+#: driver/xscreensaver-demo.glade2.h:89
 msgid "_Mode:"
 msgstr "モード(_M):"
 
-#: driver/xscreensaver-demo.glade2.h:91
+#: driver/xscreensaver-demo.glade2.h:90
 msgid "_Off After"
 msgstr "電源OFFまで(_O): "
 
-#: driver/xscreensaver-demo.glade2.h:92
+#: driver/xscreensaver-demo.glade2.h:91
 msgid "_Only One Screen Saver"
 msgstr "一つのセーバーのみ(_O)"
 
-#: driver/xscreensaver-demo.glade2.h:93
+#: driver/xscreensaver-demo.glade2.h:92
 msgid "_Power Management Enabled"
 msgstr "電源管理を有効にする(_P)"
 
-#: driver/xscreensaver-demo.glade2.h:94
+#: driver/xscreensaver-demo.glade2.h:93
 msgid "_Preview"
 msgstr "プレビュー(_P)"
 
-#: driver/xscreensaver-demo.glade2.h:95
+#: driver/xscreensaver-demo.glade2.h:94
 msgid "_Program"
 msgstr "プログラム(_P)"
 
-#: driver/xscreensaver-demo.glade2.h:96
+#: driver/xscreensaver-demo.glade2.h:95
 msgid "_Quit"
 msgstr "終了(_Q)"
 
-#: driver/xscreensaver-demo.glade2.h:97
+#: driver/xscreensaver-demo.glade2.h:96
 msgid "_Random Screen Saver"
 msgstr "ランダムなセーバを用いる(_R)"
 
+#: driver/xscreensaver-demo.glade2.h:97
+msgid "_Reset to Defaults"
+msgstr "デフォルトに戻す(_R)"
+
 #: driver/xscreensaver-demo.glade2.h:99
 #, fuzzy
 msgid "_Same Random Savers"
@@ -1026,7 +1090,7 @@ msgstr "文字列(_T)"
 
 #: driver/xscreensaver-demo.glade2.h:103
 msgid "_URL"
-msgstr ""
+msgstr "_URL"
 
 #: driver/xscreensaver-demo.glade2.h:104
 msgid "_Visual:"
@@ -1034,216 +1098,387 @@ msgstr "ビジュアル(_V):"
 
 #: driver/xscreensaver-demo.glade2.h:105
 msgid "dialog1"
-msgstr ""
+msgstr "ダイアログ1"
 
 #: driver/xscreensaver-demo.glade2.h:107
-#, fuzzy
 msgid "no preview"
-msgstr "ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\81¯"
+msgstr "ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\82\92å\88©ç\94¨å\87ºæ\9d¥ã\81¾ã\81\9bã\82\93"
 
 #: driver/xscreensaver-demo.glade2.h:108
 msgid "not installed"
-msgstr ""
+msgstr "インストールされていません"
 
 #: driver/xscreensaver-demo.glade2.h:109
 msgid "nothing"
 msgstr ""
 
 #: driver/xscreensaver-demo.glade2.h:110
-#, fuzzy
 msgid "preview"
 msgstr "プレビュー"
 
-#: hacks/config/anemone.xml.h:1
-msgid "Anemone"
+#: hacks/config/abstractile.xml.h:1 hacks/config/ccurve.xml.h:1
+#: hacks/config/flame.xml.h:1 hacks/config/jigsaw.xml.h:1
+#: hacks/config/maze.xml.h:1
+msgid "0 seconds"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:2 hacks/config/fuzzyflakes.xml.h:1
-msgid "Arms"
+#: hacks/config/abstractile.xml.h:2 hacks/config/voronoi.xml.h:3
+#, fuzzy
+msgid "60 seconds"
+msgstr "秒間"
+
+#: hacks/config/abstractile.xml.h:3
+msgid "Abstractile"
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:4
+msgid "Block tiles"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:3 hacks/config/anemotaxis.xml.h:5
-#: hacks/config/ant.xml.h:6 hacks/config/antinspect.xml.h:4
-#: hacks/config/antmaze.xml.h:3 hacks/config/antspotlight.xml.h:3
-#: hacks/config/apollonian.xml.h:5 hacks/config/atlantis.xml.h:4
-#: hacks/config/attraction.xml.h:8 hacks/config/atunnel.xml.h:3
-#: hacks/config/barcode.xml.h:4 hacks/config/blaster.xml.h:3
-#: hacks/config/blinkbox.xml.h:5 hacks/config/blitspin.xml.h:4
-#: hacks/config/blocktube.xml.h:4 hacks/config/boing.xml.h:2
-#: hacks/config/bouboule.xml.h:3 hacks/config/bouncingcow.xml.h:6
-#: hacks/config/boxed.xml.h:6 hacks/config/boxfit.xml.h:8
-#: hacks/config/braid.xml.h:4 hacks/config/bubble3d.xml.h:4
-#: hacks/config/bubbles.xml.h:8 hacks/config/bumps.xml.h:3
-#: hacks/config/cage.xml.h:2 hacks/config/carousel.xml.h:5
-#: hacks/config/ccurve.xml.h:7 hacks/config/celtic.xml.h:3
-#: hacks/config/circuit.xml.h:4 hacks/config/cloudlife.xml.h:3
-#: hacks/config/compass.xml.h:3 hacks/config/coral.xml.h:7
-#: hacks/config/critical.xml.h:3 hacks/config/crystal.xml.h:6
-#: hacks/config/cube21.xml.h:6 hacks/config/cubenetic.xml.h:8
-#: hacks/config/cubestorm.xml.h:4 hacks/config/cynosure.xml.h:4
-#: hacks/config/dangerball.xml.h:3 hacks/config/decayscreen.xml.h:2
-#: hacks/config/deluxe.xml.h:4 hacks/config/demon.xml.h:4
-#: hacks/config/discrete.xml.h:2 hacks/config/distort.xml.h:4
-#: hacks/config/drift.xml.h:3 hacks/config/endgame.xml.h:3
-#: hacks/config/engine.xml.h:8 hacks/config/epicycle.xml.h:5
-#: hacks/config/eruption.xml.h:5 hacks/config/euler2d.xml.h:3
-#: hacks/config/extrusion.xml.h:3 hacks/config/fadeplot.xml.h:4
-#: hacks/config/fireworkx.xml.h:3 hacks/config/flag.xml.h:2
-#: hacks/config/flame.xml.h:6 hacks/config/flipflop.xml.h:1
-#: hacks/config/flipscreen3d.xml.h:1 hacks/config/fliptext.xml.h:3
-#: hacks/config/flow.xml.h:2 hacks/config/fluidballs.xml.h:5
-#: hacks/config/flyingtoasters.xml.h:5 hacks/config/fontglide.xml.h:4
-#: hacks/config/forest.xml.h:1 hacks/config/fuzzyflakes.xml.h:7
-#: hacks/config/galaxy.xml.h:3 hacks/config/gears.xml.h:2
-#: hacks/config/gflux.xml.h:6 hacks/config/glblur.xml.h:4
-#: hacks/config/glforestfire.xml.h:4 hacks/config/glhanoi.xml.h:3
-#: hacks/config/glknots.xml.h:3 hacks/config/glmatrix.xml.h:8
-#: hacks/config/glplanet.xml.h:2 hacks/config/glsnake.xml.h:6
-#: hacks/config/gltext.xml.h:4 hacks/config/goop.xml.h:4
-#: hacks/config/grav.xml.h:2 hacks/config/greynetic.xml.h:1
-#: hacks/config/halo.xml.h:2 hacks/config/hopalong.xml.h:9
+#: hacks/config/abstractile.xml.h:5 hacks/config/anemone.xml.h:3
+#: hacks/config/apollonian.xml.h:7 hacks/config/atlantis.xml.h:6
+#: hacks/config/attraction.xml.h:7 hacks/config/blitspin.xml.h:7
+#: hacks/config/boing.xml.h:2 hacks/config/bouncingcow.xml.h:4
+#: hacks/config/boxed.xml.h:7 hacks/config/carousel.xml.h:5
+#: hacks/config/ccurve.xml.h:7 hacks/config/circuit.xml.h:4
+#: hacks/config/cube21.xml.h:6 hacks/config/cubenetic.xml.h:5
+#: hacks/config/cubestorm.xml.h:4 hacks/config/cubicgrid.xml.h:7
+#: hacks/config/dangerball.xml.h:3 hacks/config/eruption.xml.h:5
+#: hacks/config/fliptext.xml.h:3 hacks/config/flyingtoasters.xml.h:5
+#: hacks/config/fontglide.xml.h:2 hacks/config/fuzzyflakes.xml.h:6
+#: hacks/config/gears.xml.h:3 hacks/config/gflux.xml.h:7
+#: hacks/config/glknots.xml.h:2 hacks/config/glmatrix.xml.h:4
+#: hacks/config/glsnake.xml.h:7 hacks/config/goop.xml.h:4
 #: hacks/config/hyperball.xml.h:2 hacks/config/hypercube.xml.h:2
-#: hacks/config/hypertorus.xml.h:6 hacks/config/ifs.xml.h:4
-#: hacks/config/interaggregate.xml.h:1 hacks/config/interference.xml.h:7
-#: hacks/config/intermomentary.xml.h:1 hacks/config/jigglypuff.xml.h:6
-#: hacks/config/jigsaw.xml.h:3 hacks/config/juggle.xml.h:2
-#: hacks/config/juggler3d.xml.h:2 hacks/config/julia.xml.h:2
-#: hacks/config/kaleidescope.xml.h:2 hacks/config/klein.xml.h:2
-#: hacks/config/kumppa.xml.h:3 hacks/config/lament.xml.h:2
-#: hacks/config/laser.xml.h:3 hacks/config/lavalite.xml.h:10
-#: hacks/config/lightning.xml.h:1 hacks/config/lisa.xml.h:2
-#: hacks/config/lissie.xml.h:3 hacks/config/lmorph.xml.h:3
-#: hacks/config/loop.xml.h:1 hacks/config/maze.xml.h:4
-#: hacks/config/memscroller.xml.h:5 hacks/config/menger.xml.h:3
-#: hacks/config/metaballs.xml.h:4 hacks/config/mirrorblob.xml.h:11
-#: hacks/config/mismunch.xml.h:2 hacks/config/moebius.xml.h:3
-#: hacks/config/moire2.xml.h:2 hacks/config/molecule.xml.h:11
-#: hacks/config/morph3d.xml.h:3 hacks/config/mountain.xml.h:2
-#: hacks/config/munch.xml.h:3 hacks/config/nerverot.xml.h:9
-#: hacks/config/noof.xml.h:2 hacks/config/pacman.xml.h:1
-#: hacks/config/penetrate.xml.h:3 hacks/config/penrose.xml.h:3
-#: hacks/config/petri.xml.h:5 hacks/config/phosphor.xml.h:4
-#: hacks/config/piecewise.xml.h:4 hacks/config/pinion.xml.h:5
-#: hacks/config/pipes.xml.h:5 hacks/config/polyhedra.xml.h:17
-#: hacks/config/polyominoes.xml.h:2 hacks/config/polytopes.xml.h:11
-#: hacks/config/pong.xml.h:1 hacks/config/popsquares.xml.h:3
-#: hacks/config/providence.xml.h:2 hacks/config/pulsar.xml.h:11
-#: hacks/config/pyro.xml.h:4 hacks/config/qix.xml.h:7
-#: hacks/config/queens.xml.h:1 hacks/config/rd-bomb.xml.h:9
-#: hacks/config/ripples.xml.h:4 hacks/config/rocks.xml.h:4
-#: hacks/config/rotor.xml.h:3 hacks/config/rubik.xml.h:3
-#: hacks/config/sballs.xml.h:4 hacks/config/shadebobs.xml.h:3
-#: hacks/config/sierpinski.xml.h:2 hacks/config/sierpinski3d.xml.h:2
-#: hacks/config/slidescreen.xml.h:2 hacks/config/slip.xml.h:2
-#: hacks/config/speedmine.xml.h:3 hacks/config/sphere.xml.h:2
-#: hacks/config/spheremonics.xml.h:5 hacks/config/spiral.xml.h:3
-#: hacks/config/spotlight.xml.h:2 hacks/config/sproingies.xml.h:2
-#: hacks/config/squiral.xml.h:4 hacks/config/stairs.xml.h:1
-#: hacks/config/starfish.xml.h:3 hacks/config/starwars.xml.h:6
-#: hacks/config/strange.xml.h:1 hacks/config/substrate.xml.h:7
-#: hacks/config/superquadrics.xml.h:4 hacks/config/swirl.xml.h:2
-#: hacks/config/t3d.xml.h:6 hacks/config/tangram.xml.h:2
-#: hacks/config/thornbird.xml.h:2 hacks/config/triangle.xml.h:1
-#: hacks/config/truchet.xml.h:1 hacks/config/twang.xml.h:3
-#: hacks/config/vines.xml.h:1 hacks/config/worm.xml.h:3
-#: hacks/config/wormhole.xml.h:2 hacks/config/xearth.xml.h:7
-#: hacks/config/xfishtank.xml.h:3 hacks/config/xflame.xml.h:4
-#: hacks/config/xjack.xml.h:1 hacks/config/xmatrix.xml.h:5
-#: hacks/config/xmountains.xml.h:13 hacks/config/xplanet.xml.h:8
-#: hacks/config/xrayswarm.xml.h:2 hacks/config/zoom.xml.h:2
+#: hacks/config/hypnowheel.xml.h:6 hacks/config/interference.xml.h:5
+#: hacks/config/jigglypuff.xml.h:7 hacks/config/juggle.xml.h:5
+#: hacks/config/juggler3d.xml.h:2 hacks/config/moebiusgears.xml.h:2
+#: hacks/config/penetrate.xml.h:3 hacks/config/petri.xml.h:5
+#: hacks/config/phosphor.xml.h:3 hacks/config/piecewise.xml.h:3
+#: hacks/config/pinion.xml.h:4 hacks/config/polyhedra.xml.h:16
+#: hacks/config/pong.xml.h:3 hacks/config/pyro.xml.h:4
+#: hacks/config/rd-bomb.xml.h:8 hacks/config/rdbomb.xml.h:8
+#: hacks/config/rocks.xml.h:3 hacks/config/skytentacles.xml.h:5
+#: hacks/config/slidescreen.xml.h:5 hacks/config/speedmine.xml.h:3
+#: hacks/config/starwars.xml.h:7 hacks/config/superquadrics.xml.h:3
+#: hacks/config/tangram.xml.h:3 hacks/config/topblock.xml.h:7
+#: hacks/config/voronoi.xml.h:5 hacks/config/wormhole.xml.h:1
+#: hacks/config/xjack.xml.h:1
 msgid "Fast"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:4 hacks/config/anemotaxis.xml.h:6
-#: hacks/config/blaster.xml.h:4 hacks/config/bouboule.xml.h:4
-#: hacks/config/boxed.xml.h:7 hacks/config/coral.xml.h:8
-#: hacks/config/cubenetic.xml.h:9 hacks/config/eruption.xml.h:6
-#: hacks/config/euler2d.xml.h:4 hacks/config/fiberlamp.xml.h:2
-#: hacks/config/flame.xml.h:7 hacks/config/fluidballs.xml.h:6
-#: hacks/config/fuzzyflakes.xml.h:8 hacks/config/kaleidescope.xml.h:3
-#: hacks/config/lisa.xml.h:3 hacks/config/pedal.xml.h:4
-#: hacks/config/petri.xml.h:7 hacks/config/qix.xml.h:8
-#: hacks/config/substrate.xml.h:8 hacks/config/thornbird.xml.h:3
-#: hacks/config/whirlwindwarp.xml.h:1 hacks/config/wormhole.xml.h:3
-#: hacks/config/xfishtank.xml.h:4
+#: hacks/config/abstractile.xml.h:6
+msgid "Flat tiles"
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:7
+msgid ""
+"Generates mosaic patterns of interlocking tiles. Written by Steve Sundstrom; "
+"2004."
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:8 hacks/config/boxed.xml.h:13
+#: hacks/config/celtic.xml.h:5 hacks/config/coral.xml.h:9
+#: hacks/config/cube21.xml.h:10 hacks/config/epicycle.xml.h:8
+#: hacks/config/flame.xml.h:9 hacks/config/glcells.xml.h:15
+#: hacks/config/helix.xml.h:6 hacks/config/imsmap.xml.h:10
+#: hacks/config/jigsaw.xml.h:6 hacks/config/rorschach.xml.h:5
+#: hacks/config/tangram.xml.h:6 hacks/config/xlyap.xml.h:4
+#: hacks/config/xspirograph.xml.h:6
+#, fuzzy
+msgid "Linger"
+msgstr "DirectColor"
+
+#: hacks/config/abstractile.xml.h:9
+msgid "Neon tiles"
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:10
+msgid "Outline tiles"
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:11
+msgid "Random tile layout"
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:12 hacks/config/anemone.xml.h:9
+#: hacks/config/anemotaxis.xml.h:12 hacks/config/ant.xml.h:17
+#: hacks/config/antinspect.xml.h:7 hacks/config/antmaze.xml.h:6
+#: hacks/config/antspotlight.xml.h:6 hacks/config/apollonian.xml.h:12
+#: hacks/config/apple2.xml.h:6 hacks/config/atlantis.xml.h:16
+#: hacks/config/attraction.xml.h:24 hacks/config/atunnel.xml.h:7
+#: hacks/config/barcode.xml.h:10 hacks/config/blaster.xml.h:10
+#: hacks/config/blinkbox.xml.h:10 hacks/config/blitspin.xml.h:10
+#: hacks/config/blocktube.xml.h:10 hacks/config/boing.xml.h:8
+#: hacks/config/bouboule.xml.h:10 hacks/config/bouncingcow.xml.h:11
+#: hacks/config/boxed.xml.h:21 hacks/config/boxfit.xml.h:15
+#: hacks/config/braid.xml.h:13 hacks/config/bsod.xml.h:26
+#: hacks/config/bubble3d.xml.h:7 hacks/config/bubbles.xml.h:11
+#: hacks/config/bumps.xml.h:9 hacks/config/cage.xml.h:5
+#: hacks/config/carousel.xml.h:13 hacks/config/ccurve.xml.h:11
+#: hacks/config/celtic.xml.h:10 hacks/config/circuit.xml.h:13
+#: hacks/config/cloudlife.xml.h:12 hacks/config/compass.xml.h:5
+#: hacks/config/coral.xml.h:13 hacks/config/crackberg.xml.h:18
+#: hacks/config/critical.xml.h:8 hacks/config/crystal.xml.h:13
+#: hacks/config/cube21.xml.h:17 hacks/config/cubenetic.xml.h:19
+#: hacks/config/cubestorm.xml.h:10 hacks/config/cubicgrid.xml.h:11
+#: hacks/config/cwaves.xml.h:8 hacks/config/cynosure.xml.h:11
+#: hacks/config/dangerball.xml.h:10 hacks/config/decayscreen.xml.h:21
+#: hacks/config/deco.xml.h:12 hacks/config/deluxe.xml.h:12
+#: hacks/config/demon.xml.h:13 hacks/config/discrete.xml.h:9
+#: hacks/config/distort.xml.h:17 hacks/config/dnalogo.xml.h:6
+#: hacks/config/drift.xml.h:11 hacks/config/endgame.xml.h:7
+#: hacks/config/engine.xml.h:16 hacks/config/epicycle.xml.h:12
+#: hacks/config/eruption.xml.h:22 hacks/config/euler2d.xml.h:13
+#: hacks/config/extrusion.xml.h:12 hacks/config/fadeplot.xml.h:10
+#: hacks/config/fiberlamp.xml.h:11 hacks/config/fireworkx.xml.h:11
+#: hacks/config/flag.xml.h:8 hacks/config/flame.xml.h:14
+#: hacks/config/flipflop.xml.h:10 hacks/config/flipscreen3d.xml.h:7
+#: hacks/config/fliptext.xml.h:12 hacks/config/flow.xml.h:18
+#: hacks/config/fluidballs.xml.h:19 hacks/config/flurry.xml.h:9
+#: hacks/config/flyingtoasters.xml.h:13 hacks/config/fontglide.xml.h:14
+#: hacks/config/forest.xml.h:8 hacks/config/fuzzyflakes.xml.h:21
+#: hacks/config/galaxy.xml.h:12 hacks/config/gears.xml.h:9
+#: hacks/config/gflux.xml.h:15 hacks/config/glblur.xml.h:15
+#: hacks/config/glcells.xml.h:30 hacks/config/gleidescope.xml.h:12
+#: hacks/config/glforestfire.xml.h:14 hacks/config/glhanoi.xml.h:10
+#: hacks/config/glknots.xml.h:17 hacks/config/glmatrix.xml.h:16
+#: hacks/config/glplanet.xml.h:10 hacks/config/glschool.xml.h:15
+#: hacks/config/glslideshow.xml.h:20 hacks/config/glsnake.xml.h:14
+#: hacks/config/gltext.xml.h:17 hacks/config/goop.xml.h:12
+#: hacks/config/grav.xml.h:11 hacks/config/greynetic.xml.h:7
+#: hacks/config/halftone.xml.h:17 hacks/config/halo.xml.h:14
+#: hacks/config/helix.xml.h:8 hacks/config/hopalong.xml.h:20
+#: hacks/config/hyperball.xml.h:9 hacks/config/hypercube.xml.h:8
+#: hacks/config/hypertorus.xml.h:18 hacks/config/hypnowheel.xml.h:12
+#: hacks/config/ifs.xml.h:13 hacks/config/imsmap.xml.h:16
+#: hacks/config/interaggregate.xml.h:9 hacks/config/interference.xml.h:17
+#: hacks/config/intermomentary.xml.h:9 hacks/config/jigglypuff.xml.h:17
+#: hacks/config/jigsaw.xml.h:8 hacks/config/juggle.xml.h:19
+#: hacks/config/juggler3d.xml.h:14 hacks/config/julia.xml.h:13
+#: hacks/config/kaleidescope.xml.h:11 hacks/config/klein.xml.h:8
+#: hacks/config/kumppa.xml.h:8 hacks/config/lament.xml.h:7
+#: hacks/config/laser.xml.h:12 hacks/config/lavalite.xml.h:26
+#: hacks/config/lcdscrub.xml.h:11 hacks/config/lightning.xml.h:8
+#: hacks/config/lisa.xml.h:13 hacks/config/lissie.xml.h:12
+#: hacks/config/lmorph.xml.h:15 hacks/config/lockward.xml.h:13
+#: hacks/config/loop.xml.h:10 hacks/config/m6502.xml.h:5
+#: hacks/config/maze.xml.h:16 hacks/config/memscroller.xml.h:9
+#: hacks/config/menger.xml.h:17 hacks/config/metaballs.xml.h:15
+#: hacks/config/mirrorblob.xml.h:21 hacks/config/mismunch.xml.h:11
+#: hacks/config/moebius.xml.h:6 hacks/config/moebiusgears.xml.h:10
+#: hacks/config/moire.xml.h:9 hacks/config/moire2.xml.h:8
+#: hacks/config/molecule.xml.h:25 hacks/config/morph3d.xml.h:11
+#: hacks/config/mountain.xml.h:11 hacks/config/munch.xml.h:9
+#: hacks/config/nerverot.xml.h:20 hacks/config/noof.xml.h:6
+#: hacks/config/noseguy.xml.h:3 hacks/config/pacman.xml.h:6
+#: hacks/config/pedal.xml.h:8 hacks/config/penetrate.xml.h:6
+#: hacks/config/penrose.xml.h:10 hacks/config/petri.xml.h:24
+#: hacks/config/phosphor.xml.h:9 hacks/config/piecewise.xml.h:13
+#: hacks/config/pinion.xml.h:14 hacks/config/pipes.xml.h:20
+#: hacks/config/polyhedra.xml.h:111 hacks/config/polyominoes.xml.h:12
+#: hacks/config/polytopes.xml.h:19 hacks/config/pong.xml.h:8
+#: hacks/config/popsquares.xml.h:19 hacks/config/providence.xml.h:7
+#: hacks/config/pulsar.xml.h:15 hacks/config/pyro.xml.h:13
+#: hacks/config/qix.xml.h:20 hacks/config/queens.xml.h:5
+#: hacks/config/rd-bomb.xml.h:17 hacks/config/rdbomb.xml.h:17
+#: hacks/config/ripples.xml.h:16 hacks/config/rocks.xml.h:12
+#: hacks/config/rorschach.xml.h:8 hacks/config/rotor.xml.h:12
+#: hacks/config/rotzoomer.xml.h:11 hacks/config/rubik.xml.h:10
+#: hacks/config/sballs.xml.h:13 hacks/config/shadebobs.xml.h:12
+#: hacks/config/sierpinski.xml.h:9 hacks/config/sierpinski3d.xml.h:8
+#: hacks/config/skytentacles.xml.h:13 hacks/config/slidescreen.xml.h:14
+#: hacks/config/slip.xml.h:9 hacks/config/sonar.xml.h:15
+#: hacks/config/speedmine.xml.h:11 hacks/config/sphere.xml.h:7
+#: hacks/config/spheremonics.xml.h:18 hacks/config/spiral.xml.h:10
+#: hacks/config/spotlight.xml.h:9 hacks/config/sproingies.xml.h:7
+#: hacks/config/squiral.xml.h:14 hacks/config/stairs.xml.h:5
+#: hacks/config/starfish.xml.h:13 hacks/config/starwars.xml.h:13
+#: hacks/config/stonerview.xml.h:5 hacks/config/strange.xml.h:6
+#: hacks/config/substrate.xml.h:17 hacks/config/superquadrics.xml.h:10
+#: hacks/config/swirl.xml.h:9 hacks/config/t3d.xml.h:12
+#: hacks/config/tangram.xml.h:10 hacks/config/thornbird.xml.h:9
+#: hacks/config/timetunnel.xml.h:9 hacks/config/topblock.xml.h:19
+#: hacks/config/triangle.xml.h:7 hacks/config/truchet.xml.h:4
+#: hacks/config/twang.xml.h:13 hacks/config/vermiculate.xml.h:5
+#: hacks/config/vidwhacker.xml.h:5 hacks/config/vines.xml.h:7
+#: hacks/config/voronoi.xml.h:12 hacks/config/wander.xml.h:12
+#: hacks/config/webcollage.xml.h:13 hacks/config/whirlwindwarp.xml.h:7
+#: hacks/config/whirlygig.xml.h:7 hacks/config/worm.xml.h:8
+#: hacks/config/wormhole.xml.h:8 hacks/config/xanalogtv.xml.h:1
+#: hacks/config/xflame.xml.h:7 hacks/config/xjack.xml.h:2
+#: hacks/config/xlyap.xml.h:7 hacks/config/xmatrix.xml.h:17
+#: hacks/config/xrayswarm.xml.h:5 hacks/config/xspirograph.xml.h:8
+#: hacks/config/zoom.xml.h:12
+msgid "Show frame rate"
+msgstr "フレームレートを表示する"
+
+#: hacks/config/abstractile.xml.h:13 hacks/config/anemone.xml.h:10
+#: hacks/config/apollonian.xml.h:13 hacks/config/atlantis.xml.h:18
+#: hacks/config/attraction.xml.h:25 hacks/config/blitspin.xml.h:11
+#: hacks/config/boing.xml.h:10 hacks/config/bouncingcow.xml.h:12
+#: hacks/config/boxed.xml.h:22 hacks/config/carousel.xml.h:14
+#: hacks/config/ccurve.xml.h:12 hacks/config/circuit.xml.h:14
+#: hacks/config/cube21.xml.h:20 hacks/config/cubenetic.xml.h:20
+#: hacks/config/cubestorm.xml.h:11 hacks/config/cubicgrid.xml.h:12
+#: hacks/config/dangerball.xml.h:11 hacks/config/eruption.xml.h:23
+#: hacks/config/fliptext.xml.h:13 hacks/config/flyingtoasters.xml.h:14
+#: hacks/config/fontglide.xml.h:15 hacks/config/fuzzyflakes.xml.h:22
+#: hacks/config/gears.xml.h:10 hacks/config/gflux.xml.h:16
+#: hacks/config/glcells.xml.h:31 hacks/config/glknots.xml.h:18
+#: hacks/config/glmatrix.xml.h:17 hacks/config/glsnake.xml.h:16
+#: hacks/config/goop.xml.h:13 hacks/config/hyperball.xml.h:10
+#: hacks/config/hypercube.xml.h:9 hacks/config/hypnowheel.xml.h:13
+#: hacks/config/interference.xml.h:18 hacks/config/jigglypuff.xml.h:18
+#: hacks/config/juggle.xml.h:20 hacks/config/juggler3d.xml.h:15
+#: hacks/config/moebiusgears.xml.h:11 hacks/config/penetrate.xml.h:8
+#: hacks/config/petri.xml.h:25 hacks/config/phosphor.xml.h:10
+#: hacks/config/piecewise.xml.h:14 hacks/config/pinion.xml.h:15
+#: hacks/config/polyhedra.xml.h:112 hacks/config/pong.xml.h:9
+#: hacks/config/pyro.xml.h:14 hacks/config/rd-bomb.xml.h:18
+#: hacks/config/rdbomb.xml.h:18 hacks/config/rocks.xml.h:13
+#: hacks/config/skytentacles.xml.h:15 hacks/config/slidescreen.xml.h:17
+#: hacks/config/speedmine.xml.h:13 hacks/config/superquadrics.xml.h:11
+#: hacks/config/tangram.xml.h:11 hacks/config/topblock.xml.h:20
+#: hacks/config/twang.xml.h:14 hacks/config/voronoi.xml.h:13
+#: hacks/config/wormhole.xml.h:9 hacks/config/xjack.xml.h:3
+msgid "Slow"
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:14 hacks/config/anemone.xml.h:11
+#: hacks/config/apollonian.xml.h:14 hacks/config/attraction.xml.h:27
+#: hacks/config/boing.xml.h:12 hacks/config/boxed.xml.h:23
+#: hacks/config/cubestorm.xml.h:12 hacks/config/cubicgrid.xml.h:13
+#: hacks/config/fliptext.xml.h:14 hacks/config/fontglide.xml.h:16
+#: hacks/config/fuzzyflakes.xml.h:24 hacks/config/gears.xml.h:11
+#: hacks/config/glknots.xml.h:20 hacks/config/goop.xml.h:14
+#: hacks/config/hypnowheel.xml.h:14 hacks/config/juggle.xml.h:21
+#: hacks/config/moebiusgears.xml.h:12 hacks/config/polyhedra.xml.h:146
+#: hacks/config/skytentacles.xml.h:17 hacks/config/xjack.xml.h:4
+msgid "Speed"
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:15
+msgid "Thin tiles"
+msgstr ""
+
+#: hacks/config/abstractile.xml.h:16
+msgid "Tiled tiles"
+msgstr ""
+
+#: hacks/config/anemone.xml.h:1
+msgid "Anemone"
+msgstr ""
+
+#: hacks/config/anemone.xml.h:2 hacks/config/fuzzyflakes.xml.h:1
+#: hacks/config/hypnowheel.xml.h:4
+msgid "Arms"
+msgstr ""
+
+#: hacks/config/anemone.xml.h:4 hacks/config/anemotaxis.xml.h:5
+#: hacks/config/blaster.xml.h:3 hacks/config/bouboule.xml.h:3
+#: hacks/config/boxed.xml.h:8 hacks/config/coral.xml.h:6
+#: hacks/config/crackberg.xml.h:5 hacks/config/cubenetic.xml.h:6
+#: hacks/config/cubestorm.xml.h:5 hacks/config/dangerball.xml.h:4
+#: hacks/config/eruption.xml.h:6 hacks/config/euler2d.xml.h:3
+#: hacks/config/fiberlamp.xml.h:2 hacks/config/flame.xml.h:4
+#: hacks/config/flow.xml.h:3 hacks/config/fluidballs.xml.h:4
+#: hacks/config/fuzzyflakes.xml.h:7 hacks/config/glcells.xml.h:6
+#: hacks/config/glschool.xml.h:5 hacks/config/goop.xml.h:5
+#: hacks/config/grav.xml.h:1 hacks/config/halftone.xml.h:5
+#: hacks/config/halo.xml.h:3 hacks/config/interaggregate.xml.h:2
+#: hacks/config/interference.xml.h:6 hacks/config/julia.xml.h:3
+#: hacks/config/kaleidescope.xml.h:4 hacks/config/lisa.xml.h:4
+#: hacks/config/lmorph.xml.h:3 hacks/config/nerverot.xml.h:8
+#: hacks/config/pedal.xml.h:4 hacks/config/petri.xml.h:7
+#: hacks/config/piecewise.xml.h:4 hacks/config/qix.xml.h:7
+#: hacks/config/rocks.xml.h:4 hacks/config/sierpinski.xml.h:1
+#: hacks/config/slip.xml.h:2 hacks/config/spiral.xml.h:3
+#: hacks/config/substrate.xml.h:8 hacks/config/swirl.xml.h:2
+#: hacks/config/thornbird.xml.h:2 hacks/config/topblock.xml.h:8
+#: hacks/config/voronoi.xml.h:6 hacks/config/whirlwindwarp.xml.h:1
+#: hacks/config/wormhole.xml.h:2
 msgid "Few"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:5 hacks/config/anemotaxis.xml.h:7
-#: hacks/config/ant.xml.h:9 hacks/config/apollonian.xml.h:7
-#: hacks/config/attraction.xml.h:18 hacks/config/blaster.xml.h:6
-#: hacks/config/bouboule.xml.h:5 hacks/config/braid.xml.h:7
-#: hacks/config/coral.xml.h:9 hacks/config/critical.xml.h:4
-#: hacks/config/crystal.xml.h:8 hacks/config/cubenetic.xml.h:13
-#: hacks/config/cynosure.xml.h:6 hacks/config/deco.xml.h:5
-#: hacks/config/deluxe.xml.h:6 hacks/config/demon.xml.h:6
-#: hacks/config/discrete.xml.h:4 hacks/config/drift.xml.h:9
-#: hacks/config/epicycle.xml.h:8 hacks/config/eruption.xml.h:12
-#: hacks/config/euler2d.xml.h:8 hacks/config/fadeplot.xml.h:6
-#: hacks/config/fiberlamp.xml.h:6 hacks/config/flag.xml.h:5
-#: hacks/config/flame.xml.h:11 hacks/config/flow.xml.h:7
-#: hacks/config/fluidballs.xml.h:13 hacks/config/forest.xml.h:3
-#: hacks/config/fuzzyflakes.xml.h:12 hacks/config/galaxy.xml.h:6
-#: hacks/config/grav.xml.h:4 hacks/config/halo.xml.h:4
+#: hacks/config/anemone.xml.h:5 hacks/config/anemotaxis.xml.h:9
+#: hacks/config/ant.xml.h:12 hacks/config/apollonian.xml.h:9
+#: hacks/config/attraction.xml.h:16 hacks/config/blaster.xml.h:8
+#: hacks/config/bouboule.xml.h:7 hacks/config/braid.xml.h:9
+#: hacks/config/coral.xml.h:11 hacks/config/critical.xml.h:6
+#: hacks/config/crystal.xml.h:9 hacks/config/cubenetic.xml.h:11
+#: hacks/config/cubestorm.xml.h:9 hacks/config/cynosure.xml.h:7
+#: hacks/config/deco.xml.h:6 hacks/config/deluxe.xml.h:9
+#: hacks/config/demon.xml.h:11 hacks/config/discrete.xml.h:6
+#: hacks/config/drift.xml.h:8 hacks/config/epicycle.xml.h:10
+#: hacks/config/eruption.xml.h:15 hacks/config/euler2d.xml.h:8
+#: hacks/config/fadeplot.xml.h:8 hacks/config/fiberlamp.xml.h:9
+#: hacks/config/flag.xml.h:6 hacks/config/flame.xml.h:11
+#: hacks/config/flow.xml.h:11 hacks/config/fluidballs.xml.h:14
+#: hacks/config/forest.xml.h:6 hacks/config/fuzzyflakes.xml.h:16
+#: hacks/config/galaxy.xml.h:8 hacks/config/glcells.xml.h:19
+#: hacks/config/goop.xml.h:10 hacks/config/grav.xml.h:6
+#: hacks/config/halftone.xml.h:12 hacks/config/halo.xml.h:8
 #: hacks/config/hopalong.xml.h:15 hacks/config/ifs.xml.h:8
-#: hacks/config/imsmap.xml.h:9 hacks/config/interference.xml.h:14
-#: hacks/config/julia.xml.h:6 hacks/config/kaleidescope.xml.h:5
-#: hacks/config/laser.xml.h:6 hacks/config/lightning.xml.h:3
-#: hacks/config/lisa.xml.h:5 hacks/config/lissie.xml.h:6
-#: hacks/config/loop.xml.h:4 hacks/config/metaballs.xml.h:6
-#: hacks/config/mismunch.xml.h:4 hacks/config/moire.xml.h:5
-#: hacks/config/moire2.xml.h:3 hacks/config/mountain.xml.h:4
+#: hacks/config/imsmap.xml.h:12 hacks/config/interaggregate.xml.h:7
+#: hacks/config/interference.xml.h:14 hacks/config/julia.xml.h:11
+#: hacks/config/kaleidescope.xml.h:9 hacks/config/laser.xml.h:8
+#: hacks/config/lightning.xml.h:6 hacks/config/lisa.xml.h:11
+#: hacks/config/lissie.xml.h:10 hacks/config/lmorph.xml.h:11
+#: hacks/config/loop.xml.h:8 hacks/config/metaballs.xml.h:8
+#: hacks/config/mismunch.xml.h:6 hacks/config/moire.xml.h:5
+#: hacks/config/moire2.xml.h:5 hacks/config/mountain.xml.h:6
 #: hacks/config/nerverot.xml.h:15 hacks/config/pedal.xml.h:6
-#: hacks/config/penrose.xml.h:4 hacks/config/petri.xml.h:11
-#: hacks/config/polyominoes.xml.h:5 hacks/config/qix.xml.h:14
-#: hacks/config/rd-bomb.xml.h:12 hacks/config/ripples.xml.h:8
-#: hacks/config/rocks.xml.h:5 hacks/config/rotor.xml.h:6
-#: hacks/config/shadebobs.xml.h:5 hacks/config/sierpinski.xml.h:4
-#: hacks/config/slip.xml.h:4 hacks/config/sphere.xml.h:3
-#: hacks/config/spiral.xml.h:6 hacks/config/squiral.xml.h:9
-#: hacks/config/starfish.xml.h:5 hacks/config/strange.xml.h:2
-#: hacks/config/swirl.xml.h:3 hacks/config/thornbird.xml.h:4
-#: hacks/config/triangle.xml.h:3 hacks/config/vines.xml.h:2
-#: hacks/config/whirlwindwarp.xml.h:4 hacks/config/worm.xml.h:4
-#: hacks/config/xearth.xml.h:12 hacks/config/xfishtank.xml.h:8
+#: hacks/config/penrose.xml.h:7 hacks/config/petri.xml.h:12
+#: hacks/config/piecewise.xml.h:9 hacks/config/polyominoes.xml.h:7
+#: hacks/config/qix.xml.h:14 hacks/config/rd-bomb.xml.h:12
+#: hacks/config/rdbomb.xml.h:12 hacks/config/rocks.xml.h:8
+#: hacks/config/rotor.xml.h:8 hacks/config/shadebobs.xml.h:7
+#: hacks/config/sierpinski.xml.h:6 hacks/config/slip.xml.h:7
+#: hacks/config/sphere.xml.h:5 hacks/config/spiral.xml.h:7
+#: hacks/config/squiral.xml.h:9 hacks/config/starfish.xml.h:9
+#: hacks/config/strange.xml.h:4 hacks/config/swirl.xml.h:7
+#: hacks/config/thornbird.xml.h:6 hacks/config/topblock.xml.h:14
+#: hacks/config/triangle.xml.h:5 hacks/config/vines.xml.h:5
+#: hacks/config/voronoi.xml.h:9 hacks/config/whirlwindwarp.xml.h:4
+#: hacks/config/worm.xml.h:6
 msgid "Many"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:6 hacks/config/ant.xml.h:11
-#: hacks/config/apollonian.xml.h:8 hacks/config/attraction.xml.h:19
-#: hacks/config/bouboule.xml.h:6 hacks/config/braid.xml.h:9
-#: hacks/config/critical.xml.h:5 hacks/config/crystal.xml.h:10
-#: hacks/config/cynosure.xml.h:7 hacks/config/deco.xml.h:8
-#: hacks/config/deluxe.xml.h:7 hacks/config/demon.xml.h:7
-#: hacks/config/discrete.xml.h:6 hacks/config/drift.xml.h:10
-#: hacks/config/epicycle.xml.h:9 hacks/config/eruption.xml.h:14
-#: hacks/config/euler2d.xml.h:9 hacks/config/fadeplot.xml.h:7
-#: hacks/config/flag.xml.h:6 hacks/config/flame.xml.h:12
-#: hacks/config/flow.xml.h:8 hacks/config/forest.xml.h:4
-#: hacks/config/galaxy.xml.h:7 hacks/config/grav.xml.h:5
-#: hacks/config/halo.xml.h:6 hacks/config/hopalong.xml.h:17
-#: hacks/config/imsmap.xml.h:10 hacks/config/interference.xml.h:15
-#: hacks/config/julia.xml.h:7 hacks/config/laser.xml.h:8
-#: hacks/config/lightning.xml.h:4 hacks/config/lisa.xml.h:6
-#: hacks/config/lissie.xml.h:7 hacks/config/loop.xml.h:5
-#: hacks/config/metaballs.xml.h:10 hacks/config/moire.xml.h:7
-#: hacks/config/moire2.xml.h:5 hacks/config/mountain.xml.h:6
-#: hacks/config/penrose.xml.h:5 hacks/config/polyominoes.xml.h:6
-#: hacks/config/popsquares.xml.h:4 hacks/config/rd-bomb.xml.h:13
-#: hacks/config/rocks.xml.h:6 hacks/config/rotor.xml.h:7
-#: hacks/config/shadebobs.xml.h:6 hacks/config/sierpinski.xml.h:5
-#: hacks/config/slip.xml.h:5 hacks/config/sphere.xml.h:4
-#: hacks/config/spiral.xml.h:8 hacks/config/squiral.xml.h:10
-#: hacks/config/starfish.xml.h:6 hacks/config/strange.xml.h:3
-#: hacks/config/swirl.xml.h:5 hacks/config/thornbird.xml.h:5
-#: hacks/config/triangle.xml.h:4 hacks/config/vines.xml.h:3
-#: hacks/config/worm.xml.h:5 hacks/config/xearth.xml.h:17
-#: hacks/config/xfishtank.xml.h:9
-msgid "Number of Colors"
-msgstr ""
-
-#: hacks/config/anemone.xml.h:7 hacks/config/fireflies.xml.h:32
-#: hacks/config/pyro.xml.h:8
+#: hacks/config/anemone.xml.h:6 hacks/config/ant.xml.h:14
+#: hacks/config/apollonian.xml.h:10 hacks/config/attraction.xml.h:17
+#: hacks/config/bouboule.xml.h:8 hacks/config/braid.xml.h:10
+#: hacks/config/critical.xml.h:7 hacks/config/crystal.xml.h:11
+#: hacks/config/cynosure.xml.h:8 hacks/config/deco.xml.h:11
+#: hacks/config/deluxe.xml.h:10 hacks/config/demon.xml.h:12
+#: hacks/config/discrete.xml.h:8 hacks/config/drift.xml.h:9
+#: hacks/config/epicycle.xml.h:11 hacks/config/eruption.xml.h:17
+#: hacks/config/euler2d.xml.h:9 hacks/config/fadeplot.xml.h:9
+#: hacks/config/flag.xml.h:7 hacks/config/flame.xml.h:12
+#: hacks/config/flow.xml.h:12 hacks/config/forest.xml.h:7
+#: hacks/config/galaxy.xml.h:9 hacks/config/grav.xml.h:7
+#: hacks/config/halo.xml.h:10 hacks/config/hopalong.xml.h:17
+#: hacks/config/ifs.xml.h:9 hacks/config/imsmap.xml.h:13
+#: hacks/config/interference.xml.h:15 hacks/config/julia.xml.h:12
+#: hacks/config/laser.xml.h:10 hacks/config/lightning.xml.h:7
+#: hacks/config/lisa.xml.h:12 hacks/config/lissie.xml.h:11
+#: hacks/config/loop.xml.h:9 hacks/config/metaballs.xml.h:13
+#: hacks/config/moire.xml.h:7 hacks/config/moire2.xml.h:7
+#: hacks/config/mountain.xml.h:8 hacks/config/penrose.xml.h:8
+#: hacks/config/polyominoes.xml.h:8 hacks/config/popsquares.xml.h:17
+#: hacks/config/rd-bomb.xml.h:13 hacks/config/rdbomb.xml.h:13
+#: hacks/config/rocks.xml.h:9 hacks/config/rotor.xml.h:9
+#: hacks/config/shadebobs.xml.h:8 hacks/config/sierpinski.xml.h:7
+#: hacks/config/slip.xml.h:8 hacks/config/sphere.xml.h:6
+#: hacks/config/spiral.xml.h:9 hacks/config/squiral.xml.h:10
+#: hacks/config/starfish.xml.h:10 hacks/config/strange.xml.h:5
+#: hacks/config/swirl.xml.h:8 hacks/config/thornbird.xml.h:7
+#: hacks/config/triangle.xml.h:6 hacks/config/vines.xml.h:6
+#: hacks/config/worm.xml.h:7
+msgid "Number of colors"
+msgstr "色の数"
+
+#: hacks/config/anemone.xml.h:7 hacks/config/pyro.xml.h:9
 msgid "Often"
 msgstr ""
 
@@ -1251,241 +1486,73 @@ msgstr ""
 msgid "Rarely"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:9 hacks/config/anemotaxis.xml.h:10
-#: hacks/config/ant.xml.h:15 hacks/config/antinspect.xml.h:6
-#: hacks/config/antmaze.xml.h:5 hacks/config/antspotlight.xml.h:5
-#: hacks/config/apollonian.xml.h:11 hacks/config/atlantis.xml.h:13
-#: hacks/config/attraction.xml.h:26 hacks/config/atunnel.xml.h:6
-#: hacks/config/barcode.xml.h:6 hacks/config/blaster.xml.h:8
-#: hacks/config/blinkbox.xml.h:8 hacks/config/blitspin.xml.h:7
-#: hacks/config/blocktube.xml.h:9 hacks/config/boing.xml.h:10
-#: hacks/config/bouboule.xml.h:8 hacks/config/bouncingcow.xml.h:10
-#: hacks/config/boxed.xml.h:15 hacks/config/boxfit.xml.h:12
-#: hacks/config/braid.xml.h:11 hacks/config/bubble3d.xml.h:6
-#: hacks/config/bubbles.xml.h:10 hacks/config/bumps.xml.h:4
-#: hacks/config/cage.xml.h:4 hacks/config/carousel.xml.h:14
-#: hacks/config/ccurve.xml.h:11 hacks/config/celtic.xml.h:8
-#: hacks/config/circuit.xml.h:10 hacks/config/cloudlife.xml.h:11
-#: hacks/config/compass.xml.h:4 hacks/config/coral.xml.h:12
-#: hacks/config/critical.xml.h:6 hacks/config/crystal.xml.h:11
-#: hacks/config/cube21.xml.h:16 hacks/config/cubenetic.xml.h:22
-#: hacks/config/cubestorm.xml.h:8 hacks/config/cynosure.xml.h:9
-#: hacks/config/dangerball.xml.h:5 hacks/config/decayscreen.xml.h:17
-#: hacks/config/deluxe.xml.h:8 hacks/config/demon.xml.h:8
-#: hacks/config/discrete.xml.h:7 hacks/config/distort.xml.h:11
-#: hacks/config/drift.xml.h:12 hacks/config/endgame.xml.h:5
-#: hacks/config/engine.xml.h:15 hacks/config/epicycle.xml.h:10
-#: hacks/config/eruption.xml.h:19 hacks/config/euler2d.xml.h:14
-#: hacks/config/extrusion.xml.h:11 hacks/config/fadeplot.xml.h:8
-#: hacks/config/fireworkx.xml.h:9 hacks/config/flag.xml.h:7
-#: hacks/config/flame.xml.h:14 hacks/config/flipflop.xml.h:5
-#: hacks/config/flipscreen3d.xml.h:6 hacks/config/fliptext.xml.h:13
-#: hacks/config/flow.xml.h:10 hacks/config/fluidballs.xml.h:18
-#: hacks/config/flyingtoasters.xml.h:11 hacks/config/fontglide.xml.h:13
-#: hacks/config/forest.xml.h:5 hacks/config/fuzzyflakes.xml.h:15
-#: hacks/config/galaxy.xml.h:11 hacks/config/gears.xml.h:7
-#: hacks/config/gflux.xml.h:12 hacks/config/glblur.xml.h:14
-#: hacks/config/glforestfire.xml.h:14 hacks/config/glhanoi.xml.h:8
-#: hacks/config/glknots.xml.h:17 hacks/config/glmatrix.xml.h:18
-#: hacks/config/glplanet.xml.h:8 hacks/config/glsnake.xml.h:12
-#: hacks/config/gltext.xml.h:15 hacks/config/goop.xml.h:10
-#: hacks/config/grav.xml.h:8 hacks/config/greynetic.xml.h:3
-#: hacks/config/halo.xml.h:10 hacks/config/hopalong.xml.h:21
-#: hacks/config/hyperball.xml.h:8 hacks/config/hypercube.xml.h:7
-#: hacks/config/hypertorus.xml.h:18 hacks/config/ifs.xml.h:13
-#: hacks/config/interaggregate.xml.h:4 hacks/config/interference.xml.h:17
-#: hacks/config/intermomentary.xml.h:4 hacks/config/jigglypuff.xml.h:16
-#: hacks/config/jigsaw.xml.h:5 hacks/config/juggle.xml.h:8
-#: hacks/config/juggler3d.xml.h:12 hacks/config/julia.xml.h:8
-#: hacks/config/kaleidescope.xml.h:7 hacks/config/klein.xml.h:7
-#: hacks/config/kumppa.xml.h:8 hacks/config/lament.xml.h:6
-#: hacks/config/laser.xml.h:10 hacks/config/lavalite.xml.h:27
-#: hacks/config/lightning.xml.h:5 hacks/config/lisa.xml.h:8
-#: hacks/config/lissie.xml.h:9 hacks/config/lmorph.xml.h:11
-#: hacks/config/loop.xml.h:7 hacks/config/maze.xml.h:14
-#: hacks/config/memscroller.xml.h:7 hacks/config/menger.xml.h:16
-#: hacks/config/metaballs.xml.h:13 hacks/config/mirrorblob.xml.h:18
-#: hacks/config/mismunch.xml.h:10 hacks/config/moebius.xml.h:7
-#: hacks/config/moire2.xml.h:6 hacks/config/molecule.xml.h:23
-#: hacks/config/morph3d.xml.h:6 hacks/config/mountain.xml.h:7
-#: hacks/config/munch.xml.h:7 hacks/config/nerverot.xml.h:20
-#: hacks/config/noof.xml.h:5 hacks/config/pacman.xml.h:5
-#: hacks/config/penetrate.xml.h:6 hacks/config/penrose.xml.h:8
-#: hacks/config/petri.xml.h:23 hacks/config/phosphor.xml.h:7
-#: hacks/config/piecewise.xml.h:9 hacks/config/pinion.xml.h:13
-#: hacks/config/pipes.xml.h:15 hacks/config/polyhedra.xml.h:111
-#: hacks/config/polyominoes.xml.h:10 hacks/config/polytopes.xml.h:20
-#: hacks/config/pong.xml.h:4 hacks/config/popsquares.xml.h:5
-#: hacks/config/providence.xml.h:5 hacks/config/pulsar.xml.h:15
-#: hacks/config/pyro.xml.h:13 hacks/config/qix.xml.h:19
-#: hacks/config/queens.xml.h:4 hacks/config/rd-bomb.xml.h:17
-#: hacks/config/ripples.xml.h:12 hacks/config/rocks.xml.h:9
-#: hacks/config/rotor.xml.h:11 hacks/config/rubik.xml.h:9
-#: hacks/config/sballs.xml.h:13 hacks/config/shadebobs.xml.h:9
-#: hacks/config/sierpinski.xml.h:7 hacks/config/sierpinski3d.xml.h:8
-#: hacks/config/slidescreen.xml.h:6 hacks/config/slip.xml.h:7
-#: hacks/config/speedmine.xml.h:13 hacks/config/sphere.xml.h:5
-#: hacks/config/spheremonics.xml.h:19 hacks/config/spiral.xml.h:9
-#: hacks/config/spotlight.xml.h:4 hacks/config/sproingies.xml.h:6
-#: hacks/config/squiral.xml.h:14 hacks/config/stairs.xml.h:3
-#: hacks/config/starfish.xml.h:8 hacks/config/starwars.xml.h:12
-#: hacks/config/strange.xml.h:4 hacks/config/substrate.xml.h:15
-#: hacks/config/superquadrics.xml.h:8 hacks/config/swirl.xml.h:6
-#: hacks/config/t3d.xml.h:11 hacks/config/tangram.xml.h:4
-#: hacks/config/thornbird.xml.h:7 hacks/config/triangle.xml.h:5
-#: hacks/config/truchet.xml.h:2 hacks/config/twang.xml.h:9
-#: hacks/config/vines.xml.h:4 hacks/config/worm.xml.h:7
-#: hacks/config/wormhole.xml.h:5 hacks/config/xearth.xml.h:22
-#: hacks/config/xfishtank.xml.h:10 hacks/config/xflame.xml.h:5
-#: hacks/config/xjack.xml.h:2 hacks/config/xmatrix.xml.h:15
-#: hacks/config/xplanet.xml.h:59 hacks/config/xrayswarm.xml.h:3
-#: hacks/config/zoom.xml.h:6
-msgid "Slow"
-msgstr ""
-
-#: hacks/config/anemone.xml.h:10 hacks/config/anemotaxis.xml.h:12
-#: hacks/config/ant.xml.h:17 hacks/config/antinspect.xml.h:7
-#: hacks/config/antmaze.xml.h:6 hacks/config/antspotlight.xml.h:6
-#: hacks/config/apollonian.xml.h:12 hacks/config/attraction.xml.h:28
-#: hacks/config/atunnel.xml.h:7 hacks/config/barcode.xml.h:7
-#: hacks/config/blaster.xml.h:9 hacks/config/blinkbox.xml.h:9
-#: hacks/config/blocktube.xml.h:11 hacks/config/boing.xml.h:12
-#: hacks/config/bouboule.xml.h:9 hacks/config/boxfit.xml.h:14
-#: hacks/config/braid.xml.h:12 hacks/config/bubble3d.xml.h:7
-#: hacks/config/bubbles.xml.h:11 hacks/config/bumps.xml.h:5
-#: hacks/config/cage.xml.h:6 hacks/config/celtic.xml.h:9
-#: hacks/config/circuit.xml.h:11 hacks/config/cloudlife.xml.h:13
-#: hacks/config/compass.xml.h:5 hacks/config/coral.xml.h:14
-#: hacks/config/critical.xml.h:7 hacks/config/crystal.xml.h:12
-#: hacks/config/cubenetic.xml.h:24 hacks/config/cynosure.xml.h:10
-#: hacks/config/dangerball.xml.h:6 hacks/config/decayscreen.xml.h:18
-#: hacks/config/deluxe.xml.h:9 hacks/config/demon.xml.h:10
-#: hacks/config/discrete.xml.h:9 hacks/config/distort.xml.h:13
-#: hacks/config/drift.xml.h:13 hacks/config/endgame.xml.h:6
-#: hacks/config/engine.xml.h:16 hacks/config/epicycle.xml.h:11
-#: hacks/config/eruption.xml.h:20 hacks/config/euler2d.xml.h:15
-#: hacks/config/extrusion.xml.h:13 hacks/config/fadeplot.xml.h:10
-#: hacks/config/fireworkx.xml.h:11 hacks/config/flag.xml.h:9
-#: hacks/config/flame.xml.h:15 hacks/config/flipflop.xml.h:7
-#: hacks/config/flipscreen3d.xml.h:7 hacks/config/fliptext.xml.h:14
-#: hacks/config/flow.xml.h:12 hacks/config/fluidballs.xml.h:20
-#: hacks/config/forest.xml.h:6 hacks/config/fuzzyflakes.xml.h:17
-#: hacks/config/galaxy.xml.h:12 hacks/config/glblur.xml.h:16
-#: hacks/config/glforestfire.xml.h:15 hacks/config/glplanet.xml.h:10
-#: hacks/config/gltext.xml.h:17 hacks/config/goop.xml.h:11
-#: hacks/config/grav.xml.h:9 hacks/config/greynetic.xml.h:4
-#: hacks/config/halo.xml.h:11 hacks/config/hopalong.xml.h:23
-#: hacks/config/hyperball.xml.h:9 hacks/config/hypercube.xml.h:8
-#: hacks/config/ifs.xml.h:14 hacks/config/interaggregate.xml.h:5
-#: hacks/config/intermomentary.xml.h:5 hacks/config/jigsaw.xml.h:7
-#: hacks/config/juggle.xml.h:9 hacks/config/julia.xml.h:10
-#: hacks/config/kaleidescope.xml.h:8 hacks/config/klein.xml.h:8
-#: hacks/config/kumppa.xml.h:9 hacks/config/lament.xml.h:7
-#: hacks/config/laser.xml.h:11 hacks/config/lavalite.xml.h:30
-#: hacks/config/lightning.xml.h:6 hacks/config/lisa.xml.h:9
-#: hacks/config/lissie.xml.h:11 hacks/config/lmorph.xml.h:12
-#: hacks/config/loop.xml.h:9 hacks/config/memscroller.xml.h:8
-#: hacks/config/menger.xml.h:18 hacks/config/metaballs.xml.h:15
-#: hacks/config/mirrorblob.xml.h:20 hacks/config/mismunch.xml.h:12
-#: hacks/config/moebius.xml.h:10 hacks/config/moire2.xml.h:7
-#: hacks/config/molecule.xml.h:25 hacks/config/morph3d.xml.h:7
-#: hacks/config/mountain.xml.h:8 hacks/config/munch.xml.h:9
-#: hacks/config/nerverot.xml.h:22 hacks/config/noof.xml.h:6
-#: hacks/config/pacman.xml.h:6 hacks/config/penrose.xml.h:9
-#: hacks/config/petri.xml.h:25 hacks/config/phosphor.xml.h:8
-#: hacks/config/piecewise.xml.h:11 hacks/config/pipes.xml.h:16
-#: hacks/config/polyominoes.xml.h:11 hacks/config/pong.xml.h:5
-#: hacks/config/popsquares.xml.h:6 hacks/config/providence.xml.h:7
-#: hacks/config/pulsar.xml.h:17 hacks/config/qix.xml.h:22
-#: hacks/config/queens.xml.h:6 hacks/config/rotor.xml.h:12
-#: hacks/config/rubik.xml.h:11 hacks/config/sballs.xml.h:14
-#: hacks/config/shadebobs.xml.h:10 hacks/config/sierpinski.xml.h:9
-#: hacks/config/sierpinski3d.xml.h:10 hacks/config/slidescreen.xml.h:7
-#: hacks/config/slip.xml.h:9 hacks/config/speedmine.xml.h:15
-#: hacks/config/sphere.xml.h:6 hacks/config/spheremonics.xml.h:22
-#: hacks/config/spiral.xml.h:10 hacks/config/spotlight.xml.h:5
-#: hacks/config/sproingies.xml.h:8 hacks/config/squiral.xml.h:16
-#: hacks/config/stairs.xml.h:5 hacks/config/starfish.xml.h:9
-#: hacks/config/strange.xml.h:5 hacks/config/substrate.xml.h:16
-#: hacks/config/superquadrics.xml.h:10 hacks/config/swirl.xml.h:7
-#: hacks/config/t3d.xml.h:13 hacks/config/tangram.xml.h:5
-#: hacks/config/thornbird.xml.h:8 hacks/config/triangle.xml.h:6
-#: hacks/config/truchet.xml.h:3 hacks/config/twang.xml.h:10
-#: hacks/config/vines.xml.h:5 hacks/config/whirlygig.xml.h:13
-#: hacks/config/worm.xml.h:8 hacks/config/xearth.xml.h:25
-#: hacks/config/xflame.xml.h:6 hacks/config/xjack.xml.h:3
-#: hacks/config/xmatrix.xml.h:18 hacks/config/xplanet.xml.h:60
-#: hacks/config/xrayswarm.xml.h:4 hacks/config/zoom.xml.h:7
-msgid "Speed"
-msgstr ""
-
-#: hacks/config/anemone.xml.h:11
+#: hacks/config/anemone.xml.h:12 hacks/config/skytentacles.xml.h:18
 msgid "Tentacles"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:12 hacks/config/cubestorm.xml.h:11
-#: hacks/config/deluxe.xml.h:10 hacks/config/fuzzyflakes.xml.h:18
-#: hacks/config/glknots.xml.h:19 hacks/config/lmorph.xml.h:13
-#: hacks/config/pong.xml.h:7 hacks/config/starfish.xml.h:11
-#: hacks/config/thornbird.xml.h:9
+#: hacks/config/anemone.xml.h:13 hacks/config/cubestorm.xml.h:15
+#: hacks/config/deluxe.xml.h:13 hacks/config/fadeplot.xml.h:12
+#: hacks/config/fuzzyflakes.xml.h:25 hacks/config/glknots.xml.h:21
+#: hacks/config/lmorph.xml.h:16 hacks/config/skytentacles.xml.h:21
+#: hacks/config/starfish.xml.h:15 hacks/config/thornbird.xml.h:10
 msgid "Thick"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:13 hacks/config/fuzzyflakes.xml.h:19
-#: hacks/config/glknots.xml.h:20 hacks/config/moire2.xml.h:8
-#: hacks/config/thornbird.xml.h:10
+#: hacks/config/anemone.xml.h:14 hacks/config/fadeplot.xml.h:13
+#: hacks/config/fuzzyflakes.xml.h:26 hacks/config/glknots.xml.h:22
+#: hacks/config/moire2.xml.h:9 hacks/config/skytentacles.xml.h:22
+#: hacks/config/thornbird.xml.h:11
 msgid "Thickness"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:14 hacks/config/cubestorm.xml.h:12
-#: hacks/config/deluxe.xml.h:11 hacks/config/fuzzyflakes.xml.h:20
-#: hacks/config/glknots.xml.h:21 hacks/config/lmorph.xml.h:14
-#: hacks/config/pong.xml.h:8 hacks/config/starfish.xml.h:12
-#: hacks/config/thornbird.xml.h:11
+#: hacks/config/anemone.xml.h:15 hacks/config/cubestorm.xml.h:16
+#: hacks/config/deluxe.xml.h:14 hacks/config/fadeplot.xml.h:14
+#: hacks/config/fuzzyflakes.xml.h:27 hacks/config/glknots.xml.h:23
+#: hacks/config/lmorph.xml.h:17 hacks/config/skytentacles.xml.h:23
+#: hacks/config/starfish.xml.h:16 hacks/config/thornbird.xml.h:12
 msgid "Thin"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:15
+#: hacks/config/anemone.xml.h:16
 msgid "Turn speed"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:16 hacks/config/ant.xml.h:22
-#: hacks/config/apollonian.xml.h:13 hacks/config/attraction.xml.h:32
-#: hacks/config/bouboule.xml.h:11 hacks/config/braid.xml.h:13
-#: hacks/config/critical.xml.h:8 hacks/config/crystal.xml.h:13
-#: hacks/config/cynosure.xml.h:11 hacks/config/deco.xml.h:10
-#: hacks/config/deluxe.xml.h:14 hacks/config/demon.xml.h:13
-#: hacks/config/discrete.xml.h:11 hacks/config/drift.xml.h:14
-#: hacks/config/epicycle.xml.h:13 hacks/config/euler2d.xml.h:17
-#: hacks/config/fadeplot.xml.h:12 hacks/config/flag.xml.h:13
-#: hacks/config/flame.xml.h:16 hacks/config/flow.xml.h:15
-#: hacks/config/forest.xml.h:8 hacks/config/galaxy.xml.h:14
-#: hacks/config/grav.xml.h:11 hacks/config/halo.xml.h:13
-#: hacks/config/hopalong.xml.h:25 hacks/config/imsmap.xml.h:15
-#: hacks/config/interference.xml.h:19 hacks/config/julia.xml.h:12
-#: hacks/config/laser.xml.h:12 hacks/config/lightning.xml.h:8
-#: hacks/config/lisa.xml.h:12 hacks/config/lissie.xml.h:13
-#: hacks/config/loop.xml.h:12 hacks/config/metaballs.xml.h:16
-#: hacks/config/moire.xml.h:11 hacks/config/moire2.xml.h:9
-#: hacks/config/mountain.xml.h:9 hacks/config/nerverot.xml.h:23
-#: hacks/config/penrose.xml.h:10 hacks/config/polyominoes.xml.h:12
-#: hacks/config/rd-bomb.xml.h:20 hacks/config/rocks.xml.h:12
-#: hacks/config/rotor.xml.h:13 hacks/config/shadebobs.xml.h:12
-#: hacks/config/sierpinski.xml.h:12 hacks/config/slip.xml.h:12
-#: hacks/config/sphere.xml.h:8 hacks/config/spiral.xml.h:12
-#: hacks/config/squiral.xml.h:18 hacks/config/starfish.xml.h:14
-#: hacks/config/strange.xml.h:8 hacks/config/swirl.xml.h:9
-#: hacks/config/thornbird.xml.h:13 hacks/config/triangle.xml.h:8
-#: hacks/config/vines.xml.h:7 hacks/config/worm.xml.h:9
-#: hacks/config/xearth.xml.h:28 hacks/config/xfishtank.xml.h:11
+#: hacks/config/anemone.xml.h:17 hacks/config/apollonian.xml.h:15
+#: hacks/config/attraction.xml.h:31 hacks/config/bouboule.xml.h:12
+#: hacks/config/braid.xml.h:14 hacks/config/critical.xml.h:9
+#: hacks/config/crystal.xml.h:14 hacks/config/cynosure.xml.h:12
+#: hacks/config/deco.xml.h:15 hacks/config/deluxe.xml.h:16
+#: hacks/config/demon.xml.h:17 hacks/config/discrete.xml.h:12
+#: hacks/config/drift.xml.h:12 hacks/config/epicycle.xml.h:14
+#: hacks/config/euler2d.xml.h:17 hacks/config/fadeplot.xml.h:15
+#: hacks/config/flag.xml.h:13 hacks/config/flame.xml.h:15
+#: hacks/config/flow.xml.h:22 hacks/config/forest.xml.h:9
+#: hacks/config/galaxy.xml.h:14 hacks/config/grav.xml.h:13
+#: hacks/config/halo.xml.h:15 hacks/config/hopalong.xml.h:24
+#: hacks/config/imsmap.xml.h:19 hacks/config/interference.xml.h:20
+#: hacks/config/julia.xml.h:15 hacks/config/laser.xml.h:13
+#: hacks/config/lightning.xml.h:9 hacks/config/lisa.xml.h:17
+#: hacks/config/lissie.xml.h:16 hacks/config/loop.xml.h:14
+#: hacks/config/metaballs.xml.h:17 hacks/config/moire.xml.h:11
+#: hacks/config/moire2.xml.h:10 hacks/config/mountain.xml.h:12
+#: hacks/config/nerverot.xml.h:22 hacks/config/penrose.xml.h:13
+#: hacks/config/polyominoes.xml.h:13 hacks/config/rd-bomb.xml.h:20
+#: hacks/config/rdbomb.xml.h:20 hacks/config/rocks.xml.h:16
+#: hacks/config/rotor.xml.h:14 hacks/config/shadebobs.xml.h:14
+#: hacks/config/sierpinski.xml.h:14 hacks/config/slip.xml.h:14
+#: hacks/config/sphere.xml.h:9 hacks/config/spiral.xml.h:12
+#: hacks/config/squiral.xml.h:17 hacks/config/starfish.xml.h:18
+#: hacks/config/strange.xml.h:9 hacks/config/swirl.xml.h:11
+#: hacks/config/thornbird.xml.h:14 hacks/config/triangle.xml.h:9
+#: hacks/config/vines.xml.h:8 hacks/config/worm.xml.h:10
 msgid "Two"
 msgstr ""
 
-#: hacks/config/anemone.xml.h:17
-msgid "Wiggling tentacles. By Gabriel Finch."
+#: hacks/config/anemone.xml.h:18
+msgid "Wiggling tentacles. Written by Gabriel Finch; 2002."
 msgstr ""
 
-#: hacks/config/anemone.xml.h:18
+#: hacks/config/anemone.xml.h:19
 msgid "Withdraw freqency"
 msgstr ""
 
@@ -1498,128 +1565,440 @@ msgid ""
 "Anemotaxis demonstrates a search algorithm designed for locating a source of "
 "odor in turbulent atmosphere. The searcher is able to sense the odor and "
 "determine local instantaneous wind direction. The goal is to find the source "
-"in the shortest mean time. Written by Eugene Balkovsky."
+"in the shortest mean time. http://en.wikipedia.org/wiki/Anemotaxis Written "
+"by Eugene Balkovsky; 2004."
 msgstr ""
 
 #: hacks/config/anemotaxis.xml.h:3
 msgid "Distance"
 msgstr ""
 
-#: hacks/config/anemotaxis.xml.h:4 hacks/config/hyperball.xml.h:1
-#: hacks/config/hypercube.xml.h:1
+#: hacks/config/anemotaxis.xml.h:4 hacks/config/cubicgrid.xml.h:6
+#: hacks/config/hyperball.xml.h:1 hacks/config/hypercube.xml.h:1
 msgid "Far"
 msgstr ""
 
-#: hacks/config/anemotaxis.xml.h:8 hacks/config/hyperball.xml.h:7
-#: hacks/config/hypercube.xml.h:6
+#: hacks/config/anemotaxis.xml.h:6 hacks/config/ant.xml.h:8
+#: hacks/config/antinspect.xml.h:4 hacks/config/antmaze.xml.h:3
+#: hacks/config/antspotlight.xml.h:3 hacks/config/atlantis.xml.h:8
+#: hacks/config/atunnel.xml.h:3 hacks/config/barcode.xml.h:6
+#: hacks/config/blaster.xml.h:4 hacks/config/blinkbox.xml.h:5
+#: hacks/config/blocktube.xml.h:5 hacks/config/bouboule.xml.h:4
+#: hacks/config/bouncingcow.xml.h:5 hacks/config/boxed.xml.h:9
+#: hacks/config/boxfit.xml.h:8 hacks/config/braid.xml.h:4
+#: hacks/config/bubble3d.xml.h:4 hacks/config/bubbles.xml.h:7
+#: hacks/config/bumps.xml.h:6 hacks/config/cage.xml.h:2
+#: hacks/config/carousel.xml.h:6 hacks/config/celtic.xml.h:3
+#: hacks/config/circuit.xml.h:6 hacks/config/cloudlife.xml.h:3
+#: hacks/config/compass.xml.h:2 hacks/config/coral.xml.h:7
+#: hacks/config/crackberg.xml.h:8 hacks/config/critical.xml.h:3
+#: hacks/config/crystal.xml.h:5 hacks/config/cube21.xml.h:7
+#: hacks/config/cubenetic.xml.h:7 hacks/config/cubestorm.xml.h:6
+#: hacks/config/cubicgrid.xml.h:8 hacks/config/cwaves.xml.h:4
+#: hacks/config/cynosure.xml.h:3 hacks/config/dangerball.xml.h:5
+#: hacks/config/decayscreen.xml.h:5 hacks/config/deluxe.xml.h:5
+#: hacks/config/demon.xml.h:7 hacks/config/discrete.xml.h:2
+#: hacks/config/distort.xml.h:7 hacks/config/drift.xml.h:4
+#: hacks/config/endgame.xml.h:3 hacks/config/engine.xml.h:8
+#: hacks/config/epicycle.xml.h:4 hacks/config/eruption.xml.h:7
+#: hacks/config/euler2d.xml.h:4 hacks/config/extrusion.xml.h:3
+#: hacks/config/fadeplot.xml.h:4 hacks/config/fiberlamp.xml.h:5
+#: hacks/config/fireworkx.xml.h:5 hacks/config/flag.xml.h:2
+#: hacks/config/flame.xml.h:6 hacks/config/flipflop.xml.h:6
+#: hacks/config/flipscreen3d.xml.h:2 hacks/config/fliptext.xml.h:8
+#: hacks/config/flow.xml.h:5 hacks/config/fluidballs.xml.h:6
+#: hacks/config/flyingtoasters.xml.h:7 hacks/config/fontglide.xml.h:5
+#: hacks/config/forest.xml.h:3 hacks/config/fuzzyflakes.xml.h:8
+#: hacks/config/galaxy.xml.h:3 hacks/config/gears.xml.h:4
+#: hacks/config/gflux.xml.h:9 hacks/config/glblur.xml.h:4
+#: hacks/config/glcells.xml.h:7 hacks/config/gleidescope.xml.h:4
+#: hacks/config/glforestfire.xml.h:6 hacks/config/glhanoi.xml.h:5
+#: hacks/config/glknots.xml.h:3 hacks/config/glmatrix.xml.h:6
+#: hacks/config/glplanet.xml.h:2 hacks/config/glschool.xml.h:8
+#: hacks/config/glslideshow.xml.h:11 hacks/config/glsnake.xml.h:8
+#: hacks/config/gltext.xml.h:6 hacks/config/goop.xml.h:6
+#: hacks/config/grav.xml.h:2 hacks/config/greynetic.xml.h:2
+#: hacks/config/halftone.xml.h:6 hacks/config/halo.xml.h:4
+#: hacks/config/helix.xml.h:3 hacks/config/hopalong.xml.h:9
+#: hacks/config/hyperball.xml.h:3 hacks/config/hypercube.xml.h:3
+#: hacks/config/hypertorus.xml.h:4 hacks/config/hypnowheel.xml.h:7
+#: hacks/config/ifs.xml.h:4 hacks/config/imsmap.xml.h:6
+#: hacks/config/interaggregate.xml.h:3 hacks/config/interference.xml.h:7
+#: hacks/config/intermomentary.xml.h:4 hacks/config/jigglypuff.xml.h:9
+#: hacks/config/jigsaw.xml.h:3 hacks/config/juggle.xml.h:7
+#: hacks/config/juggler3d.xml.h:3 hacks/config/julia.xml.h:4
+#: hacks/config/kaleidescope.xml.h:5 hacks/config/klein.xml.h:2
+#: hacks/config/kumppa.xml.h:3 hacks/config/lament.xml.h:3
+#: hacks/config/laser.xml.h:3 hacks/config/lavalite.xml.h:9
+#: hacks/config/lcdscrub.xml.h:4 hacks/config/lightning.xml.h:2
+#: hacks/config/lisa.xml.h:5 hacks/config/lissie.xml.h:4
+#: hacks/config/lmorph.xml.h:4 hacks/config/lockward.xml.h:3
+#: hacks/config/loop.xml.h:1 hacks/config/maze.xml.h:4
+#: hacks/config/memscroller.xml.h:5 hacks/config/menger.xml.h:3
+#: hacks/config/metaballs.xml.h:4 hacks/config/mirrorblob.xml.h:13
+#: hacks/config/mismunch.xml.h:2 hacks/config/moebius.xml.h:2
+#: hacks/config/moebiusgears.xml.h:3 hacks/config/moire2.xml.h:1
+#: hacks/config/molecule.xml.h:12 hacks/config/morph3d.xml.h:3
+#: hacks/config/mountain.xml.h:1 hacks/config/munch.xml.h:3
+#: hacks/config/nerverot.xml.h:9 hacks/config/noof.xml.h:2
+#: hacks/config/pacman.xml.h:1 hacks/config/penrose.xml.h:3
+#: hacks/config/petri.xml.h:8 hacks/config/phosphor.xml.h:5
+#: hacks/config/piecewise.xml.h:5 hacks/config/pinion.xml.h:5
+#: hacks/config/pipes.xml.h:8 hacks/config/polyhedra.xml.h:17
+#: hacks/config/polyominoes.xml.h:2 hacks/config/polytopes.xml.h:10
+#: hacks/config/popsquares.xml.h:8 hacks/config/providence.xml.h:3
+#: hacks/config/pulsar.xml.h:10 hacks/config/pyro.xml.h:5
+#: hacks/config/qix.xml.h:8 hacks/config/queens.xml.h:1
+#: hacks/config/rd-bomb.xml.h:10 hacks/config/rdbomb.xml.h:10
+#: hacks/config/ripples.xml.h:8 hacks/config/rocks.xml.h:5
+#: hacks/config/rotor.xml.h:3 hacks/config/rotzoomer.xml.h:6
+#: hacks/config/rubik.xml.h:4 hacks/config/sballs.xml.h:4
+#: hacks/config/shadebobs.xml.h:3 hacks/config/sierpinski.xml.h:2
+#: hacks/config/sierpinski3d.xml.h:2 hacks/config/skytentacles.xml.h:7
+#: hacks/config/slidescreen.xml.h:6 hacks/config/slip.xml.h:3
+#: hacks/config/sonar.xml.h:3 hacks/config/speedmine.xml.h:4
+#: hacks/config/sphere.xml.h:2 hacks/config/spheremonics.xml.h:5
+#: hacks/config/spiral.xml.h:4 hacks/config/spotlight.xml.h:5
+#: hacks/config/sproingies.xml.h:2 hacks/config/squiral.xml.h:4
+#: hacks/config/stairs.xml.h:2 hacks/config/starfish.xml.h:5
+#: hacks/config/stonerview.xml.h:2 hacks/config/strange.xml.h:1
+#: hacks/config/substrate.xml.h:9 hacks/config/superquadrics.xml.h:4
+#: hacks/config/swirl.xml.h:4 hacks/config/t3d.xml.h:7
+#: hacks/config/tangram.xml.h:4 hacks/config/thornbird.xml.h:3
+#: hacks/config/topblock.xml.h:10 hacks/config/triangle.xml.h:1
+#: hacks/config/truchet.xml.h:1 hacks/config/twang.xml.h:6
+#: hacks/config/vines.xml.h:1 hacks/config/voronoi.xml.h:7
+#: hacks/config/wander.xml.h:6 hacks/config/worm.xml.h:3
+#: hacks/config/wormhole.xml.h:4 hacks/config/xflame.xml.h:4
+#: hacks/config/xlyap.xml.h:2 hacks/config/xmatrix.xml.h:5
+#: hacks/config/xrayswarm.xml.h:2 hacks/config/xspirograph.xml.h:3
+#: hacks/config/zoom.xml.h:8
+#, fuzzy
+msgid "Frame rate"
+msgstr "フェードする時間: "
+
+#: hacks/config/anemotaxis.xml.h:7 hacks/config/ant.xml.h:9
+#: hacks/config/antinspect.xml.h:5 hacks/config/antmaze.xml.h:4
+#: hacks/config/antspotlight.xml.h:4 hacks/config/atlantis.xml.h:10
+#: hacks/config/attraction.xml.h:9 hacks/config/atunnel.xml.h:4
+#: hacks/config/barcode.xml.h:7 hacks/config/blaster.xml.h:5
+#: hacks/config/blinkbox.xml.h:6 hacks/config/blocktube.xml.h:6
+#: hacks/config/bouboule.xml.h:5 hacks/config/bouncingcow.xml.h:7
+#: hacks/config/boxed.xml.h:11 hacks/config/boxfit.xml.h:11
+#: hacks/config/braid.xml.h:5 hacks/config/bubble3d.xml.h:5
+#: hacks/config/bubbles.xml.h:8 hacks/config/bumps.xml.h:7
+#: hacks/config/cage.xml.h:3 hacks/config/carousel.xml.h:7
+#: hacks/config/ccurve.xml.h:9 hacks/config/celtic.xml.h:4
+#: hacks/config/circuit.xml.h:7 hacks/config/cloudlife.xml.h:6
+#: hacks/config/compass.xml.h:3 hacks/config/coral.xml.h:8
+#: hacks/config/crackberg.xml.h:9 hacks/config/critical.xml.h:4
+#: hacks/config/crystal.xml.h:6 hacks/config/cube21.xml.h:8
+#: hacks/config/cubenetic.xml.h:8 hacks/config/cubestorm.xml.h:7
+#: hacks/config/cubicgrid.xml.h:9 hacks/config/cwaves.xml.h:5
+#: hacks/config/cynosure.xml.h:4 hacks/config/dangerball.xml.h:6
+#: hacks/config/decayscreen.xml.h:7 hacks/config/deluxe.xml.h:6
+#: hacks/config/demon.xml.h:8 hacks/config/discrete.xml.h:3
+#: hacks/config/distort.xml.h:9 hacks/config/dnalogo.xml.h:4
+#: hacks/config/drift.xml.h:5 hacks/config/endgame.xml.h:4
+#: hacks/config/engine.xml.h:9 hacks/config/epicycle.xml.h:6
+#: hacks/config/eruption.xml.h:10 hacks/config/euler2d.xml.h:5
+#: hacks/config/extrusion.xml.h:7 hacks/config/fadeplot.xml.h:5
+#: hacks/config/fiberlamp.xml.h:6 hacks/config/fireworkx.xml.h:7
+#: hacks/config/flag.xml.h:3 hacks/config/flame.xml.h:7
+#: hacks/config/flipflop.xml.h:7 hacks/config/flipscreen3d.xml.h:4
+#: hacks/config/fliptext.xml.h:9 hacks/config/flow.xml.h:6
+#: hacks/config/fluidballs.xml.h:9 hacks/config/flyingtoasters.xml.h:8
+#: hacks/config/fontglide.xml.h:6 hacks/config/forest.xml.h:4
+#: hacks/config/fuzzyflakes.xml.h:11 hacks/config/galaxy.xml.h:5
+#: hacks/config/gears.xml.h:7 hacks/config/gflux.xml.h:11
+#: hacks/config/glblur.xml.h:6 hacks/config/glcells.xml.h:10
+#: hacks/config/gleidescope.xml.h:6 hacks/config/glforestfire.xml.h:8
+#: hacks/config/glhanoi.xml.h:7 hacks/config/glknots.xml.h:6
+#: hacks/config/glmatrix.xml.h:12 hacks/config/glplanet.xml.h:4
+#: hacks/config/glschool.xml.h:11 hacks/config/glslideshow.xml.h:13
+#: hacks/config/glsnake.xml.h:10 hacks/config/gltext.xml.h:8
+#: hacks/config/goop.xml.h:8 hacks/config/grav.xml.h:4
+#: hacks/config/greynetic.xml.h:5 hacks/config/halftone.xml.h:9
+#: hacks/config/halo.xml.h:6 hacks/config/helix.xml.h:5
+#: hacks/config/hopalong.xml.h:10 hacks/config/hyperball.xml.h:4
+#: hacks/config/hypercube.xml.h:4 hacks/config/hypertorus.xml.h:5
+#: hacks/config/hypnowheel.xml.h:8 hacks/config/ifs.xml.h:5
+#: hacks/config/imsmap.xml.h:7 hacks/config/interaggregate.xml.h:4
+#: hacks/config/interference.xml.h:8 hacks/config/intermomentary.xml.h:5
+#: hacks/config/jigglypuff.xml.h:10 hacks/config/jigsaw.xml.h:4
+#: hacks/config/juggle.xml.h:8 hacks/config/juggler3d.xml.h:4
+#: hacks/config/julia.xml.h:5 hacks/config/kaleidescope.xml.h:6
+#: hacks/config/klein.xml.h:3 hacks/config/kumppa.xml.h:4
+#: hacks/config/lament.xml.h:4 hacks/config/laser.xml.h:4
+#: hacks/config/lavalite.xml.h:11 hacks/config/lcdscrub.xml.h:5
+#: hacks/config/lightning.xml.h:3 hacks/config/lisa.xml.h:6
+#: hacks/config/lissie.xml.h:5 hacks/config/lmorph.xml.h:5
+#: hacks/config/lockward.xml.h:4 hacks/config/loop.xml.h:4
+#: hacks/config/maze.xml.h:7 hacks/config/memscroller.xml.h:6
+#: hacks/config/menger.xml.h:4 hacks/config/metaballs.xml.h:5
+#: hacks/config/mirrorblob.xml.h:14 hacks/config/mismunch.xml.h:3
+#: hacks/config/moebius.xml.h:3 hacks/config/moebiusgears.xml.h:4
+#: hacks/config/moire2.xml.h:3 hacks/config/molecule.xml.h:13
+#: hacks/config/morph3d.xml.h:4 hacks/config/mountain.xml.h:3
+#: hacks/config/munch.xml.h:4 hacks/config/nerverot.xml.h:11
+#: hacks/config/noof.xml.h:3 hacks/config/pacman.xml.h:2
+#: hacks/config/penrose.xml.h:4 hacks/config/petri.xml.h:9
+#: hacks/config/phosphor.xml.h:6 hacks/config/piecewise.xml.h:6
+#: hacks/config/pinion.xml.h:7 hacks/config/pipes.xml.h:10
+#: hacks/config/polyhedra.xml.h:71 hacks/config/polyominoes.xml.h:3
+#: hacks/config/polytopes.xml.h:11 hacks/config/popsquares.xml.h:9
+#: hacks/config/providence.xml.h:4 hacks/config/pulsar.xml.h:11
+#: hacks/config/pyro.xml.h:6 hacks/config/qix.xml.h:10
+#: hacks/config/queens.xml.h:2 hacks/config/ripples.xml.h:10
+#: hacks/config/rocks.xml.h:6 hacks/config/rotor.xml.h:4
+#: hacks/config/rotzoomer.xml.h:7 hacks/config/rubik.xml.h:6
+#: hacks/config/sballs.xml.h:5 hacks/config/shadebobs.xml.h:4
+#: hacks/config/sierpinski.xml.h:3 hacks/config/sierpinski3d.xml.h:3
+#: hacks/config/skytentacles.xml.h:8 hacks/config/slidescreen.xml.h:8
+#: hacks/config/slip.xml.h:4 hacks/config/sonar.xml.h:4
+#: hacks/config/speedmine.xml.h:6 hacks/config/sphere.xml.h:3
+#: hacks/config/spheremonics.xml.h:6 hacks/config/spiral.xml.h:5
+#: hacks/config/spotlight.xml.h:6 hacks/config/sproingies.xml.h:3
+#: hacks/config/squiral.xml.h:6 hacks/config/stairs.xml.h:3
+#: hacks/config/starfish.xml.h:6 hacks/config/starwars.xml.h:11
+#: hacks/config/stonerview.xml.h:3 hacks/config/strange.xml.h:2
+#: hacks/config/substrate.xml.h:10 hacks/config/superquadrics.xml.h:5
+#: hacks/config/swirl.xml.h:5 hacks/config/t3d.xml.h:8
+#: hacks/config/tangram.xml.h:5 hacks/config/thornbird.xml.h:4
+#: hacks/config/topblock.xml.h:11 hacks/config/triangle.xml.h:3
+#: hacks/config/truchet.xml.h:2 hacks/config/twang.xml.h:8
+#: hacks/config/vines.xml.h:3 hacks/config/wander.xml.h:7
+#: hacks/config/whirlygig.xml.h:3 hacks/config/worm.xml.h:4
+#: hacks/config/wormhole.xml.h:5 hacks/config/xflame.xml.h:5
+#: hacks/config/xlyap.xml.h:3 hacks/config/xmatrix.xml.h:9
+#: hacks/config/xrayswarm.xml.h:3 hacks/config/xspirograph.xml.h:4
+#: hacks/config/zoom.xml.h:9
+msgid "High"
+msgstr ""
+
+#: hacks/config/anemotaxis.xml.h:8 hacks/config/ant.xml.h:11
+#: hacks/config/antinspect.xml.h:6 hacks/config/antmaze.xml.h:5
+#: hacks/config/antspotlight.xml.h:5 hacks/config/atlantis.xml.h:11
+#: hacks/config/attraction.xml.h:15 hacks/config/atunnel.xml.h:6
+#: hacks/config/barcode.xml.h:8 hacks/config/blaster.xml.h:7
+#: hacks/config/blinkbox.xml.h:8 hacks/config/blocktube.xml.h:8
+#: hacks/config/bouboule.xml.h:6 hacks/config/bouncingcow.xml.h:8
+#: hacks/config/boxed.xml.h:15 hacks/config/boxfit.xml.h:12
+#: hacks/config/braid.xml.h:8 hacks/config/bubble3d.xml.h:6
+#: hacks/config/bubbles.xml.h:10 hacks/config/bumps.xml.h:8
+#: hacks/config/cage.xml.h:4 hacks/config/carousel.xml.h:9
+#: hacks/config/ccurve.xml.h:10 hacks/config/celtic.xml.h:7
+#: hacks/config/circuit.xml.h:9 hacks/config/cloudlife.xml.h:9
+#: hacks/config/compass.xml.h:4 hacks/config/coral.xml.h:10
+#: hacks/config/crackberg.xml.h:15 hacks/config/critical.xml.h:5
+#: hacks/config/crystal.xml.h:8 hacks/config/cube21.xml.h:12
+#: hacks/config/cubenetic.xml.h:10 hacks/config/cubestorm.xml.h:8
+#: hacks/config/cubicgrid.xml.h:10 hacks/config/cwaves.xml.h:6
+#: hacks/config/cynosure.xml.h:6 hacks/config/dangerball.xml.h:7
+#: hacks/config/decayscreen.xml.h:8 hacks/config/deluxe.xml.h:8
+#: hacks/config/demon.xml.h:10 hacks/config/discrete.xml.h:5
+#: hacks/config/distort.xml.h:13 hacks/config/dnalogo.xml.h:5
+#: hacks/config/drift.xml.h:7 hacks/config/endgame.xml.h:5
+#: hacks/config/engine.xml.h:12 hacks/config/epicycle.xml.h:9
+#: hacks/config/eruption.xml.h:14 hacks/config/euler2d.xml.h:7
+#: hacks/config/extrusion.xml.h:9 hacks/config/fadeplot.xml.h:7
+#: hacks/config/fiberlamp.xml.h:8 hacks/config/fireworkx.xml.h:9
+#: hacks/config/flag.xml.h:5 hacks/config/flame.xml.h:10
+#: hacks/config/flipflop.xml.h:9 hacks/config/flipscreen3d.xml.h:5
+#: hacks/config/fliptext.xml.h:10 hacks/config/flow.xml.h:10
+#: hacks/config/fluidballs.xml.h:13 hacks/config/flyingtoasters.xml.h:9
+#: hacks/config/fontglide.xml.h:9 hacks/config/forest.xml.h:5
+#: hacks/config/fuzzyflakes.xml.h:14 hacks/config/galaxy.xml.h:7
+#: hacks/config/gears.xml.h:8 hacks/config/gflux.xml.h:12
+#: hacks/config/glblur.xml.h:7 hacks/config/glcells.xml.h:17
+#: hacks/config/gleidescope.xml.h:9 hacks/config/glforestfire.xml.h:10
+#: hacks/config/glhanoi.xml.h:8 hacks/config/glknots.xml.h:7
+#: hacks/config/glmatrix.xml.h:13 hacks/config/glplanet.xml.h:7
+#: hacks/config/glschool.xml.h:13 hacks/config/glslideshow.xml.h:16
+#: hacks/config/glsnake.xml.h:12 hacks/config/gltext.xml.h:9
+#: hacks/config/goop.xml.h:9 hacks/config/grav.xml.h:5
+#: hacks/config/greynetic.xml.h:6 hacks/config/halftone.xml.h:11
+#: hacks/config/halo.xml.h:7 hacks/config/helix.xml.h:7
+#: hacks/config/hopalong.xml.h:14 hacks/config/hyperball.xml.h:7
+#: hacks/config/hypercube.xml.h:6 hacks/config/hypertorus.xml.h:7
+#: hacks/config/hypnowheel.xml.h:11 hacks/config/ifs.xml.h:7
+#: hacks/config/imsmap.xml.h:11 hacks/config/interaggregate.xml.h:6
+#: hacks/config/interference.xml.h:12 hacks/config/intermomentary.xml.h:7
+#: hacks/config/jigglypuff.xml.h:13 hacks/config/jigsaw.xml.h:7
+#: hacks/config/juggle.xml.h:13 hacks/config/juggler3d.xml.h:9
+#: hacks/config/julia.xml.h:10 hacks/config/kaleidescope.xml.h:8
+#: hacks/config/klein.xml.h:6 hacks/config/kumppa.xml.h:6
+#: hacks/config/lament.xml.h:6 hacks/config/laser.xml.h:7
+#: hacks/config/lavalite.xml.h:14 hacks/config/lcdscrub.xml.h:10
+#: hacks/config/lightning.xml.h:5 hacks/config/lisa.xml.h:10
+#: hacks/config/lissie.xml.h:9 hacks/config/lmorph.xml.h:10
+#: hacks/config/lockward.xml.h:6 hacks/config/loop.xml.h:7
+#: hacks/config/maze.xml.h:12 hacks/config/memscroller.xml.h:7
+#: hacks/config/menger.xml.h:6 hacks/config/metaballs.xml.h:7
+#: hacks/config/mirrorblob.xml.h:15 hacks/config/mismunch.xml.h:5
+#: hacks/config/moebius.xml.h:4 hacks/config/moebiusgears.xml.h:5
+#: hacks/config/moire2.xml.h:4 hacks/config/molecule.xml.h:15
+#: hacks/config/morph3d.xml.h:6 hacks/config/mountain.xml.h:5
+#: hacks/config/munch.xml.h:6 hacks/config/nerverot.xml.h:14
+#: hacks/config/noof.xml.h:4 hacks/config/pacman.xml.h:3
+#: hacks/config/penrose.xml.h:6 hacks/config/petri.xml.h:11
+#: hacks/config/phosphor.xml.h:7 hacks/config/piecewise.xml.h:8
+#: hacks/config/pinion.xml.h:9 hacks/config/pipes.xml.h:13
+#: hacks/config/polyhedra.xml.h:77 hacks/config/polyominoes.xml.h:6
+#: hacks/config/polytopes.xml.h:12 hacks/config/popsquares.xml.h:16
+#: hacks/config/providence.xml.h:5 hacks/config/pulsar.xml.h:12
+#: hacks/config/pyro.xml.h:8 hacks/config/qix.xml.h:13
+#: hacks/config/queens.xml.h:3 hacks/config/ripples.xml.h:11
+#: hacks/config/rocks.xml.h:7 hacks/config/rotor.xml.h:7
+#: hacks/config/rotzoomer.xml.h:8 hacks/config/rubik.xml.h:8
+#: hacks/config/sballs.xml.h:7 hacks/config/shadebobs.xml.h:6
+#: hacks/config/sierpinski.xml.h:5 hacks/config/sierpinski3d.xml.h:5
+#: hacks/config/skytentacles.xml.h:11 hacks/config/slidescreen.xml.h:11
+#: hacks/config/slip.xml.h:6 hacks/config/sonar.xml.h:5
+#: hacks/config/speedmine.xml.h:7 hacks/config/sphere.xml.h:4
+#: hacks/config/spheremonics.xml.h:8 hacks/config/spiral.xml.h:6
+#: hacks/config/spotlight.xml.h:8 hacks/config/sproingies.xml.h:5
+#: hacks/config/squiral.xml.h:8 hacks/config/stairs.xml.h:4
+#: hacks/config/starfish.xml.h:8 hacks/config/stonerview.xml.h:4
+#: hacks/config/strange.xml.h:3 hacks/config/substrate.xml.h:14
+#: hacks/config/superquadrics.xml.h:7 hacks/config/swirl.xml.h:6
+#: hacks/config/t3d.xml.h:9 hacks/config/tangram.xml.h:8
+#: hacks/config/thornbird.xml.h:5 hacks/config/topblock.xml.h:13
+#: hacks/config/triangle.xml.h:4 hacks/config/truchet.xml.h:3
+#: hacks/config/twang.xml.h:11 hacks/config/vines.xml.h:4
+#: hacks/config/wander.xml.h:10 hacks/config/whirlygig.xml.h:6
+#: hacks/config/worm.xml.h:5 hacks/config/wormhole.xml.h:7
+#: hacks/config/xflame.xml.h:6 hacks/config/xlyap.xml.h:6
+#: hacks/config/xmatrix.xml.h:12 hacks/config/xrayswarm.xml.h:4
+#: hacks/config/xspirograph.xml.h:7 hacks/config/zoom.xml.h:11
+msgid "Low"
+msgstr ""
+
+#: hacks/config/anemotaxis.xml.h:10 hacks/config/hyperball.xml.h:8
+#: hacks/config/hypercube.xml.h:7
 msgid "Near"
 msgstr ""
 
-#: hacks/config/anemotaxis.xml.h:9
+#: hacks/config/anemotaxis.xml.h:11
 msgid "Searchers"
 msgstr ""
 
-#: hacks/config/anemotaxis.xml.h:11
+#: hacks/config/anemotaxis.xml.h:13
 msgid "Sources"
 msgstr ""
 
-#: hacks/config/ant.xml.h:1
+#: hacks/config/ant.xml.h:2
+#, no-c-format
 msgid ""
 "A cellular automaton that is really a two-dimensional Turing machine: as the "
-"heads (``ants'') walk along the screen, they change pixel values in their "
+"heads (\"ants\") walk along the screen, they change pixel values in their "
 "path. Then, as they pass over changed pixels, their behavior is influenced. "
-"Written by David Bagley."
-msgstr ""
-
-#: hacks/config/ant.xml.h:2
-msgid "Ant"
+"http://en.wikipedia.org/wiki/Langton%27s_ant http://en.wikipedia.org/wiki/"
+"Turing_machine Written by David Bagley; 1997."
 msgstr ""
 
 #: hacks/config/ant.xml.h:3
-msgid "Ant Size"
+msgid "Ant"
 msgstr ""
 
 #: hacks/config/ant.xml.h:4
-msgid "Ants Count"
+msgid "Ant size"
 msgstr ""
 
 #: hacks/config/ant.xml.h:5
-msgid "Draw Eyes"
+msgid "Ants count"
+msgstr ""
+
+#: hacks/config/ant.xml.h:6
+msgid "Draw eyes"
 msgstr ""
 
 #: hacks/config/ant.xml.h:7
-msgid "Four Sided Cells"
-msgstr ""
-
-#: hacks/config/ant.xml.h:8 hacks/config/attraction.xml.h:13
-#: hacks/config/cloudlife.xml.h:7 hacks/config/cube21.xml.h:8
-#: hacks/config/cubenetic.xml.h:11 hacks/config/demon.xml.h:5
-#: hacks/config/discrete.xml.h:3 hacks/config/distort.xml.h:5
-#: hacks/config/fadeplot.xml.h:5 hacks/config/flag.xml.h:4
-#: hacks/config/flow.xml.h:4 hacks/config/fluidballs.xml.h:12
-#: hacks/config/fuzzyflakes.xml.h:10 hacks/config/gleidescope.xml.h:7
-#: hacks/config/halftone.xml.h:8 hacks/config/hopalong.xml.h:13
-#: hacks/config/interference.xml.h:11 hacks/config/julia.xml.h:5
-#: hacks/config/lissie.xml.h:4 hacks/config/loop.xml.h:2
-#: hacks/config/moire.xml.h:4 hacks/config/piecewise.xml.h:5
-#: hacks/config/rd-bomb.xml.h:11 hacks/config/rorschach.xml.h:5
-#: hacks/config/rubik.xml.h:4 hacks/config/sierpinski.xml.h:3
-#: hacks/config/slip.xml.h:3
+msgid "Four sided cells"
+msgstr ""
+
+#: hacks/config/ant.xml.h:10 hacks/config/attraction.xml.h:12
+#: hacks/config/blinkbox.xml.h:7 hacks/config/cloudlife.xml.h:8
+#: hacks/config/cube21.xml.h:9 hacks/config/cubenetic.xml.h:9
+#: hacks/config/demon.xml.h:9 hacks/config/discrete.xml.h:4
+#: hacks/config/distort.xml.h:10 hacks/config/fadeplot.xml.h:6
+#: hacks/config/flag.xml.h:4 hacks/config/flow.xml.h:7
+#: hacks/config/fluidballs.xml.h:12 hacks/config/fuzzyflakes.xml.h:12
+#: hacks/config/glcells.xml.h:14 hacks/config/gleidescope.xml.h:8
+#: hacks/config/halftone.xml.h:10 hacks/config/hopalong.xml.h:13
+#: hacks/config/interference.xml.h:11 hacks/config/julia.xml.h:8
+#: hacks/config/lisa.xml.h:7 hacks/config/lissie.xml.h:6
+#: hacks/config/loop.xml.h:5 hacks/config/moire.xml.h:4
+#: hacks/config/penrose.xml.h:5 hacks/config/piecewise.xml.h:7
+#: hacks/config/rd-bomb.xml.h:11 hacks/config/rdbomb.xml.h:11
+#: hacks/config/rorschach.xml.h:4 hacks/config/rubik.xml.h:7
+#: hacks/config/sierpinski.xml.h:4 hacks/config/slidescreen.xml.h:9
+#: hacks/config/slip.xml.h:5 hacks/config/spotlight.xml.h:7
+#: hacks/config/topblock.xml.h:12 hacks/config/twang.xml.h:10
 msgid "Large"
 msgstr ""
 
-#: hacks/config/ant.xml.h:10
-msgid "Nine Sided Cells"
+#: hacks/config/ant.xml.h:13
+msgid "Nine sided cells"
 msgstr ""
 
-#: hacks/config/ant.xml.h:12
-msgid "Random Cell Shape"
-msgstr ""
+#: hacks/config/ant.xml.h:15
+#, fuzzy
+msgid "Random cell shape"
+msgstr "ランダムなスクリーンセーバー"
 
-#: hacks/config/ant.xml.h:13 hacks/config/speedmine.xml.h:11
-msgid "Sharp Turns"
+#: hacks/config/ant.xml.h:16
+msgid "Sharp turns"
 msgstr ""
 
-#: hacks/config/ant.xml.h:14
-msgid "Six Sided Cells"
+#: hacks/config/ant.xml.h:18
+msgid "Six sided cells"
+msgstr ""
+
+#: hacks/config/ant.xml.h:19 hacks/config/attraction.xml.h:26
+#: hacks/config/blinkbox.xml.h:12 hacks/config/cloudlife.xml.h:13
+#: hacks/config/cube21.xml.h:21 hacks/config/cubenetic.xml.h:21
+#: hacks/config/demon.xml.h:14 hacks/config/discrete.xml.h:10
+#: hacks/config/distort.xml.h:18 hacks/config/fadeplot.xml.h:11
+#: hacks/config/flag.xml.h:9 hacks/config/flow.xml.h:19
+#: hacks/config/fluidballs.xml.h:20 hacks/config/fuzzyflakes.xml.h:23
+#: hacks/config/glcells.xml.h:32 hacks/config/gleidescope.xml.h:14
+#: hacks/config/halftone.xml.h:18 hacks/config/hopalong.xml.h:22
+#: hacks/config/interference.xml.h:19 hacks/config/julia.xml.h:14
+#: hacks/config/lisa.xml.h:15 hacks/config/lissie.xml.h:14
+#: hacks/config/loop.xml.h:12 hacks/config/metaballs.xml.h:16
+#: hacks/config/moire.xml.h:10 hacks/config/penrose.xml.h:11
+#: hacks/config/piecewise.xml.h:15 hacks/config/rd-bomb.xml.h:19
+#: hacks/config/rdbomb.xml.h:19 hacks/config/rorschach.xml.h:9
+#: hacks/config/rubik.xml.h:12 hacks/config/sierpinski.xml.h:11
+#: hacks/config/slidescreen.xml.h:18 hacks/config/slip.xml.h:11
+#: hacks/config/spotlight.xml.h:10 hacks/config/topblock.xml.h:21
+#: hacks/config/twang.xml.h:15
+msgid "Small"
 msgstr ""
 
-#: hacks/config/ant.xml.h:16 hacks/config/attraction.xml.h:27
-#: hacks/config/cloudlife.xml.h:12 hacks/config/cube21.xml.h:17
-#: hacks/config/cubenetic.xml.h:23 hacks/config/demon.xml.h:9
-#: hacks/config/discrete.xml.h:8 hacks/config/distort.xml.h:12
-#: hacks/config/fadeplot.xml.h:9 hacks/config/flag.xml.h:8
-#: hacks/config/flow.xml.h:11 hacks/config/fluidballs.xml.h:19
-#: hacks/config/fuzzyflakes.xml.h:16 hacks/config/gleidescope.xml.h:12
-#: hacks/config/halftone.xml.h:14 hacks/config/hopalong.xml.h:22
-#: hacks/config/interference.xml.h:18 hacks/config/julia.xml.h:9
-#: hacks/config/lissie.xml.h:10 hacks/config/loop.xml.h:8
-#: hacks/config/metaballs.xml.h:14 hacks/config/moire.xml.h:9
-#: hacks/config/piecewise.xml.h:10 hacks/config/rd-bomb.xml.h:18
-#: hacks/config/rorschach.xml.h:8 hacks/config/rubik.xml.h:10
-#: hacks/config/sierpinski.xml.h:8 hacks/config/slip.xml.h:8
-msgid "Small"
+#: hacks/config/ant.xml.h:20
+msgid "Three"
 msgstr ""
 
-#: hacks/config/ant.xml.h:18
-msgid "Three Sided Cells"
+#: hacks/config/ant.xml.h:21
+msgid "Three sided cells"
 msgstr ""
 
-#: hacks/config/ant.xml.h:19 hacks/config/demon.xml.h:12
-#: hacks/config/discrete.xml.h:10 hacks/config/fadeplot.xml.h:11
-#: hacks/config/flag.xml.h:12 hacks/config/flow.xml.h:14
-#: hacks/config/lissie.xml.h:12 hacks/config/loop.xml.h:11
-#: hacks/config/rubik.xml.h:12 hacks/config/sierpinski.xml.h:11
-#: hacks/config/slip.xml.h:11
+#: hacks/config/ant.xml.h:22 hacks/config/demon.xml.h:16
+#: hacks/config/discrete.xml.h:11 hacks/config/flag.xml.h:12
+#: hacks/config/flow.xml.h:21 hacks/config/lissie.xml.h:15
+#: hacks/config/loop.xml.h:13 hacks/config/rubik.xml.h:13
+#: hacks/config/sierpinski.xml.h:13 hacks/config/slip.xml.h:13
 msgid "Timeout"
 msgstr ""
 
-#: hacks/config/ant.xml.h:20
-msgid "Truchet Lines"
+#: hacks/config/ant.xml.h:23
+msgid "Truchet lines"
 msgstr ""
 
-#: hacks/config/ant.xml.h:21
-msgid "Twelve Sided Cells"
+#: hacks/config/ant.xml.h:24
+msgid "Twelve sided cells"
 msgstr ""
 
 #: hacks/config/antinspect.xml.h:1
@@ -1627,49 +2006,13 @@ msgid "AntInspect"
 msgstr ""
 
 #: hacks/config/antinspect.xml.h:2
-msgid "Draw Shadows"
+msgid "Draw shadows"
 msgstr ""
 
 #: hacks/config/antinspect.xml.h:3
 msgid ""
 "Draws a trio of ants moving their spheres around a circle. Written by Blair "
-"Tennessy."
-msgstr ""
-
-#: hacks/config/antinspect.xml.h:5 hacks/config/antmaze.xml.h:4
-#: hacks/config/antspotlight.xml.h:4 hacks/config/atlantis.xml.h:11
-#: hacks/config/atunnel.xml.h:5 hacks/config/blocktube.xml.h:8
-#: hacks/config/boing.xml.h:8 hacks/config/boxed.xml.h:14
-#: hacks/config/bubble3d.xml.h:5 hacks/config/cage.xml.h:3
-#: hacks/config/carousel.xml.h:12 hacks/config/circuit.xml.h:9
-#: hacks/config/cube21.xml.h:13 hacks/config/cubenetic.xml.h:21
-#: hacks/config/cubestorm.xml.h:7 hacks/config/dangerball.xml.h:4
-#: hacks/config/endgame.xml.h:4 hacks/config/engine.xml.h:14
-#: hacks/config/extrusion.xml.h:10 hacks/config/flipflop.xml.h:4
-#: hacks/config/flipscreen3d.xml.h:5 hacks/config/fliptext.xml.h:12
-#: hacks/config/fluidballs.xml.h:17 hacks/config/flurry.xml.h:9
-#: hacks/config/flyingtoasters.xml.h:10 hacks/config/gears.xml.h:6
-#: hacks/config/gflux.xml.h:11 hacks/config/glblur.xml.h:13
-#: hacks/config/gleidescope.xml.h:10 hacks/config/glforestfire.xml.h:13
-#: hacks/config/glhanoi.xml.h:7 hacks/config/glknots.xml.h:16
-#: hacks/config/glmatrix.xml.h:17 hacks/config/glplanet.xml.h:7
-#: hacks/config/glslideshow.xml.h:19 hacks/config/glsnake.xml.h:10
-#: hacks/config/gltext.xml.h:14 hacks/config/hypertorus.xml.h:17
-#: hacks/config/jigglypuff.xml.h:15 hacks/config/juggler3d.xml.h:11
-#: hacks/config/klein.xml.h:6 hacks/config/lament.xml.h:5
-#: hacks/config/lavalite.xml.h:26 hacks/config/menger.xml.h:15
-#: hacks/config/mirrorblob.xml.h:17 hacks/config/moebius.xml.h:6
-#: hacks/config/molecule.xml.h:22 hacks/config/morph3d.xml.h:5
-#: hacks/config/noof.xml.h:4 hacks/config/pinion.xml.h:12
-#: hacks/config/pipes.xml.h:14 hacks/config/polyhedra.xml.h:110
-#: hacks/config/polytopes.xml.h:18 hacks/config/providence.xml.h:4
-#: hacks/config/pulsar.xml.h:14 hacks/config/queens.xml.h:3
-#: hacks/config/rubik.xml.h:6 hacks/config/sballs.xml.h:12
-#: hacks/config/sierpinski3d.xml.h:6 hacks/config/spheremonics.xml.h:18
-#: hacks/config/sproingies.xml.h:4 hacks/config/stairs.xml.h:2
-#: hacks/config/starwars.xml.h:11 hacks/config/superquadrics.xml.h:7
-#: hacks/config/timetunnel.xml.h:9
-msgid "Show Frames-per-Second"
+"Tennessy; 2004."
 msgstr ""
 
 #: hacks/config/antmaze.xml.h:1
@@ -1678,8 +2021,8 @@ msgstr ""
 
 #: hacks/config/antmaze.xml.h:2
 msgid ""
-"Antmaze draws a few views of a few ants walking around in a simple maze. "
-"Written by Blair Tennessy."
+"Draws a few views of a few ants walking around in a simple maze. Written by "
+"Blair Tennessy; 2005."
 msgstr ""
 
 #: hacks/config/antspotlight.xml.h:1
@@ -1688,8 +2031,8 @@ msgstr ""
 
 #: hacks/config/antspotlight.xml.h:2
 msgid ""
-"Antspotlight draws an ant (with a headlight) who walks on top of an image of "
-"your desktop or other image. Written by Blair Tennessy."
+"Draws an ant (with a headlight) who walks on top of an image of your desktop "
+"or other image. Written by Blair Tennessy; 2003."
 msgstr ""
 
 #: hacks/config/apollonian.xml.h:1
@@ -1700,154 +2043,151 @@ msgstr ""
 msgid "Deep"
 msgstr ""
 
-#: hacks/config/apollonian.xml.h:3
+#: hacks/config/apollonian.xml.h:3 hacks/config/flipflop.xml.h:1
 msgid "Depth"
 msgstr ""
 
-#: hacks/config/apollonian.xml.h:4
-msgid "Draw Labels"
+#: hacks/config/apollonian.xml.h:4 hacks/config/tangram.xml.h:2
+msgid "Draw labels"
 msgstr ""
 
 #: hacks/config/apollonian.xml.h:6
-msgid "Include Alternate Geometries"
+#, no-c-format
+msgid ""
+"Draws an Apollonian gasket: a fractal packing of circles with smaller "
+"circles, demonstrating Descartes's theorem. http://en.wikipedia.org/wiki/"
+"Apollonian_gasket http://en.wikipedia.org/wiki/Descartes%27_theorem Written "
+"by Allan R. Wilks and David Bagley; 2002."
 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."
+#: hacks/config/apollonian.xml.h:8
+msgid "Include alternate geometries"
 msgstr ""
 
-#: hacks/config/apollonian.xml.h:10
+#: hacks/config/apollonian.xml.h:11
 msgid "Shallow"
 msgstr ""
 
 #: hacks/config/apple2.xml.h:1
-msgid "Apple ]["
+msgid "Apple2"
 msgstr ""
 
 #: hacks/config/apple2.xml.h:2
-msgid "Basic Programming Mode"
+msgid "Choose display mode randomly"
 msgstr ""
 
-#: hacks/config/apple2.xml.h:3 hacks/config/halo.xml.h:8
-#: hacks/config/imsmap.xml.h:11
-msgid "Random Mode"
-msgstr ""
+#: hacks/config/apple2.xml.h:3
+#, fuzzy
+msgid "Display images"
+msgstr "表示モード"
 
 #: hacks/config/apple2.xml.h:4
-msgid ""
-"Simulates an original Apple ][ Plus computer in all its 1979 glory. It also "
-"reproduces the appearance of display on a color television set of the "
-"period. In \"Text Mode\", it displays the output of a program, or the "
-"contents of a file or URL, as configured on the \"Advanced\" tab of the main "
-"Screensaver Preferences window. In \"Slideshow Mode\", it chooses a number "
-"of images from the image source you configured into XScreenSaver and "
-"displays them within the limitations of the Apple ][ display hardware. (Six "
-"available colors in hi-res mode!) In \"Basic Programming Mode\", a simulated "
-"user types in a BASIC program and runs it. By Trevor Blackwell."
+msgid "Display scrolling text"
 msgstr ""
 
 #: hacks/config/apple2.xml.h:5
-msgid "Slideshow Mode"
+msgid "Run basic programs"
 msgstr ""
 
-#: hacks/config/apple2.xml.h:6
-msgid "Text Mode"
-msgstr ""
-
-#: hacks/config/apple2.xml.h:7 hacks/config/fliptext.xml.h:17
-#: hacks/config/fontglide.xml.h:15 hacks/config/noseguy.xml.h:7
-#: hacks/config/phosphor.xml.h:9 hacks/config/starwars.xml.h:17
-msgid "Text Program"
+#: hacks/config/apple2.xml.h:7
+msgid ""
+"Simulates an original Apple ][ Plus computer in all its 1979 glory. It also "
+"reproduces the appearance of display on a color television set of the "
+"period. In \"Basic Programming Mode\", a simulated user types in a BASIC "
+"program and runs it. In \"Text Mode\", it displays the output of a program, "
+"or the contents of a file or URL. In \"Slideshow Mode\", it chooses random "
+"images and displays them within the limitations of the Apple ][ display "
+"hardware. (Six available colors in hi-res mode!) On X11 systems, This "
+"program is also a fully-functional VT100 emulator. http://en.wikipedia.org/"
+"wiki/Apple_II_series Written by Trevor Blackwell; 2003."
 msgstr ""
 
-#: hacks/config/atlantis.xml.h:1
-msgid "Agressive"
+#: hacks/config/atlantis.xml.h:1 hacks/config/deluxe.xml.h:2
+#: hacks/config/demon.xml.h:2 hacks/config/gears.xml.h:2
+#: hacks/config/lisa.xml.h:2 hacks/config/lissie.xml.h:2
+#: hacks/config/skytentacles.xml.h:2
+msgid "20"
 msgstr ""
 
 #: hacks/config/atlantis.xml.h:2
-msgid "Atlantis"
+msgid ""
+"A 3D animation of a number of sharks, dolphins, and whales. Written by Mark "
+"Kilgard; 1998."
 msgstr ""
 
 #: hacks/config/atlantis.xml.h:3
-msgid "Clear Water"
+msgid "Agressive"
 msgstr ""
 
-#: hacks/config/atlantis.xml.h:5
-msgid "Flat Background"
+#: hacks/config/atlantis.xml.h:4
+msgid "Atlantis"
 msgstr ""
 
-#: hacks/config/atlantis.xml.h:6
-msgid "Gradient Background"
-msgstr ""
+#: hacks/config/atlantis.xml.h:5
+#, fuzzy
+msgid "Clear water"
+msgstr "モードの周期: "
 
 #: hacks/config/atlantis.xml.h:7
-msgid "Number of Sharks"
-msgstr ""
-
-#: hacks/config/atlantis.xml.h:8
-msgid "Shark Proximity"
+msgid "Flat background"
 msgstr ""
 
 #: hacks/config/atlantis.xml.h:9
-msgid "Shark Speed"
+msgid "Gradient background"
 msgstr ""
 
-#: hacks/config/atlantis.xml.h:10
-msgid "Shimmering Water"
+#: hacks/config/atlantis.xml.h:12 hacks/config/boxed.xml.h:16
+#: hacks/config/flyingtoasters.xml.h:10 hacks/config/glschool.xml.h:14
+#: hacks/config/glslideshow.xml.h:17 hacks/config/jigglypuff.xml.h:14
+#: hacks/config/juggle.xml.h:14 hacks/config/mirrorblob.xml.h:17
+#: hacks/config/pipes.xml.h:14 hacks/config/webcollage.xml.h:9
+msgid "None"
 msgstr ""
 
-#: hacks/config/atlantis.xml.h:12
-msgid "Shy"
+#: hacks/config/atlantis.xml.h:13
+msgid "Number of sharks"
 msgstr ""
 
-#: hacks/config/atlantis.xml.h:14 hacks/config/cage.xml.h:5
-#: hacks/config/extrusion.xml.h:12 hacks/config/gears.xml.h:8
-#: hacks/config/glplanet.xml.h:9 hacks/config/glsnake.xml.h:13
-#: hacks/config/gltext.xml.h:16 hacks/config/menger.xml.h:17
-#: hacks/config/mismunch.xml.h:11 hacks/config/molecule.xml.h:24
-#: hacks/config/munch.xml.h:8 hacks/config/providence.xml.h:6
-#: hacks/config/sierpinski3d.xml.h:9 hacks/config/speedmine.xml.h:14
-#: hacks/config/spheremonics.xml.h:21 hacks/config/sproingies.xml.h:7
-#: hacks/config/stairs.xml.h:4 hacks/config/stonerview.xml.h:2
-#: hacks/config/superquadrics.xml.h:9 hacks/config/webcollage.xml.h:8
-msgid "Solid"
+#: hacks/config/atlantis.xml.h:14
+msgid "Shark proximity"
 msgstr ""
 
 #: hacks/config/atlantis.xml.h:15
-msgid ""
-"This is xfishtank writ large: a GL animation of a number of sharks, "
-"dolphins, and whales. The swimming motions are great. Originally written by "
-"Mark Kilgard."
-msgstr ""
-
-#: hacks/config/atlantis.xml.h:16
-msgid "Whale Speed"
-msgstr ""
-
-#: hacks/config/atlantis.xml.h:17 hacks/config/atunnel.xml.h:10
-#: hacks/config/blinkbox.xml.h:10 hacks/config/blocktube.xml.h:13
-#: hacks/config/boing.xml.h:15 hacks/config/boxed.xml.h:17
-#: hacks/config/cage.xml.h:9 hacks/config/crackberg.xml.h:23
-#: hacks/config/cube21.xml.h:28 hacks/config/cubestorm.xml.h:14
-#: hacks/config/dangerball.xml.h:11 hacks/config/extrusion.xml.h:19
-#: hacks/config/flipflop.xml.h:8 hacks/config/flyingtoasters.xml.h:14
-#: hacks/config/gears.xml.h:11 hacks/config/glforestfire.xml.h:20
-#: hacks/config/glhanoi.xml.h:10 hacks/config/glknots.xml.h:23
-#: hacks/config/glplanet.xml.h:15 hacks/config/glsnake.xml.h:15
-#: hacks/config/gltext.xml.h:21 hacks/config/jigglypuff.xml.h:25
-#: hacks/config/juggler3d.xml.h:13 hacks/config/lament.xml.h:9
-#: hacks/config/lavalite.xml.h:32 hacks/config/menger.xml.h:21
-#: hacks/config/mirrorblob.xml.h:23 hacks/config/moebius.xml.h:11
-#: hacks/config/molecule.xml.h:27 hacks/config/pinion.xml.h:15
-#: hacks/config/polyhedra.xml.h:166 hacks/config/providence.xml.h:9
-#: hacks/config/pulsar.xml.h:20 hacks/config/queens.xml.h:7
-#: hacks/config/sballs.xml.h:18 hacks/config/sierpinski3d.xml.h:12
-#: hacks/config/speedmine.xml.h:18 hacks/config/spheremonics.xml.h:26
-#: hacks/config/sproingies.xml.h:10 hacks/config/stairs.xml.h:7
-#: hacks/config/stonerview.xml.h:4 hacks/config/superquadrics.xml.h:12
-#: hacks/config/tangram.xml.h:8
+msgid "Shimmering water"
+msgstr ""
+
+#: hacks/config/atlantis.xml.h:17
+msgid "Shy"
+msgstr ""
+
+#: hacks/config/atlantis.xml.h:19
+msgid "Whale speed"
+msgstr ""
+
+#: hacks/config/atlantis.xml.h:20 hacks/config/atunnel.xml.h:9
+#: hacks/config/blinkbox.xml.h:13 hacks/config/blocktube.xml.h:12
+#: hacks/config/boing.xml.h:15 hacks/config/bouncingcow.xml.h:13
+#: hacks/config/boxed.xml.h:25 hacks/config/cage.xml.h:7
+#: hacks/config/crackberg.xml.h:24 hacks/config/cube21.xml.h:28
+#: hacks/config/cubenetic.xml.h:27 hacks/config/cubestorm.xml.h:18
+#: hacks/config/dangerball.xml.h:15 hacks/config/dnalogo.xml.h:7
+#: hacks/config/extrusion.xml.h:17 hacks/config/flipflop.xml.h:15
+#: hacks/config/flyingtoasters.xml.h:16 hacks/config/gears.xml.h:15
+#: hacks/config/glcells.xml.h:34 hacks/config/glforestfire.xml.h:17
+#: hacks/config/glhanoi.xml.h:12 hacks/config/glknots.xml.h:25
+#: hacks/config/glmatrix.xml.h:21 hacks/config/glplanet.xml.h:13
+#: hacks/config/glschool.xml.h:18 hacks/config/glsnake.xml.h:18
+#: hacks/config/gltext.xml.h:20 hacks/config/jigglypuff.xml.h:28
+#: hacks/config/juggler3d.xml.h:16 hacks/config/lament.xml.h:9
+#: hacks/config/lavalite.xml.h:30 hacks/config/menger.xml.h:20
+#: hacks/config/mirrorblob.xml.h:27 hacks/config/moebiusgears.xml.h:15
+#: hacks/config/molecule.xml.h:27 hacks/config/pinion.xml.h:17
+#: hacks/config/polyhedra.xml.h:169 hacks/config/providence.xml.h:8
+#: hacks/config/queens.xml.h:7 hacks/config/sballs.xml.h:17
+#: hacks/config/sierpinski3d.xml.h:11 hacks/config/speedmine.xml.h:17
+#: hacks/config/spheremonics.xml.h:23 hacks/config/sproingies.xml.h:11
+#: hacks/config/stonerview.xml.h:8 hacks/config/superquadrics.xml.h:14
+#: hacks/config/tangram.xml.h:14 hacks/config/topblock.xml.h:25
 msgid "Wireframe"
 msgstr ""
 
@@ -1856,171 +2196,127 @@ msgid "Attraction"
 msgstr ""
 
 #: hacks/config/attraction.xml.h:2
-msgid "Ball Count"
+msgid "Ball count"
 msgstr ""
 
 #: hacks/config/attraction.xml.h:3
-msgid "Ball Mass"
+msgid "Ball mass"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:4 hacks/config/fluidballs.xml.h:3
+#: hacks/config/attraction.xml.h:4 hacks/config/juggle.xml.h:1
 msgid "Balls"
 msgstr ""
 
 #: hacks/config/attraction.xml.h:5
-msgid "Bounce Off Walls"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:6 hacks/config/hopalong.xml.h:1
-#: hacks/config/interference.xml.h:5 hacks/config/qix.xml.h:2
-#: hacks/config/wander.xml.h:3
-msgid "Color Contrast"
+msgid "Bounce off walls"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:7
-msgid "Environmental Viscosity"
+#: hacks/config/attraction.xml.h:6
+msgid "Environmental viscosity"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:9
-msgid "Filled Splines"
+#: hacks/config/attraction.xml.h:8
+msgid "Filled splines"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:10 hacks/config/carousel.xml.h:7
-#: hacks/config/ccurve.xml.h:9 hacks/config/cloudlife.xml.h:5
-#: hacks/config/cubenetic.xml.h:10 hacks/config/euler2d.xml.h:5
-#: hacks/config/flame.xml.h:9 hacks/config/fliptext.xml.h:9
-#: hacks/config/glslideshow.xml.h:13 hacks/config/goop.xml.h:6
-#: hacks/config/halftone.xml.h:7 hacks/config/hopalong.xml.h:10
-#: hacks/config/hyperball.xml.h:3 hacks/config/hypercube.xml.h:3
-#: hacks/config/interference.xml.h:8 hacks/config/jigglypuff.xml.h:8
-#: hacks/config/kumppa.xml.h:4 hacks/config/lavalite.xml.h:12
-#: hacks/config/nerverot.xml.h:11 hacks/config/petri.xml.h:8
-#: hacks/config/pyro.xml.h:5 hacks/config/qix.xml.h:10
-#: hacks/config/speedmine.xml.h:5 hacks/config/spheremonics.xml.h:6
-#: hacks/config/spiral.xml.h:4 hacks/config/squiral.xml.h:6
-#: hacks/config/superquadrics.xml.h:5 hacks/config/t3d.xml.h:7
-#: hacks/config/twang.xml.h:5 hacks/config/wander.xml.h:8
-#: hacks/config/xmountains.xml.h:17
-msgid "High"
+#: hacks/config/attraction.xml.h:10
+msgid "Ignore screen edges"
 msgstr ""
 
 #: hacks/config/attraction.xml.h:11
-msgid "Ignore Screen Edges"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:12
 msgid "Inward"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:14
-msgid ""
-"Like qix, this uses a simple simple motion model to generate many different "
-"display modes. The control points attract each other up to a certain "
-"distance, and then begin to repel each other. The attraction/repulsion is "
-"proportional to the distance between any two particles, similar to the "
-"strong and weak nuclear forces. One of the most interesting ways to watch "
-"this hack is simply as bouncing balls, because their motions and "
-"interactions with each other are so odd. Sometimes two balls will get into a "
-"tight orbit around each other, to be interrupted later by a third, or by the "
-"edge of the screen. It looks quite chaotic. Written by Jamie Zawinski, based "
-"on Lisp code by John Pezaris."
-msgstr ""
-
-#: hacks/config/attraction.xml.h:15 hacks/config/deluxe.xml.h:5
-#: hacks/config/lmorph.xml.h:7 hacks/config/pedal.xml.h:5
-#: hacks/config/starfish.xml.h:4 hacks/config/whirlygig.xml.h:10
+#: hacks/config/attraction.xml.h:13 hacks/config/deluxe.xml.h:7
+#: hacks/config/lmorph.xml.h:9 hacks/config/pedal.xml.h:5
+#: hacks/config/starfish.xml.h:7 hacks/config/whirlygig.xml.h:5
 msgid "Lines"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:16 hacks/config/blocktube.xml.h:5
-#: hacks/config/braid.xml.h:6 hacks/config/celtic.xml.h:4
-#: hacks/config/crackberg.xml.h:13 hacks/config/cube21.xml.h:9
-#: hacks/config/cynosure.xml.h:5 hacks/config/drift.xml.h:8
-#: hacks/config/eruption.xml.h:11 hacks/config/euler2d.xml.h:6
-#: hacks/config/fiberlamp.xml.h:5 hacks/config/fireflies.xml.h:21
-#: hacks/config/flow.xml.h:6 hacks/config/fontglide.xml.h:8
-#: hacks/config/galaxy.xml.h:5 hacks/config/juggle.xml.h:4
-#: hacks/config/klein.xml.h:4 hacks/config/laser.xml.h:5
-#: hacks/config/menger.xml.h:4 hacks/config/metaballs.xml.h:5
-#: hacks/config/mismunch.xml.h:3 hacks/config/munch.xml.h:4
-#: hacks/config/nerverot.xml.h:13 hacks/config/petri.xml.h:9
-#: hacks/config/polyominoes.xml.h:4 hacks/config/rotor.xml.h:5
-#: hacks/config/shadebobs.xml.h:4 hacks/config/sierpinski3d.xml.h:3
-#: hacks/config/spheremonics.xml.h:7 hacks/config/substrate.xml.h:11
-#: hacks/config/timetunnel.xml.h:6 hacks/config/wander.xml.h:10
-#: hacks/config/whirlwindwarp.xml.h:3
+#: hacks/config/attraction.xml.h:14 hacks/config/blocktube.xml.h:7
+#: hacks/config/braid.xml.h:7 hacks/config/celtic.xml.h:6
+#: hacks/config/cube21.xml.h:11 hacks/config/cynosure.xml.h:5
+#: hacks/config/drift.xml.h:6 hacks/config/eruption.xml.h:13
+#: hacks/config/euler2d.xml.h:6 hacks/config/fiberlamp.xml.h:7
+#: hacks/config/flow.xml.h:9 hacks/config/fontglide.xml.h:8
+#: hacks/config/galaxy.xml.h:6 hacks/config/glcells.xml.h:16
+#: hacks/config/juggle.xml.h:12 hacks/config/klein.xml.h:5
+#: hacks/config/laser.xml.h:6 hacks/config/menger.xml.h:5
+#: hacks/config/metaballs.xml.h:6 hacks/config/mismunch.xml.h:4
+#: hacks/config/munch.xml.h:5 hacks/config/nerverot.xml.h:13
+#: hacks/config/petri.xml.h:10 hacks/config/pipes.xml.h:11
+#: hacks/config/polyominoes.xml.h:5 hacks/config/rotor.xml.h:6
+#: hacks/config/shadebobs.xml.h:5 hacks/config/sierpinski3d.xml.h:4
+#: hacks/config/skytentacles.xml.h:10 hacks/config/slidescreen.xml.h:10
+#: hacks/config/spheremonics.xml.h:7 hacks/config/substrate.xml.h:12
+#: hacks/config/superquadrics.xml.h:6 hacks/config/tangram.xml.h:7
+#: hacks/config/timetunnel.xml.h:6 hacks/config/vermiculate.xml.h:3
+#: hacks/config/wander.xml.h:9 hacks/config/whirlwindwarp.xml.h:3
+#: hacks/config/xlyap.xml.h:5
 msgid "Long"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:17 hacks/config/carousel.xml.h:9
-#: hacks/config/ccurve.xml.h:10 hacks/config/cloudlife.xml.h:8
-#: hacks/config/cubenetic.xml.h:12 hacks/config/euler2d.xml.h:7
-#: hacks/config/flame.xml.h:10 hacks/config/fliptext.xml.h:10
-#: hacks/config/glslideshow.xml.h:16 hacks/config/goop.xml.h:7
-#: hacks/config/halftone.xml.h:9 hacks/config/hopalong.xml.h:14
-#: hacks/config/hyperball.xml.h:6 hacks/config/hypercube.xml.h:5
-#: hacks/config/interference.xml.h:12 hacks/config/jigglypuff.xml.h:11
-#: hacks/config/kumppa.xml.h:6 hacks/config/lavalite.xml.h:14
-#: hacks/config/nerverot.xml.h:14 hacks/config/petri.xml.h:10
-#: hacks/config/pyro.xml.h:7 hacks/config/qix.xml.h:13
-#: hacks/config/speedmine.xml.h:6 hacks/config/spheremonics.xml.h:8
-#: hacks/config/spiral.xml.h:5 hacks/config/squiral.xml.h:8
-#: hacks/config/superquadrics.xml.h:6 hacks/config/t3d.xml.h:8
-#: hacks/config/twang.xml.h:7 hacks/config/wander.xml.h:11
-msgid "Low"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:20
-msgid "Orbital Mode"
+#: hacks/config/attraction.xml.h:18
+msgid "Orbital mode"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:21
+#: hacks/config/attraction.xml.h:19
 msgid "Outward"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:22
+#: hacks/config/attraction.xml.h:20
 msgid "Polygons"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:23 hacks/config/fuzzyflakes.xml.h:13
-#: hacks/config/spotlight.xml.h:3 hacks/config/xplanet.xml.h:55
+#: hacks/config/attraction.xml.h:21 hacks/config/fuzzyflakes.xml.h:18
 msgid "Radius"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:24
-msgid "Repulsion Threshold"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:25 hacks/config/blocktube.xml.h:7
-#: hacks/config/braid.xml.h:10 hacks/config/celtic.xml.h:7
-#: hacks/config/crackberg.xml.h:17 hacks/config/cube21.xml.h:12
-#: hacks/config/cynosure.xml.h:8 hacks/config/drift.xml.h:11
-#: hacks/config/eruption.xml.h:18 hacks/config/euler2d.xml.h:12
-#: hacks/config/fiberlamp.xml.h:7 hacks/config/fireflies.xml.h:34
-#: hacks/config/flow.xml.h:9 hacks/config/galaxy.xml.h:9
-#: hacks/config/juggle.xml.h:7 hacks/config/klein.xml.h:5
-#: hacks/config/laser.xml.h:9 hacks/config/menger.xml.h:14
-#: hacks/config/metaballs.xml.h:12 hacks/config/mismunch.xml.h:8
-#: hacks/config/munch.xml.h:6 hacks/config/nerverot.xml.h:19
-#: hacks/config/petri.xml.h:22 hacks/config/polyominoes.xml.h:9
-#: hacks/config/rotor.xml.h:9 hacks/config/shadebobs.xml.h:8
-#: hacks/config/sierpinski3d.xml.h:5 hacks/config/spheremonics.xml.h:17
-#: hacks/config/substrate.xml.h:14 hacks/config/timetunnel.xml.h:8
-#: hacks/config/wander.xml.h:12 hacks/config/whirlwindwarp.xml.h:6
+#: hacks/config/attraction.xml.h:22
+msgid "Repulsion threshold"
+msgstr ""
+
+#: hacks/config/attraction.xml.h:23 hacks/config/blocktube.xml.h:9
+#: hacks/config/braid.xml.h:12 hacks/config/celtic.xml.h:9
+#: hacks/config/cube21.xml.h:16 hacks/config/cynosure.xml.h:10
+#: hacks/config/drift.xml.h:10 hacks/config/eruption.xml.h:21
+#: hacks/config/euler2d.xml.h:12 hacks/config/fiberlamp.xml.h:10
+#: hacks/config/flow.xml.h:17 hacks/config/galaxy.xml.h:11
+#: hacks/config/glcells.xml.h:29 hacks/config/juggle.xml.h:18
+#: hacks/config/klein.xml.h:7 hacks/config/laser.xml.h:11
+#: hacks/config/menger.xml.h:16 hacks/config/metaballs.xml.h:14
+#: hacks/config/mismunch.xml.h:10 hacks/config/munch.xml.h:8
+#: hacks/config/nerverot.xml.h:19 hacks/config/petri.xml.h:23
+#: hacks/config/pipes.xml.h:19 hacks/config/polyominoes.xml.h:11
+#: hacks/config/rotor.xml.h:11 hacks/config/shadebobs.xml.h:11
+#: hacks/config/sierpinski3d.xml.h:7 hacks/config/skytentacles.xml.h:12
+#: hacks/config/slidescreen.xml.h:13 hacks/config/spheremonics.xml.h:17
+#: hacks/config/substrate.xml.h:16 hacks/config/superquadrics.xml.h:9
+#: hacks/config/timetunnel.xml.h:8 hacks/config/vermiculate.xml.h:4
+#: hacks/config/wander.xml.h:11 hacks/config/whirlwindwarp.xml.h:6
 msgid "Short"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:29
+#: hacks/config/attraction.xml.h:28
 msgid "Splines"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:30 hacks/config/fireflies.xml.h:42
+#: hacks/config/attraction.xml.h:29
 msgid "Tails"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:31 hacks/config/euler2d.xml.h:16
-#: hacks/config/juggle.xml.h:10
-msgid "Trail Length"
+#: hacks/config/attraction.xml.h:30 hacks/config/euler2d.xml.h:16
+#: hacks/config/juggle.xml.h:22
+msgid "Trail length"
+msgstr ""
+
+#: hacks/config/attraction.xml.h:32
+msgid ""
+"Uses a simple simple motion model to generate many different display modes. "
+"The control points attract each other up to a certain distance, and then "
+"begin to repel each other. The attraction/repulsion is proportional to the "
+"distance between any two particles, similar to the strong and weak nuclear "
+"forces. Written by Jamie Zawinski and John Pezaris; 1992."
 msgstr ""
 
 #: hacks/config/atunnel.xml.h:1
@@ -2029,25 +2325,19 @@ msgstr ""
 
 #: hacks/config/atunnel.xml.h:2
 msgid ""
-"Draws an animation of a textured tunnel in GL. Requires OpenGL, and a "
-"machine with fast hardware support for texture maps. Written by Eric "
-"Lassauge and Roman Podobedov."
-msgstr ""
-
-#: hacks/config/atunnel.xml.h:4 hacks/config/distort.xml.h:9
-#: hacks/config/glforestfire.xml.h:10 hacks/config/lament.xml.h:4
-#: hacks/config/sballs.xml.h:6
-msgid "Normal"
+"Draws an animation of a textured tunnel in GL. Written by Eric Lassauge and "
+"Roman Podobedov; 2003."
 msgstr ""
 
-#: hacks/config/atunnel.xml.h:8 hacks/config/cube21.xml.h:24
-#: hacks/config/glforestfire.xml.h:18 hacks/config/lament.xml.h:8
-#: hacks/config/sballs.xml.h:17
-msgid "Untextured"
+#: hacks/config/atunnel.xml.h:5 hacks/config/boing.xml.h:4
+#: hacks/config/crackberg.xml.h:14 hacks/config/glplanet.xml.h:6
+msgid "Lighting"
 msgstr ""
 
-#: hacks/config/atunnel.xml.h:9
-msgid "Use light"
+#: hacks/config/atunnel.xml.h:8 hacks/config/blocktube.xml.h:11
+#: hacks/config/cubenetic.xml.h:25 hacks/config/glmatrix.xml.h:19
+#: hacks/config/lament.xml.h:8 hacks/config/sballs.xml.h:16
+msgid "Textured"
 msgstr ""
 
 #: hacks/config/barcode.xml.h:1
@@ -2056,21 +2346,28 @@ msgid "Barcode"
 msgstr "参照"
 
 #: hacks/config/barcode.xml.h:2
-msgid "Barcode Clock (24 Hour)"
+msgid "Barcode clock (24 hour)"
 msgstr ""
 
 #: hacks/config/barcode.xml.h:3
-msgid "Barcode Clock (AM/PM)"
+msgid "Barcode clock (AM/PM)"
 msgstr ""
 
+#: hacks/config/barcode.xml.h:4
+#, fuzzy
+msgid "Barcode grid"
+msgstr "参照"
+
 #: hacks/config/barcode.xml.h:5
-msgid "Scrolling Barcodes"
+msgid ""
+"Draws a random sequence of colorful barcodes scrolling across your screen. "
+"CONSUME! The barcodes follow the UPC-A, UPC-E, EAN-8 or EAN-13 standards. "
+"http://en.wikipedia.org/wiki/Universal_Product_Code http://en.wikipedia.org/"
+"wiki/European_Article_Number Written by Dan Bornstein; 2003."
 msgstr ""
 
-#: hacks/config/barcode.xml.h:8
-msgid ""
-"This draws a random sequence of colorful barcodes scrolling across your "
-"screen. CONSUME! By Dan Bornstein."
+#: hacks/config/barcode.xml.h:9
+msgid "Scrolling barcodes"
 msgstr ""
 
 #: hacks/config/blaster.xml.h:1
@@ -2081,18 +2378,18 @@ msgstr ""
 msgid ""
 "Draws a simulation of flying space-combat robots (cleverly disguised as "
 "colored circles) doing battle in front of a moving star field. Written by "
-"Jonathan Lin."
+"Jonathan Lin; 1999."
 msgstr ""
 
-#: hacks/config/blaster.xml.h:5 hacks/config/penetrate.xml.h:4
+#: hacks/config/blaster.xml.h:6 hacks/config/penetrate.xml.h:4
 msgid "Lasers"
 msgstr ""
 
-#: hacks/config/blaster.xml.h:7
+#: hacks/config/blaster.xml.h:9
 msgid "Robots"
 msgstr ""
 
-#: hacks/config/blaster.xml.h:10 hacks/config/glplanet.xml.h:11
+#: hacks/config/blaster.xml.h:11 hacks/config/glplanet.xml.h:11
 msgid "Stars"
 msgstr ""
 
@@ -2101,58 +2398,95 @@ msgid "BlinkBox"
 msgstr ""
 
 #: hacks/config/blinkbox.xml.h:2
-msgid "Box Size"
+msgid "Box size"
 msgstr ""
 
 #: hacks/config/blinkbox.xml.h:3
 msgid "Dissolve"
 msgstr ""
 
-#: hacks/config/blinkbox.xml.h:4 hacks/config/phosphor.xml.h:3
+#: hacks/config/blinkbox.xml.h:4 hacks/config/phosphor.xml.h:2
 msgid "Fade"
 msgstr ""
 
-#: hacks/config/blinkbox.xml.h:6
-msgid "Motion Blur"
+#: hacks/config/blinkbox.xml.h:9
+msgid "Motion blur"
 msgstr ""
 
-#: hacks/config/blinkbox.xml.h:7
+#: hacks/config/blinkbox.xml.h:11
 msgid ""
 "Shows a ball contained inside of a bounding box. Colored blocks blink in "
-"when the ball hits the edges. Written by Jeremy English."
+"when the ball hits the sides. Written by Jeremy English; 2003."
 msgstr ""
 
-#: hacks/config/blitspin.xml.h:1
-msgid "90 deg Rotation Speed"
+#: hacks/config/blitspin.xml.h:1 hacks/config/bumps.xml.h:1
+#: hacks/config/decayscreen.xml.h:1 hacks/config/distort.xml.h:1
+#: hacks/config/ripples.xml.h:1 hacks/config/rotzoomer.xml.h:1
+#: hacks/config/slidescreen.xml.h:1 hacks/config/spotlight.xml.h:1
+#: hacks/config/twang.xml.h:1 hacks/config/zoom.xml.h:5
+#, fuzzy
+msgid "10 minutes"
+msgstr "分"
+
+#: hacks/config/blitspin.xml.h:2 hacks/config/bumps.xml.h:2
+#: hacks/config/decayscreen.xml.h:2 hacks/config/distort.xml.h:2
+#: hacks/config/flame.xml.h:2 hacks/config/gleidescope.xml.h:1
+#: hacks/config/glslideshow.xml.h:2 hacks/config/maze.xml.h:2
+#: hacks/config/ripples.xml.h:2 hacks/config/rotzoomer.xml.h:2
+#: hacks/config/slidescreen.xml.h:2 hacks/config/spotlight.xml.h:2
+#: hacks/config/twang.xml.h:2 hacks/config/zoom.xml.h:6
+#, fuzzy
+msgid "10 seconds"
+msgstr "秒間"
+
+#: hacks/config/blitspin.xml.h:3
+msgid "90 degree rotation speed"
 msgstr ""
 
-#: hacks/config/blitspin.xml.h:2
+#: hacks/config/blitspin.xml.h:4
 msgid "Bitmap to rotate"
 msgstr ""
 
-#: hacks/config/blitspin.xml.h:3
+#: hacks/config/blitspin.xml.h:5
 msgid "BlitSpin"
 msgstr ""
 
-#: hacks/config/blitspin.xml.h:5
-msgid "Fuzzy Rotation Speed"
+#: hacks/config/blitspin.xml.h:6 hacks/config/braid.xml.h:3
+#: hacks/config/bsod.xml.h:10 hacks/config/bumps.xml.h:5
+#: hacks/config/cynosure.xml.h:2 hacks/config/decayscreen.xml.h:4
+#: hacks/config/deco.xml.h:4 hacks/config/distort.xml.h:6
+#: hacks/config/drift.xml.h:3 hacks/config/eruption.xml.h:2
+#: hacks/config/euler2d.xml.h:1 hacks/config/galaxy.xml.h:2
+#: hacks/config/glsnake.xml.h:6 hacks/config/hopalong.xml.h:2
+#: hacks/config/klein.xml.h:1 hacks/config/laser.xml.h:2
+#: hacks/config/menger.xml.h:2 hacks/config/metaballs.xml.h:3
+#: hacks/config/mismunch.xml.h:1 hacks/config/moire.xml.h:3
+#: hacks/config/molecule.xml.h:11 hacks/config/munch.xml.h:2
+#: hacks/config/nerverot.xml.h:7 hacks/config/pedal.xml.h:3
+#: hacks/config/polyhedra.xml.h:15 hacks/config/polyominoes.xml.h:1
+#: hacks/config/ripples.xml.h:6 hacks/config/rotzoomer.xml.h:5
+#: hacks/config/shadebobs.xml.h:2 hacks/config/sierpinski3d.xml.h:1
+#: hacks/config/slidescreen.xml.h:4 hacks/config/spheremonics.xml.h:4
+#: hacks/config/spotlight.xml.h:4 hacks/config/starfish.xml.h:4
+#: hacks/config/substrate.xml.h:7 hacks/config/superquadrics.xml.h:2
+#: hacks/config/twang.xml.h:5 hacks/config/vermiculate.xml.h:2
+#: hacks/config/vidwhacker.xml.h:3 hacks/config/wander.xml.h:5
+#: hacks/config/zoom.xml.h:7
+msgid "Duration"
 msgstr ""
 
-#: hacks/config/blitspin.xml.h:6
-msgid "Grab Screen"
+#: hacks/config/blitspin.xml.h:8
+msgid "Fuzzy rotation speed"
 msgstr ""
 
-#: hacks/config/blitspin.xml.h:8
+#: hacks/config/blitspin.xml.h:9
 msgid ""
-"The ``blitspin'' hack repeatedly rotates a bitmap by 90 degrees by using "
-"logical operations: the bitmap is divided into quadrants, and the quadrants "
-"are shifted clockwise. Then the same thing is done again with progressively "
-"smaller quadrants, except that all sub-quadrants of a given size are rotated "
-"in parallel. Written by Jamie Zawinski based on some cool SmallTalk code "
-"seen in in Byte Magazine in 1981. As you watch it, the image appears to "
-"dissolve into static and then reconstitute itself, but rotated. You can "
-"provide the image to use, as an XBM or XPM file, or tell it to grab a screen "
-"image and rotate that."
+"Repeatedly rotates a bitmap by 90 degrees by using logical operations: the "
+"bitmap is divided into quadrants, and the quadrants are shifted clockwise. "
+"Then the same thing is done again with progressively smaller quadrants, "
+"except that all sub-quadrants of a given size are rotated in parallel. As "
+"you watch it, the image appears to dissolve into static and then "
+"reconstitute itself, but rotated. Written by Jamie Zawinski; 1992."
 msgstr ""
 
 #: hacks/config/blocktube.xml.h:1
@@ -2160,40 +2494,30 @@ msgid "BlockTube"
 msgstr ""
 
 #: hacks/config/blocktube.xml.h:2 hacks/config/timetunnel.xml.h:3
-msgid "Color Change Time"
-msgstr ""
+#, fuzzy
+msgid "Color change time"
+msgstr "色"
 
 #: hacks/config/blocktube.xml.h:3
-msgid "Color Hold Time"
-msgstr ""
-
-#: hacks/config/blocktube.xml.h:6
-msgid "Reflective Blocks"
-msgstr ""
-
-#: hacks/config/blocktube.xml.h:10
-msgid "Solid Blocks"
-msgstr ""
+#, fuzzy
+msgid "Color hold time"
+msgstr "色"
 
-#: hacks/config/blocktube.xml.h:12
+#: hacks/config/blocktube.xml.h:4
 msgid ""
-"This hack draws a swirling, falling tunnel of reflective slabs. They fade "
-"from hue to hue. Written by Lars R. Damerow."
+"Draws a swirling, falling tunnel of reflective slabs. They fade from hue to "
+"hue. Written by Lars R. Damerow; 2003."
 msgstr ""
 
 #: hacks/config/boing.xml.h:1
 msgid "Boing"
 msgstr ""
 
-#: hacks/config/boing.xml.h:3 hacks/config/boxed.xml.h:8
-#: hacks/config/fireflies.xml.h:17 hacks/config/pinion.xml.h:7
+#: hacks/config/boing.xml.h:3 hacks/config/boxed.xml.h:12
+#: hacks/config/glcells.xml.h:12 hacks/config/pinion.xml.h:8
 msgid "Huge"
 msgstr ""
 
-#: hacks/config/boing.xml.h:4 hacks/config/crackberg.xml.h:12
-msgid "Lighting"
-msgstr ""
-
 #: hacks/config/boing.xml.h:5
 msgid "Meridians"
 msgstr ""
@@ -2207,12 +2531,10 @@ msgstr ""
 msgid "Scanlines"
 msgstr "標準"
 
-#: hacks/config/boing.xml.h:9 hacks/config/galaxy.xml.h:10
-#: hacks/config/lisa.xml.h:7 hacks/config/lissie.xml.h:8
-#: hacks/config/loop.xml.h:6 hacks/config/penrose.xml.h:7
-#: hacks/config/pong.xml.h:3 hacks/config/rotor.xml.h:10
-#: hacks/config/rubik.xml.h:8 hacks/config/sproingies.xml.h:5
-#: hacks/config/wander.xml.h:13 hacks/config/worm.xml.h:6
+#: hacks/config/boing.xml.h:9 hacks/config/lisa.xml.h:14
+#: hacks/config/lissie.xml.h:13 hacks/config/loop.xml.h:11
+#: hacks/config/rotor.xml.h:13 hacks/config/rubik.xml.h:11
+#: hacks/config/wander.xml.h:13 hacks/config/worm.xml.h:9
 msgid "Size"
 msgstr ""
 
@@ -2226,11 +2548,12 @@ msgid ""
 "which was written by Dale Luck and RJ Mical during a break at the 1984 "
 "Consumer Electronics Show (or so the legend goes.) This looks like the "
 "original Amiga demo if you turn off \"smoothing\" and \"lighting\" and turn "
-"on \"scanlines\". Written by Jamie Zawinski."
+"on \"scanlines\", and is somewhat more modern otherwise. http://en.wikipedia."
+"org/wiki/Amiga#Boing_Ball Written by Jamie Zawinski; 2005."
 msgstr ""
 
-#: hacks/config/boing.xml.h:14 hacks/config/boxed.xml.h:16
-#: hacks/config/fireflies.xml.h:43 hacks/config/pinion.xml.h:14
+#: hacks/config/boing.xml.h:14 hacks/config/boxed.xml.h:24
+#: hacks/config/pinion.xml.h:16
 msgid "Tiny"
 msgstr ""
 
@@ -2238,105 +2561,101 @@ msgstr ""
 msgid "Bouboule"
 msgstr ""
 
-#: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
+#: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:2
 msgid "Do Red/Blue 3D separation"
 msgstr ""
 
-#: hacks/config/bouboule.xml.h:7
-msgid "Number of Spots"
+#: hacks/config/bouboule.xml.h:9
+msgid "Number of spots"
 msgstr ""
 
-#: hacks/config/bouboule.xml.h:10
+#: hacks/config/bouboule.xml.h:11
 msgid ""
 "This draws what looks like a spinning, deforming balloon with varying-sized "
-"spots painted on its invisible surface. Written by Jeremie Petit."
+"spots painted on its invisible surface. Written by Jeremie Petit; 1997."
 msgstr ""
 
 #: hacks/config/bouncingcow.xml.h:1
-msgid "A Cow. A Trampoline. Together, they fight crime. By Jamie Zawinski."
+msgid ""
+"A Cow. A Trampoline. Together, they fight crime. Written by Jamie Zawinski; "
+"2003."
 msgstr ""
 
-#: hacks/config/bouncingcow.xml.h:2 hacks/config/boxed.xml.h:1
-#: hacks/config/carousel.xml.h:3 hacks/config/ccurve.xml.h:3
-#: hacks/config/cubestorm.xml.h:1 hacks/config/flyingtoasters.xml.h:3
-#: hacks/config/fontglide.xml.h:1 hacks/config/gears.xml.h:1
-#: hacks/config/gflux.xml.h:1 hacks/config/glknots.xml.h:1
-#: hacks/config/glmatrix.xml.h:1 hacks/config/jigglypuff.xml.h:1
-#: hacks/config/pinion.xml.h:3 hacks/config/polyhedra.xml.h:3
-#: hacks/config/pyro.xml.h:1 hacks/config/rd-bomb.xml.h:6
-#: hacks/config/rocks.xml.h:1 hacks/config/starwars.xml.h:1
-#: hacks/config/wormhole.xml.h:1 hacks/config/xfishtank.xml.h:1
-msgid "Animation Speed"
+#: hacks/config/bouncingcow.xml.h:2
+msgid "Bounce speed"
 msgstr ""
 
 #: hacks/config/bouncingcow.xml.h:3
-msgid "Beefy Cow"
-msgstr ""
-
-#: hacks/config/bouncingcow.xml.h:4
-msgid "Bounce Speed"
-msgstr ""
-
-#: hacks/config/bouncingcow.xml.h:5
 msgid "BouncingCow"
 msgstr ""
 
-#: hacks/config/bouncingcow.xml.h:7
+#: hacks/config/bouncingcow.xml.h:6
 msgid "Herd"
 msgstr ""
 
-#: hacks/config/bouncingcow.xml.h:8
+#: hacks/config/bouncingcow.xml.h:9
 #, fuzzy
 msgid "Moo"
 msgstr "単色"
 
-#: hacks/config/bouncingcow.xml.h:9
-msgid "Number of Cows"
-msgstr ""
-
-#: hacks/config/bouncingcow.xml.h:11
-msgid "Wireframe Cow"
+#: hacks/config/bouncingcow.xml.h:10
+msgid "Number of cows"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:2 hacks/config/fluidballs.xml.h:2
-msgid "Ball Size"
+#: hacks/config/boxed.xml.h:1 hacks/config/fluidballs.xml.h:2
+msgid "Ball size"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:3
+#: hacks/config/boxed.xml.h:2
 msgid "Boxed"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:4
+#: hacks/config/boxed.xml.h:3
 msgid ""
 "Draws a box full of 3D bouncing balls that explode. Written by Sander van "
-"Grieken."
+"Grieken; 2002."
 msgstr ""
 
+#: hacks/config/boxed.xml.h:4
+#, fuzzy
+msgid "Explosion decay"
+msgstr "表示モード"
+
 #: hacks/config/boxed.xml.h:5
 #, fuzzy
-msgid "Explosion Force"
+msgid "Explosion force"
 msgstr "表示モード"
 
-#: hacks/config/boxed.xml.h:9 hacks/config/pipes.xml.h:9
-#: hacks/config/substrate.xml.h:12 hacks/config/wormhole.xml.h:4
-msgid "Lots"
+#: hacks/config/boxed.xml.h:6
+#, fuzzy
+msgid "Explosion momentum"
+msgstr "表示モード"
+
+#: hacks/config/boxed.xml.h:10 hacks/config/xmatrix.xml.h:6
+msgid "Full"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:10 hacks/config/cubestorm.xml.h:5
-#: hacks/config/fontglide.xml.h:9 hacks/config/glknots.xml.h:6
-#: hacks/config/polyhedra.xml.h:84
-msgid "Motion Speed"
+#: hacks/config/boxed.xml.h:14 hacks/config/circuit.xml.h:8
+#: hacks/config/glschool.xml.h:12 hacks/config/julia.xml.h:9
+#: hacks/config/mountain.xml.h:4 hacks/config/pipes.xml.h:12
+#: hacks/config/sproingies.xml.h:4 hacks/config/substrate.xml.h:13
+#: hacks/config/wormhole.xml.h:6
+msgid "Lots"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:11
+#: hacks/config/boxed.xml.h:17
 msgid "Nuke"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:12
-msgid "Number of Balls"
+#: hacks/config/boxed.xml.h:18 hacks/config/fluidballs.xml.h:16
+msgid "Number of balls"
+msgstr ""
+
+#: hacks/config/boxed.xml.h:19
+msgid "Pop!"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:13 hacks/config/hopalong.xml.h:18
+#: hacks/config/boxed.xml.h:20 hacks/config/hopalong.xml.h:18
 msgid "Popcorn"
 msgstr ""
 
@@ -2353,40 +2672,44 @@ msgid "Boxes"
 msgstr ""
 
 #: hacks/config/boxfit.xml.h:4
-msgid "Boxes Only"
+msgid "Boxes only"
 msgstr ""
 
 #: hacks/config/boxfit.xml.h:5
-msgid "Boxes or Circles"
+msgid "Boxes or circles"
 msgstr ""
 
 #: hacks/config/boxfit.xml.h:6
-msgid "Circles Only"
+msgid "Circles only"
 msgstr ""
 
 #: hacks/config/boxfit.xml.h:7
-msgid "Color Gradient"
+msgid "Color gradient"
 msgstr ""
 
 #: hacks/config/boxfit.xml.h:9
 #, fuzzy
-msgid "Grab Images"
+msgid "Grab images"
 msgstr "デスクトップ画像を操作対象にする"
 
 #: hacks/config/boxfit.xml.h:10
-msgid "Grow By"
+msgid "Grow by"
 msgstr ""
 
-#: hacks/config/boxfit.xml.h:11
+#: hacks/config/boxfit.xml.h:13
 msgid ""
 "Packs the screen with growing squares or circles, colored according to a "
 "horizontal or vertical gradient, or according to the colors of the desktop "
 "or a loaded image file. The objects grow until they touch, then stop. When "
 "the screen is full, they shrink away and the process restarts. Written by "
-"Jamie Zawinski."
+"Jamie Zawinski; 2005."
 msgstr ""
 
-#: hacks/config/boxfit.xml.h:13 hacks/config/xearth.xml.h:23
+#: hacks/config/boxfit.xml.h:14
+msgid "Peek at underlying images"
+msgstr ""
+
+#: hacks/config/boxfit.xml.h:16
 msgid "Spacing"
 msgstr ""
 
@@ -2397,163 +2720,146 @@ msgstr ""
 #: hacks/config/braid.xml.h:2
 msgid ""
 "Draws random color-cycling inter-braided concentric circles. Written by John "
-"Neil."
-msgstr ""
-
-#: hacks/config/braid.xml.h:3 hacks/config/bsod.xml.h:9
-#: hacks/config/coral.xml.h:6 hacks/config/cynosure.xml.h:3
-#: hacks/config/deco.xml.h:4 hacks/config/drift.xml.h:2
-#: hacks/config/epicycle.xml.h:3 hacks/config/eruption.xml.h:3
-#: hacks/config/euler2d.xml.h:1 hacks/config/flame.xml.h:5
-#: hacks/config/galaxy.xml.h:2 hacks/config/glsnake.xml.h:5
-#: hacks/config/helix.xml.h:3 hacks/config/hopalong.xml.h:2
-#: hacks/config/imsmap.xml.h:6 hacks/config/klein.xml.h:1
-#: hacks/config/laser.xml.h:2 hacks/config/menger.xml.h:2
-#: hacks/config/metaballs.xml.h:3 hacks/config/mismunch.xml.h:1
-#: hacks/config/moire.xml.h:3 hacks/config/molecule.xml.h:10
-#: hacks/config/munch.xml.h:2 hacks/config/nerverot.xml.h:8
-#: hacks/config/pedal.xml.h:3 hacks/config/polyhedra.xml.h:16
-#: hacks/config/polyominoes.xml.h:1 hacks/config/rorschach.xml.h:3
-#: hacks/config/rotzoomer.xml.h:5 hacks/config/shadebobs.xml.h:2
-#: hacks/config/sierpinski3d.xml.h:1 hacks/config/spheremonics.xml.h:4
-#: hacks/config/starfish.xml.h:2 hacks/config/substrate.xml.h:6
-#: hacks/config/vidwhacker.xml.h:3 hacks/config/wander.xml.h:7
-#: hacks/config/xspirograph.xml.h:3
-msgid "Duration"
+"Neil; 1997."
 msgstr ""
 
-#: hacks/config/braid.xml.h:5 hacks/config/epicycle.xml.h:7
+#: hacks/config/braid.xml.h:6 hacks/config/epicycle.xml.h:7
 #: hacks/config/nerverot.xml.h:12
-msgid "Line Thickness"
+msgid "Line thickness"
 msgstr ""
 
-#: hacks/config/braid.xml.h:8
-msgid "Max Rings"
+#: hacks/config/braid.xml.h:11
+msgid "Number of rings"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:1 hacks/config/molecule.xml.h:1
-#: hacks/config/vidwhacker.xml.h:1
+#: hacks/config/bsod.xml.h:1 hacks/config/m6502.xml.h:1
+#: hacks/config/molecule.xml.h:1 hacks/config/vidwhacker.xml.h:1
 msgid "2 minutes"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:2 hacks/config/molecule.xml.h:2
+#: hacks/config/bsod.xml.h:2 hacks/config/carousel.xml.h:2
+#: hacks/config/m6502.xml.h:2 hacks/config/molecule.xml.h:2
 msgid "5 seconds"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:3
-msgid "AmigaDOS"
+msgid "ATM"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:4
-msgid "Apple II"
+msgid "AmigaDOS"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:5
-msgid "Atari"
+msgid "Apple ]["
 msgstr ""
 
 #: hacks/config/bsod.xml.h:6
-msgid "BSD"
+msgid "Atari"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:7
-msgid "BSOD"
+msgid "BSD"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:8
-msgid ""
-"BSOD stands for ``Blue Screen of Death.'' The finest in personal computer "
-"emulation, this hack simulates popular screen savers from a number of less "
-"robust operating systems. Written by Jamie Zawinski."
+msgid "BSOD"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:10
-msgid "HPUX"
+#: hacks/config/bsod.xml.h:9
+msgid ""
+"BSOD stands for \"Blue Screen of Death\". The finest in personal computer "
+"emulation, BSOD simulates popular screen savers from a number of less robust "
+"operating systems. Written by Jamie Zawinski; 1998."
 msgstr ""
 
 #: hacks/config/bsod.xml.h:11
-msgid "HVX/GCOS6"
+msgid "HPUX"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:12
-msgid "Linux (fsck)"
+msgid "HVX/GCOS6"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:13
-msgid "Linux (hppa)"
+msgid "Linux (fsck)"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:14
-msgid "Linux (sparc)"
+msgid "Linux (hppa)"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:15
-msgid "MS-DOS"
+msgid "Linux (sparc)"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:16
-msgid "Mac Bomb"
+msgid "MS-DOS"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:17
-msgid "MacOS X"
+msgid "Mac bomb"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:18
-msgid "MacsBug"
+msgid "MacOS X"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:19
-msgid "NCD X Terminal  "
+msgid "MacsBug"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:20
-msgid "Nvidia"
+msgid "NCD X Terminal  "
 msgstr ""
 
 #: hacks/config/bsod.xml.h:21
-msgid "OS/2"
+msgid "NVidia"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:22
-msgid "OS/390"
+msgid "OS/2"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:23
-msgid "SCO"
+msgid "OS/390"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:24
-msgid "Sad Mac"
+msgid "SCO"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:25
+msgid "Sad Mac"
+msgstr ""
+
+#: hacks/config/bsod.xml.h:27
 msgid "Solaris"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:26
+#: hacks/config/bsod.xml.h:28
 msgid "Tru64"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:27
+#: hacks/config/bsod.xml.h:29
 msgid "VMS"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:28
+#: hacks/config/bsod.xml.h:30
 msgid "Windows 2000  "
 msgstr ""
 
-#: hacks/config/bsod.xml.h:29
+#: hacks/config/bsod.xml.h:31
 msgid "Windows 3.1"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:30
+#: hacks/config/bsod.xml.h:32
 msgid "Windows NT"
 msgstr ""
 
 #: hacks/config/bubble3d.xml.h:1
 #, fuzzy
-msgid "Bubble Color"
+msgid "Bubble color"
 msgstr "DirectColor"
 
 #: hacks/config/bubble3d.xml.h:2
@@ -2563,60 +2869,59 @@ msgstr ""
 #: hacks/config/bubble3d.xml.h:3
 msgid ""
 "Draws a stream of rising, undulating 3D bubbles, rising toward the top of "
-"the screen, with nice specular reflections. Written by Richard Jones."
+"the screen, with transparency and specular reflections. Written by Richard "
+"Jones; 1998."
 msgstr ""
 
 #: hacks/config/bubble3d.xml.h:8
-msgid "Transparent Bubbles"
+msgid "Transparent bubbles"
 msgstr ""
 
-#: hacks/config/bubbles.xml.h:1 hacks/config/xfishtank.xml.h:2
+#: hacks/config/bubbles.xml.h:1
 msgid "Bubbles"
 msgstr ""
 
 #: hacks/config/bubbles.xml.h:2
-msgid "Bubbles Fall"
-msgstr ""
+#, fuzzy
+msgid "Bubbles fall"
+msgstr "DirectColor"
 
 #: hacks/config/bubbles.xml.h:3
-msgid "Bubbles Float"
-msgstr ""
+#, fuzzy
+msgid "Bubbles float"
+msgstr "DirectColor"
 
 #: hacks/config/bubbles.xml.h:4
-msgid "Bubbles Rise"
-msgstr ""
+#, fuzzy
+msgid "Bubbles rise"
+msgstr "DirectColor"
 
 #: hacks/config/bubbles.xml.h:5
-msgid "Bubbles exist in three dimensions"
-msgstr ""
-
-#: hacks/config/bubbles.xml.h:6
 msgid "Don't hide bubbles when they pop"
 msgstr ""
 
-#: hacks/config/bubbles.xml.h:7
-msgid "Draw circles instead of pixmap bubbles"
+#: hacks/config/bubbles.xml.h:6
+msgid "Draw circles instead of bubble images"
 msgstr ""
 
 #: hacks/config/bubbles.xml.h:9
-msgid "Leave Trails"
+msgid "Leave trails"
 msgstr ""
 
 #: hacks/config/bubbles.xml.h:12
 msgid ""
 "This simulates the kind of bubble formation that happens when water boils:"
 "small bubbles appear, and as they get closer to each other, they combine to "
-"form larger bubbles, which eventually pop. Written by James Macnicol."
+"form larger bubbles, which eventually pop. Written by James Macnicol; 1996."
 msgstr ""
 
-#: hacks/config/bumps.xml.h:1
+#: hacks/config/bumps.xml.h:3
 msgid ""
-"A bit like `Spotlight', except that instead of merely exposing part of your "
-"desktop, it creates a bump map from it. Basically, it 3D-izes a roaming "
-"section of your desktop, based on color intensity. Written by Shane Smit."
+"A spotlight roams across an embossed version of your desktop or other "
+"picture. Written by Shane Smit; 1999."
 msgstr ""
 
-#: hacks/config/bumps.xml.h:2
+#: hacks/config/bumps.xml.h:4 hacks/config/mirrorblob.xml.h:7
 msgid "Bumps"
 msgstr ""
 
@@ -2624,113 +2929,97 @@ msgstr ""
 msgid "Cage"
 msgstr ""
 
-#: hacks/config/cage.xml.h:7 hacks/config/cube21.xml.h:22
-msgid "Textured"
-msgstr ""
-
-#: hacks/config/cage.xml.h:8
+#: hacks/config/cage.xml.h:6
 msgid ""
-"This draws Escher's ``Impossible Cage,'' a 3d analog of a moebius strip, and "
-"rotates it in three dimensions. Written by Marcelo Vianna."
+"This draws Escher's \"Impossible Cage\", a 3d analog of a moebius strip, and "
+"rotates it in three dimensions. http://en.wikipedia.org/wiki/"
+"Maurits_Cornelis_Escher Written by Marcelo Vianna; 1998."
 msgstr ""
 
 #: hacks/config/carousel.xml.h:1 hacks/config/coral.xml.h:1
 #: hacks/config/deco.xml.h:1 hacks/config/helix.xml.h:1
-#: hacks/config/imsmap.xml.h:1 hacks/config/jigsaw.xml.h:2
-#: hacks/config/moire.xml.h:1 hacks/config/pedal.xml.h:1
-#: hacks/config/rorschach.xml.h:1 hacks/config/wander.xml.h:2
+#: hacks/config/jigsaw.xml.h:2 hacks/config/moire.xml.h:1
+#: hacks/config/pedal.xml.h:1 hacks/config/rorschach.xml.h:1
 #: hacks/config/xspirograph.xml.h:1
-msgid "1 Minute"
+msgid "1 minute"
 msgstr ""
 
-#: hacks/config/carousel.xml.h:2
-#, fuzzy
-msgid "5 Seconds"
-msgstr "秒間"
+#: hacks/config/carousel.xml.h:3 hacks/config/ccurve.xml.h:3
+msgid "Animation speed"
+msgstr ""
 
 #: hacks/config/carousel.xml.h:4
 msgid "Carousel"
 msgstr ""
 
-#: hacks/config/carousel.xml.h:6 hacks/config/electricsheep.xml.h:7
-#: hacks/config/fliptext.xml.h:8
-msgid "Frame Rate"
-msgstr ""
-
 #: hacks/config/carousel.xml.h:8
 msgid ""
 "Loads several random images, and displays them flying in a circular "
-"formation. The circle changes speed and direction randomly, tilts on its "
-"axis, and the images move in and out. To tell it where to find the images to "
-"display, go to the \"Advanced\" tab on the Screensaver Preferences window. "
-"Select \"Choose Random Images\", and enter your image directory in the text "
-"field right below that. (Note: not the the \"Advanced\" button at the bottom "
-"of this window: the tab at the top of the *other* window.) This program "
-"requires a good video card capable of supporting large textures. Written by "
-"Jamie Zawinski."
+"formation. The formation changes speed and direction randomly, and images "
+"periodically drop out to be replaced by new ones. Written by Jamie Zawinski; "
+"2005."
 msgstr ""
 
 #: hacks/config/carousel.xml.h:10
-msgid "No Tilting"
+msgid "No tilting"
 msgstr ""
 
 #: hacks/config/carousel.xml.h:11
-msgid "Number of Images:"
+msgid "Number of images"
 msgstr ""
 
-#: hacks/config/carousel.xml.h:13 hacks/config/glslideshow.xml.h:20
-msgid "Show Image Titles"
+#: hacks/config/carousel.xml.h:12 hacks/config/glslideshow.xml.h:19
+msgid "Show file names"
 msgstr ""
 
 #: hacks/config/carousel.xml.h:15
-msgid "Tilt In/Out Only"
+msgid "Tilt in/out and left/right"
 msgstr ""
 
 #: hacks/config/carousel.xml.h:16
-msgid "Tilt In/Out and Left/Right"
+msgid "Tilt in/out only"
 msgstr ""
 
 #: hacks/config/carousel.xml.h:17
-msgid "Tilt Left/Right Only"
+msgid "Tilt left/right only"
 msgstr ""
 
 #: hacks/config/carousel.xml.h:18 hacks/config/glslideshow.xml.h:21
-#: hacks/config/mirrorblob.xml.h:21
-msgid "Time until loading a new image:"
+#: hacks/config/mirrorblob.xml.h:24
+msgid "Time until loading a new image"
 msgstr ""
 
 #: hacks/config/carousel.xml.h:19
-msgid "Zoom In/Out"
+msgid "Zoom in/out"
 msgstr ""
 
-#: hacks/config/ccurve.xml.h:1
-msgid "0 seconds"
-msgstr ""
-
-#: hacks/config/ccurve.xml.h:2 hacks/config/polyhedra.xml.h:2
+#: hacks/config/ccurve.xml.h:2 hacks/config/epicycle.xml.h:2
+#: hacks/config/glslideshow.xml.h:5 hacks/config/glsnake.xml.h:2
+#: hacks/config/polyhedra.xml.h:2 hacks/config/starfish.xml.h:2
 #, fuzzy
 msgid "30 seconds"
 msgstr "秒間"
 
 #: hacks/config/ccurve.xml.h:4
-msgid "C Curve"
+msgid "CCurve"
 msgstr ""
 
 #: hacks/config/ccurve.xml.h:5
-msgid "Change Image Every"
+msgid "Change image every"
 msgstr ""
 
 #: hacks/config/ccurve.xml.h:6 hacks/config/coral.xml.h:5
 #: hacks/config/imsmap.xml.h:5 hacks/config/kumppa.xml.h:1
 #: hacks/config/qix.xml.h:6 hacks/config/squiral.xml.h:2
-#: hacks/config/wander.xml.h:4 hacks/config/xmatrix.xml.h:2
+#: hacks/config/superquadrics.xml.h:1 hacks/config/wander.xml.h:2
+#: hacks/config/xmatrix.xml.h:2
 msgid "Density"
 msgstr ""
 
 #: hacks/config/ccurve.xml.h:8
 msgid ""
-"Generates self-similar linear fractals, including the classic ``C Curve.'' "
-"Written by Rick Campbell."
+"Generates self-similar linear fractals, including the classic \"C Curve\". "
+"http://en.wikipedia.org/wiki/Levy_C_curve Written by Rick Campbell; 1999."
 msgstr ""
 
 #: hacks/config/celtic.xml.h:1
@@ -2738,83 +3027,84 @@ msgid "Celtic"
 msgstr ""
 
 #: hacks/config/celtic.xml.h:2
-msgid "Draw Graph"
+msgid "Draw graph"
 msgstr ""
 
-#: hacks/config/celtic.xml.h:5
-msgid "Pause"
-msgstr ""
-
-#: hacks/config/celtic.xml.h:6
+#: hacks/config/celtic.xml.h:8
 msgid ""
-"Repeatedly draws random Celtic cross-stitch patterns. By Max Froumentin."
+"Repeatedly draws random Celtic cross-stitch patterns. http://en.wikipedia."
+"org/wiki/Celtic_knot Written by Max Froumentin; 2005."
 msgstr ""
 
 #: hacks/config/circuit.xml.h:1
-msgid "Animates a number of 3D electronic components. Written by Ben Buxton."
+msgid ""
+"Animates a number of 3D electronic components. Written by Ben Buxton; 2001."
 msgstr ""
 
 #: hacks/config/circuit.xml.h:2
 msgid "Circuit"
 msgstr ""
 
-#: 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:5
+msgid "Directional lighting"
 msgstr ""
 
 #: hacks/config/circuit.xml.h:5
-msgid "Flat Coloring"
+msgid "Flat coloring"
 msgstr ""
 
-#: hacks/config/circuit.xml.h:6
-msgid "Parts"
+#: hacks/config/circuit.xml.h:10 hacks/config/mismunch.xml.h:9
+#: hacks/config/mountain.xml.h:9 hacks/config/pipes.xml.h:16
+#: hacks/config/shadebobs.xml.h:9 hacks/config/sproingies.xml.h:6
+msgid "One"
 msgstr ""
 
-#: hacks/config/circuit.xml.h:7 hacks/config/flipscreen3d.xml.h:4
-#: hacks/config/gleidescope.xml.h:9 hacks/config/glplanet.xml.h:6
-#: hacks/config/ifs.xml.h:10
-msgid "Rotate"
+#: hacks/config/circuit.xml.h:11
+msgid "Parts"
 msgstr ""
 
-#: hacks/config/circuit.xml.h:8 hacks/config/pinion.xml.h:10
-msgid "Rotation Speed"
+#: hacks/config/circuit.xml.h:12 hacks/config/jigglypuff.xml.h:16
+#: hacks/config/pinion.xml.h:12
+msgid "Rotation speed"
 msgstr ""
 
-#: hacks/config/circuit.xml.h:12 hacks/config/cube21.xml.h:18
-#: hacks/config/cubestorm.xml.h:9 hacks/config/dangerball.xml.h:9
-#: hacks/config/engine.xml.h:17 hacks/config/klein.xml.h:9
-#: hacks/config/polyhedra.xml.h:145 hacks/config/whirlygig.xml.h:14
+#: hacks/config/circuit.xml.h:15 hacks/config/cube21.xml.h:22
+#: hacks/config/cubestorm.xml.h:13 hacks/config/dangerball.xml.h:13
+#: hacks/config/engine.xml.h:17 hacks/config/flipflop.xml.h:11
+#: hacks/config/gears.xml.h:12 hacks/config/klein.xml.h:9
+#: hacks/config/moebiusgears.xml.h:13 hacks/config/polyhedra.xml.h:147
 msgid "Spin"
 msgstr ""
 
-#: hacks/config/cloudlife.xml.h:1 hacks/config/demon.xml.h:2
-#: hacks/config/petri.xml.h:1
-msgid "Cell Size"
+#: hacks/config/cloudlife.xml.h:1 hacks/config/demon.xml.h:5
+#: hacks/config/petri.xml.h:1 hacks/config/slidescreen.xml.h:3
+msgid "Cell size"
 msgstr ""
 
 #: hacks/config/cloudlife.xml.h:2
 msgid "CloudLife"
 msgstr ""
 
-#: hacks/config/cloudlife.xml.h:4
+#: hacks/config/cloudlife.xml.h:5
+#, no-c-format
 msgid ""
 "Generates cloud-like formations based on a variant of Conway's Life. The "
 "difference is that cells have a maximum age, after which they count as 3 for "
 "populating the next generation. This makes long-lived formations explode "
-"instead of just sitting there burning a hole in your screen. Written by Don "
-"Marti."
+"instead of just sitting there. http://en.wikipedia.org/wiki/Conway%"
+"27s_Game_of_Life Written by Don Marti; 2003."
 msgstr ""
 
-#: hacks/config/cloudlife.xml.h:6
-msgid "Initial Density"
-msgstr ""
+#: hacks/config/cloudlife.xml.h:7
+#, fuzzy
+msgid "Initial density"
+msgstr "カラーマップをインストールする"
 
-#: hacks/config/cloudlife.xml.h:9
-msgid "Max Age"
+#: hacks/config/cloudlife.xml.h:10
+msgid "Max age"
 msgstr ""
 
-#: hacks/config/cloudlife.xml.h:10
+#: hacks/config/cloudlife.xml.h:11
 msgid "Old"
 msgstr ""
 
@@ -2826,26 +3116,19 @@ msgstr ""
 msgid "Compass"
 msgstr ""
 
-#: hacks/config/compass.xml.h:2 hacks/config/deluxe.xml.h:3
-#: hacks/config/fontglide.xml.h:3 hacks/config/fuzzyflakes.xml.h:5
-#: hacks/config/interference.xml.h:6 hacks/config/kumppa.xml.h:2
-#: hacks/config/nerverot.xml.h:6 hacks/config/piecewise.xml.h:3
-#: hacks/config/pipes.xml.h:4
-msgid "Double Buffer"
-msgstr ""
-
 #: hacks/config/compass.xml.h:6
 msgid ""
 "This draws a compass, with all elements spinning about randomly, for that "
-"``lost and nauseous'' feeling. Written by Jamie Zawinski."
+"\"lost and nauseous\" feeling. Written by Jamie Zawinski; 1999."
 msgstr ""
 
 #: hacks/config/coral.xml.h:2 hacks/config/deco.xml.h:2
-#: hacks/config/glslideshow.xml.h:1 hacks/config/helix.xml.h:2
-#: hacks/config/imsmap.xml.h:2 hacks/config/moire.xml.h:2
-#: hacks/config/pedal.xml.h:2 hacks/config/rorschach.xml.h:2
+#: hacks/config/epicycle.xml.h:1 hacks/config/glslideshow.xml.h:1
+#: hacks/config/helix.xml.h:2 hacks/config/moire.xml.h:2
+#: hacks/config/pedal.xml.h:2 hacks/config/polyhedra.xml.h:1
+#: hacks/config/rorschach.xml.h:2 hacks/config/starfish.xml.h:1
 #: hacks/config/xspirograph.xml.h:2
-msgid "1 Second"
+msgid "1 second"
 msgstr ""
 
 #: hacks/config/coral.xml.h:3
@@ -2853,42 +3136,33 @@ msgid "Coral"
 msgstr ""
 
 #: hacks/config/coral.xml.h:4 hacks/config/fireworkx.xml.h:2
-#: hacks/config/gflux.xml.h:3 hacks/config/glblur.xml.h:2
-#: hacks/config/glmatrix.xml.h:3 hacks/config/imsmap.xml.h:4
-#: hacks/config/lavalite.xml.h:6 hacks/config/pyro.xml.h:2
+#: hacks/config/gflux.xml.h:4 hacks/config/glblur.xml.h:2
+#: hacks/config/glmatrix.xml.h:2 hacks/config/imsmap.xml.h:4
+#: hacks/config/lavalite.xml.h:6 hacks/config/pyro.xml.h:1
 #: hacks/config/qix.xml.h:5 hacks/config/squiral.xml.h:1
-#: hacks/config/xearth.xml.h:4
 msgid "Dense"
 msgstr ""
 
-#: hacks/config/coral.xml.h:10 hacks/config/squiral.xml.h:13
+#: hacks/config/coral.xml.h:12 hacks/config/glcells.xml.h:28
+#: hacks/config/squiral.xml.h:13
 msgid "Seeds"
 msgstr ""
 
-#: hacks/config/coral.xml.h:11
+#: hacks/config/coral.xml.h:14
 msgid ""
-"Simulates coral growth, albeit somewhat slowly. Written by Frederick Roeber."
+"Simulates coral growth, albeit somewhat slowly. Written by Frederick Roeber; "
+"1997."
 msgstr ""
 
-#: hacks/config/coral.xml.h:13 hacks/config/fireworkx.xml.h:10
-#: hacks/config/gflux.xml.h:13 hacks/config/glblur.xml.h:15
-#: hacks/config/glmatrix.xml.h:19 hacks/config/imsmap.xml.h:13
-#: hacks/config/lavalite.xml.h:29 hacks/config/pyro.xml.h:14
-#: hacks/config/qix.xml.h:21 hacks/config/squiral.xml.h:15
-#: hacks/config/xearth.xml.h:24 hacks/config/xmatrix.xml.h:17
+#: hacks/config/coral.xml.h:15 hacks/config/fireworkx.xml.h:12
+#: hacks/config/gflux.xml.h:17 hacks/config/glblur.xml.h:16
+#: hacks/config/glmatrix.xml.h:18 hacks/config/imsmap.xml.h:17
+#: hacks/config/lavalite.xml.h:28 hacks/config/pyro.xml.h:15
+#: hacks/config/qix.xml.h:22 hacks/config/squiral.xml.h:15
+#: hacks/config/xmatrix.xml.h:20
 msgid "Sparse"
 msgstr ""
 
-#: hacks/config/cosmos.xml.h:1
-msgid "Cosmos"
-msgstr ""
-
-#: hacks/config/cosmos.xml.h:2
-msgid ""
-"Draws fireworks and zooming, fading flares. By Tom Campbell. You can find it "
-"at &lt;http://www.cosmosx.org/&gt;"
-msgstr ""
-
 #: hacks/config/crackberg.xml.h:1
 msgid "Confused"
 msgstr ""
@@ -2898,75 +3172,66 @@ msgid "Crackberg"
 msgstr ""
 
 #: hacks/config/crackberg.xml.h:3
-#, fuzzy
-msgid "Display FPS"
-msgstr "表示モード"
-
-#: hacks/config/crackberg.xml.h:4
-msgid "Eagle Nest"
+msgid "Eagle nest"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:5
-msgid "Flat Shading"
+#: hacks/config/crackberg.xml.h:4
+msgid "Earthy coloration"
 msgstr ""
 
 #: hacks/config/crackberg.xml.h:6
-msgid ""
-"Flies through height maps, optionally animating the creation and destruction "
-"of generated tiles; tiles `grow' into place."
+msgid "Flat shading"
 msgstr ""
 
 #: hacks/config/crackberg.xml.h:7
-msgid "Frame Delay"
+msgid ""
+"Flies through height maps, optionally animating the creation and destruction "
+"of generated tiles; tiles `grow' into place. Written by Matus Telgarsky; "
+"2005."
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:8
-msgid "Growing"
+#: hacks/config/crackberg.xml.h:10
+msgid "Hurt me"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:9
-msgid "Ice"
+#: hacks/config/crackberg.xml.h:11
+msgid "Icy coloration"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:10
+#: hacks/config/crackberg.xml.h:12
 msgid "Immediate"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:11 hacks/config/glslideshow.xml.h:14
+#: hacks/config/crackberg.xml.h:13 hacks/config/glslideshow.xml.h:14
 msgid "Letterbox"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:14
-msgid "Mouse Hole"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:15
-msgid "Plain"
+#: hacks/config/crackberg.xml.h:16
+msgid "Mouse hole"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:16 hacks/config/flurry.xml.h:8
-#: hacks/config/fontglide.xml.h:12 hacks/config/jigglypuff.xml.h:13
-#: hacks/config/sballs.xml.h:10 hacks/config/whirlygig.xml.h:12
-msgid "Random"
-msgstr ""
+#: hacks/config/crackberg.xml.h:17 hacks/config/imsmap.xml.h:14
+#, fuzzy
+msgid "Random coloration"
+msgstr "フェードする時間: "
 
-#: hacks/config/crackberg.xml.h:18
+#: hacks/config/crackberg.xml.h:19
 msgid "Subdivisions"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:19
-msgid "Swampy"
+#: hacks/config/crackberg.xml.h:20
+msgid "Swampy coloration"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:20
+#: hacks/config/crackberg.xml.h:21
 msgid "Visibility"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:21
-msgid "Vomit"
+#: hacks/config/crackberg.xml.h:22
+msgid "Vomitous coloration"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:22 hacks/config/flurry.xml.h:11
+#: hacks/config/crackberg.xml.h:23 hacks/config/flurry.xml.h:11
 msgid "Water"
 msgstr ""
 
@@ -2977,68 +3242,56 @@ msgstr ""
 #: hacks/config/critical.xml.h:2
 msgid ""
 "Draws a system of self-organizing lines. It starts out as random squiggles, "
-"but after a few iterations, order begins to appear. Written by Martin Pool."
+"but after a few iterations, order begins to appear. Written by Martin Pool; "
+"1999."
 msgstr ""
 
 #: hacks/config/crystal.xml.h:1
-msgid "Center on Screen"
-msgstr ""
-
-#: hacks/config/crystal.xml.h:2 hacks/config/deluxe.xml.h:1
-#: hacks/config/fadeplot.xml.h:1 hacks/config/flow.xml.h:1
-#: hacks/config/galaxy.xml.h:1 hacks/config/glforestfire.xml.h:1
-#: hacks/config/grav.xml.h:1 hacks/config/julia.xml.h:1
-#: hacks/config/laser.xml.h:1 hacks/config/lisa.xml.h:1
-#: hacks/config/lissie.xml.h:2 hacks/config/morph3d.xml.h:2
-#: hacks/config/mountain.xml.h:1 hacks/config/piecewise.xml.h:2
-#: hacks/config/qix.xml.h:4 hacks/config/rocks.xml.h:2
-#: hacks/config/rotor.xml.h:2 hacks/config/rubik.xml.h:1
-#: hacks/config/shadebobs.xml.h:1 hacks/config/sierpinski.xml.h:1
-#: hacks/config/slip.xml.h:1 hacks/config/spiral.xml.h:1
-#: hacks/config/sproingies.xml.h:1 hacks/config/superquadrics.xml.h:1
-#: hacks/config/swirl.xml.h:1 hacks/config/worm.xml.h:2
-msgid "Count"
+msgid "Center on screen"
 msgstr ""
 
-#: hacks/config/crystal.xml.h:3
+#: hacks/config/crystal.xml.h:2
 msgid "Crystal"
 msgstr ""
 
-#: hacks/config/crystal.xml.h:4
-msgid "Draw Cell"
+#: hacks/config/crystal.xml.h:3
+msgid "Draw cell"
 msgstr ""
 
-#: hacks/config/crystal.xml.h:5 hacks/config/spheremonics.xml.h:3
-#: hacks/config/xearth.xml.h:6
-msgid "Draw Grid"
+#: hacks/config/crystal.xml.h:4 hacks/config/spheremonics.xml.h:3
+msgid "Draw grid"
 msgstr ""
 
 #: hacks/config/crystal.xml.h:7
-msgid "Horizontal Symmetries"
+msgid "Horizontal symmetries"
 msgstr ""
 
-#: hacks/config/crystal.xml.h:9
+#: hacks/config/crystal.xml.h:10
 msgid ""
-"Moving polygons, similar to a kaleidescope (more like a kaleidescope than "
-"the hack called `kaleid,' actually.) This one by Jouk Jansen."
+"Moving polygons, similar to a kaleidoscope. See also the \"Kaleidescope\" "
+"and \"GLeidescope\" screen savers. http://en.wikipedia.org/wiki/Kaleidoscope "
+"Written by Jouk Jansen; 1998."
 msgstr ""
 
-#: hacks/config/crystal.xml.h:14
-msgid "Vertical Symmetries"
+#: hacks/config/crystal.xml.h:12
+msgid "Number of crystals"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:1
-msgid ""
-"Animates a Rubik-like puzzle known as Cube 21 or Square-1. The rotations are "
-"chosen randomly. Requires OpenGL. Written by Vasek Potocek."
+#: hacks/config/crystal.xml.h:15
+msgid "Vertical symmetries"
 msgstr ""
 
 #: hacks/config/cube21.xml.h:2
-msgid "Classic Edition"
+#, no-c-format
+msgid ""
+"Animates a Rubik-like puzzle known as Cube 21 or Square-1. The rotations are "
+"chosen randomly. See also the \"Rubik\" and \"GLSnake\" screen savers. "
+"http://en.wikipedia.org/wiki/Square_One_%28puzzle%29 Written by Vasek "
+"Potocek; 2005."
 msgstr ""
 
 #: hacks/config/cube21.xml.h:3
-msgid "Cube 21"
+msgid "Classic edition"
 msgstr ""
 
 #: hacks/config/cube21.xml.h:4
@@ -3046,54 +3299,55 @@ msgid "Cube size"
 msgstr ""
 
 #: hacks/config/cube21.xml.h:5
-msgid "Delay in ending position"
+msgid "Cube21"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:7
-msgid "Global speed"
+#: hacks/config/cube21.xml.h:13
+msgid "Outlines"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:10
+#: hacks/config/cube21.xml.h:14
 msgid "Random color"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:11 hacks/config/rocks.xml.h:8
+#: hacks/config/cube21.xml.h:15 hacks/config/rocks.xml.h:11
+#: hacks/config/topblock.xml.h:18
 msgid "Rotation"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:14
-msgid "Silver Edition"
-msgstr ""
-
-#: hacks/config/cube21.xml.h:15
-msgid "Six random colors"
+#: hacks/config/cube21.xml.h:18
+msgid "Silver edition"
 msgstr ""
 
 #: hacks/config/cube21.xml.h:19
-msgid "Spinning"
+msgid "Six random colors"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:20
+#: hacks/config/cube21.xml.h:23
 msgid "Start as cube"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:21
+#: hacks/config/cube21.xml.h:24
 msgid "Start as random shape"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:23
+#: hacks/config/cube21.xml.h:25
 msgid "Two random colors"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:25
-msgid "Wander on screen"
+#: hacks/config/cube21.xml.h:26 hacks/config/cubenetic.xml.h:26
+#: hacks/config/cubestorm.xml.h:17 hacks/config/dangerball.xml.h:14
+#: hacks/config/engine.xml.h:20 hacks/config/gears.xml.h:14
+#: hacks/config/glblur.xml.h:18 hacks/config/glforestfire.xml.h:16
+#: hacks/config/glknots.xml.h:24 hacks/config/glplanet.xml.h:12
+#: hacks/config/gltext.xml.h:19 hacks/config/hypnowheel.xml.h:17
+#: hacks/config/klein.xml.h:12 hacks/config/lavalite.xml.h:29
+#: hacks/config/menger.xml.h:19 hacks/config/moebiusgears.xml.h:14
+#: hacks/config/molecule.xml.h:26 hacks/config/polyhedra.xml.h:168
+#: hacks/config/spheremonics.xml.h:22 hacks/config/wander.xml.h:14
+msgid "Wander"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:26
-#, fuzzy
-msgid "Wandering"
-msgstr "標準"
-
 #: hacks/config/cube21.xml.h:27
 msgid "White"
 msgstr ""
@@ -3102,280 +3356,337 @@ msgstr ""
 msgid "Cubenetic"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:3
-msgid "Display Solid Colors"
+#: hacks/config/cubenetic.xml.h:3 hacks/config/glblur.xml.h:3
+#: hacks/config/glknots.xml.h:1 hacks/config/gltext.xml.h:5
+#: hacks/config/menger.xml.h:1 hacks/config/molecule.xml.h:4
+#: hacks/config/spheremonics.xml.h:1
+msgid "Don't rotate"
 msgstr ""
 
 #: hacks/config/cubenetic.xml.h:4
-msgid "Display Surface Patterns"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:5
-msgid "Display Wireframe"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:6 hacks/config/glblur.xml.h:3
-#: hacks/config/glknots.xml.h:2 hacks/config/gltext.xml.h:3
-#: hacks/config/lavalite.xml.h:7 hacks/config/menger.xml.h:1
-#: hacks/config/molecule.xml.h:4 hacks/config/spheremonics.xml.h:1
-#: hacks/config/tangram.xml.h:1
-msgid "Don't Rotate"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:7
 msgid ""
 "Draws a pulsating set of overlapping boxes with ever-chaning blobby patterns "
 "undulating across their surfaces. It's sort of a cubist Lavalite. Written by "
-"Jamie Zawinski."
+"Jamie Zawinski; 2002."
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:14 hacks/config/glblur.xml.h:6
-#: hacks/config/glknots.xml.h:8 hacks/config/gltext.xml.h:7
-#: hacks/config/lavalite.xml.h:19 hacks/config/menger.xml.h:7
-#: hacks/config/molecule.xml.h:15 hacks/config/spheremonics.xml.h:10
+#: hacks/config/cubenetic.xml.h:12 hacks/config/glblur.xml.h:8
+#: hacks/config/glknots.xml.h:9 hacks/config/gltext.xml.h:10
+#: hacks/config/lavalite.xml.h:19 hacks/config/menger.xml.h:9
+#: hacks/config/molecule.xml.h:18 hacks/config/spheremonics.xml.h:10
 msgid "Rotate around X and Y axes"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:15 hacks/config/glblur.xml.h:7
-#: hacks/config/glknots.xml.h:9 hacks/config/gltext.xml.h:8
-#: hacks/config/lavalite.xml.h:20 hacks/config/menger.xml.h:8
-#: hacks/config/molecule.xml.h:16 hacks/config/spheremonics.xml.h:11
+#: hacks/config/cubenetic.xml.h:13 hacks/config/glblur.xml.h:9
+#: hacks/config/glknots.xml.h:10 hacks/config/gltext.xml.h:11
+#: hacks/config/lavalite.xml.h:20 hacks/config/menger.xml.h:10
+#: hacks/config/molecule.xml.h:19 hacks/config/spheremonics.xml.h:11
 msgid "Rotate around X and Z axes"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:16 hacks/config/glblur.xml.h:8
-#: hacks/config/glknots.xml.h:10 hacks/config/gltext.xml.h:9
-#: hacks/config/lavalite.xml.h:21 hacks/config/menger.xml.h:9
-#: hacks/config/molecule.xml.h:17 hacks/config/spheremonics.xml.h:12
+#: hacks/config/cubenetic.xml.h:14 hacks/config/glblur.xml.h:10
+#: hacks/config/glknots.xml.h:11 hacks/config/gltext.xml.h:12
+#: hacks/config/lavalite.xml.h:21 hacks/config/menger.xml.h:11
+#: hacks/config/molecule.xml.h:20 hacks/config/spheremonics.xml.h:12
 msgid "Rotate around X axis"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:17 hacks/config/glblur.xml.h:9
-#: hacks/config/glknots.xml.h:11 hacks/config/gltext.xml.h:10
-#: hacks/config/lavalite.xml.h:22 hacks/config/menger.xml.h:10
-#: hacks/config/molecule.xml.h:18 hacks/config/spheremonics.xml.h:13
+#: hacks/config/cubenetic.xml.h:15 hacks/config/glblur.xml.h:11
+#: hacks/config/glknots.xml.h:12 hacks/config/gltext.xml.h:13
+#: hacks/config/lavalite.xml.h:22 hacks/config/menger.xml.h:12
+#: hacks/config/molecule.xml.h:21 hacks/config/spheremonics.xml.h:13
 msgid "Rotate around Y and Z axes"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:18 hacks/config/glblur.xml.h:10
-#: hacks/config/glknots.xml.h:12 hacks/config/gltext.xml.h:11
-#: hacks/config/lavalite.xml.h:23 hacks/config/menger.xml.h:11
-#: hacks/config/molecule.xml.h:19 hacks/config/spheremonics.xml.h:14
+#: hacks/config/cubenetic.xml.h:16 hacks/config/glblur.xml.h:12
+#: hacks/config/glknots.xml.h:13 hacks/config/gltext.xml.h:14
+#: hacks/config/lavalite.xml.h:23 hacks/config/menger.xml.h:13
+#: hacks/config/molecule.xml.h:22 hacks/config/spheremonics.xml.h:14
 msgid "Rotate around Y axis"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:19 hacks/config/glblur.xml.h:11
-#: hacks/config/glknots.xml.h:13 hacks/config/gltext.xml.h:12
-#: hacks/config/lavalite.xml.h:24 hacks/config/menger.xml.h:12
-#: hacks/config/molecule.xml.h:20 hacks/config/spheremonics.xml.h:15
+#: hacks/config/cubenetic.xml.h:17 hacks/config/glblur.xml.h:13
+#: hacks/config/glknots.xml.h:14 hacks/config/gltext.xml.h:15
+#: hacks/config/lavalite.xml.h:24 hacks/config/menger.xml.h:14
+#: hacks/config/molecule.xml.h:23 hacks/config/spheremonics.xml.h:15
 msgid "Rotate around Z axis"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:20 hacks/config/glblur.xml.h:12
-#: hacks/config/glknots.xml.h:14 hacks/config/gltext.xml.h:13
-#: hacks/config/lavalite.xml.h:25 hacks/config/menger.xml.h:13
-#: hacks/config/molecule.xml.h:21 hacks/config/spheremonics.xml.h:16
+#: hacks/config/cubenetic.xml.h:18 hacks/config/glblur.xml.h:14
+#: hacks/config/glknots.xml.h:15 hacks/config/gltext.xml.h:16
+#: hacks/config/lavalite.xml.h:25 hacks/config/menger.xml.h:15
+#: hacks/config/molecule.xml.h:24 hacks/config/spheremonics.xml.h:16
 msgid "Rotate around all three axes"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:25
-msgid "Surface Pattern Complexity"
+#: hacks/config/cubenetic.xml.h:22
+msgid "Surface pattern complexity"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:26
-msgid "Surface Pattern Overlap"
+#: hacks/config/cubenetic.xml.h:23
+msgid "Surface pattern overlap"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:27
-msgid "Surface Pattern Speed"
+#: hacks/config/cubenetic.xml.h:24
+msgid "Surface pattern speed"
 msgstr ""
 
-#: hacks/config/cubenetic.xml.h:28 hacks/config/cubestorm.xml.h:13
-#: hacks/config/dangerball.xml.h:10 hacks/config/engine.xml.h:20
-#: hacks/config/glblur.xml.h:18 hacks/config/glforestfire.xml.h:19
-#: hacks/config/glknots.xml.h:22 hacks/config/glplanet.xml.h:14
-#: hacks/config/gltext.xml.h:20 hacks/config/lavalite.xml.h:31
-#: hacks/config/menger.xml.h:20 hacks/config/molecule.xml.h:26
-#: hacks/config/polyhedra.xml.h:165 hacks/config/spheremonics.xml.h:25
-#: hacks/config/wander.xml.h:15
-msgid "Wander"
+#: hacks/config/cubestorm.xml.h:1
+msgid "CubeStorm"
 msgstr ""
 
 #: hacks/config/cubestorm.xml.h:2
-msgid "CubeStorm"
+msgid "Cubes"
 msgstr ""
 
 #: hacks/config/cubestorm.xml.h:3
 msgid ""
 "Draws a series of rotating 3D boxes that intersect each other and eventually "
-"fill space. Written by Jamie Zawinski."
+"fill space. Written by Jamie Zawinski; 2003."
 msgstr ""
 
-#: hacks/config/cubestorm.xml.h:6
-msgid "Number of Cubes"
+#: hacks/config/cubestorm.xml.h:14
+msgid "Struts"
 msgstr ""
 
-#: hacks/config/cubestorm.xml.h:10
-msgid "Strut Thickness"
+#: hacks/config/cubicgrid.xml.h:1
+msgid "Big dots"
 msgstr ""
 
-#: hacks/config/cynosure.xml.h:1
+#: hacks/config/cubicgrid.xml.h:2
+#, fuzzy
+msgid "Close"
+msgstr "色"
+
+#: hacks/config/cubicgrid.xml.h:3
+msgid "CubicGrid"
+msgstr ""
+
+#: hacks/config/cubicgrid.xml.h:4
+msgid "Dot spacing"
+msgstr ""
+
+#: hacks/config/cubicgrid.xml.h:5
 msgid ""
-"A hack similar to `greynetic', but less frenetic. The first implementation "
-"was by Stephen Linhart; then Ozymandias G. Desiderata wrote a Java applet "
-"clone. That clone was discovered by Jamie Zawinski, and ported to C for "
-"inclusion here."
+"Draws the view of an observer located inside a rotating 3D lattice of "
+"colored points. Written by Vasek Potocek; 2007."
 msgstr ""
 
-#: hacks/config/cynosure.xml.h:2
-msgid "Cynosure"
+#: hacks/config/cwaves.xml.h:1
+msgid "CWaves"
 msgstr ""
 
-#: hacks/config/dangerball.xml.h:1
-msgid "DangerBall"
+#: hacks/config/cwaves.xml.h:2
+msgid "Color transitions"
 msgstr ""
 
-#: hacks/config/dangerball.xml.h:2
+#: hacks/config/cwaves.xml.h:3 hacks/config/flame.xml.h:3
+#: hacks/config/jigglypuff.xml.h:4
+msgid "Complexity"
+msgstr ""
+
+#: hacks/config/cwaves.xml.h:7
+msgid "Rough"
+msgstr ""
+
+#: hacks/config/cwaves.xml.h:9 hacks/config/glknots.xml.h:19
+#: hacks/config/lavalite.xml.h:27 hacks/config/skytentacles.xml.h:16
+msgid "Smooth"
+msgstr ""
+
+#: hacks/config/cwaves.xml.h:10
 msgid ""
-"Draws a ball that periodically extrudes many random spikes. Ouch! Written by "
-"Jamie Zawinski."
+"This generates a languidly-scrolling vertical field of sinusoidal colors. "
+"Written by Jamie Zawinski; 2007."
 msgstr ""
 
-#: hacks/config/dangerball.xml.h:7
-msgid "Spike Count"
+#: hacks/config/cynosure.xml.h:1
+msgid "Cynosure"
 msgstr ""
 
-#: hacks/config/dangerball.xml.h:8
-msgid "Spike Growth"
+#: hacks/config/cynosure.xml.h:9
+msgid ""
+"Random dropshadowed rectangles pop onto the screen in lockstep. Written by "
+"Ozymandias G. Desiderata, Jamie Zawinski, and Stephen Linhart; 1998."
 msgstr ""
 
-#: hacks/config/decayscreen.xml.h:1
-msgid "DecayScreen"
+#: hacks/config/dangerball.xml.h:1
+msgid "DangerBall"
 msgstr ""
 
-#: hacks/config/decayscreen.xml.h:3
-msgid "Fuzzy Melt"
+#: hacks/config/dangerball.xml.h:2
+msgid ""
+"Draws a ball that periodically extrudes many random spikes. Ouch! Written by "
+"Jamie Zawinski; 2001."
 msgstr ""
 
-#: hacks/config/decayscreen.xml.h:4
-msgid "Melt Away From Center"
+#: hacks/config/dangerball.xml.h:8
+msgid "Number of spikes"
 msgstr ""
 
-#: hacks/config/decayscreen.xml.h:5
-msgid "Melt Down"
+#: hacks/config/dangerball.xml.h:9
+msgid "Ouch"
 msgstr ""
 
-#: hacks/config/decayscreen.xml.h:6
-msgid "Melt Down, Left"
+#: hacks/config/dangerball.xml.h:12
+msgid "Spike growth"
 msgstr ""
 
-#: hacks/config/decayscreen.xml.h:7
-msgid "Melt Down, Right"
+#: hacks/config/decayscreen.xml.h:3
+msgid "DecayScreen"
 msgstr ""
 
-#: hacks/config/decayscreen.xml.h:8
-msgid "Melt Left"
+#: hacks/config/decayscreen.xml.h:6
+msgid "Fuzzy melt"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:9
-msgid "Melt Right"
+msgid "Melt away from center"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:10
-msgid "Melt Towards Center"
+msgid "Melt down"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:11
-msgid "Melt Up"
+msgid "Melt down, left"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:12
-msgid "Melt Up, Left"
+msgid "Melt down, right"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:13
-msgid "Melt Up, Right"
+msgid "Melt left"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:14
-msgid "Melty Melt"
+msgid "Melt right"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:15
-msgid "Random Melt Style"
+msgid "Melt towards center"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:16
-msgid "Shuffle Melt"
+msgid "Melt up"
+msgstr ""
+
+#: hacks/config/decayscreen.xml.h:17
+msgid "Melt up, left"
+msgstr ""
+
+#: hacks/config/decayscreen.xml.h:18
+msgid "Melt up, right"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:19
-msgid "Stretchy Melt"
+msgid "Melty melt"
 msgstr ""
 
 #: hacks/config/decayscreen.xml.h:20
+msgid "Random melt style"
+msgstr ""
+
+#: hacks/config/decayscreen.xml.h:22
+msgid "Shuffle melt"
+msgstr ""
+
+#: hacks/config/decayscreen.xml.h:23
+msgid "Stretchy melt"
+msgstr ""
+
+#: hacks/config/decayscreen.xml.h:24
 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 "
 "best if there's something colorful visible. Warning, if the effect continues "
 "after the screen saver is off, seek medical attention. Written by David "
-"Wald, Vivek Khera, Jamie Zawinski, and Vince Levey."
+"Wald, Vivek Khera, Jamie Zawinski, and Vince Levey; 1993."
 msgstr ""
 
 #: hacks/config/deco.xml.h:3
 msgid "Deco"
 msgstr ""
 
-#: hacks/config/deco.xml.h:6 hacks/config/menger.xml.h:5
-#: hacks/config/sierpinski3d.xml.h:4
-msgid "Max Depth"
-msgstr ""
+#: hacks/config/deco.xml.h:5
+#, fuzzy
+msgid "Golden ratio"
+msgstr "フェードする時間: "
 
 #: hacks/config/deco.xml.h:7
-msgid "Min Size"
+msgid "Maximum depth"
+msgstr ""
+
+#: hacks/config/deco.xml.h:8
+msgid "Minimum height"
 msgstr ""
 
 #: hacks/config/deco.xml.h:9
+msgid "Minimum width"
+msgstr ""
+
+#: hacks/config/deco.xml.h:10
+msgid "Mondrian"
+msgstr ""
+
+#: hacks/config/deco.xml.h:13
+msgid "Smooth colors"
+msgstr ""
+
+#: hacks/config/deco.xml.h:14
 msgid ""
-"This one subdivides and colors rectangles randomly. It looks kind of like "
-"Brady-Bunch-era rec-room wall paneling. (Raven says: ``this screensaver is "
-"ugly enough to peel paint.'') Written by Jamie Zawinski, inspired by Java "
-"code by Michael Bayne."
+"Subdivides and colors rectangles randomly. It looks kind of like Brady-Bunch-"
+"era rec-room wall paneling. http://en.wikipedia.org/wiki/"
+"Piet_Mondrian#Paris_1919.E2.80.931938 Written by Jamie Zawinski and Michael "
+"Bayne; 1997."
 msgstr ""
 
-#: hacks/config/deco.xml.h:11 hacks/config/rd-bomb.xml.h:23
-#: hacks/config/whirlygig.xml.h:20 hacks/config/xearth.xml.h:33
-#: hacks/config/zoom.xml.h:10
-msgid "x"
+#: hacks/config/deluxe.xml.h:1 hacks/config/gflux.xml.h:1
+#: hacks/config/glcells.xml.h:1 hacks/config/glsnake.xml.h:1
+#: hacks/config/hypnowheel.xml.h:1 hacks/config/lavalite.xml.h:1
+#: hacks/config/lisa.xml.h:1 hacks/config/lissie.xml.h:1
+#: hacks/config/skytentacles.xml.h:1
+msgid "1"
 msgstr ""
 
-#: hacks/config/deluxe.xml.h:2
+#: hacks/config/deluxe.xml.h:3
 msgid "Deluxe"
 msgstr ""
 
-#: hacks/config/deluxe.xml.h:12
+#: hacks/config/deluxe.xml.h:4
 msgid ""
-"This draws a pulsing sequence of stars, circles, and lines. It would look "
-"better if it was faster, but as far as I can tell, there is no way to make "
-"this be both: fast, and flicker-free. Yet another reason X sucks. Written by "
-"Jamie Zawinski."
+"Draws a pulsing sequence of transparent stars, circles, and lines. Written "
+"by Jamie Zawinski; 1999."
+msgstr ""
+
+#: hacks/config/deluxe.xml.h:11
+msgid "Shapes"
 msgstr ""
 
-#: hacks/config/deluxe.xml.h:13
+#: hacks/config/deluxe.xml.h:15 hacks/config/mirrorblob.xml.h:26
 msgid "Transparency"
 msgstr ""
 
-#: hacks/config/demon.xml.h:1
+#: hacks/config/demon.xml.h:1 hacks/config/gears.xml.h:1
+#: hacks/config/glhanoi.xml.h:1 hacks/config/interference.xml.h:1
+#: hacks/config/voronoi.xml.h:1
+msgid "0"
+msgstr ""
+
+#: hacks/config/demon.xml.h:4
+#, no-c-format
 msgid ""
 "A cellular automaton that starts with a random field, and organizes it into "
-"stripes and spirals. Written by David Bagley."
+"stripes and spirals. http://en.wikipedia.org/wiki/Maxwell%27s_demon Written "
+"by David Bagley; 1999."
 msgstr ""
 
-#: hacks/config/demon.xml.h:3
+#: hacks/config/demon.xml.h:6
 msgid "Demon"
 msgstr ""
 
-#: hacks/config/demon.xml.h:11
+#: hacks/config/demon.xml.h:15
 msgid "States"
 msgstr ""
 
@@ -3383,156 +3694,96 @@ msgstr ""
 msgid "Discrete"
 msgstr ""
 
-#: hacks/config/discrete.xml.h:5
+#: hacks/config/discrete.xml.h:7
 msgid ""
-"More ``discrete map'' systems, including new variants of Hopalong and Julia, "
-"and a few others. Written by Tim Auckland."
+"More \"discrete map\" systems, including new variants of Hopalong and Julia, "
+"and a few others. Written by Tim Auckland; 1998."
 msgstr ""
 
-#: hacks/config/distort.xml.h:1
-msgid "Black Hole"
+#: hacks/config/distort.xml.h:3
+msgid "Black hole"
 msgstr ""
 
-#: hacks/config/distort.xml.h:2
+#: hacks/config/distort.xml.h:4
 msgid "Bounce"
 msgstr ""
 
-#: hacks/config/distort.xml.h:3
+#: hacks/config/distort.xml.h:5
 msgid "Distort"
 msgstr ""
 
-#: hacks/config/distort.xml.h:6
-msgid "Lens Count"
-msgstr ""
-
-#: hacks/config/distort.xml.h:7
-msgid "Lens Size"
+#: hacks/config/distort.xml.h:8
+msgid ""
+"Grabs an image of the screen, and then lets a transparent lens wander around "
+"the screen, magnifying whatever is underneath. Written by Jonas Munsin; 1998."
 msgstr ""
 
-#: hacks/config/distort.xml.h:8
-msgid "Magnify"
+#: hacks/config/distort.xml.h:11
+msgid "Lens count"
 msgstr ""
 
-#: hacks/config/distort.xml.h:10
-msgid "Reflect"
+#: hacks/config/distort.xml.h:12
+msgid "Lens size"
 msgstr ""
 
 #: hacks/config/distort.xml.h:14
-msgid "Swamp Thing"
+msgid "Magnify"
 msgstr ""
 
 #: hacks/config/distort.xml.h:15
-msgid ""
-"This hack grabs an image of the screen, and then lets a transparent lens "
-"wander around the screen, magnifying whatever is underneath. Written by "
-"Jonas Munsin."
-msgstr ""
-
-#: hacks/config/distort.xml.h:16 hacks/config/moire.xml.h:12
-#: hacks/config/rd-bomb.xml.h:21 hacks/config/ripples.xml.h:16
-#: hacks/config/rotzoomer.xml.h:10 hacks/config/swirl.xml.h:10
-#: hacks/config/twang.xml.h:15 hacks/config/xflame.xml.h:7
-msgid "Use Shared Memory"
+msgid "Normal"
 msgstr ""
 
-#: hacks/config/distort.xml.h:17
-msgid "Vortex"
+#: hacks/config/distort.xml.h:16
+msgid "Reflect"
 msgstr ""
 
-#: hacks/config/drift.xml.h:1
-msgid "Drift"
+#: hacks/config/distort.xml.h:19
+msgid "Swamp thing"
 msgstr ""
 
-#: hacks/config/drift.xml.h:4
-msgid "Fractal Growth"
+#: hacks/config/distort.xml.h:20
+msgid "Vortex"
 msgstr ""
 
-#: hacks/config/drift.xml.h:5
-msgid "High Dimensional Sphere"
+#: hacks/config/dnalogo.xml.h:1
+msgid "DNA Logo"
 msgstr ""
 
-#: hacks/config/drift.xml.h:6
+#: hacks/config/dnalogo.xml.h:2
 msgid ""
-"How could one possibly describe this except as ``drifting recursive fractal "
-"cosmic flames?'' Another fine hack from the Scott Draves collection of fine "
-"hacks."
-msgstr ""
-
-#: hacks/config/drift.xml.h:7
-msgid "Lissojous Figures"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:1
-msgid "1 Gbyte cache"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:2
-msgid "100 Mbyte cache"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:3
-msgid "3 Gbyte cache"
+"DNA Lounge 375 Eleventh Street San Francisco, CA 94107 http://www.dnalounge."
+"com/ Written by Jamie Zawinski; 2001."
 msgstr ""
 
-#: hacks/config/electricsheep.xml.h:4
-msgid "300 Mbyte cache"
+#: hacks/config/dnalogo.xml.h:3
+msgid "Frame Rate"
 msgstr ""
 
-#: hacks/config/electricsheep.xml.h:5
-msgid "ElectricSheep"
+#: hacks/config/drift.xml.h:1
+msgid "Drift"
 msgstr ""
 
-#: hacks/config/electricsheep.xml.h:6
+#: hacks/config/drift.xml.h:2
 msgid ""
-"ElectricSheep is an xscreensaver module that displays mpeg video of an "
-"animated fractal flame. In the background, it contributes render cycles to "
-"the next animation. Periodically it uploades completed frames to the server, "
-"where they are compressed for distribution to all clients. This program is "
-"recommended only if you have a high bandwidth, always-on connection to the "
-"Internet. By Scott Draves. You can find it at &lt;http://www.electricsheep."
-"org/&gt;."
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:8
-msgid "Nickname"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:9
-msgid "No Animation"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:10
-msgid "No Network"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:11
-msgid "Repititions of each Sheep"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:12
-msgid "URL"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:13
-msgid "Unlimited"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:14 hacks/config/gleidescope.xml.h:13
-#: hacks/config/hyperball.xml.h:16 hacks/config/hypercube.xml.h:16
-#: hacks/config/zoom.xml.h:8
-msgid "Zoom"
+"Drifting recursive fractal cosmic flames. Written by Scott Draves; 1997."
 msgstr ""
 
 #: hacks/config/endgame.xml.h:1
 msgid ""
 "Black slips out of three mating nets, but the fourth one holds him tight! A "
-"brilliant composition! Written by Blair Tennessy."
+"brilliant composition! See also the \"Queens\" screen saver. http://en."
+"wikipedia.org/wiki/Chess_endgame Written by Blair Tennessy; 2002."
 msgstr ""
 
 #: hacks/config/endgame.xml.h:2
 msgid "Endgame"
 msgstr ""
 
+#: hacks/config/endgame.xml.h:6
+msgid "Low resolution chess pieces"
+msgstr ""
+
 #: hacks/config/engine.xml.h:1
 msgid "Audi Quattro (5 cylinders)"
 msgstr ""
@@ -3555,32 +3806,34 @@ msgstr ""
 
 #: hacks/config/engine.xml.h:6
 msgid ""
-"Draws a simple model of an engine that floats around the screen. Written by "
-"Ben Buxton and Ed Beroset."
+"Draws a simple model of an engine that floats around the screen. http://en."
+"wikipedia.org/wiki/Internal_combustion_engine#Operation Written by Ben "
+"Buxton and Ed Beroset; 2001."
 msgstr ""
 
 #: hacks/config/engine.xml.h:7
 msgid "Engine"
 msgstr ""
 
-#: hacks/config/engine.xml.h:9
+#: hacks/config/engine.xml.h:10
 msgid "Honda Insight (3 cylinders)"
 msgstr ""
 
-#: hacks/config/engine.xml.h:10
+#: hacks/config/engine.xml.h:11
 msgid "Jaguar XKE (12 cylinders, V)"
 msgstr ""
 
-#: hacks/config/engine.xml.h:11
+#: hacks/config/engine.xml.h:13
 msgid "Porsche 911 (6 cylinders, flat)"
 msgstr ""
 
-#: hacks/config/engine.xml.h:12
-msgid "Random Engine"
-msgstr ""
+#: hacks/config/engine.xml.h:14
+#, fuzzy
+msgid "Random engine"
+msgstr "ランダムなスクリーンセーバー"
 
-#: hacks/config/engine.xml.h:13
-msgid "Show Engine Name"
+#: hacks/config/engine.xml.h:15
+msgid "Show engine name"
 msgstr ""
 
 #: hacks/config/engine.xml.h:18
@@ -3591,78 +3844,73 @@ msgstr ""
 msgid "VW Beetle (4 cylinders, flat)"
 msgstr ""
 
-#: hacks/config/epicycle.xml.h:1
-msgid "1 minute"
-msgstr ""
-
-#: hacks/config/epicycle.xml.h:2 hacks/config/polyhedra.xml.h:1
-msgid "1 second"
-msgstr ""
-
-#: hacks/config/epicycle.xml.h:4
+#: hacks/config/epicycle.xml.h:3
 msgid "Epicycle"
 msgstr ""
 
-#: hacks/config/epicycle.xml.h:6
+#: hacks/config/epicycle.xml.h:5
 msgid "Harmonics"
 msgstr ""
 
-#: hacks/config/epicycle.xml.h:12
+#: hacks/config/epicycle.xml.h:13
 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, "
+"This draws the path traced out by a point on the edge of a circle. That "
+"circle rotates around a point on the rim of another circle, and so on, "
 "several times. These were the basis for the pre-heliocentric model of "
-"planetary motion. Written by James Youngman."
+"planetary motion. http://en.wikipedia.org/wiki/Deferent_and_epicycle Written "
+"by James Youngman; 1998."
 msgstr ""
 
 #: hacks/config/eruption.xml.h:1
-msgid "An exposive version of XFlame. By W.P. van Paassen."
-msgstr ""
-
-#: hacks/config/eruption.xml.h:2
 msgid "Cooling factor"
 msgstr ""
 
-#: hacks/config/eruption.xml.h:4
+#: hacks/config/eruption.xml.h:3
 #, fuzzy
 msgid "Eruption"
 msgstr "説明"
 
-#: hacks/config/eruption.xml.h:7 hacks/config/fluidballs.xml.h:9
-#: hacks/config/qix.xml.h:9 hacks/config/speedmine.xml.h:4
+#: hacks/config/eruption.xml.h:4
+msgid ""
+"Exploding fireworks. See also the \"Fireworkx\", \"XFlame\" and \"Pyro\" "
+"screen savers. Written by W.P. van Paassen; 2003."
+msgstr ""
+
+#: hacks/config/eruption.xml.h:8 hacks/config/fluidballs.xml.h:8
+#: hacks/config/qix.xml.h:9 hacks/config/speedmine.xml.h:5
 msgid "Gravity"
 msgstr ""
 
-#: hacks/config/eruption.xml.h:8
+#: hacks/config/eruption.xml.h:9
 msgid "Heat"
 msgstr ""
 
-#: hacks/config/eruption.xml.h:9
+#: hacks/config/eruption.xml.h:11
 msgid "Inferno"
 msgstr ""
 
-#: hacks/config/eruption.xml.h:10
+#: hacks/config/eruption.xml.h:12
 msgid "Little"
 msgstr ""
 
-#: hacks/config/eruption.xml.h:13
+#: hacks/config/eruption.xml.h:16
 msgid "Negative"
 msgstr ""
 
-#: hacks/config/eruption.xml.h:15
-msgid "Number of Particles"
+#: hacks/config/eruption.xml.h:18
+msgid "Number of particles"
 msgstr ""
 
-#: hacks/config/eruption.xml.h:16
+#: hacks/config/eruption.xml.h:19
 msgid "Pleasant"
 msgstr ""
 
-#: hacks/config/eruption.xml.h:17
+#: hacks/config/eruption.xml.h:20
 msgid "Positive"
 msgstr ""
 
 #: hacks/config/euler2d.xml.h:2
-msgid "Euler2d"
+msgid "Euler2D"
 msgstr ""
 
 #: hacks/config/euler2d.xml.h:10 hacks/config/whirlwindwarp.xml.h:5
@@ -3673,17 +3921,19 @@ msgstr ""
 msgid "Power"
 msgstr ""
 
-#: hacks/config/euler2d.xml.h:13
+#: hacks/config/euler2d.xml.h:15
+#, no-c-format
 msgid ""
-"Simulates two dimensional Incompressible Inviscid Fluid Flow. Written by "
-"Stephen Montgomery-Smith."
+"Simulates two dimensional incompressible inviscid fluid flow. http://en."
+"wikipedia.org/wiki/Euler_equations_%28fluid_dynamics%29 http://en.wikipedia."
+"org/wiki/Inviscid_flow Written by Stephen Montgomery-Smith; 2002."
 msgstr ""
 
 #: hacks/config/extrusion.xml.h:1
 msgid ""
 "Draws various rotating extruded shapes that twist around, lengthen, and turn "
-"inside out. Created by David Konerding from the samples that come with the "
-"GL Extrusion library by Linas Vepstas."
+"inside out. Written by Linas Vepstas, David Konerding, and Jamie Zawinski; "
+"1999."
 msgstr ""
 
 #: hacks/config/extrusion.xml.h:2
@@ -3702,43 +3952,44 @@ msgstr ""
 msgid "Helix 4"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:7
-msgid "Join Offset"
+#: hacks/config/extrusion.xml.h:8
+msgid "Join offset"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:8 hacks/config/polytopes.xml.h:16
-msgid "Random Object"
+#: hacks/config/extrusion.xml.h:10 hacks/config/morph3d.xml.h:10
+#: hacks/config/polytopes.xml.h:18
+msgid "Random object"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:9
+#: hacks/config/extrusion.xml.h:11
 msgid "Screw"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:14
+#: hacks/config/extrusion.xml.h:13
 msgid "Taper"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:15
-msgid "Texture Image"
+#: hacks/config/extrusion.xml.h:14
+msgid "Twistoid"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:16
-msgid "Twistoid"
+#: hacks/config/extrusion.xml.h:15
+msgid "Use flat coloring"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:17 hacks/config/glplanet.xml.h:12
-#: hacks/config/pulsar.xml.h:19
-msgid "Use Flat Coloring"
+#: hacks/config/extrusion.xml.h:16
+msgid "Use lighting"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:18 hacks/config/glplanet.xml.h:13
-msgid "Use Lighting"
+#: hacks/config/fadeplot.xml.h:1 hacks/config/lcdscrub.xml.h:1
+#: hacks/config/spiral.xml.h:2
+msgid "Cycles"
 msgstr ""
 
 #: hacks/config/fadeplot.xml.h:2
 msgid ""
 "Draws what looks like a waving ribbon following a sinusoidal path. Written "
-"by Bas van Gaalen and Charles Vidal."
+"by Bas van Gaalen and Charles Vidal; 1997."
 msgstr ""
 
 #: hacks/config/fadeplot.xml.h:3
@@ -3746,7 +3997,8 @@ msgid "FadePlot"
 msgstr ""
 
 #: hacks/config/fiberlamp.xml.h:1
-msgid "Draws a groovy rotating fiber optic lamp. Written by Tim Auckland."
+msgid ""
+"Draws a groovy rotating fiber optic lamp. Written by Tim Auckland; 2005."
 msgstr ""
 
 #: hacks/config/fiberlamp.xml.h:3
@@ -3758,672 +4010,634 @@ msgstr ""
 msgid "Fibers"
 msgstr "ファイル(_F)"
 
-#: hacks/config/fiberlamp.xml.h:8
-msgid "Time between Knocks"
+#: hacks/config/fiberlamp.xml.h:12
+msgid "Time between knocks"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:1
-msgid "10 times"
+#: hacks/config/fireworkx.xml.h:1 hacks/config/lavalite.xml.h:3
+msgid "Activity"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:2
+#: hacks/config/fireworkx.xml.h:3
 msgid ""
-"A bunch of fireflies chase a few baits around the screen, leaving colorful "
-"tails which get blown around by the wind. Written by Matt Perry. This "
-"program is not included with the XScreenSaver package, but if you don't have "
-"it already, you can find it at &lt;http://somewhere.fscked.org/fireflies/"
-"&gt;."
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:3
-msgid "Add some fireflies"
+"Exploding fireworks. See also the \"Eruption\", \"XFlame\" and \"Pyro\" "
+"screen savers. Written by Rony B Chandran; 2004."
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:4
-msgid "Bait accel"
-msgstr ""
+#: hacks/config/fireworkx.xml.h:4
+#, fuzzy
+msgid "Fireworkx"
+msgstr "ファイル(_F)"
 
-#: hacks/config/fireflies.xml.h:5
-msgid "Bait speed"
+#: hacks/config/fireworkx.xml.h:6
+msgid "Glowing smoke"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:6
-msgid "Color cycle speed"
+#: hacks/config/fireworkx.xml.h:8
+msgid "Light flash"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:7
-msgid "Draw baits"
+#: hacks/config/fireworkx.xml.h:10
+msgid "Shells upward"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:8
-msgid "Faded colors"
+#: hacks/config/flag.xml.h:1
+msgid "Flag"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:9
-msgid "Fast Forward speed"
-msgstr ""
+#: hacks/config/flag.xml.h:10
+#, fuzzy
+msgid "Text for flag"
+msgstr "ファイル(_f)"
 
-#: hacks/config/fireflies.xml.h:10
-msgid "Fireflies"
+#: hacks/config/flag.xml.h:11
+msgid ""
+"This draws a waving colored flag, that undulates its way around the screen. "
+"The flag can contain arbitrary text and images. By default, it displays "
+"either the current system name and OS type, or a picture of \"Bob\". Written "
+"by Charles Vidal and Jamie Zawinski; 1997."
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:11
-msgid "Firefly accel"
+#: hacks/config/flame.xml.h:5
+msgid "Flame"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:12
-msgid "Firefly size"
+#: hacks/config/flame.xml.h:8
+msgid "Iterative fractals. Written by Scott Draves; 1993."
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:13
-msgid "Firefly speed"
+#: hacks/config/flame.xml.h:13
+msgid "Number of fractals"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:14
-msgid "Frames per sec"
+#: hacks/config/flipflop.xml.h:2
+msgid "Draw Sticks"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:15
-msgid "Glow factor"
+#: hacks/config/flipflop.xml.h:3
+msgid "Draw Tiles"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:16
-msgid "Half"
+#: hacks/config/flipflop.xml.h:4
+msgid ""
+"Draws a grid of 3D colored tiles that change positions with each other. "
+"Written by Kevin Ogden and Sergio Gutierrez; 2003."
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:18 hacks/config/fluidballs.xml.h:10
-msgid "Hurricane"
+#: hacks/config/flipflop.xml.h:5
+msgid "FlipFlop"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:19
-msgid "Invisible"
+#: hacks/config/flipflop.xml.h:8
+msgid "Load image"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:20
-msgid "Kill some fireflies"
+#: hacks/config/flipflop.xml.h:12
+msgid "Stopped"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:22
-msgid "Make all swarms do something"
+#: hacks/config/flipflop.xml.h:13
+msgid "Whirlwind"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:23
-msgid "Matrix (pause and rotate)"
+#: hacks/config/flipflop.xml.h:14
+msgid "Width"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:24
-msgid "Maximum baits"
+#: hacks/config/flipscreen3d.xml.h:1
+msgid "FlipScreen3D"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:25
-msgid "Maximum flies"
+#: hacks/config/flipscreen3d.xml.h:3
+msgid ""
+"Grabs an image of the desktop, turns it into a GL texture map, and spins it "
+"around and deforms it in various ways. Written by Ben Buxton and Jamie "
+"Zawinski; 2001."
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:26
-msgid "Merge two swarms"
+#: hacks/config/flipscreen3d.xml.h:6 hacks/config/gleidescope.xml.h:11
+#: hacks/config/glplanet.xml.h:9 hacks/config/ifs.xml.h:11
+#: hacks/config/tangram.xml.h:9 hacks/config/topblock.xml.h:17
+msgid "Rotate"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:27
-msgid "Minimum baits"
+#: hacks/config/fliptext.xml.h:1 hacks/config/starwars.xml.h:4
+msgid "Centered text"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:28
-msgid "Minimum flies"
+#: hacks/config/fliptext.xml.h:2
+msgid ""
+"Draws successive pages of text. The lines flip in and out in a soothing 3D "
+"pattern. Written by Jamie Zawinski; 2005."
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:29
-msgid "Narrow"
+#: hacks/config/fliptext.xml.h:4
+msgid "FlipText"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:30
-msgid "Never"
+#: hacks/config/fliptext.xml.h:5 hacks/config/starwars.xml.h:8
+msgid "Flush left text"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:31
-msgid "Normal swarm motion"
+#: hacks/config/fliptext.xml.h:6 hacks/config/starwars.xml.h:9
+msgid "Flush right text"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:33
-msgid "Opaque"
+#: hacks/config/fliptext.xml.h:7 hacks/config/starwars.xml.h:10
+msgid "Font point size"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:35
-msgid "Split a swarm"
+#: hacks/config/fliptext.xml.h:11
+msgid "Random text alignment"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:36 hacks/config/fluidballs.xml.h:21
-#: hacks/config/glforestfire.xml.h:16
-msgid "Still"
+#: hacks/config/fliptext.xml.h:15
+msgid "Text columns"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:37
-msgid "Swarm bursts into rainbow               "
-msgstr ""
+#: hacks/config/fliptext.xml.h:16 hacks/config/starwars.xml.h:15
+#, fuzzy
+msgid "Text lines"
+msgstr "ファイル(_f)"
 
-#: hacks/config/fireflies.xml.h:38
-msgid "Swarm comes to a halt"
+#: hacks/config/flow.xml.h:1 hacks/config/galaxy.xml.h:1
+#: hacks/config/glforestfire.xml.h:1 hacks/config/julia.xml.h:2
+#: hacks/config/laser.xml.h:1 hacks/config/lisa.xml.h:3
+#: hacks/config/lissie.xml.h:3 hacks/config/piecewise.xml.h:2
+#: hacks/config/qix.xml.h:4 hacks/config/rocks.xml.h:1
+#: hacks/config/rotor.xml.h:1 hacks/config/rubik.xml.h:1
+#: hacks/config/shadebobs.xml.h:1 hacks/config/slip.xml.h:1
+#: hacks/config/spiral.xml.h:1 hacks/config/swirl.xml.h:1
+#: hacks/config/worm.xml.h:1
+msgid "Count"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:39
-msgid "Swarm does loops"
+#: hacks/config/flow.xml.h:2 hacks/config/glschool.xml.h:3
+#: hacks/config/molecule.xml.h:7 hacks/config/spheremonics.xml.h:2
+msgid "Draw bounding box"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:40
-msgid "Swarm hyperspeed"
+#: hacks/config/flow.xml.h:4
+msgid "Flow"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:41
-msgid "Swarm tails glow"
+#: hacks/config/flow.xml.h:8
+msgid "Length of trails"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:44
-msgid "Wide"
+#: hacks/config/flow.xml.h:13
+msgid "Periodic attractors"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:45 hacks/config/fluidballs.xml.h:23
-msgid "Wind"
+#: hacks/config/flow.xml.h:14
+msgid "Ride in the flow"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:46
-msgid "Wind picks up"
+#: hacks/config/flow.xml.h:15
+msgid "Rotating around attractor"
 msgstr ""
 
-#: hacks/config/fireworkx.xml.h:1 hacks/config/lavalite.xml.h:3
-msgid "Activity"
+#: hacks/config/flow.xml.h:16
+msgid "Search for new attractors"
 msgstr ""
 
-#: hacks/config/fireworkx.xml.h:4
-#, fuzzy
-msgid "Fireworkx"
-msgstr "ファイル(_F)"
-
-#: hacks/config/fireworkx.xml.h:5
-msgid "Light Flash"
+#: hacks/config/flow.xml.h:20
+msgid ""
+"Strange attractors formed of flows in a 3D differential equation phase "
+"space. Features the popular attractors described by Lorentz, Roessler, "
+"Birkhoff and Duffing, and can discover entirely new attractors by itself. "
+"http://en.wikipedia.org/wiki/Attractor#Strange_attractor Written by Tim "
+"Auckland; 1998."
 msgstr ""
 
-#: hacks/config/fireworkx.xml.h:6
-msgid ""
-"Pyrotechnics simulation eye-candy, MMX optimized. Turn off Light for speed. "
-"Clicks on the preview window Explodes..! Written by Rony B Chandran. http://"
-"www.ronybc.8k.com"
+#: hacks/config/fluidballs.xml.h:1
+msgid "      Freefall"
 msgstr ""
 
-#: hacks/config/fireworkx.xml.h:7
-msgid "Self Glowing Smoke!"
+#: hacks/config/fluidballs.xml.h:3
+msgid "Clay"
 msgstr ""
 
-#: hacks/config/fireworkx.xml.h:8
-msgid "Shoot The Shells up"
+#: hacks/config/fluidballs.xml.h:5
+msgid "FluidBalls"
 msgstr ""
 
-#: hacks/config/flag.xml.h:1
-msgid "Bitmap for Flag"
+#: hacks/config/fluidballs.xml.h:7 hacks/config/twang.xml.h:7
+msgid "Friction"
 msgstr ""
 
-#: hacks/config/flag.xml.h:3
-msgid "Flag"
+#: hacks/config/fluidballs.xml.h:10
+msgid "Hurricane"
 msgstr ""
 
-#: hacks/config/flag.xml.h:10
-msgid "Text for Flag"
+#: hacks/config/fluidballs.xml.h:11
+msgid "Jupiter"
 msgstr ""
 
-#: hacks/config/flag.xml.h:11
+#: hacks/config/fluidballs.xml.h:15
 msgid ""
-"This draws a waving colored flag, that undulates its way around the screen. "
-"The trick is the flag can contain arbitrary text and images. By default, it "
-"displays either the current system name and OS type, or a picture of "
-"``Bob,'' but you can replace the text or the image with a command-line "
-"option. Written by Charles Vidal and Jamie Zawinski."
+"Models the physics of bouncing balls, or of particles in a gas or fluid, "
+"depending on the settings. If \"Shake Box\" is selected, then every now and "
+"then, the box will be rotated, changing which direction is down (in order to "
+"keep the settled balls in motion.) Written by Peter Birtles and Jamie "
+"Zawinski; 2002."
 msgstr ""
 
-#: hacks/config/flame.xml.h:1 hacks/config/jigsaw.xml.h:1
-#: hacks/config/maze.xml.h:1 hacks/config/wander.xml.h:1
-msgid "0 Seconds"
+#: hacks/config/fluidballs.xml.h:17
+msgid "Rubber"
 msgstr ""
 
-#: hacks/config/flame.xml.h:2 hacks/config/gleidescope.xml.h:1
-#: hacks/config/glslideshow.xml.h:2 hacks/config/maze.xml.h:2
-#: hacks/config/mirrorblob.xml.h:1
-msgid "10 Seconds"
+#: hacks/config/fluidballs.xml.h:18
+msgid "Shake box"
 msgstr ""
 
-#: hacks/config/flame.xml.h:3
-msgid "Another iterative fractal generator. Written by Scott Draves."
+#: hacks/config/fluidballs.xml.h:21
+msgid "Still"
 msgstr ""
 
-#: hacks/config/flame.xml.h:4 hacks/config/jigglypuff.xml.h:4
-msgid "Complexity"
+#: hacks/config/fluidballs.xml.h:22
+msgid "Various ball sizes"
 msgstr ""
 
-#: hacks/config/flame.xml.h:8
-msgid "Flame"
+#: hacks/config/fluidballs.xml.h:23
+msgid "Wind"
 msgstr ""
 
-#: hacks/config/flame.xml.h:13
-msgid "Number of Fractals"
+#: hacks/config/flurry.xml.h:1
+msgid "Binary"
 msgstr ""
 
-#: hacks/config/flipflop.xml.h:2
-msgid "FlipFlop"
+#: hacks/config/flurry.xml.h:2
+msgid "Classic"
 msgstr ""
 
-#: hacks/config/flipflop.xml.h:3
-msgid ""
-"Flipflop draws a grid of 3D colored tiles that change positions with each "
-"other. Written by Kevin Ogden."
+#: hacks/config/flurry.xml.h:3
+#, fuzzy
+msgid "Fire"
+msgstr "ファイル(_F)"
+
+#: hacks/config/flurry.xml.h:4
+msgid "Flurry"
 msgstr ""
 
-#: hacks/config/flipflop.xml.h:6
-msgid "Solid Tiles"
+#: hacks/config/flurry.xml.h:5
+msgid "Insane"
 msgstr ""
 
-#: hacks/config/flipscreen3d.xml.h:2
-msgid "Flipscreen3d"
+#: hacks/config/flurry.xml.h:6
+msgid "Psychedelic"
 msgstr ""
 
-#: hacks/config/flipscreen3d.xml.h:3
-msgid ""
-"Grabs an image of the desktop, turns it into a GL texture map, and spins it "
-"around and deforms it in various ways. Written by Ben Buxton."
+#: hacks/config/flurry.xml.h:7
+msgid "RGB"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:1 hacks/config/starwars.xml.h:3
-msgid "Centered Text"
+#: hacks/config/flurry.xml.h:8 hacks/config/sballs.xml.h:11
+#: hacks/config/starfish.xml.h:12
+msgid "Random"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:2
+#: hacks/config/flurry.xml.h:10
 msgid ""
-"Draws successive pages of text. The lines flip in and out in a soothing 3D "
-"pattern. The text can be the output of a program or the contents of a file "
-"or URL, as configured on the \"Advanced\" tab of the main Screensaver "
-"Preferences window. Written by Jamie Zawinski."
+"This X11 port of the OSX screensaver of the same name draws a colourful star"
+"(fish)like flurry of particles. Original Mac version: http://homepage.mac."
+"com/calumr Written by Calum Robinson and Tobias Sargeant; 2002."
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:4
-msgid "FlipText"
+#: hacks/config/flyingtoasters.xml.h:2
+#, no-c-format
+msgid ""
+"A fleet of 3d space-age jet-powered flying toasters (and toast!) Inspired by "
+"the ancient Berkeley Systems After Dark flying toasters. http://en.wikipedia."
+"org/wiki/After_Dark_%28software%29#Flying_Toasters Written by Jamie Zawinski "
+"and Devon Dossett; 2003."
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:5 hacks/config/starwars.xml.h:7
-msgid "Flush Left Text"
+#: hacks/config/flyingtoasters.xml.h:3
+msgid "Air speed"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:6 hacks/config/starwars.xml.h:8
-msgid "Flush Right Text"
+#: hacks/config/flyingtoasters.xml.h:4 hacks/config/jigglypuff.xml.h:1
+msgid "Chrome"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:7 hacks/config/starwars.xml.h:9
-msgid "Font Point Size"
+#: hacks/config/flyingtoasters.xml.h:6
+msgid "FlyingToasters"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:11
-msgid "Random Text Alignment"
+#: hacks/config/flyingtoasters.xml.h:11
+msgid "Number of slices"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:15 hacks/config/starwars.xml.h:15
-msgid "Text Columns"
+#: hacks/config/flyingtoasters.xml.h:12
+msgid "Number of toasters"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:16 hacks/config/starwars.xml.h:16
-msgid "Text Lines"
+#: hacks/config/flyingtoasters.xml.h:15
+msgid "Swarm"
 msgstr ""
 
-#: hacks/config/flow.xml.h:3
-msgid "Flow"
+#: hacks/config/fontglide.xml.h:1 hacks/config/tangram.xml.h:1
+#: hacks/config/xlyap.xml.h:1
+msgid "Brief"
 msgstr ""
 
-#: hacks/config/flow.xml.h:5
-msgid "Length of trails"
+#: hacks/config/fontglide.xml.h:3
+msgid "Font border thickness"
 msgstr ""
 
-#: hacks/config/flow.xml.h:13
-msgid ""
-"Strange attractors formed of flows in a 3D differential equation phase "
-"space. Written by Tim Auckland."
+#: hacks/config/fontglide.xml.h:4
+msgid "FontGlide"
 msgstr ""
 
-#: hacks/config/flow.xml.h:16
-msgid "turn on/off bounding box."
+#: hacks/config/fontglide.xml.h:7
+msgid "Horizontally scrolling text"
 msgstr ""
 
-#: hacks/config/flow.xml.h:17
-msgid "turn on/off double buffering."
+#: hacks/config/fontglide.xml.h:10
+msgid "Page linger"
 msgstr ""
 
-#: hacks/config/flow.xml.h:18
-msgid "turn on/off periodic attractors."
+#: hacks/config/fontglide.xml.h:11
+msgid "Pages of text"
 msgstr ""
 
-#: hacks/config/flow.xml.h:19
-msgid "turn on/off ride in the flow."
+#: hacks/config/fontglide.xml.h:12
+msgid ""
+"Puts text on the screen using large characters that glide in from the edges, "
+"assemble, then disperse. Alternately, it can simply scroll whole sentences "
+"from right to left. Written by Jamie Zawinski; 2003."
 msgstr ""
 
-#: hacks/config/flow.xml.h:20
-msgid "turn on/off rotating around attractor."
+#: hacks/config/fontglide.xml.h:13
+msgid "Random display style"
 msgstr ""
 
-#: hacks/config/flow.xml.h:21
-msgid "turn on/off search for new attractors."
+#: hacks/config/fontglide.xml.h:17
+msgid "Vapor trails"
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:1
-msgid "      Freefall"
+#: hacks/config/forest.xml.h:1 hacks/config/glforestfire.xml.h:5
+msgid "Forest"
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:4
-msgid "Clay"
+#: hacks/config/forest.xml.h:2
+msgid "Fractal trees. Written by Peter Baumung; 1997."
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:7
-msgid "FluidBalls"
+#: hacks/config/fuzzyflakes.xml.h:2
+msgid "Blue"
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:8 hacks/config/twang.xml.h:4
-msgid "Friction"
+#: hacks/config/fuzzyflakes.xml.h:3
+msgid "Border thickness"
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:11
-msgid "Jupiter"
-msgstr ""
+#: hacks/config/fuzzyflakes.xml.h:4
+#, fuzzy
+msgid "Cyan"
+msgstr "キャンセル"
 
-#: hacks/config/fluidballs.xml.h:14
-msgid ""
-"Models the physics of bouncing balls, or of particles in a gas or fluid, "
-"depending on the settings. If \"Shake Box\" is selected, then every now and "
-"then, the box will be rotated, changing which direction is down (in order to "
-"keep the settled balls in motion.) By Peter Birtles and Jamie Zawinski."
+#: hacks/config/fuzzyflakes.xml.h:5
+msgid "Falling colored snowflake/flower shapes. Written by Barry Dmytro; 2004."
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:15
-msgid "Rubber"
+#: hacks/config/fuzzyflakes.xml.h:9
+msgid "FuzzyFlakes"
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:16
-msgid "Shake Box"
+#: hacks/config/fuzzyflakes.xml.h:10
+msgid "Green"
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:22
-msgid "Various Ball Sizes"
+#: hacks/config/fuzzyflakes.xml.h:13 hacks/config/hypnowheel.xml.h:10
+#: hacks/config/xspirograph.xml.h:5
+msgid "Layers"
 msgstr ""
 
-#: hacks/config/flurry.xml.h:1
-msgid "Binary"
+#: hacks/config/fuzzyflakes.xml.h:15
+msgid "Magenta"
 msgstr ""
 
-#: hacks/config/flurry.xml.h:2
-msgid "Classic"
+#: hacks/config/fuzzyflakes.xml.h:17
+msgid "Pink"
 msgstr ""
 
-#: hacks/config/flurry.xml.h:3
-#, fuzzy
-msgid "Fire"
-msgstr "ファイル(_F)"
-
-#: hacks/config/flurry.xml.h:4
-msgid "Flurry"
+#: hacks/config/fuzzyflakes.xml.h:19
+msgid "Random colors"
 msgstr ""
 
-#: hacks/config/flurry.xml.h:5
-msgid "Insane"
+#: hacks/config/fuzzyflakes.xml.h:20
+msgid "Red"
 msgstr ""
 
-#: hacks/config/flurry.xml.h:6
-msgid "Psychedelic"
+#: hacks/config/fuzzyflakes.xml.h:28
+msgid "Yellow"
 msgstr ""
 
-#: hacks/config/flurry.xml.h:7
-msgid "RGB"
+#: hacks/config/galaxy.xml.h:4
+msgid "Galaxy"
 msgstr ""
 
-#: hacks/config/flurry.xml.h:10
-msgid ""
-"This port of the OSX screensaver of the same name draws a colourful star"
-"(fish)like flurry of particles. xscreensaver port by Tobias Sargeant &lt;"
-"tobias.sargeant@bigpond.com&gt; Original Mac version by Calum Robinson &lt;"
-"calumr@mac.com&gt; http://homepage.mac.com/calumr"
+#: hacks/config/galaxy.xml.h:10
+msgid "Rotate viewpoint"
 msgstr ""
 
-#: hacks/config/flyingtoasters.xml.h:1
+#: hacks/config/galaxy.xml.h:13
 msgid ""
-"A fleet of 3d space-age jet-powered flying toasters (and toast!) Inspired by "
-"the ancient Berkeley Systems After Dark flying toasters. By Jamie Zawinski "
-"and Baconmonkey."
-msgstr ""
-
-#: hacks/config/flyingtoasters.xml.h:2
-msgid "Air Speed"
-msgstr ""
-
-#: hacks/config/flyingtoasters.xml.h:4
-msgid "Chrome Toasters"
+"This draws spinning galaxies, which then collide and scatter their stars to "
+"the, uh, four winds or something. Written by Uli Siegmund, Harald Backert, "
+"and Hubert Feyrer; 1997."
 msgstr ""
 
-#: hacks/config/flyingtoasters.xml.h:6
-msgid "Flying Toasters"
+#: hacks/config/gears.xml.h:5
+msgid "Gear count"
 msgstr ""
 
-#: hacks/config/flyingtoasters.xml.h:7 hacks/config/glslideshow.xml.h:17
-#: hacks/config/jigglypuff.xml.h:12 hacks/config/juggle.xml.h:5
-#: hacks/config/mirrorblob.xml.h:15 hacks/config/pipes.xml.h:10
-msgid "None"
+#: hacks/config/gears.xml.h:6
+msgid "Gears"
 msgstr ""
 
-#: hacks/config/flyingtoasters.xml.h:8
-msgid "Number of Slices"
+#: hacks/config/gears.xml.h:13
+msgid ""
+"This draws sets of turning, interlocking gears, rotating in three "
+"dimensions. See also the \"Pinion\" and \"MoebiusGears\" screen savers. "
+"http://en.wikipedia.org/wiki/Involute_gear http://en.wikipedia.org/wiki/"
+"Epicyclic_gearing Written by Jamie Zawinski; 2007."
 msgstr ""
 
-#: hacks/config/flyingtoasters.xml.h:9
-msgid "Number of Toasters"
+#: hacks/config/gflux.xml.h:2 hacks/config/lavalite.xml.h:2
+msgid "10"
 msgstr ""
 
-#: hacks/config/flyingtoasters.xml.h:12
-msgid "Solid Colors"
+#: hacks/config/gflux.xml.h:3
+msgid "Checkerboard"
 msgstr ""
 
-#: hacks/config/flyingtoasters.xml.h:13
-msgid "Swarm"
+#: hacks/config/gflux.xml.h:6
+msgid ""
+"Draws a rippling waves on a rotating wireframe grid. Written by Josiah "
+"Pease; 2000."
 msgstr ""
 
-#: hacks/config/fontglide.xml.h:2
-msgid "Brief"
+#: hacks/config/gflux.xml.h:8
+msgid "Flat lighting"
 msgstr ""
 
-#: hacks/config/fontglide.xml.h:5
-msgid "Font Border Thickness"
+#: hacks/config/gflux.xml.h:10
+msgid "GFlux"
 msgstr ""
 
-#: hacks/config/fontglide.xml.h:6
-msgid "FontGlide"
+#: hacks/config/gflux.xml.h:13
+msgid "Mesh density"
 msgstr ""
 
-#: hacks/config/fontglide.xml.h:7
-msgid "Horizontally scrolling text"
+#: hacks/config/gflux.xml.h:14
+msgid "Picture"
 msgstr ""
 
-#: hacks/config/fontglide.xml.h:10
-msgid "Pages of text"
+#: hacks/config/gflux.xml.h:18 hacks/config/interference.xml.h:22
+msgid "Wave speed"
 msgstr ""
 
-#: hacks/config/fontglide.xml.h:11
-msgid ""
-"Puts text on the screen using large characters that glide in from the edges, "
-"assemble, then disperse. Alternately, it can simply scroll whole sentences "
-"from right to left. The text can be the output of a program or the contents "
-"of a file or URL, as configured on the \"Advanced\" tab of the main "
-"Screensaver Preferences window. Written Jamie Zawinski."
+#: hacks/config/gflux.xml.h:19 hacks/config/glmatrix.xml.h:20
+msgid "Waves"
 msgstr ""
 
-#: hacks/config/fontglide.xml.h:14
-msgid "Text Linger"
+#: hacks/config/gflux.xml.h:20
+msgid "Wire mesh"
 msgstr ""
 
-#: hacks/config/fontglide.xml.h:16
-msgid "Vapor Trails"
+#: hacks/config/glblur.xml.h:1
+msgid "Blur smoothness"
 msgstr ""
 
-#: hacks/config/forest.xml.h:2 hacks/config/glforestfire.xml.h:6
-msgid "Forest"
+#: hacks/config/glblur.xml.h:5
+msgid "GLBlur"
 msgstr ""
 
-#: hacks/config/forest.xml.h:7
+#: hacks/config/glblur.xml.h:17
 msgid ""
-"This draws fractal trees. Written by Peter Baumung. Everybody loves "
-"fractals, right?"
-msgstr ""
-
-#: hacks/config/fuzzyflakes.xml.h:2
-msgid "Border Thickness"
-msgstr ""
-
-#: hacks/config/fuzzyflakes.xml.h:4
-msgid "Delay"
-msgstr ""
-
-#: hacks/config/fuzzyflakes.xml.h:6
-msgid "Falling colored snowflake/flower shapes. Written by Barry Dmytro."
-msgstr ""
-
-#: hacks/config/fuzzyflakes.xml.h:9
-msgid "FuzzyFlakes"
-msgstr ""
-
-#: hacks/config/fuzzyflakes.xml.h:11 hacks/config/xspirograph.xml.h:4
-msgid "Layers"
+"This draws a box and a few line segments, and generates a radial blur "
+"outward from it. This creates flowing field effects. This is done by "
+"rendering the scene into a small texture, then repeatedly rendering "
+"increasingly-enlarged and increasingly-transparent versions of that texture "
+"onto the frame buffer. As such, it's quite GPU-intensive: if you don't have "
+"a very good graphics card, it will hurt your machine bad. Written by Jamie "
+"Zawinski; 2002."
 msgstr ""
 
-#: hacks/config/fuzzyflakes.xml.h:14
-msgid "Random Colors"
+#: hacks/config/glcells.xml.h:2
+msgid "15"
 msgstr ""
 
-#: hacks/config/galaxy.xml.h:4
-msgid "Galaxy"
+#: hacks/config/glcells.xml.h:3
+msgid "Cell division"
 msgstr ""
 
-#: hacks/config/galaxy.xml.h:8
-msgid "Rotate Viewpoint"
+#: hacks/config/glcells.xml.h:4
+msgid "Cell radius"
 msgstr ""
 
-#: hacks/config/galaxy.xml.h:13
+#: hacks/config/glcells.xml.h:5
 msgid ""
-"This draws spinning galaxies, which then collide and scatter their stars to "
-"the, uh, four winds or something. Originally an Amiga program by Uli "
-"Siegmund."
-msgstr ""
-
-#: hacks/config/gears.xml.h:3
-msgid "Gears"
+"Cells growing, dividing and dying on your screen. Written by Matthias "
+"Toussaint; 2007."
 msgstr ""
 
-#: hacks/config/gears.xml.h:4
-msgid "Planetary Gear System"
+#: hacks/config/glcells.xml.h:8
+msgid "GLCells"
 msgstr ""
 
-#: hacks/config/gears.xml.h:5 hacks/config/goop.xml.h:9
-msgid "Rotational Speed"
-msgstr ""
-
-#: hacks/config/gears.xml.h:9
-msgid ""
-"This draws sets of turning, interlocking gears, rotating in three "
-"dimensions. Another GL hack, by Danny Sung, Brian Paul, Ed Mackey, and Jamie "
-"Zawinski."
+#: hacks/config/glcells.xml.h:9
+msgid "Gorge"
 msgstr ""
 
-#: hacks/config/gears.xml.h:10
-msgid "Three Gear System"
+#: hacks/config/glcells.xml.h:11
+msgid "Highest sphere detail"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:2
-msgid "Checkerboard"
+#: hacks/config/glcells.xml.h:13
+msgid "Keep dead cells"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:5
-msgid ""
-"Draws a rippling waves on a rotating wireframe grid, using GL. Written by "
-"Josiah Pease."
+#: hacks/config/glcells.xml.h:18
+msgid "Lowest sphere detail"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:7
-msgid "Flat Lighting"
+#: hacks/config/glcells.xml.h:20
+msgid "Max cells"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:8
-msgid "GFlux"
+#: hacks/config/glcells.xml.h:21
+msgid "Max food"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:9
-msgid "Mesh Density"
+#: hacks/config/glcells.xml.h:22
+msgid "Medium sphere detail"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:10
-msgid "Screen Image"
-msgstr "スクリーンの画像"
-
-#: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:21
-msgid "Wave Speed"
+#: hacks/config/glcells.xml.h:23
+msgid "Min distance"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:15 hacks/config/glmatrix.xml.h:20
-msgid "Waves"
+#: hacks/config/glcells.xml.h:24
+msgid "Min food"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:16
-msgid "Wire Mesh"
+#: hacks/config/glcells.xml.h:25
+msgid "More sphere detail"
 msgstr ""
 
-#: hacks/config/glblur.xml.h:1
-msgid "Blur Smoothness"
+#: hacks/config/glcells.xml.h:26
+msgid "Normal sphere detail"
 msgstr ""
 
-#: hacks/config/glblur.xml.h:5
-msgid "GLBlur"
-msgstr ""
+#: hacks/config/glcells.xml.h:27
+#, fuzzy
+msgid "Quick"
+msgstr "終了(_Q)"
 
-#: hacks/config/glblur.xml.h:17
-msgid ""
-"This program draws a box and a few line segments, and generates a radial "
-"blur outward from it. This creates flowing field effects. This is done by "
-"rendering the scene into a small texture, then repeatedly rendering "
-"increasingly-enlarged and increasingly-transparent versions of that texture "
-"onto the frame buffer. As such, it's quite graphics intensive: don't bother "
-"trying to run this if you don't have hardware-accelerated OpenGL texture "
-"support. It will hurt your machine bad."
+#: hacks/config/glcells.xml.h:33
+msgid "Starve"
 msgstr ""
 
 #: hacks/config/gleidescope.xml.h:2 hacks/config/glslideshow.xml.h:6
-#: hacks/config/mirrorblob.xml.h:3
 #, fuzzy
-msgid "5 Minutes"
+msgid "5 minutes"
 msgstr "分後"
 
 #: hacks/config/gleidescope.xml.h:3
 msgid ""
-"An OpenGL kaleidescope that operates on your desktop image, or on image "
-"files loaded from disk. Written by andrew dean."
+"A kaleidoscope that operates on your desktop image, or on image files loaded "
+"from disk. http://en.wikipedia.org/wiki/Kaleidoscope Written by Andrew Dean; "
+"2003."
 msgstr ""
 
-#: hacks/config/gleidescope.xml.h:4
+#: hacks/config/gleidescope.xml.h:5
 msgid "Gleidescope"
 msgstr ""
 
-#: hacks/config/gleidescope.xml.h:5
+#: hacks/config/gleidescope.xml.h:7
 #, fuzzy
-msgid "Image Duration"
+msgid "Image duration"
 msgstr "フェードする時間: "
 
-#: hacks/config/gleidescope.xml.h:6
-msgid "Image file"
-msgstr ""
-
-#: hacks/config/gleidescope.xml.h:8
+#: hacks/config/gleidescope.xml.h:10
 #, fuzzy
 msgid "Move"
 msgstr "モード:"
 
-#: hacks/config/gleidescope.xml.h:11
+#: hacks/config/gleidescope.xml.h:13
 msgid "Size of tube"
 msgstr ""
 
+#: hacks/config/gleidescope.xml.h:15 hacks/config/hyperball.xml.h:17
+#: hacks/config/hypercube.xml.h:17 hacks/config/mirrorblob.xml.h:28
+#: hacks/config/zoom.xml.h:15
+msgid "Zoom"
+msgstr ""
+
 #: hacks/config/glforestfire.xml.h:2
 msgid "Desert"
 msgstr ""
@@ -4431,12 +4645,11 @@ msgstr ""
 #: hacks/config/glforestfire.xml.h:3
 msgid ""
 "Draws an animation of sprinkling fire-like 3D triangles in a landscape "
-"filled with trees. Requires OpenGL, and a machine with fast hardware support "
-"for texture maps. Written by Eric Lassauge &lt;lassauge@users.sourceforge."
-"net&gt;."
+"filled with trees. Written by Eric Lassauge; 2002."
 msgstr ""
 
-#: hacks/config/glforestfire.xml.h:5 hacks/config/glmatrix.xml.h:9
+#: hacks/config/glforestfire.xml.h:4 hacks/config/glmatrix.xml.h:5
+#: hacks/config/glschool.xml.h:7
 msgid "Fog"
 msgstr ""
 
@@ -4444,12 +4657,8 @@ msgstr ""
 msgid "GLForestFire"
 msgstr ""
 
-#: hacks/config/glforestfire.xml.h:8
-msgid "Huge Fire"
-msgstr ""
-
 #: hacks/config/glforestfire.xml.h:9
-msgid "No shadow"
+msgid "Huge fire"
 msgstr ""
 
 #: hacks/config/glforestfire.xml.h:11
@@ -4460,35 +4669,40 @@ msgstr ""
 msgid "Rain"
 msgstr ""
 
-#: hacks/config/glforestfire.xml.h:17
-msgid "Track mouse"
+#: hacks/config/glforestfire.xml.h:13
+msgid "Shadows"
 msgstr ""
 
-#: hacks/config/glhanoi.xml.h:1
-msgid "Enable fog"
-msgstr ""
+#: hacks/config/glforestfire.xml.h:15
+#, fuzzy
+msgid "Textures"
+msgstr "文字列(_T)"
 
 #: hacks/config/glhanoi.xml.h:2
-msgid "Enable lighting"
+msgid "31"
 msgstr ""
 
-#: hacks/config/glhanoi.xml.h:4
-msgid "Frame Delay (us)"
+#: hacks/config/glhanoi.xml.h:3 hacks/config/pulsar.xml.h:5
+msgid "Enable fog"
 msgstr ""
 
-#: hacks/config/glhanoi.xml.h:5
-msgid "GLHanoi"
+#: hacks/config/glhanoi.xml.h:4 hacks/config/pulsar.xml.h:6
+msgid "Enable lighting"
 msgstr ""
 
 #: hacks/config/glhanoi.xml.h:6
-msgid "Number of Disks"
+msgid "GLHanoi"
 msgstr ""
 
 #: hacks/config/glhanoi.xml.h:9
+msgid "Number of disks"
+msgstr ""
+
+#: hacks/config/glhanoi.xml.h:11
 msgid ""
 "Solves the Towers of Hanoi puzzle. Move N disks from one pole to another, "
 "one disk at a time, with no disk ever resting on a disk smaller than itself. "
-"Written by Dave Atkinson."
+"http://en.wikipedia.org/wiki/Tower_of_Hanoi Written by Dave Atkinson; 2005."
 msgstr ""
 
 #: hacks/config/glknots.xml.h:4
@@ -4497,105 +4711,119 @@ msgstr ""
 
 #: hacks/config/glknots.xml.h:5
 msgid ""
-"Generates some twisting 3d knot patterns. Spins 'em around. Written by Jamie "
-"Zawinski."
+"Generates some twisting 3d knot patterns. Spins 'em around. http://en."
+"wikipedia.org/wiki/Knot_theory Written by Jamie Zawinski; 2003."
 msgstr ""
 
-#: hacks/config/glknots.xml.h:7 hacks/config/lavalite.xml.h:17
-#: hacks/config/spheremonics.xml.h:9
+#: hacks/config/glknots.xml.h:8 hacks/config/lavalite.xml.h:17
+#: hacks/config/mirrorblob.xml.h:20 hacks/config/spheremonics.xml.h:9
 msgid "Resolution"
 msgstr ""
 
-#: hacks/config/glknots.xml.h:15
+#: hacks/config/glknots.xml.h:16
 msgid "Segmented"
 msgstr ""
 
-#: hacks/config/glknots.xml.h:18 hacks/config/lavalite.xml.h:28
-#: hacks/config/xmountains.xml.h:25
-msgid "Smooth"
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:2 hacks/config/xmatrix.xml.h:1
-msgid "Binary Encoding"
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:4
-msgid "Draw Glyphs"
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:5
-msgid "Draw Outlines"
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:6
-msgid "Draw Solid Boxes"
+#: hacks/config/glmatrix.xml.h:1 hacks/config/xmatrix.xml.h:1
+msgid "Binary encoding"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:7
+#: hacks/config/glmatrix.xml.h:3
 msgid ""
 "Draws 3D dropping characters similar to what is seen in the title sequence "
 "of \"The Matrix\". See also \"xmatrix\" for a 2D rendering of the similar "
 "effect that appeared on the computer monitors actually *in* the movie. "
-"Written by Jamie Zawinski."
+"Written by Jamie Zawinski; 2003."
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:10
+#: hacks/config/glmatrix.xml.h:7
 msgid "GLMatrix"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:11 hacks/config/xmatrix.xml.h:7
-msgid "Genetic Encoding"
+#: hacks/config/glmatrix.xml.h:8 hacks/config/xmatrix.xml.h:7
+msgid "Genetic encoding"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:12
-msgid "Glyph Density"
+#: hacks/config/glmatrix.xml.h:9
+msgid "Glyph density"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:13
-msgid "Glyph Speed"
+#: hacks/config/glmatrix.xml.h:10
+msgid "Glyph speed"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:14 hacks/config/xmatrix.xml.h:8
-msgid "Hexadecimal Encoding"
+#: hacks/config/glmatrix.xml.h:11 hacks/config/xmatrix.xml.h:8
+msgid "Hexadecimal encoding"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:15 hacks/config/xmatrix.xml.h:11
-msgid "Matrix Encoding"
+#: hacks/config/glmatrix.xml.h:14 hacks/config/xmatrix.xml.h:13
+msgid "Matrix encoding"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:16
+#: hacks/config/glmatrix.xml.h:15
 msgid "Panning"
 msgstr ""
 
 #: hacks/config/glplanet.xml.h:1
 msgid ""
-"Draws a planet bouncing around in space. Written by David Konerding. The "
-"built-in image is a map of the earth (extracted from `xearth'), but you can "
-"wrap any texture around the sphere, e.g., the planetary textures that come "
-"with `ssystem'."
+"Draws a planet bouncing around in space. The built-in image is a map of the "
+"earth (extracted from `xearth'), but you can wrap any texture around the "
+"sphere, e.g., the planetary textures that come with `ssystem'. Written by "
+"David Konerding; 1998."
 msgstr ""
 
 #: hacks/config/glplanet.xml.h:3
 msgid "GLPlanet"
 msgstr ""
 
-#: hacks/config/glplanet.xml.h:4
-msgid "Image File"
+#: hacks/config/glplanet.xml.h:5
+msgid "Image file"
 msgstr ""
 
-#: hacks/config/glplanet.xml.h:5
+#: hacks/config/glplanet.xml.h:8 hacks/config/moebiusgears.xml.h:9
 msgid "Roll"
 msgstr ""
 
-#: hacks/config/glslideshow.xml.h:4 hacks/config/rd-bomb.xml.h:5
-#: hacks/config/substrate.xml.h:4 hacks/config/xplanet.xml.h:4
-#, no-c-format
-msgid "100%"
+#: hacks/config/glschool.xml.h:1
+#, fuzzy
+msgid "Avoidance"
+msgstr "オプション"
+
+#: hacks/config/glschool.xml.h:2
+#, fuzzy
+msgid "Centering"
+msgstr "標準"
+
+#: hacks/config/glschool.xml.h:4
+msgid "Draw goal"
 msgstr ""
 
-#: hacks/config/glslideshow.xml.h:5 hacks/config/glsnake.xml.h:2
-#: hacks/config/mirrorblob.xml.h:2
-msgid "30 Seconds"
+#: hacks/config/glschool.xml.h:6
+msgid "Fish count"
+msgstr ""
+
+#: hacks/config/glschool.xml.h:9
+msgid "GLSchool"
+msgstr ""
+
+#: hacks/config/glschool.xml.h:10
+msgid "Goal following"
+msgstr ""
+
+#: hacks/config/glschool.xml.h:16
+msgid ""
+"Uses Craig Reynolds' Boids algorithm to simulate a school of fish. http://en."
+"wikipedia.org/wiki/Boids Written by David C. Lambert; 2006."
+msgstr ""
+
+#: hacks/config/glschool.xml.h:17
+msgid "Velocity matching"
+msgstr ""
+
+#: hacks/config/glslideshow.xml.h:4 hacks/config/rd-bomb.xml.h:4
+#: hacks/config/rdbomb.xml.h:4 hacks/config/substrate.xml.h:4
+#, no-c-format
+msgid "100%"
 msgstr ""
 
 #: hacks/config/glslideshow.xml.h:8
@@ -4604,18 +4832,14 @@ msgid "50%"
 msgstr ""
 
 #: hacks/config/glslideshow.xml.h:9
-msgid "Always show at least this much of the image:"
+msgid "Always show at least this much of the image"
 msgstr ""
 
-#: hacks/config/glslideshow.xml.h:10 hacks/config/mirrorblob.xml.h:6
+#: hacks/config/glslideshow.xml.h:10
 #, fuzzy
-msgid "Crossfade Duration:"
+msgid "Crossfade duration"
 msgstr "フェードする時間: "
 
-#: hacks/config/glslideshow.xml.h:11
-msgid "Frame Rate:"
-msgstr ""
-
 #: hacks/config/glslideshow.xml.h:12
 msgid "GLSlideshow"
 msgstr ""
@@ -4623,60 +4847,53 @@ msgstr ""
 #: hacks/config/glslideshow.xml.h:15
 msgid ""
 "Loads a random sequence of images and smoothly scans and zooms around in "
-"each, fading from pan to pan. To tell it where to find the images to "
-"display, go to the \"Advanced\" tab on the Screensaver Preferences window. "
-"Select \"Choose Random Images\", and enter your image directory in the text "
-"field right below that. (Note: not the the \"Advanced\" button at the bottom "
-"of this window: the tab at the top of the *other* window.) This program "
-"requires a good video card capable of supporting large textures. Written by "
-"Jamie Zawinski and Mike Oliphant."
+"each, fading from pan to pan. Written by Jamie Zawinski and Mike Oliphant; "
+"2003."
 msgstr ""
 
 #: hacks/config/glslideshow.xml.h:18
 #, fuzzy
-msgid "Pan/Zoom Duration:"
+msgid "Pan/zoom duration"
 msgstr "フェードする時間: "
 
-#: hacks/config/glsnake.xml.h:1 hacks/config/lavalite.xml.h:1
-msgid "1"
-msgstr ""
-
 #: hacks/config/glsnake.xml.h:3
-msgid "Angular Velocity"
+msgid "Angular velocity"
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:4
+#: hacks/config/glsnake.xml.h:5
+#, no-c-format
 msgid ""
-"Draws a simulation of the Rubik's Snake puzzle. Written by Jamie Wilkinson, "
-"Andrew Bennetts, and Peter Aylett."
+"Draws a simulation of the Rubik's Snake puzzle. See also the \"Rubik\" and "
+"\"Cube21\" screen savers. http://en.wikipedia.org/wiki/Rubik%27s_Snake "
+"Written by Jamie Wilkinson, Andrew Bennetts, and Peter Aylett; 2002."
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:7
-msgid "GlSnake"
+#: hacks/config/glsnake.xml.h:9
+msgid "GLSnake"
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:8
+#: hacks/config/glsnake.xml.h:11
 msgid "Loose"
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:9
+#: hacks/config/glsnake.xml.h:13
 msgid "Packing"
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:11
-msgid "Show Titles"
+#: hacks/config/glsnake.xml.h:15
+msgid "Show titles"
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:14
+#: hacks/config/glsnake.xml.h:17
 msgid "Tight"
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:16
-msgid "Y Angular Velocity"
+#: hacks/config/glsnake.xml.h:19
+msgid "Y angular velocity"
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:17
-msgid "Z Angular Velocity"
+#: hacks/config/glsnake.xml.h:20
+msgid "Z angular velocity"
 msgstr ""
 
 #: hacks/config/gltext.xml.h:1
@@ -4684,113 +4901,116 @@ msgid "Always face front"
 msgstr ""
 
 #: hacks/config/gltext.xml.h:2
+#, fuzzy
+msgid "Display date and time"
+msgstr "モニタのパワーマネージメント"
+
+#: hacks/config/gltext.xml.h:3
+#, fuzzy
+msgid "Display system information"
+msgstr "バージョン情報を表示します。"
+
+#: hacks/config/gltext.xml.h:4
 msgid ""
-"Displays a few lines of text spinning around in a solid 3D font. Written by "
-"Jamie Zawinski."
+"Displays a few lines of text spinning around in a solid 3D font. The text "
+"can use strftime() escape codes to display the current date and time. "
+"Written by Jamie Zawinski; 2001."
 msgstr ""
 
-#: hacks/config/gltext.xml.h:5
+#: hacks/config/gltext.xml.h:7
 msgid "GLText"
 msgstr ""
 
-#: hacks/config/gltext.xml.h:6
-msgid "Program"
-msgstr ""
-
 #: hacks/config/gltext.xml.h:18
 msgid "Spin all the way around"
 msgstr ""
 
-#: hacks/config/gltext.xml.h:19 hacks/config/noseguy.xml.h:5
-msgid "Text"
-msgstr ""
-
-#: hacks/config/goban.xml.h:1
-msgid "Goban"
-msgstr ""
-
-#: hacks/config/goban.xml.h:2
-msgid ""
-"Replays historical games of go (aka wei-chi and baduk) on the screen. By "
-"Scott Draves. You can find it at &lt;http://www.draves.org/goban/&gt;."
-msgstr ""
-
 #: hacks/config/goop.xml.h:1
-msgid "Additive Colors (reflected light)"
+msgid "Additive colors (reflected light)"
 msgstr ""
 
 #: hacks/config/goop.xml.h:2
-msgid "Blob Count"
+msgid "Blobs"
 msgstr ""
 
 #: hacks/config/goop.xml.h:3
 msgid "Elasticity"
 msgstr ""
 
-#: hacks/config/goop.xml.h:5
+#: hacks/config/goop.xml.h:7
 msgid "Goop"
 msgstr ""
 
-#: hacks/config/goop.xml.h:8
-msgid "Opaque Blobs"
+#: hacks/config/goop.xml.h:11
+msgid "Opaque blobs"
 msgstr ""
 
-#: hacks/config/goop.xml.h:12
-msgid "Speed Limit"
+#: hacks/config/goop.xml.h:15
+msgid "Speed limit"
 msgstr ""
 
-#: hacks/config/goop.xml.h:13
-msgid "Subtractive Colors (transmitted light)"
+#: hacks/config/goop.xml.h:16
+msgid "Subtractive colors (transmitted light)"
 msgstr ""
 
-#: hacks/config/goop.xml.h:14
+#: hacks/config/goop.xml.h:17
 msgid ""
 "This draws set of animating, transparent, amoeba-like blobs. The blobs "
 "change shape as they wander around the screen, and they are translucent, so "
 "you can see the lower blobs through the higher ones, and when one passes "
-"over another, their colors merge. I got the idea for this from a cool mouse "
-"pad I have, which achieves the same kind of effect in real life by having "
-"several layers plastic with colored oil between them. Written by Jamie "
-"Zawinski."
+"over another, their colors merge. I got the idea for this from a mouse pad I "
+"had once, which achieved the same kind of effect in real life by having "
+"several layers of plastic with colored oil between them. Written by Jamie "
+"Zawinski; 1997."
 msgstr ""
 
-#: hacks/config/goop.xml.h:15
-msgid "Transparent Blobs"
+#: hacks/config/goop.xml.h:18
+msgid "Transparent blobs"
 msgstr ""
 
-#: hacks/config/goop.xml.h:16
-msgid "XOR Blobs"
+#: hacks/config/goop.xml.h:19
+msgid "XOR blobs"
 msgstr ""
 
 #: hacks/config/grav.xml.h:3
 msgid "Grav"
 msgstr ""
 
-#: hacks/config/grav.xml.h:6
-msgid "Object Trails"
+#: hacks/config/grav.xml.h:8
+msgid "Number of objects"
 msgstr ""
 
-#: hacks/config/grav.xml.h:7
-msgid "Orbital Decay"
+#: hacks/config/grav.xml.h:9
+msgid "Object trails"
 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."
+msgid "Orbital decay"
 msgstr ""
 
-#: hacks/config/greynetic.xml.h:2
-msgid "Greynetic"
+#: hacks/config/grav.xml.h:12
+msgid ""
+"This draws a simple orbital simulation. With trails enabled, it looks kind "
+"of like a cloud-chamber photograph. Written by Greg Bowering; 1997."
 msgstr ""
 
-#: hacks/config/greynetic.xml.h:5
+#: hacks/config/greynetic.xml.h:1
 msgid ""
-"This draws random colored and stippled rectangles. Written by Jamie Zawinski."
+"Draws random colored, stippled and transparent rectangles. Written by Jamie "
+"Zawinski; 1992."
+msgstr ""
+
+#: hacks/config/greynetic.xml.h:3
+#, fuzzy
+msgid "Grey"
+msgstr "グレー"
+
+#: hacks/config/greynetic.xml.h:4
+msgid "Greynetic"
 msgstr ""
 
-#: hacks/config/halftone.xml.h:1
-msgid "Delay (Large = low cpu load)"
+#: hacks/config/halftone.xml.h:1 hacks/config/metaballs.xml.h:1
+msgid "Big"
 msgstr ""
 
 #: hacks/config/halftone.xml.h:2
@@ -4805,71 +5025,78 @@ msgstr ""
 msgid ""
 "Draws the gravity force in each point on the screen seen through a halftone "
 "dot pattern. The gravity force is calculated from a set of moving mass "
-"points. View it from a distance for best effect. Written by Peter Jaric &lt;"
-"peter@jaric.org&gt;."
+"points. View it from a distance for best effect. http://en.wikipedia.org/"
+"wiki/Halftone Written by Peter Jaric; 2002."
 msgstr ""
 
-#: hacks/config/halftone.xml.h:5
+#: hacks/config/halftone.xml.h:7
 msgid "Gravity points"
 msgstr ""
 
-#: hacks/config/halftone.xml.h:6
+#: hacks/config/halftone.xml.h:8
 msgid "Halftone"
 msgstr ""
 
-#: hacks/config/halftone.xml.h:10
+#: hacks/config/halftone.xml.h:13
 msgid "Maximum mass"
 msgstr ""
 
-#: hacks/config/halftone.xml.h:11
+#: hacks/config/halftone.xml.h:14
 msgid "Maximum speed"
 msgstr ""
 
-#: hacks/config/halftone.xml.h:12
+#: hacks/config/halftone.xml.h:15
 msgid "Minimum mass"
 msgstr ""
 
-#: hacks/config/halftone.xml.h:13
+#: hacks/config/halftone.xml.h:16
 msgid "Minimum speed"
 msgstr ""
 
 #: hacks/config/halo.xml.h:1
-msgid "Animate Circles"
+msgid "Animate circles"
 msgstr ""
 
-#: hacks/config/halo.xml.h:3
-msgid "Halo"
+#: hacks/config/halo.xml.h:2
+msgid ""
+"Draws trippy psychedelic circular patterns that hurt to look at. http://en."
+"wikipedia.org/wiki/Moire_pattern Written by Jamie Zawinski; 1993."
 msgstr ""
 
 #: hacks/config/halo.xml.h:5
-msgid "Number of Circles"
+msgid "Halo"
 msgstr ""
 
-#: hacks/config/halo.xml.h:7
-msgid "Ramp Mode"
+#: hacks/config/halo.xml.h:9
+msgid "Number of circles"
 msgstr ""
 
-#: hacks/config/halo.xml.h:9
-msgid "Seuss Mode"
+#: hacks/config/halo.xml.h:11
+msgid "Ramp mode"
 msgstr ""
 
 #: hacks/config/halo.xml.h:12
-msgid ""
-"This draws trippy psychedelic circular patterns that hurt to look at. It can "
-"also animate the control-points, but that takes a lot of CPU and bandwidth. "
-"Written by Jamie Zawinski."
+msgid "Random mode"
+msgstr ""
+
+#: hacks/config/halo.xml.h:13
+msgid "Seuss mode"
 msgstr ""
 
 #: hacks/config/helix.xml.h:4
 msgid "Helix"
 msgstr ""
 
-#: hacks/config/helix.xml.h:5
-msgid ""
-"This repeatedly generates spirally string-art-ish patterns. Written by Jamie "
-"Zawinski."
+#: hacks/config/helix.xml.h:9
+msgid "Spirally string-art-ish patterns. Written by Jamie Zawinski; 1992."
 msgstr ""
 
+#: hacks/config/hopalong.xml.h:1 hacks/config/interference.xml.h:3
+#: hacks/config/qix.xml.h:3 hacks/config/wander.xml.h:1
+#, fuzzy
+msgid "Color contrast"
+msgstr "カラーマップ"
+
 #: hacks/config/hopalong.xml.h:3
 msgid "EJK1"
 msgstr ""
@@ -4910,58 +5137,60 @@ msgstr ""
 msgid "RR"
 msgstr ""
 
-#: hacks/config/hopalong.xml.h:20
+#: hacks/config/hopalong.xml.h:21
 msgid "Sine"
 msgstr ""
 
-#: hacks/config/hopalong.xml.h:24
+#: hacks/config/hopalong.xml.h:23
 msgid ""
-"This draws lacy fractal patterns, based on iteration in the imaginary plane, "
-"from a 1986 Scientific American article. Mostly written by Patrick Naughton."
+"This draws lacy fractal patterns based on iteration in the imaginary plane, "
+"from a 1986 Scientific American article. See also the \"Discrete\" screen "
+"saver. Written by Patrick Naughton; 1992."
 msgstr ""
 
-#: hacks/config/hyperball.xml.h:4
-msgid "Hyperball"
+#: hacks/config/hyperball.xml.h:5
+msgid "HyperBall"
 msgstr ""
 
-#: hacks/config/hyperball.xml.h:5
+#: hacks/config/hyperball.xml.h:6
 msgid ""
 "Hyperball is to hypercube as dodecahedron is to cube: this displays a 2D "
 "projection of the sequence of 3D objects which are the projections of the 4D "
-"analog to the dodecahedron. Technically, it is a \"120 cell polytope.\" "
-"Written by Joe Keane. See also the \"polytopes\" hack for a more general "
-"version of this using OpenGL."
-msgstr ""
-
-#: hacks/config/hyperball.xml.h:10 hacks/config/hypercube.xml.h:10
-msgid "XW Rotation"
+"analog to the dodecahedron. Technically, it is a \"120 cell polytope\". See "
+"also \"polytopes\" for a more general version of this using OpenGL. http://"
+"en.wikipedia.org/wiki/Hypercube http://en.wikipedia.org/wiki/"
+"Regular_polytope Written by Joe Keane; 2000."
 msgstr ""
 
 #: hacks/config/hyperball.xml.h:11 hacks/config/hypercube.xml.h:11
-msgid "XY Rotation"
+msgid "XW rotation"
 msgstr ""
 
 #: hacks/config/hyperball.xml.h:12 hacks/config/hypercube.xml.h:12
-msgid "XZ Rotation"
+msgid "XY rotation"
 msgstr ""
 
 #: hacks/config/hyperball.xml.h:13 hacks/config/hypercube.xml.h:13
-msgid "YW Rotation"
+msgid "XZ rotation"
 msgstr ""
 
 #: hacks/config/hyperball.xml.h:14 hacks/config/hypercube.xml.h:14
-msgid "YZ Rotation"
+msgid "YW rotation"
 msgstr ""
 
 #: hacks/config/hyperball.xml.h:15 hacks/config/hypercube.xml.h:15
-msgid "ZW Rotation"
+msgid "YZ rotation"
 msgstr ""
 
-#: hacks/config/hypercube.xml.h:4
-msgid "Hypercube"
+#: hacks/config/hyperball.xml.h:16 hacks/config/hypercube.xml.h:16
+msgid "ZW rotation"
+msgstr ""
+
+#: hacks/config/hypercube.xml.h:5
+msgid "HyperCube"
 msgstr ""
 
-#: hacks/config/hypercube.xml.h:9
+#: hacks/config/hypercube.xml.h:10
 msgid ""
 "This displays 2D projections of the sequence of 3D objects which are the "
 "projections of the 4D analog to the cube: as a square is composed of four "
@@ -4969,9 +5198,10 @@ msgid ""
 "touching four others; a hypercube is composed of eight cubes, each touching "
 "six others. To make it easier to visualize the rotation, it uses a different "
 "color for the edges of each face. Don't think about it too long, or your "
-"brain will melt. Written by Joe Keane, Fritz Mueller, and Jamie Zawinski. "
-"See also the \"polytopes\" hack for a more general version of this using "
-"OpenGL."
+"brain will melt. See also \"polytopes\" for a more general version of this "
+"using OpenGL. http://en.wikipedia.org/wiki/Hypercube http://en.wikipedia.org/"
+"wiki/Regular_polytope Written by Joe Keane, Fritz Mueller, and Jamie "
+"Zawinski; 1992."
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:1 hacks/config/polytopes.xml.h:1
@@ -4983,118 +5213,138 @@ msgid "4.0"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:3
-msgid "4D Hypertorus"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:4
 #, fuzzy
-msgid "Color Wheel"
+msgid "Color wheel"
 msgstr "色"
 
-#: hacks/config/hypertorus.xml.h:5 hacks/config/polytopes.xml.h:10
-#, fuzzy
-msgid "Display Speed"
-msgstr "表示モード"
-
-#: hacks/config/hypertorus.xml.h:7 hacks/config/polytopes.xml.h:12
-msgid "Orthographic 3d"
+#: hacks/config/hypertorus.xml.h:6
+msgid "Hypertorus"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:8 hacks/config/polytopes.xml.h:13
-msgid "Orthographic 4d"
+msgid "Orthographic 3D"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:9 hacks/config/polytopes.xml.h:14
-msgid "Perspective 3d"
+msgid "Orthographic 4D"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:10 hacks/config/polytopes.xml.h:15
-msgid "Perspective 4d"
+msgid "Perspective 3D"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:11
-msgid "See-Through Bands"
+#: hacks/config/hypertorus.xml.h:11 hacks/config/polytopes.xml.h:16
+msgid "Perspective 4D"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:12
-msgid "See-Through Spirals (1 Spiral)"
+msgid "See-through bands"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:13
-msgid "See-Through Spirals (16 Spirals)"
+msgid "See-through spirals (1 spiral)"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:14
-msgid "See-Through Spirals (2 Spirals)"
+msgid "See-through spirals (16 spirals)"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:15
-msgid "See-Through Spirals (4 Spirals)"
+msgid "See-through spirals (2 spirals)"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:16
-msgid "See-Through Spirals (8 Spirals)"
+msgid "See-through spirals (4 spirals)"
+msgstr ""
+
+#: hacks/config/hypertorus.xml.h:17
+msgid "See-through spirals (8 spirals)"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:19
-msgid "Solid Object"
+msgid "Solid object"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:20 hacks/config/mirrorblob.xml.h:19
-#: hacks/config/polytopes.xml.h:21 hacks/config/pulsar.xml.h:16
-msgid "Solid Surface"
+#: hacks/config/hypertorus.xml.h:20 hacks/config/mirrorblob.xml.h:23
+#: hacks/config/polytopes.xml.h:21
+msgid "Solid surface"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:21
 msgid ""
-"This program shows a rotating Clifford Torus: a torus lying on the \"surface"
-"\" of a 4D hypersphere. Written by Carsten Steger, inspired by Thomas "
-"Banchoff's book \"Beyond the Third Dimension: Geometry, Computer Graphics, "
-"and Higher Dimensions\", Scientific American Library, 1990."
+"This shows a rotating Clifford Torus: a torus lying on the \"surface\" of a "
+"4D hypersphere. Inspired by Thomas Banchoff's book \"Beyond the Third "
+"Dimension: Geometry, Computer Graphics, and Higher Dimensions\", Scientific "
+"American Library, 1990. http://en.wikipedia.org/wiki/N-sphere http://en."
+"wikipedia.org/wiki/Clifford_torus http://en.wikipedia.org/wiki/"
+"Regular_polytope Written by Carsten Steger; 2003."
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:22 hacks/config/polytopes.xml.h:23
-msgid "Transparent Surface"
+msgid "Transparent surface"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:23
-msgid "Two-Sided"
+msgid "Two-sided"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:24 hacks/config/polytopes.xml.h:24
-msgid "WX Rotation Speed"
+msgid "WX rotation speed"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:25 hacks/config/polytopes.xml.h:25
-msgid "WY Rotation Speed"
+msgid "WY rotation speed"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:26 hacks/config/polytopes.xml.h:26
-msgid "WZ Rotation Speed"
+msgid "WZ rotation speed"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:27 hacks/config/polytopes.xml.h:27
-msgid "Wireframe Mesh"
+msgid "Wireframe mesh"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:28 hacks/config/polytopes.xml.h:28
-msgid "XY Rotation Speed"
+msgid "XY rotation speed"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:29 hacks/config/polytopes.xml.h:29
-msgid "XZ Rotation Speed"
+msgid "XZ rotation speed"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:30 hacks/config/polytopes.xml.h:30
-msgid "YZ Rotation Speed"
+msgid "YZ rotation speed"
 msgstr ""
 
-#: hacks/config/ifs.xml.h:1
+#: hacks/config/hypnowheel.xml.h:2 hacks/config/ifs.xml.h:1
 msgid "2"
 msgstr ""
 
+#: hacks/config/hypnowheel.xml.h:3 hacks/config/intermomentary.xml.h:2
+msgid "50"
+msgstr ""
+
+#: hacks/config/hypnowheel.xml.h:5
+msgid ""
+"Draws a series of overlapping, translucent spiral patterns. The tightness of "
+"their spirals fluctuates in and out. http://en.wikipedia.org/wiki/"
+"Moire_pattern Written by Jamie Zawinski; 2008."
+msgstr ""
+
+#: hacks/config/hypnowheel.xml.h:9
+msgid "Hypnowheel"
+msgstr ""
+
+#: hacks/config/hypnowheel.xml.h:15
+msgid "Symmetric twisting"
+msgstr ""
+
+#: hacks/config/hypnowheel.xml.h:16
+msgid "Twistiness"
+msgstr ""
+
 #: hacks/config/ifs.xml.h:2
-msgid "Blend"
+msgid "6"
 msgstr ""
 
 #: hacks/config/ifs.xml.h:3
@@ -5102,112 +5352,90 @@ msgstr ""
 msgid "Detail"
 msgstr "デフォルト"
 
-#: hacks/config/ifs.xml.h:5
-#, fuzzy
-msgid "Function"
-msgstr "説明"
-
 #: hacks/config/ifs.xml.h:6
-msgid "Functions"
-msgstr ""
-
-#: hacks/config/ifs.xml.h:7
 msgid "IFS"
 msgstr ""
 
-#: hacks/config/ifs.xml.h:9
-msgid "Number of Colours"
+#: hacks/config/ifs.xml.h:10
+msgid "Number of functions"
 msgstr ""
 
-#: hacks/config/ifs.xml.h:11 hacks/config/phosphor.xml.h:6
+#: hacks/config/ifs.xml.h:12
 msgid "Scale"
 msgstr ""
 
-#: hacks/config/ifs.xml.h:12
-#, fuzzy
-msgid "Single"
-msgstr "DirectColor"
-
-#: hacks/config/ifs.xml.h:15
+#: hacks/config/ifs.xml.h:14
 msgid ""
 "This one draws spinning, colliding iterated-function-system images. Note "
-"that the \"quality\" parameter is exponential. Number of points drawn is "
-"functions^detail. The number of colours is only used in Blend mode to "
-"provide a palette to create the base colours. These are then blended "
-"together in a non-colourmap friendly fashion. Written by Chris Le Sueur."
+"that the \"Detail\" parameter is exponential. Number of points drawn is "
+"functions^detail. http://en.wikipedia.org/wiki/Iterated_function_system "
+"Written by Chris Le Sueur and Robby Griffin; 1997."
 msgstr ""
 
-#: hacks/config/ifs.xml.h:16
+#: hacks/config/ifs.xml.h:15
 msgid "Translate"
 msgstr ""
 
-#: hacks/config/imsmap.xml.h:3
-msgid "Brightness Gradients"
+#: hacks/config/imsmap.xml.h:1
+msgid "1 Minute"
 msgstr ""
 
-#: hacks/config/imsmap.xml.h:7
-msgid "Hue Gradients"
+#: hacks/config/imsmap.xml.h:2
+msgid "1 Second"
 msgstr ""
 
-#: hacks/config/imsmap.xml.h:8
-msgid "IMSmap"
+#: hacks/config/imsmap.xml.h:3
+msgid "Brightness gradients"
 msgstr ""
 
-#: hacks/config/imsmap.xml.h:12
-msgid "Saturation Gradients"
+#: hacks/config/imsmap.xml.h:8
+msgid "Hue gradients"
 msgstr ""
 
-#: hacks/config/imsmap.xml.h:14
-msgid ""
-"This generates random cloud-like patterns. It looks quite different in "
-"monochrome and color. The basic idea is to take four points on the edge of "
-"the image, and assign each a random ``elevation''. Then find the point "
-"between them, and give it a value which is the average of the other four, "
-"plus some small random offset. Then coloration is done based on elevation. "
-"The color selection is done by binding the elevation to either hue, "
-"saturation, or brightness, and assigning random values to the others. The "
-"``brightness'' mode tends to yield cloudlike patterns, and the others tend "
-"to generate images that look like heat-maps or CAT-scans. Written by Juergen "
-"Nickelsen and Jamie Zawinski."
+#: hacks/config/imsmap.xml.h:9
+msgid "IMSMap"
 msgstr ""
 
-#: hacks/config/interaggregate.xml.h:2
-msgid "Interaggregate"
-msgstr ""
+#: hacks/config/imsmap.xml.h:15
+#, fuzzy
+msgid "Saturation gradients"
+msgstr "標準"
 
-#: hacks/config/interaggregate.xml.h:3 hacks/config/intermomentary.xml.h:3
-msgid "Number of Discs"
+#: hacks/config/imsmap.xml.h:18
+msgid ""
+"This generates random cloud-like patterns. The idea is to take four points "
+"on the edge of the image, and assign each a random \"elevation\". Then find "
+"the point between them, and give it a value which is the average of the "
+"other four, plus some small random offset. Coloration is done based on "
+"elevation. Written by Juergen Nickelsen and Jamie Zawinski; 1992."
 msgstr ""
 
-#: hacks/config/interaggregate.xml.h:6
+#: hacks/config/interaggregate.xml.h:1
 msgid ""
-"The Intersection Aggregate is a fun visualization defining the relationships "
-"between objects with Casey Reas, William Ngan, and Robert Hodgin. "
-"Commissioned for display at the Whitney Museum of American Art. A surface "
-"filled with 100 medium to small sized circles. Each circle has a different "
-"size and direction, but moves at the same slow rate. Display: A. The "
-"instantaneous intersections of the circles. B. The aggregate intersections "
-"of the circles. Ported to XScreensaver from the art project \"InterAggregate"
-"\" at http://www.complexification.net"
+"A surface is filled with a hundred medium to small sized circles. Each "
+"circle has a different size and direction, but moves at the same slow rate. "
+"Displays the instantaneous intersections of the circles as well as the "
+"aggregate intersections of the circles. Though actually it doesn't look like "
+"circles at all! Written by Casey Reas, William Ngan, Robert Hodgin, and "
+"Jamie Zawinski; 2004."
 msgstr ""
 
-#: hacks/config/interference.xml.h:1 hacks/config/rotzoomer.xml.h:1
-msgid "0"
+#: hacks/config/interaggregate.xml.h:5
+msgid "Interaggregate"
 msgstr ""
 
-#: hacks/config/interference.xml.h:2
-msgid "360"
+#: hacks/config/interaggregate.xml.h:8 hacks/config/intermomentary.xml.h:8
+msgid "Number of discs"
 msgstr ""
 
-#: hacks/config/interference.xml.h:3
-msgid "Anim Speed"
+#: hacks/config/interference.xml.h:2
+msgid "360"
 msgstr ""
 
 #: hacks/config/interference.xml.h:4
 msgid ""
-"Another color-field hack, this one works by computing decaying sinusoidal "
-"waves, and allowing them to interfere with each other as their origins move. "
-"Written by Hannu Mallat."
+"Color field based on computing decaying sinusoidal waves. Written by Hannu "
+"Mallat; 1998."
 msgstr ""
 
 #: hacks/config/interference.xml.h:9
@@ -5218,283 +5446,276 @@ msgstr ""
 msgid "Interference"
 msgstr ""
 
-#: hacks/config/interference.xml.h:13 hacks/config/t3d.xml.h:9
-#: hacks/config/xearth.xml.h:11 hacks/config/zoom.xml.h:5
+#: hacks/config/interference.xml.h:13 hacks/config/t3d.xml.h:10
 msgid "Magnification"
 msgstr ""
 
 #: hacks/config/interference.xml.h:16
-msgid "Number of Waves"
+msgid "Number of waves"
 msgstr ""
 
-#: hacks/config/interference.xml.h:20
-msgid "Wave Size"
+#: hacks/config/interference.xml.h:21
+msgid "Wave size"
 msgstr ""
 
-#: hacks/config/intermomentary.xml.h:2
-msgid "Intermomentary"
+#: hacks/config/intermomentary.xml.h:1
+msgid "400"
 msgstr ""
 
-#: hacks/config/intermomentary.xml.h:6
+#: hacks/config/intermomentary.xml.h:3
 msgid ""
-"The Intersection Momentary is a fun visualization defining the relationships "
-"between objects with Casey Reas, William Ngan, and Robert Hodgin. "
-"Commissioned for display at the Whitney Museum of American Art. A surface "
-"filled with 100 medium to small sized circles. Each circle has a different "
-"size and direction, but moves at the same slow rate. Display: A. The "
-"instantaneous intersections of the circles. B. The aggregate intersections "
-"of the circles. Ported to XScreensaver from the art project \"InterMomentary"
-"\" at http://www.complexification.net"
+"A surface is filled with a hundred medium to small sized circles. Each "
+"circle has a different size and direction, but moves at the same slow rate. "
+"Displays the instantaneous intersections of the circles as well as the "
+"aggregate intersections of the circles. The circles begin with a radius of 1 "
+"pixel and slowly increase to some arbitrary size. Circles are drawn with "
+"small moving points along the perimeter. The intersections are rendered as "
+"glowing orbs. Glowing orbs are rendered only when a perimeter point moves "
+"past the intersection point. Written by Casey Reas, William Ngan, Robert "
+"Hodgin, and Jamie Zawinski; 2004."
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:2
-msgid "Chrome"
+#: hacks/config/intermomentary.xml.h:6
+msgid "Intermomentary"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:3
+#: hacks/config/jigglypuff.xml.h:2
 msgid "Clown barf"
 msgstr ""
 
+#: hacks/config/jigglypuff.xml.h:3
+#, fuzzy
+msgid "Collapse"
+msgstr "カラーマップ"
+
 #: hacks/config/jigglypuff.xml.h:5
 #, fuzzy
 msgid "Cycle"
 msgstr "繰り返す周期: "
 
-#: hacks/config/jigglypuff.xml.h:7
+#: hacks/config/jigglypuff.xml.h:6
+#, fuzzy
+msgid "Expand"
+msgstr "表示モード"
+
+#: hacks/config/jigglypuff.xml.h:8
 msgid "Flower box"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:9
+#: hacks/config/jigglypuff.xml.h:11
 msgid "Inertial damping"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:10
+#: hacks/config/jigglypuff.xml.h:12
 msgid "JigglyPuff"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:14
-msgid "Rotation speed"
+#: hacks/config/jigglypuff.xml.h:15
+msgid "Randomize almost everything"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:17 hacks/config/sphere.xml.h:7
+#: hacks/config/jigglypuff.xml.h:19 hacks/config/sphere.xml.h:8
 msgid "Sphere"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:18
+#: hacks/config/jigglypuff.xml.h:20
 msgid "Sphere strength"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:19
+#: hacks/config/jigglypuff.xml.h:21
 msgid "Spookiness"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:20
+#: hacks/config/jigglypuff.xml.h:22
 msgid "Spoooooky"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:21 hacks/config/polyhedra.xml.h:148
-#: hacks/config/sballs.xml.h:16
-msgid "Tetrahedron"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:22
-msgid ""
-"This little gem does bad things with quasi-spherical objects. The gist of it "
-"is that you have what is, structurally, a tetrahedron with tesselated faces. "
-"the vertices on these faces have forces on them in the form of one "
-"proportional to their distance from the surface of a sphere, and one which "
-"is proportional to how far they differ from some ideal distance from their "
-"neighbors. They also have inertia. The forces and distance are parameters "
-"and there are also a couple of visual parameters. The resulting effect can "
-"range from a shape that does nothing, to a frenetic polygon storm. Somewhere "
-"in between there it usually manifests as a blob that jiggles in a kind of "
-"disturbing manner. woo. It doesn't matter, however. You should just pick "
-"'random'. It overrides all the other options, except for fps, delay and "
-"complexity. By Keith Macleod"
+#: hacks/config/jigglypuff.xml.h:23
+msgid "Strong"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:23
-msgid "Vertex-vertex behavior"
+#: hacks/config/jigglypuff.xml.h:24 hacks/config/morph3d.xml.h:12
+#: hacks/config/polyhedra.xml.h:150 hacks/config/sballs.xml.h:15
+msgid "Tetrahedron"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:24
-msgid "Vertex-vertex force"
+#: hacks/config/jigglypuff.xml.h:25
+msgid ""
+"This does bad things with quasi-spherical objects. You have a tetrahedron "
+"with tesselated faces. The vertices on these faces have forces on them: one "
+"proportional to the distance from the surface of a sphere; and one "
+"proportional to the distance from the neighbors. They also have inertia. The "
+"resulting effect can range from a shape that does nothing, to a frenetic "
+"polygon storm. Somewhere in between there it usually manifests as a blob "
+"that jiggles in a kind of disturbing manner. Written by Keith Macleod; 2003."
 msgstr ""
 
 #: hacks/config/jigglypuff.xml.h:26
-msgid "collapse"
+msgid "Vertex-vertex behavior"
 msgstr ""
 
 #: hacks/config/jigglypuff.xml.h:27
-msgid "expand"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:28
-msgid "none"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:29
-msgid "strong"
+msgid "Vertex-vertex force"
 msgstr ""
 
-#: hacks/config/jigsaw.xml.h:4
+#: hacks/config/jigsaw.xml.h:5
 msgid "Jigsaw"
 msgstr ""
 
-#: hacks/config/jigsaw.xml.h:6
-msgid "Solved Duration"
-msgstr ""
-
-#: hacks/config/jigsaw.xml.h:8
+#: hacks/config/jigsaw.xml.h:9
 msgid ""
 "This grabs a screen image, carves it up into a jigsaw puzzle, shuffles it, "
 "and then solves the puzzle. This works especially well when you feed it an "
 "external video signal instead of letting it grab the screen image (actually, "
 "I guess this is generally true...) When it is grabbing a video image, it is "
 "sometimes pretty hard to guess what the image is going to look like once the "
-"puzzle is solved. Written by Jamie Zawinski."
+"puzzle is solved. Written by Jamie Zawinski; 1998."
 msgstr ""
 
-#: hacks/config/juggle.xml.h:1
-msgid "Draws a juggling stick-man. Written by Tim Auckland."
+#: hacks/config/juggle.xml.h:2
+msgid "Bowling balls"
 msgstr ""
 
 #: hacks/config/juggle.xml.h:3
-msgid "Juggle"
+msgid "Clubs"
 msgstr ""
 
-#: hacks/config/juggle.xml.h:6
-msgid "Performance Length"
+#: hacks/config/juggle.xml.h:4
+msgid ""
+"Draws a juggling stick-man. See also \"Juggler3D\". http://en.wikipedia.org/"
+"wiki/Siteswap Written by Tim Auckland; 2002."
 msgstr ""
 
-#: hacks/config/juggle.xml.h:11
-msgid "Use Pattern "
+#: hacks/config/juggle.xml.h:6
+msgid "Flaming torches"
 msgstr ""
 
-#: hacks/config/juggle.xml.h:12
-msgid "turn on/off Balls."
+#: hacks/config/juggle.xml.h:9
+msgid "Juggle"
 msgstr ""
 
-#: hacks/config/juggle.xml.h:13
-msgid "turn on/off Bowling Balls."
+#: hacks/config/juggle.xml.h:10
+msgid "Juggle this pattern"
 msgstr ""
 
-#: hacks/config/juggle.xml.h:14
-msgid "turn on/off Clubs."
+#: hacks/config/juggle.xml.h:11
+msgid "Knives"
 msgstr ""
 
 #: hacks/config/juggle.xml.h:15
-msgid "turn on/off Flaming Torches."
+msgid "Performance length"
 msgstr ""
 
 #: hacks/config/juggle.xml.h:16
-msgid "turn on/off Knives."
+msgid "Print Cambridge juggling pattern descriptions"
 msgstr ""
 
 #: hacks/config/juggle.xml.h:17
-msgid "turn on/off Rings."
-msgstr ""
-
-#: hacks/config/juggle.xml.h:18
-msgid "turn on/off pattern descriptions."
-msgstr ""
+#, fuzzy
+msgid "Rings"
+msgstr "設定"
 
 #: hacks/config/juggler3d.xml.h:1
 msgid ""
-"3D simulation of a juggler performing with balls, clubs and rings. Written "
-"by Brian Apps and partially based on his Win32 Juggle Saver program."
+"3D simulation of a juggler performing with balls, clubs and rings. http://en."
+"wikipedia.org/wiki/Siteswap Written by Brian Apps; 2005."
 msgstr ""
 
-#: hacks/config/juggler3d.xml.h:3
-msgid "Juggler Horizontal Speed"
+#: hacks/config/juggler3d.xml.h:5
+msgid "Juggler horizontal speed"
 msgstr ""
 
-#: hacks/config/juggler3d.xml.h:4
-msgid "Juggler Spin Speed"
+#: hacks/config/juggler3d.xml.h:6
+msgid "Juggler spin speed"
 msgstr ""
 
-#: hacks/config/juggler3d.xml.h:5
+#: hacks/config/juggler3d.xml.h:7
 msgid "Juggler3D"
 msgstr ""
 
-#: hacks/config/juggler3d.xml.h:6
-msgid "Juggling Speed"
+#: hacks/config/juggler3d.xml.h:8
+msgid "Juggling speed"
 msgstr ""
 
-#: hacks/config/juggler3d.xml.h:7
-msgid "Max Height"
+#: hacks/config/juggler3d.xml.h:10
+msgid "Max height"
 msgstr ""
 
-#: hacks/config/juggler3d.xml.h:8
-msgid "Max Objects"
+#: hacks/config/juggler3d.xml.h:11
+msgid "Max objects"
 msgstr ""
 
-#: hacks/config/juggler3d.xml.h:9
-msgid "Min Height"
+#: hacks/config/juggler3d.xml.h:12
+msgid "Min height"
 msgstr ""
 
-#: hacks/config/juggler3d.xml.h:10
-msgid "Min Objects"
+#: hacks/config/juggler3d.xml.h:13
+msgid "Min objects"
+msgstr ""
+
+#: hacks/config/julia.xml.h:1
+msgid ""
+"Animates the Julia set (a close relative of the Mandelbrot set). The small "
+"moving dot indicates the control point from which the rest of the image was "
+"generated. See also the \"Discrete\" screen saver. http://en.wikipedia.org/"
+"wiki/Julia_set Written by Sean McCullough; 1997."
 msgstr ""
 
-#: hacks/config/julia.xml.h:3 hacks/config/rorschach.xml.h:4
+#: hacks/config/julia.xml.h:6 hacks/config/rorschach.xml.h:3
 msgid "Iterations"
 msgstr ""
 
-#: hacks/config/julia.xml.h:4
+#: hacks/config/julia.xml.h:7
 msgid "Julia"
 msgstr ""
 
-#: hacks/config/julia.xml.h:11
-msgid ""
-"This one draws spinning, animating (are you detecting a pattern here yet?) "
-"explorations of the Julia set. You've probably seen static images of this "
-"fractal form before, but it's a lot of fun to watch in motion as well. One "
-"interesting thing is that there is a small swinging dot passing in front of "
-"the image, which indicates the control point from which the rest of the "
-"image was generated. Written by Sean McCullough."
+#: hacks/config/kaleidescope.xml.h:1
+msgid "3"
 msgstr ""
 
-#: hacks/config/kaleidescope.xml.h:1
+#: hacks/config/kaleidescope.xml.h:2
+msgid "32"
+msgstr ""
+
+#: hacks/config/kaleidescope.xml.h:3
 msgid ""
-"Another clone of an ancient meme, consisting largely of frenetic rotational "
-"motion of colored lines. This one is by Ron Tapia. The motion is nice, but I "
-"think it needs more solids, or perhaps just brighter colors. More variations "
-"in the rotational speed might help, too."
+"A simple kaleidoscope. See also \"GLeidescope\". http://en.wikipedia.org/"
+"wiki/Kaleidoscope Written by Ron Tapia; 1997."
 msgstr ""
 
-#: hacks/config/kaleidescope.xml.h:4
+#: hacks/config/kaleidescope.xml.h:7
 msgid "Kaleidescope"
 msgstr ""
 
-#: hacks/config/kaleidescope.xml.h:6 hacks/config/qix.xml.h:18
+#: hacks/config/kaleidescope.xml.h:10 hacks/config/qix.xml.h:19
 msgid "Segments"
 msgstr ""
 
-#: hacks/config/kaleidescope.xml.h:9
+#: hacks/config/kaleidescope.xml.h:12
 msgid "Symmetry"
 msgstr ""
 
-#: hacks/config/kaleidescope.xml.h:10
+#: hacks/config/kaleidescope.xml.h:13
 msgid "Trails"
 msgstr ""
 
-#: hacks/config/klein.xml.h:3
+#: hacks/config/klein.xml.h:4
 msgid "Klein"
 msgstr ""
 
 #: hacks/config/klein.xml.h:10
 msgid ""
 "This draws a visualization of a Klein bottle or some other interesting "
-"parametric surfaces. Written by Andrey Mirtchovski."
+"parametric surfaces. http://en.wikipedia.org/wiki/Klein_bottle Written by "
+"Andrey Mirtchovski; 2003."
 msgstr ""
 
 #: hacks/config/klein.xml.h:11
-msgid "Use Randomized Surfaces and Primitives"
+msgid "Use randomized surfaces and primitives"
 msgstr ""
 
-#: hacks/config/klein.xml.h:12
-msgid "Wander Around the Screen"
+#: hacks/config/kumppa.xml.h:2
+msgid "Double buffer"
 msgstr ""
 
 #: hacks/config/kumppa.xml.h:5
@@ -5505,35 +5726,32 @@ msgstr ""
 msgid "Randomize"
 msgstr ""
 
-#: hacks/config/kumppa.xml.h:10
+#: hacks/config/kumppa.xml.h:9
 msgid ""
 "Spiraling, spinning, and very, very fast splashes of color rush toward the "
-"screen. Written by Teemu Suutari."
+"screen. Written by Teemu Suutari; 1998."
 msgstr ""
 
-#: hacks/config/lament.xml.h:1
+#: hacks/config/lament.xml.h:2
+#, no-c-format
 msgid ""
-"Animates a simulation of Lemarchand's Box, repeatedly solving itself. "
-"Requires OpenGL, and a machine with fast hardware support for texture maps. "
-"Warning: occasionally opens doors. Written by Jamie Zawinski."
+"Animates a simulation of Lemarchand's Box, the Lament Configuration, "
+"repeatedly solving itself. Warning: occasionally opens doors. http://en."
+"wikipedia.org/wiki/Lemarchand%27s_box Written by Jamie Zawinski; 1998."
 msgstr ""
 
-#: hacks/config/lament.xml.h:3
+#: hacks/config/lament.xml.h:5
 msgid "Lament"
 msgstr ""
 
-#: hacks/config/laser.xml.h:4
+#: hacks/config/laser.xml.h:5
 msgid "Laser"
 msgstr ""
 
-#: hacks/config/laser.xml.h:7
+#: hacks/config/laser.xml.h:9
 msgid ""
-"Moving radiating lines, that look vaguely like scanning laser beams. Written "
-"by Pascal Pensa. (Frankie say: relax.)"
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:2 hacks/config/xmountains.xml.h:2
-msgid "10"
+"Moving radiating lines, that look vaguely like scanning laser beams. "
+"(Frankie say relax.) Written by Pascal Pensa; 1997."
 msgstr ""
 
 #: hacks/config/lavalite.xml.h:4
@@ -5544,32 +5762,37 @@ msgstr ""
 msgid "Cone Lavalite"
 msgstr ""
 
+#: hacks/config/lavalite.xml.h:7
+msgid "Don't Rotate"
+msgstr ""
+
 #: hacks/config/lavalite.xml.h:8
 msgid ""
-"Draws a 3D Simulation a Lava Lite(r): odd-shaped blobs of a mysterious "
+"Draws a 3D Simulation a Lava Lite(r). Odd-shaped blobs of a mysterious "
 "substance are heated, slowly rise to the top of the bottle, and then drop "
-"back down as they cool. This program requires OpenGL and a fairly fast "
-"machine (both CPU and 3D performance.) Written by Jamie Zawinski. \"LAVA LITE"
-"(r) and the configuration of the LAVA(r) brand motion lamp are registered "
-"trademarks of Haggerty Enterprises, Inc. The configuration of the globe and "
-"base of the motion lamp are registered trademarks of Haggerty Enterprises, "
-"Inc. in the U.S.A. and in other countries around the world.\""
+"back down as they cool. This simulation requires a fairly fast machine (both "
+"CPU and 3D performance.) \"LAVA LITE(r) and the configuration of the LAVA(r) "
+"brand motion lamp are registered trademarks of Haggerty Enterprises, Inc. "
+"The configuration of the globe and base of the motion lamp are registered "
+"trademarks of Haggerty Enterprises, Inc. in the U.S.A. and in other "
+"countries around the world.\" http://en.wikipedia.org/wiki/Lava_lamp http://"
+"en.wikipedia.org/wiki/Metaballs Written by Jamie Zawinski; 2002."
 msgstr ""
 
-#: hacks/config/lavalite.xml.h:9
-msgid "Faceted"
+#: hacks/config/lavalite.xml.h:10
+msgid "Giant Lavalite"
 msgstr ""
 
-#: hacks/config/lavalite.xml.h:11
-msgid "Giant Lavalite"
+#: hacks/config/lavalite.xml.h:12
+msgid "Impatient"
 msgstr ""
 
 #: hacks/config/lavalite.xml.h:13
-msgid "LavaLite"
+msgid "Lavalite"
 msgstr ""
 
 #: hacks/config/lavalite.xml.h:15
-msgid "Max Blobs"
+msgid "Max blobs"
 msgstr ""
 
 #: hacks/config/lavalite.xml.h:16
@@ -5580,305 +5803,449 @@ msgstr ""
 msgid "Rocket Lavalite"
 msgstr ""
 
-#: hacks/config/lightning.xml.h:2
-msgid "Lightning"
+#: hacks/config/lcdscrub.xml.h:2
+msgid "Diagonal black"
+msgstr ""
+
+#: hacks/config/lcdscrub.xml.h:3
+msgid "Diagonal white"
+msgstr ""
+
+#: hacks/config/lcdscrub.xml.h:6
+msgid "Horizontal black"
+msgstr ""
+
+#: hacks/config/lcdscrub.xml.h:7
+msgid "Horizontal white"
+msgstr ""
+
+#: hacks/config/lcdscrub.xml.h:8
+msgid "LCDscrub"
+msgstr ""
+
+#: hacks/config/lcdscrub.xml.h:9
+msgid "Line spread"
+msgstr ""
+
+#: hacks/config/lcdscrub.xml.h:12
+msgid "Solid black"
+msgstr ""
+
+#: hacks/config/lcdscrub.xml.h:13
+msgid "Solid white"
 msgstr ""
 
-#: hacks/config/lightning.xml.h:7
+#: hacks/config/lcdscrub.xml.h:14
 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."
+"This screen saver is not meant to look pretty, but rather, to repair burn-in "
+"on LCD monitors. Believe it or not, screen burn is not a thing of the past. "
+"It can happen to LCD screens pretty easily, even in this modern age. "
+"However, leaving the screen on and displaying high contrast images can often "
+"repair the damage. That's what this screen saver does. See also: http://docs."
+"info.apple.com/article.html?artnum=88343 http://toastycode.com/"
+"blog/2008/02/05/lcd-scrub/ Inspired by the like-named program by Daniel "
+"Sandler. Written by Jamie Zawinski; 2008."
 msgstr ""
 
-#: hacks/config/lisa.xml.h:4
-msgid "Lisa"
+#: hacks/config/lcdscrub.xml.h:15
+msgid "Vertical black"
 msgstr ""
 
-#: hacks/config/lisa.xml.h:10
-msgid "Steps"
+#: hacks/config/lcdscrub.xml.h:16
+msgid "Vertical white"
+msgstr ""
+
+#: hacks/config/lightning.xml.h:1
+msgid "Crackling fractal lightning bolts. Written by Keith Romberg; 1997."
+msgstr ""
+
+#: hacks/config/lightning.xml.h:4
+msgid "Lightning"
 msgstr ""
 
-#: hacks/config/lisa.xml.h:11
+#: hacks/config/lisa.xml.h:8
+msgid "Lisa"
+msgstr ""
+
+#: hacks/config/lisa.xml.h:9
 msgid ""
-"This draws Lisajous loops, by Caleb Cullen. Remember that device they had "
-"the Phantom Zone prisoners in during their trial in Superman? I think that "
-"was one of these."
+"Lissajous loops. http://en.wikipedia.org/wiki/Lissajous_curve Written by "
+"Caleb Cullen; 1997."
+msgstr ""
+
+#: hacks/config/lisa.xml.h:16
+msgid "Steps"
 msgstr ""
 
-#: hacks/config/lissie.xml.h:1
+#: hacks/config/lissie.xml.h:7
 msgid ""
-"Another Lissajous figure. This one draws the progress of circular shapes "
-"along a path. Written by Alexander Jolk."
+"Lissajous loops. This one draws the progress of circular shapes along a "
+"path. http://en.wikipedia.org/wiki/Lissajous_curve Written by Alexander "
+"Jolk; 1997."
 msgstr ""
 
-#: hacks/config/lissie.xml.h:5
+#: hacks/config/lissie.xml.h:8
 msgid "Lissie"
 msgstr ""
 
 #: hacks/config/lmorph.xml.h:1
-msgid "Closed Figures"
+msgid "Closed figures"
 msgstr ""
 
 #: hacks/config/lmorph.xml.h:2
-msgid "Control Points"
+msgid "Control points"
 msgstr ""
 
-#: hacks/config/lmorph.xml.h:4
-msgid "Interpolation Steps"
-msgstr ""
+#: hacks/config/lmorph.xml.h:6
+#, fuzzy
+msgid "Interpolation steps"
+msgstr "フェードする時間: "
 
-#: hacks/config/lmorph.xml.h:5
+#: hacks/config/lmorph.xml.h:7
 msgid "LMorph"
 msgstr ""
 
-#: hacks/config/lmorph.xml.h:6
+#: hacks/config/lmorph.xml.h:8
 msgid "Less"
 msgstr ""
 
-#: hacks/config/lmorph.xml.h:8
+#: hacks/config/lmorph.xml.h:12
 msgid "More"
 msgstr ""
 
-#: hacks/config/lmorph.xml.h:9
-msgid "Open Figures"
+#: hacks/config/lmorph.xml.h:13
+msgid "Open and closed figures"
 msgstr ""
 
-#: hacks/config/lmorph.xml.h:10
-msgid "Open and Closed Figures"
+#: hacks/config/lmorph.xml.h:14
+msgid "Open figures"
 msgstr ""
 
-#: hacks/config/lmorph.xml.h:15
+#: hacks/config/lmorph.xml.h:18
 msgid ""
 "This generates random spline-ish line drawings and morphs between them. "
-"Written by Sverre H. Huseby and Glenn T. Lines."
+"Written by Sverre H. Huseby and Glenn T. Lines; 1995."
+msgstr ""
+
+#: hacks/config/lockward.xml.h:1
+msgid ""
+"A translucent spinning, blinking thing. Sort of a cross between the wards in "
+"an old combination lock and those old backlit information displays that "
+"animated and changed color via polarized light. Written by Leo L. Schwab; "
+"2007."
+msgstr ""
+
+#: hacks/config/lockward.xml.h:2
+msgid "Blinking effects"
+msgstr ""
+
+#: hacks/config/lockward.xml.h:5
+msgid "Lockward"
+msgstr ""
+
+#: hacks/config/lockward.xml.h:7
+msgid "Maximum blink dwell time"
+msgstr ""
+
+#: hacks/config/lockward.xml.h:8
+msgid "Maximum blink idle time"
+msgstr ""
+
+#: hacks/config/lockward.xml.h:9
+msgid "Maximum rotator idle time"
+msgstr ""
+
+#: hacks/config/lockward.xml.h:10
+msgid "Minimum blink dwell time"
+msgstr ""
+
+#: hacks/config/lockward.xml.h:11
+msgid "Minimum blink idle time"
+msgstr ""
+
+#: hacks/config/lockward.xml.h:12
+msgid "Miniumum rotator idle time"
 msgstr ""
 
 #: hacks/config/loop.xml.h:3
+#, no-c-format
+msgid ""
+"Generates loop-shaped colonies that spawn, age, and eventually die. http://"
+"en.wikipedia.org/wiki/Langton%27s_loops Written by David Bagley; 1999."
+msgstr ""
+
+#: hacks/config/loop.xml.h:6
 msgid "Loop"
 msgstr ""
 
-#: hacks/config/loop.xml.h:10
+#: hacks/config/m6502.xml.h:3
+msgid "Assembly file"
+msgstr ""
+
+#: hacks/config/m6502.xml.h:4
+msgid "Display time for each program"
+msgstr ""
+
+#: hacks/config/m6502.xml.h:6
 msgid ""
-"This one produces loop-shaped colonies that spawn, age, and eventually die. "
-"Written by David Bagley."
+"This emulates a 6502 microprocessor. The family of 6502 chips were used "
+"throughout the 70's and 80's in machines such as the Atari 2600, Commodore "
+"PET, VIC20 and C64, Apple ][, and the NES. Some example programs are "
+"included, and it can also read in an assembly file as input. Original "
+"JavaScript Version by Stian Soreng: http://www.6502asm.com/. Ported to "
+"XScreenSaver by Jeremy English. Written by Stian Soreng and Jeremy English; "
+"2007."
 msgstr ""
 
-#: hacks/config/maze.xml.h:3
-msgid "Backtracking Generator"
+#: hacks/config/m6502.xml.h:7
+msgid "m6502"
 msgstr ""
 
-#: hacks/config/maze.xml.h:5 hacks/config/slidescreen.xml.h:3
-msgid "Grid Size"
+#: hacks/config/maze.xml.h:3
+msgid "Backtracking generator"
 msgstr ""
 
-#: hacks/config/maze.xml.h:6
-msgid "Head Toward Exit"
+#: hacks/config/maze.xml.h:5
+msgid "Grid size"
 msgstr ""
 
-#: hacks/config/maze.xml.h:7
-msgid "Ignorant of Exit Direction"
+#: hacks/config/maze.xml.h:6
+msgid "Head toward exit"
 msgstr ""
 
 #: hacks/config/maze.xml.h:8
-msgid "Joining Generator"
+msgid "Ignorant of exit direction"
 msgstr ""
 
 #: hacks/config/maze.xml.h:9
-msgid "Maze"
+msgid "Joining generator"
 msgstr ""
 
 #: hacks/config/maze.xml.h:10
-msgid "Post-Solve Delay"
+msgid "Linger after solving"
 msgstr ""
 
 #: hacks/config/maze.xml.h:11
-msgid "Pre-Solve Delay"
-msgstr ""
-
-#: hacks/config/maze.xml.h:12
-msgid "Random Generator"
+msgid "Linger before solving"
 msgstr ""
 
 #: hacks/config/maze.xml.h:13
-msgid "Seeding Generator"
+msgid "Maze"
 msgstr ""
 
+#: hacks/config/maze.xml.h:14
+#, fuzzy
+msgid "Random generator"
+msgstr "ランダムなスクリーンセーバー"
+
 #: hacks/config/maze.xml.h:15
-msgid "Solve Speed"
+msgid "Seeding generator"
 msgstr ""
 
-#: hacks/config/maze.xml.h:16
+#: hacks/config/maze.xml.h:17
 msgid ""
-"This is the ancient X maze demo, modified to work with xscreensaver. It "
-"generates a random maze, then solves it with visual feedback. Originally by "
-"Jim Randell; modified by a cast of thousands."
+"This generates random mazes (with various different algorithms), and then "
+"solves them. Backtracking and look-ahead paths are displayed in different "
+"colors. Written by Jim Randell and many others; 1992."
 msgstr ""
 
 #: hacks/config/memscroller.xml.h:1
-msgid "Draw Green"
+msgid "Draw green"
 msgstr ""
 
 #: hacks/config/memscroller.xml.h:2
-msgid "Draw Random Numbers"
+msgid "Draw in RGB"
 msgstr ""
 
 #: hacks/config/memscroller.xml.h:3
-msgid "Draw in RGB"
+msgid "Draw random numbers"
 msgstr ""
 
 #: hacks/config/memscroller.xml.h:4
-msgid "Dump Memory"
+msgid "Dump memory"
 msgstr ""
 
-#: hacks/config/memscroller.xml.h:6
+#: hacks/config/memscroller.xml.h:8
 msgid "MemScroller"
 msgstr ""
 
-#: hacks/config/memscroller.xml.h:9
+#: hacks/config/memscroller.xml.h:10
 msgid ""
 "This draws a dump of its own process memory scrolling across the screen in "
-"three windows at three different rates. Written by Jamie Zawinski."
+"three windows at three different rates. Written by Jamie Zawinski; 2004."
+msgstr ""
+
+#: hacks/config/menger.xml.h:7 hacks/config/sierpinski3d.xml.h:6
+msgid "Max depth"
 msgstr ""
 
-#: hacks/config/menger.xml.h:6
+#: hacks/config/menger.xml.h:8
 msgid "Menger"
 msgstr ""
 
-#: hacks/config/menger.xml.h:19
+#: hacks/config/menger.xml.h:18
 msgid ""
 "This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
-"by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/metaballs.xml.h:1
-msgid "Big"
+"cube-based fractal object analagous to the Sierpinski Tetrahedron. http://en."
+"wikipedia.org/wiki/Menger_sponge http://en.wikipedia.org/wiki/"
+"Sierpinski_carpet Written by Jamie Zawinski; 2001."
 msgstr ""
 
 #: hacks/config/metaballs.xml.h:2
 msgid ""
 "Draws two dimensional metaballs: overlapping and merging balls with fuzzy "
-"edges. By W.P. van Paassen."
+"edges. http://en.wikipedia.org/wiki/Metaballs Written by W.P. van Paassen; "
+"2003."
 msgstr ""
 
-#: hacks/config/metaballs.xml.h:7
+#: hacks/config/metaballs.xml.h:9
 msgid "MetaBall Movement"
 msgstr ""
 
-#: hacks/config/metaballs.xml.h:8
+#: hacks/config/metaballs.xml.h:10
 msgid "MetaBall Radius"
 msgstr ""
 
-#: hacks/config/metaballs.xml.h:9
+#: hacks/config/metaballs.xml.h:11
 msgid "MetaBalls"
 msgstr ""
 
-#: hacks/config/metaballs.xml.h:11
-msgid "Number of MetaBalls"
+#: hacks/config/metaballs.xml.h:12
+msgid "Metaball count"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:4
-msgid "Blobby"
+#: hacks/config/mirrorblob.xml.h:1
+msgid "0.1x"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:5 hacks/config/nerverot.xml.h:2
-msgid "Calm"
+#: hacks/config/mirrorblob.xml.h:2
+msgid "3.0x"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:7
-msgid ""
-"Draws a wobbly blob that distorts the image behind it. Requires OpenGL "
-"hardware acceleration for nice animation. Written by Jon Dowdall."
+#: hacks/config/mirrorblob.xml.h:3 hacks/config/timetunnel.xml.h:2
+#, fuzzy
+msgid "30 sec"
+msgstr "秒間"
+
+#: hacks/config/mirrorblob.xml.h:4
+msgid "5 min"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:8
-msgid "Enable Colouring"
+#: hacks/config/mirrorblob.xml.h:5
+#, fuzzy
+msgid "5 sec"
+msgstr "秒間"
+
+#: hacks/config/mirrorblob.xml.h:6
+msgid "50 bumps"
 msgstr ""
 
+#: hacks/config/mirrorblob.xml.h:8
+#, fuzzy
+msgid "Clear"
+msgstr "色"
+
 #: hacks/config/mirrorblob.xml.h:9
-msgid "Enable Reflected Image"
+msgid ""
+"Draws a wobbly blob that distorts the image behind it. Written by Jon "
+"Dowdall; 2003."
 msgstr ""
 
 #: hacks/config/mirrorblob.xml.h:10
-msgid "Enable Walls"
+msgid "Enable colouring"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:12
-msgid "Field Points"
+#: hacks/config/mirrorblob.xml.h:11
+msgid "Enable reflected image"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:13
-#, fuzzy
-msgid "Freaky"
-msgstr "グレー"
+#: hacks/config/mirrorblob.xml.h:12
+msgid "Enable walls"
+msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:14
+#: hacks/config/mirrorblob.xml.h:16
 msgid "MirrorBlob"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:16
-msgid "Offset Texture Coordinates"
+#: hacks/config/mirrorblob.xml.h:18
+msgid "Offset texture coordinates"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:22
-msgid "Very Freaky"
+#: hacks/config/mirrorblob.xml.h:19 hacks/config/webcollage.xml.h:10
+msgid "Opaque"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:24
-msgid "X Resolution"
+#: hacks/config/mirrorblob.xml.h:22
+msgid "Show image on background"
 msgstr ""
 
 #: hacks/config/mirrorblob.xml.h:25
-msgid "Y Resolution"
+msgid "Transition duration"
 msgstr ""
 
-#: hacks/config/mismunch.xml.h:5
+#: hacks/config/mismunch.xml.h:7
 msgid "Mismunch"
 msgstr ""
 
-#: hacks/config/mismunch.xml.h:6
+#: hacks/config/mismunch.xml.h:8
 msgid ""
 "Munching errors! This is a creatively broken misimplementation of the "
-"classic munching squares graphics hack. Written by Steven Hazel."
+"classic munching squares graphics hack. See the \"Munch\" screen saver for "
+"the original. http://en.wikipedia.org/wiki/HAKMEM http://en.wikipedia.org/"
+"wiki/Munching_square Written by Steven Hazel; 2004."
 msgstr ""
 
-#: hacks/config/mismunch.xml.h:7
-msgid "One"
+#: hacks/config/mismunch.xml.h:12
+msgid "Simultaneous squares"
 msgstr ""
 
-#: hacks/config/mismunch.xml.h:9
-msgid "Simultaneous Squares"
+#: hacks/config/mismunch.xml.h:13 hacks/config/munch.xml.h:10
+msgid "Solid"
 msgstr ""
 
-#: hacks/config/mismunch.xml.h:13 hacks/config/munch.xml.h:10
-#: hacks/config/qix.xml.h:26
+#: hacks/config/mismunch.xml.h:14 hacks/config/munch.xml.h:11
+#: hacks/config/qix.xml.h:25
 msgid "XOR"
 msgstr ""
 
 #: hacks/config/moebius.xml.h:1
-msgid ""
-"Another M. C. Escher hack by Marcelo Vianna, this one draws ``Moebius Strip "
-"II,'' a GL image of ants walking along the surface of a moebius strip."
+msgid "Draw ants"
 msgstr ""
 
-#: hacks/config/moebius.xml.h:2
-msgid "Draw Ants"
+#: hacks/config/moebius.xml.h:5
+msgid "Moebius"
 msgstr ""
 
-#: hacks/config/moebius.xml.h:4
-msgid "Mesh Floor"
+#: hacks/config/moebius.xml.h:7
+msgid "Solid floor"
 msgstr ""
 
-#: hacks/config/moebius.xml.h:5
-msgid "Moebius"
+#: hacks/config/moebius.xml.h:8
+msgid ""
+"This animates a 3D rendition M.C. Escher's \"Moebius Strip II\", an image of "
+"ants walking along the surface of a moebius strip. http://en.wikipedia.org/"
+"wiki/Moebius_strip http://en.wikipedia.org/wiki/Maurits_Cornelis_Escher "
+"Written by Marcelo F. Vianna; 1997."
 msgstr ""
 
-#: hacks/config/moebius.xml.h:8
-msgid "Solid Floor"
+#: hacks/config/moebiusgears.xml.h:1
+msgid ""
+"Draws a closed, interlinked chain of rotating gears. The layout of the gears "
+"follows the path of a moebius strip. See also the \"Pinion\" and \"Gears\" "
+"screen savers. http://en.wikipedia.org/wiki/Involute_gear http://en."
+"wikipedia.org/wiki/Moebius_strip Written by Jamie Zawinski; 2007."
+msgstr ""
+
+#: hacks/config/moebiusgears.xml.h:6
+msgid "MoebiusGears"
+msgstr ""
+
+#: hacks/config/moebiusgears.xml.h:7
+msgid "Number of gears"
 msgstr ""
 
-#: hacks/config/moebius.xml.h:9 hacks/config/qix.xml.h:20
-msgid "Solid Objects"
+#: hacks/config/moebiusgears.xml.h:8
+msgid "Number of teeth"
 msgstr ""
 
 #: hacks/config/moire.xml.h:6
@@ -5889,110 +6256,138 @@ msgstr ""
 msgid "Offset"
 msgstr ""
 
-#: hacks/config/moire.xml.h:10
+#: hacks/config/moire.xml.h:12 hacks/config/rotzoomer.xml.h:14
+#: hacks/config/swirl.xml.h:12
+msgid "Use shared memory"
+msgstr ""
+
+#: hacks/config/moire.xml.h:13
 msgid ""
-"This one draws cool circular interference patterns. Most of the circles you "
-"see aren't explicitly rendered, but show up as a result of interactions "
-"between the other pixels that were drawn. Written by Jamie Zawinski, "
-"inspired by Java code by Michael Bayne. As he pointed out, the beauty of "
-"this one is that the heart of the display algorithm can be expressed with "
-"just a pair of loops and a handful of arithmetic, giving it a high ``display "
-"hack metric''."
+"When the lines on the screen Make more lines in between, That's a moire'! "
+"http://en.wikipedia.org/wiki/Moire_pattern Written by Jamie Zawinski and "
+"Michael Bayne; 1997."
 msgstr ""
 
-#: hacks/config/moire2.xml.h:1
+#: hacks/config/moire2.xml.h:2
 msgid ""
-"Another example of the fun you can have with moire interference patterns; "
-"this hack generates fields of concentric circles or ovals, and combines the "
-"planes with various operations. The planes are moving independently of one "
-"another, causing the interference lines to ``spray.'' Written by Jamie "
-"Zawinski."
+"Generates fields of concentric circles or ovals, and combines the planes "
+"with various operations. The planes are moving independently of one another, "
+"causing the interference lines to spray. http://en.wikipedia.org/wiki/"
+"Moire_pattern Written by Jamie Zawinski; 1998."
 msgstr ""
 
-#: hacks/config/moire2.xml.h:4
+#: hacks/config/moire2.xml.h:6
 msgid "Moire2"
 msgstr ""
 
 #: hacks/config/molecule.xml.h:3
-msgid "Describe Molecule"
+msgid "Describe molecule"
 msgstr ""
 
 #: hacks/config/molecule.xml.h:5
-msgid "Draw Atomic Bonds"
+msgid "Draw atomic bonds"
 msgstr ""
 
 #: hacks/config/molecule.xml.h:6
-msgid "Draw Atomic Nuclei"
-msgstr ""
-
-#: hacks/config/molecule.xml.h:7 hacks/config/spheremonics.xml.h:2
-msgid "Draw Bounding Box"
+msgid "Draw atomic nuclei"
 msgstr ""
 
 #: hacks/config/molecule.xml.h:8
-msgid "Draw Electron Shells"
+msgid "Draw electron shells"
 msgstr ""
 
-#: hacks/config/molecule.xml.h:9
+#: hacks/config/molecule.xml.h:10
+#, no-c-format
 msgid ""
 "Draws several different representations of molecules. Some common molecules "
-"are built in, and it can also read PDB (Protein Data Base) files as input. "
-"Written by Jamie Zawinski."
+"are built in, and it can also read PDB (Protein Data Bank) files as input. "
+"http://en.wikipedia.org/wiki/Protein_Data_Bank_%28file_format%29 Written by "
+"Jamie Zawinski; 2001."
 msgstr ""
 
-#: hacks/config/molecule.xml.h:12
-msgid "Label Atoms"
+#: hacks/config/molecule.xml.h:14
+msgid "Label atoms"
 msgstr ""
 
-#: hacks/config/molecule.xml.h:13
+#: hacks/config/molecule.xml.h:16
 msgid "Molecule"
 msgstr ""
 
-#: hacks/config/molecule.xml.h:14
-msgid "PDB File or Directory"
+#: hacks/config/molecule.xml.h:17
+msgid "PDB file or directory"
 msgstr ""
 
-#: hacks/config/morph3d.xml.h:1
-msgid ""
-"Another 3d shape-changing GL hack, by Marcelo Vianna. It has the same shiny-"
-"plastic feel as Superquadrics, as many computer-generated objects do..."
+#: hacks/config/morph3d.xml.h:1 hacks/config/polyhedra.xml.h:3
+#: hacks/config/sballs.xml.h:1
+msgid "Cube"
+msgstr ""
+
+#: hacks/config/morph3d.xml.h:2 hacks/config/polyhedra.xml.h:14
+#: hacks/config/sballs.xml.h:2
+msgid "Dodecahedron"
+msgstr ""
+
+#: hacks/config/morph3d.xml.h:5 hacks/config/polyhedra.xml.h:72
+#: hacks/config/sballs.xml.h:6
+msgid "Icosahedron"
 msgstr ""
 
-#: hacks/config/morph3d.xml.h:4
+#: hacks/config/morph3d.xml.h:7
 msgid "Morph3D"
 msgstr ""
 
-#: hacks/config/mountain.xml.h:3
+#: hacks/config/morph3d.xml.h:8 hacks/config/polyhedra.xml.h:86
+#: hacks/config/sballs.xml.h:8
+msgid "Octahedron"
+msgstr ""
+
+#: hacks/config/morph3d.xml.h:9
+msgid ""
+"Platonic solids that turn inside out and get spikey. http://en.wikipedia.org/"
+"wiki/Platonic_solid Written by Marcelo Vianna; 1997."
+msgstr ""
+
+#: hacks/config/mountain.xml.h:2
 msgid ""
-"Generates random 3d plots that look vaguely mountainous. Written by Pascal "
-"Pensa."
+"Generates random 3D plots that look vaguely mountainous. Written by Pascal "
+"Pensa; 1997."
 msgstr ""
 
-#: hacks/config/mountain.xml.h:5
+#: hacks/config/mountain.xml.h:7
 msgid "Mountain"
 msgstr ""
 
+#: hacks/config/mountain.xml.h:10
+msgid "Peaks"
+msgstr ""
+
 #: hacks/config/munch.xml.h:1
 msgid ""
 "DATAI 2 ADDB 1,2 ROTC 2,-22 XOR 1,2 JRST .-4 As reported by HAKMEM, in 1962, "
-"Jackson Wright wrote the above PDP-1 code. That code still lives on in this "
-"screenhack, some 35 years later. The number of lines of enclosing code has "
-"increased substantially, however. This version is by Tim Showalter."
+"Jackson Wright wrote the above PDP-1 code. That code still lives on here, "
+"some 46 years later. The number of lines of enclosing code has increased "
+"substantially, however. http://en.wikipedia.org/wiki/HAKMEM http://en."
+"wikipedia.org/wiki/Munching_square Written by Jackson Wright and Tim "
+"Showalter; 1997."
 msgstr ""
 
-#: hacks/config/munch.xml.h:5
+#: hacks/config/munch.xml.h:7
 msgid "Munch"
 msgstr ""
 
 #: hacks/config/nerverot.xml.h:1
-msgid "Blot Count"
+msgid "Blot count"
+msgstr ""
+
+#: hacks/config/nerverot.xml.h:2
+msgid "Calm"
 msgstr ""
 
 #: hacks/config/nerverot.xml.h:3
 msgid "Changes"
 msgstr ""
 
-#: hacks/config/nerverot.xml.h:4
+#: hacks/config/nerverot.xml.h:4 hacks/config/topblock.xml.h:4
 msgid "Colors"
 msgstr ""
 
@@ -6000,10 +6395,11 @@ msgstr ""
 msgid "Crunchiness"
 msgstr ""
 
-#: hacks/config/nerverot.xml.h:7
+#: hacks/config/nerverot.xml.h:6
 msgid ""
 "Draws different shapes composed of nervously vibrating squiggles, as if seen "
-"through a camera operated by a monkey on crack. By Dan Bornstein."
+"through a camera operated by a monkey on crack. Written by Dan Bornstein; "
+"2000."
 msgstr ""
 
 #: hacks/config/nerverot.xml.h:10
@@ -6027,65 +6423,47 @@ msgid "Spastic"
 msgstr ""
 
 #: hacks/config/noof.xml.h:1
-msgid "Draws some rotatey patterns, using OpenGL. Written by Mark Kilgard."
+msgid ""
+"Draws some rotatey patterns, using OpenGL. Written by Bill Torzewski; 2004."
 msgstr ""
 
-#: hacks/config/noof.xml.h:3
+#: hacks/config/noof.xml.h:5
 msgid "Noof"
 msgstr ""
 
 #: hacks/config/noseguy.xml.h:1
 msgid ""
-"A little man with a big nose wanders around your screen saying things. The "
-"things which he says are the output of a program or the contents of a file "
-"or URL, as configured on the \"Advanced\" tab of the main Screensaver "
-"Preferences window. By Dan Heller and Jamie Zawinski."
+"A little man with a big nose wanders around your screen saying things. "
+"Written by Dan Heller and Jamie Zawinski; 1992."
 msgstr ""
 
 #: hacks/config/noseguy.xml.h:2
-msgid "Get Text from File"
-msgstr ""
-
-#: hacks/config/noseguy.xml.h:3
-msgid "Get Text from Program"
+msgid "NoseGuy"
 msgstr ""
 
-#: hacks/config/noseguy.xml.h:4
-msgid "Noseguy"
-msgstr ""
-
-#: hacks/config/noseguy.xml.h:6
-msgid "Text File"
-msgstr ""
-
-#: hacks/config/noseguy.xml.h:8
-msgid "Use Text Below"
-msgstr ""
-
-#: hacks/config/pacman.xml.h:2
+#: hacks/config/pacman.xml.h:4
 msgid "Pacman"
 msgstr ""
 
-#: hacks/config/pacman.xml.h:3
-msgid "Player Size"
+#: hacks/config/pacman.xml.h:5
+msgid "Player size"
 msgstr ""
 
-#: hacks/config/pacman.xml.h:4
+#: hacks/config/pacman.xml.h:7
 msgid ""
-"Simulates a game of Pac-Man on a randomly-created level. Written by Edwin de "
-"Jong."
+"Simulates a game of Pac-Man on a randomly-created level. http://en.wikipedia."
+"org/wiki/Pac-Man Written by Edwin de Jong; 2004."
 msgstr ""
 
 #: hacks/config/pedal.xml.h:7
 msgid "Pedal"
 msgstr ""
 
-#: hacks/config/pedal.xml.h:8
+#: hacks/config/pedal.xml.h:9
 msgid ""
 "This is sort of a combination spirograph/string-art. It generates a large, "
-"complex polygon, and lets the X server do the bulk of the work by giving it "
-"an even/odd winding rule. Written by Dale Moore, based on some ancient PDP-"
-"11 code."
+"complex polygon, and renders it by filling using an even/odd winding rule. "
+"Written by Dale Moore; 1995."
 msgstr ""
 
 #: hacks/config/penetrate.xml.h:1
@@ -6101,44 +6479,50 @@ msgid "Penetrate"
 msgstr ""
 
 #: hacks/config/penetrate.xml.h:7
-msgid "Start badly, but learn"
+msgid ""
+"Simulates (something like) the classic arcade game Missile Command. http://"
+"en.wikipedia.org/wiki/Missile_Command Written by Adam Miller; 1999."
 msgstr ""
 
-#: hacks/config/penetrate.xml.h:8
-msgid ""
-"This hack simulates the classic arcade game Missile Command. Written by Adam "
-"Miller."
+#: hacks/config/penetrate.xml.h:9
+msgid "Start badly, but learn"
 msgstr ""
 
 #: hacks/config/penrose.xml.h:1
-msgid "Draw Ammann Lines"
+msgid "Draw ammann lines"
 msgstr ""
 
 #: hacks/config/penrose.xml.h:2
 msgid ""
 "Draws quasiperiodic tilings; think of the implications on modern formica "
-"technology. Written by Timo Korvola. In April 1997, Sir Roger Penrose, a "
-"British math professor who has worked with Stephen Hawking on such topics as "
-"relativity, black holes, and whether time has a beginning, filed a copyright-"
-"infringement lawsuit against the Kimberly-Clark Corporation, which Penrose "
-"said copied a pattern he created (a pattern demonstrating that ``a "
-"nonrepeating pattern could exist in nature'') for its Kleenex quilted toilet "
-"paper. Penrose said he doesn't like litigation but, ``When it comes to the "
-"population of Great Britain being invited by a multinational to wipe their "
-"bottoms on what appears to be the work of a Knight of the Realm, then a last "
-"stand must be taken.'' As reported by News of the Weird #491, 4-jul-1997."
-msgstr ""
-
-#: hacks/config/penrose.xml.h:6
+"technology. In April 1997, Sir Roger Penrose, a British math professor who "
+"has worked with Stephen Hawking on such topics as relativity, black holes, "
+"and whether time has a beginning, filed a copyright-infringement lawsuit "
+"against the Kimberly-Clark Corporation, which Penrose said copied a pattern "
+"he created (a pattern demonstrating that \"a nonrepeating pattern could "
+"exist in nature\") for its Kleenex quilted toilet paper. Penrose said he "
+"doesn't like litigation but, \"When it comes to the population of Great "
+"Britain being invited by a multinational to wipe their bottoms on what "
+"appears to be the work of a Knight of the Realm, then a last stand must be "
+"taken.\" As reported by News of the Weird #491, 4-Jul-1997. http://en."
+"wikipedia.org/wiki/Penrose_tiling Written by Timo Korvola; 1997."
+msgstr ""
+
+#: hacks/config/penrose.xml.h:9
 msgid "Penrose"
 msgstr ""
 
-#: hacks/config/petri.xml.h:2
-msgid "Colony Shape"
+#: hacks/config/penrose.xml.h:12 hacks/config/twang.xml.h:17
+msgid "Tile size"
 msgstr ""
 
+#: hacks/config/petri.xml.h:2
+#, fuzzy
+msgid "Colony shape"
+msgstr "色"
+
 #: hacks/config/petri.xml.h:3
-msgid "Death Comes"
+msgid "Death comes"
 msgstr ""
 
 #: hacks/config/petri.xml.h:4
@@ -6149,103 +6533,98 @@ msgstr ""
 msgid "Fertility"
 msgstr ""
 
-#: hacks/config/petri.xml.h:12
-msgid "Maximum Lifespan"
-msgstr ""
-
 #: hacks/config/petri.xml.h:13
-msgid "Maximum Rate of Death"
+msgid "Maximum lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:14
-msgid "Maximum Rate of Growth"
+msgid "Maximum rate of death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:15
-msgid "Minimum Lifespan"
+msgid "Maximum rate of growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:16
-msgid "Minimum Rate of Death"
+msgid "Minimum lifespan"
 msgstr ""
 
 #: hacks/config/petri.xml.h:17
-msgid "Minimum Rate of Growth"
+msgid "Minimum rate of death"
 msgstr ""
 
 #: hacks/config/petri.xml.h:18
-msgid "Mold Varieties"
+msgid "Minimum rate of growth"
 msgstr ""
 
 #: hacks/config/petri.xml.h:19
-msgid "Offspring"
+msgid "Mold varieties"
 msgstr ""
 
 #: hacks/config/petri.xml.h:20
-msgid "Petri"
+msgid "Offspring"
 msgstr ""
 
 #: hacks/config/petri.xml.h:21
+msgid "Petri"
+msgstr ""
+
+#: hacks/config/petri.xml.h:22
 msgid "Quickly"
 msgstr ""
 
-#: hacks/config/petri.xml.h:24
+#: hacks/config/petri.xml.h:26
 msgid "Slowly"
 msgstr ""
 
-#: hacks/config/petri.xml.h:26
+#: hacks/config/petri.xml.h:27
 msgid "Square"
 msgstr ""
 
-#: hacks/config/petri.xml.h:27
+#: hacks/config/petri.xml.h:28
 msgid ""
 "This simulates colonies of mold growing in a petri dish. Growing colored "
 "circles overlap and leave spiral interference in their wake. Written by Dan "
-"Bornstein."
+"Bornstein; 1999."
 msgstr ""
 
 #: hacks/config/phosphor.xml.h:1
 msgid ""
 "Draws a simulation of an old terminal, with large pixels and long-sustain "
-"phosphor. This program is also a fully-functional VT100 emulator! The text "
-"can be the output of a program or the contents of a file or URL, as "
-"configured on the \"Advanced\" tab of the main Screensaver Preferences "
-"window. Written by Jamie Zawinski."
+"phosphor. On X11 systems, This program is also a fully-functional VT100 "
+"emulator! Written by Jamie Zawinski; 1999."
 msgstr ""
 
-#: hacks/config/phosphor.xml.h:2
-msgid "Dump pipe"
-msgstr ""
+#: hacks/config/phosphor.xml.h:4
+#, fuzzy
+msgid "Font scale"
+msgstr "インストールされていません"
 
-#: hacks/config/phosphor.xml.h:5
+#: hacks/config/phosphor.xml.h:8
 msgid "Phosphor"
 msgstr ""
 
-#: hacks/config/phosphor.xml.h:10
-#, fuzzy
-msgid "Use PTY"
-msgstr "ON"
-
 #: hacks/config/piecewise.xml.h:1
-msgid "Color shifting speed"
-msgstr ""
+#, fuzzy
+msgid "Color shift"
+msgstr "色"
 
-#: hacks/config/piecewise.xml.h:6
+#: hacks/config/piecewise.xml.h:10
 msgid "Maximum radius"
 msgstr ""
 
-#: hacks/config/piecewise.xml.h:7
+#: hacks/config/piecewise.xml.h:11
 msgid "Minimum radius"
 msgstr ""
 
-#: hacks/config/piecewise.xml.h:8
+#: hacks/config/piecewise.xml.h:12
 msgid "Piecewise"
 msgstr ""
 
-#: hacks/config/piecewise.xml.h:12
+#: hacks/config/piecewise.xml.h:16
 msgid ""
 "This draws a bunch of moving circles which switch from visibility to "
-"invisibility at intersection points. Written by Geoffrey Irving."
+"invisibility at intersection points. Written by Geoffrey Irving; 2003."
 msgstr ""
 
 #: hacks/config/pinion.xml.h:1
@@ -6256,727 +6635,724 @@ msgstr ""
 msgid "2000"
 msgstr ""
 
-#: hacks/config/pinion.xml.h:4
+#: hacks/config/pinion.xml.h:3
 msgid ""
-"Draws an interconnected set of gears moving across the screen. Written by "
-"Jamie Zawinski."
+"Draws an interconnected set of gears moving across the screen. See also the "
+"\"Gears\" and \"MoebiusGears\" screen savers. http://en.wikipedia.org/wiki/"
+"Involute_gear Written by Jamie Zawinski; 2004."
 msgstr ""
 
 #: hacks/config/pinion.xml.h:6
-msgid "Gear Size"
+msgid "Gear size"
 msgstr ""
 
-#: hacks/config/pinion.xml.h:8
+#: hacks/config/pinion.xml.h:10
 msgid "Max RPM"
 msgstr ""
 
-#: hacks/config/pinion.xml.h:9
+#: hacks/config/pinion.xml.h:11
 msgid "Pinion"
 msgstr ""
 
-#: hacks/config/pinion.xml.h:11
-msgid "Scrolling Speed"
+#: hacks/config/pinion.xml.h:13
+msgid "Scrolling speed"
 msgstr ""
 
 #: hacks/config/pipes.xml.h:1
-msgid "Allow Tight Turns"
+msgid ""
+"A growing plumbing system, with bolts and valves. Written by Marcelo Vianna; "
+"1997."
 msgstr ""
 
 #: hacks/config/pipes.xml.h:2
-msgid "Ball Joints"
+msgid "A hundred"
 msgstr ""
 
 #: hacks/config/pipes.xml.h:3
-msgid "Curved Pipes"
+msgid "Allow tight turns"
+msgstr ""
+
+#: hacks/config/pipes.xml.h:4
+msgid "Ball joints"
 msgstr ""
 
+#: hacks/config/pipes.xml.h:5
+#, fuzzy
+msgid "Bolted fittings"
+msgstr "設定"
+
 #: hacks/config/pipes.xml.h:6
-msgid "Fisheye Lens"
+msgid "Curved pipes"
 msgstr ""
 
 #: hacks/config/pipes.xml.h:7
-msgid "Gadgetry"
+msgid "Fisheye lens"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:8
-msgid ""
-"If you've ever been in the same room with a Windows NT machine, you've "
-"probably seen this GL hack. This version is by Marcelo Vianna."
+#: hacks/config/pipes.xml.h:9
+msgid "Gadgetry"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:11
-msgid "Number of Pipe Systems"
+#: hacks/config/pipes.xml.h:15
+msgid "Number of pipes"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:12
-msgid "Pipe Fittings"
+#: hacks/config/pipes.xml.h:17
+msgid "Pipe length"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:13
+#: hacks/config/pipes.xml.h:18
 msgid "Pipes"
 msgstr ""
 
-#: hacks/config/pipes.xml.h:17
-msgid "System Length"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:4 hacks/config/sballs.xml.h:1
-msgid "Cube"
+#: hacks/config/polyhedra.xml.h:4
+msgid "Cubitruncated cuboctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:5
-msgid "Cubitruncated Cuboctahedron"
+msgid "Cuboctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:6
-msgid "Cuboctahedron"
+msgid "Cubohemioctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:7
-msgid "Cubohemioctahedron"
+msgid "Deltoidal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:8
-msgid "Deltoidal Hexecontahedron"
+msgid "Deltoidal icositetrahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:9
-msgid "Deltoidal Icositetrahedron"
+msgid "Disdyakisdodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:10
-msgid "Disdyakisdodecahedron"
+msgid "Disdyakistriacontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:11
-msgid "Disdyakistriacontahedron"
+msgid "Display random polyhedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:12
-msgid "Display Random Polyhedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:13
 msgid ""
 "Displays different 3D solids and some information about each. A new solid is "
 "chosen every few seconds. There are 75 uniform polyhedra, plus 5 infinite "
 "sets of prisms and antiprisms; including their duals brings the total to "
-"160. Written by Dr. Zvi Har'El and Jamie Zawinski."
+"160. http://en.wikipedia.org/wiki/Uniform_polyhedra Written by Dr. Zvi "
+"Har'El and Jamie Zawinski; 2004."
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:14
-msgid "Ditrigonal Dodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:15 hacks/config/sballs.xml.h:2
-msgid "Dodecahedron"
+#: hacks/config/polyhedra.xml.h:13
+msgid "Ditrigonal dodecadodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:18
-msgid "Great Cubicuboctahedron"
+msgid "Great cubicuboctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:19
-msgid "Great Deltoidal Hexecontahedron"
+msgid "Great deltoidal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:20
-msgid "Great Deltoidal Icositetrahedron"
+msgid "Great deltoidal icositetrahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:21
-msgid "Great Dirhombicosidodecacron"
+msgid "Great dirhombicosidodecacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:22
-msgid "Great Dirhombicosidodecahedron"
+msgid "Great dirhombicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:23
-msgid "Great Disdyakisdodecahedron"
+msgid "Great disdyakisdodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:24
-msgid "Great Disdyakistriacontahedron"
+msgid "Great disdyakistriacontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:25
-msgid "Great Ditrigonal Dodecacronic Hexecontahedron"
+msgid "Great ditrigonal dodecacronic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:26
-msgid "Great Ditrigonal Dodecicosidodecahedron"
+msgid "Great ditrigonal dodecicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:27
-msgid "Great Ditrigonal Icosidodecahedron"
+msgid "Great ditrigonal icosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:28
-msgid "Great Dodecacronic Hexecontahedron"
+msgid "Great dodecacronic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:29
-msgid "Great Dodecadodecahedron"
+msgid "Great dodecadodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:30
-msgid "Great Dodecahedron"
+msgid "Great dodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:31
-msgid "Great Dodecahemicosacron"
+msgid "Great dodecahemicosacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:32
-msgid "Great Dodecahemicosahedron"
+msgid "Great dodecahemicosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:33
-msgid "Great Dodecahemidodecacron"
+msgid "Great dodecahemidodecacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:34
-msgid "Great Dodecahemidodecahedron"
+msgid "Great dodecahemidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:35
-msgid "Great Dodecicosacron"
+msgid "Great dodecicosacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:36
-msgid "Great Dodecicosahedron"
+msgid "Great dodecicosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:37
-msgid "Great Dodecicosidodecahedron"
+msgid "Great dodecicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:38
-msgid "Great Hexacronic Icositetrahedron"
+msgid "Great hexacronic icositetrahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:39
-msgid "Great Hexagonal Hexecontahedron"
+msgid "Great hexagonal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:40
-msgid "Great Icosacronic Hexecontahedron"
+msgid "Great icosacronic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:41
-msgid "Great Icosahedron"
+msgid "Great icosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:42
-msgid "Great Icosicosidodecahedron"
+msgid "Great icosicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:43
-msgid "Great Icosidodecahedron"
+msgid "Great icosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:44
-msgid "Great Icosihemidodecacron"
+msgid "Great icosihemidodecacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:45
-msgid "Great Icosihemidodecahedron"
+msgid "Great icosihemidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:46
-msgid "Great Inverted Pentagonal Hexecontahedron"
+msgid "Great inverted pentagonal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:47
-msgid "Great Inverted Snub Icosidodecahedron"
+msgid "Great inverted snub icosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:48
-msgid "Great Pentagonal Hexecontahedron"
+msgid "Great pentagonal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:49
-msgid "Great Pentagrammic Hexecontahedron"
+msgid "Great pentagrammic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:50
-msgid "Great Pentakisdodekahedron"
+msgid "Great pentakisdodekahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:51
-msgid "Great Retrosnub Icosidodecahedron"
+msgid "Great retrosnub icosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:52
-msgid "Great Rhombic Triacontahedron"
+msgid "Great rhombic triacontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:53
-msgid "Great Rhombicosidodecahedron"
+msgid "Great rhombicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:54
-msgid "Great Rhombicuboctahedron"
+msgid "Great rhombicuboctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:55
-msgid "Great Rhombidodecacron"
+msgid "Great rhombidodecacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:56
-msgid "Great Rhombidodecahedron"
+msgid "Great rhombidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:57
-msgid "Great Rhombihexacron"
+msgid "Great rhombihexacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:58
-msgid "Great Rhombihexahedron"
+msgid "Great rhombihexahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:59
-msgid "Great Snub Dodecicosidodecahedron"
+msgid "Great snub dodecicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:60
-msgid "Great Snub Icosidodecahedron"
+msgid "Great snub icosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:61
-msgid "Great Stellapentakisdodecahedron"
+msgid "Great stellapentakisdodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:62
-msgid "Great Stellated Dodecahedron"
+msgid "Great stellated dodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:63
-msgid "Great Stellated Truncated Dodecahedron"
+msgid "Great stellated truncated dodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:64
-msgid "Great Triakisicosahedron"
+msgid "Great triakisicosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:65
-msgid "Great Triakisoctahedron"
+msgid "Great triakisoctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:66
-msgid "Great Triambic Icosahedron"
+msgid "Great triambic icosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:67
-msgid "Great Truncated Cuboctahedron"
+msgid "Great truncated cuboctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:68
-msgid "Great Truncated Icosahedron"
+msgid "Great truncated icosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:69
-msgid "Great Truncated Icosidodecahedron"
+msgid "Great truncated icosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:70
 msgid "Hexahemioctacron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:71 hacks/config/sballs.xml.h:5
-msgid "Icosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:72
-msgid "Icosidodecadodecahedron"
-msgstr ""
-
 #: hacks/config/polyhedra.xml.h:73
-msgid "Icosidodecahedron"
+msgid "Icosidodecadodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:74
-msgid "Icositruncated Dodecadodecahedron"
+msgid "Icosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:75
-msgid "Inverted Snub Dodecadodecahedron"
+msgid "Icositruncated dodecadodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:76
-msgid "Medial Deltoidal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:77
-msgid "Medial Disdyakistriacontahedron"
+msgid "Inverted snub dodecadodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:78
-msgid "Medial Hexagonal Hexecontahedron"
+msgid "Medial deltoidal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:79
-msgid "Medial Icosacronic Hexecontahedron"
+msgid "Medial disdyakistriacontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:80
-msgid "Medial Inverted Pentagonal Hexecontahedron"
+msgid "Medial hexagonal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:81
-msgid "Medial Pentagonal Hexecontahedron"
+msgid "Medial icosacronic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:82
-msgid "Medial Rhombic Triacontahedron"
+msgid "Medial inverted pentagonal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:83
-msgid "Medial Triambic Icosahedron"
+msgid "Medial pentagonal hexecontahedron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:85 hacks/config/sballs.xml.h:7
-msgid "Octahedron"
+#: hacks/config/polyhedra.xml.h:84
+msgid "Medial rhombic triacontahedron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:86
-msgid "Octahemioctacron"
+#: hacks/config/polyhedra.xml.h:85
+msgid "Medial triambic icosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:87
-msgid "Octahemioctahedron"
+msgid "Octahemioctacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:88
-msgid "Pentagonal Antiprism"
+msgid "Octahemioctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:89
-msgid "Pentagonal Deltohedron"
+msgid "Pentagonal antiprism"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:90
-msgid "Pentagonal Dipyramid"
+msgid "Pentagonal deltohedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:91
-msgid "Pentagonal Hexecontahedron"
+msgid "Pentagonal dipyramid"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:92
-msgid "Pentagonal Icositetrahedron"
+msgid "Pentagonal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:93
-msgid "Pentagonal Prism"
+msgid "Pentagonal icositetrahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:94
-msgid "Pentagrammic Antiprism"
+msgid "Pentagonal prism"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:95
-msgid "Pentagrammic Concave Deltohedron"
+msgid "Pentagrammic antiprism"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:96
-msgid "Pentagrammic Crossed Antiprism"
+msgid "Pentagrammic concave deltohedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:97
-msgid "Pentagrammic Deltohedron"
+msgid "Pentagrammic crossed antiprism"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:98
-msgid "Pentagrammic Dipyramid"
+msgid "Pentagrammic deltohedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:99
-msgid "Pentagrammic Prism"
+msgid "Pentagrammic dipyramid"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:100
-msgid "Pentakisdodecahedron"
+msgid "Pentagrammic prism"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:101
-msgid "Polyhedra"
+msgid "Pentakisdodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:102
-msgid "Rhombic Dodecahedron"
+msgid "Polyhedra"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:103
-msgid "Rhombic Triacontahedron"
+msgid "Rhombic dodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:104
-msgid "Rhombicosacron"
+msgid "Rhombic triacontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:105
-msgid "Rhombicosahedron"
+msgid "Rhombicosacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:106
-msgid "Rhombicosidodecahedron"
+msgid "Rhombicosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:107
-msgid "Rhombicuboctahedron"
+msgid "Rhombicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:108
-msgid "Rhombidodecadodecahedron"
+msgid "Rhombicuboctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:109
+msgid "Rhombidodecadodecahedron"
+msgstr ""
+
+#: hacks/config/polyhedra.xml.h:110
 #, fuzzy
-msgid "Show Description"
+msgid "Show description"
 msgstr "説明"
 
-#: hacks/config/polyhedra.xml.h:112
-msgid "Small Cubicuboctahedron"
-msgstr ""
-
 #: hacks/config/polyhedra.xml.h:113
-msgid "Small Ditrigonal Dodecacronic Hexecontahedron"
+msgid "Small cubicuboctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:114
-msgid "Small Ditrigonal Dodecicosidodecahedron"
+msgid "Small ditrigonal dodecacronic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:115
-msgid "Small Ditrigonal Icosidodecahedron"
+msgid "Small ditrigonal dodecicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:116
-msgid "Small Dodecacronic Hexecontahedron"
+msgid "Small ditrigonal icosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:117
-msgid "Small Dodecahemicosacron"
+msgid "Small dodecacronic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:118
-msgid "Small Dodecahemicosahedron"
+msgid "Small dodecahemicosacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:119
-msgid "Small Dodecahemidodecacron"
+msgid "Small dodecahemicosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:120
-msgid "Small Dodecahemidodecahedron"
+msgid "Small dodecahemidodecacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:121
-msgid "Small Dodecicosacron"
+msgid "Small dodecahemidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:122
-msgid "Small Dodecicosahedron"
+msgid "Small dodecicosacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:123
-msgid "Small Dodecicosidodecahedron"
+msgid "Small dodecicosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:124
-msgid "Small Hexacronic Icositetrahedron"
+msgid "Small dodecicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:125
-msgid "Small Hexagonal Hexecontahedron"
+msgid "Small hexacronic icositetrahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:126
-msgid "Small Hexagrammic Hexecontahedron"
+msgid "Small hexagonal hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:127
-msgid "Small Icosacronic Hexecontahedron"
+msgid "Small hexagrammic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:128
-msgid "Small Icosicosidodecahedron"
+msgid "Small icosacronic hexecontahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:129
-msgid "Small Icosihemidodecacron"
+msgid "Small icosicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:130
-msgid "Small Icosihemidodecahedron"
+msgid "Small icosihemidodecacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:131
-msgid "Small Retrosnub Icosicosidodecahedron"
+msgid "Small icosihemidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:132
-msgid "Small Rhombidodecacron"
+msgid "Small retrosnub icosicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:133
-msgid "Small Rhombidodecahedron"
+msgid "Small rhombidodecacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:134
-msgid "Small Rhombihexacron"
+msgid "Small rhombidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:135
-msgid "Small Rhombihexahedron"
+msgid "Small rhombihexacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:136
-msgid "Small Snub Icosicosidodecahedron"
+msgid "Small rhombihexahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:137
-msgid "Small Stellapentakisdodecahedron"
+msgid "Small snub icosicosidodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:138
-msgid "Small Stellated Dodecahedron"
+msgid "Small stellapentakisdodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:139
-msgid "Small Stellated Truncated Dodecahedron"
+msgid "Small stellated dodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:140
-msgid "Small Triambic Icosahedron"
+msgid "Small stellated truncated dodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:141
-msgid "Snub Cube"
+msgid "Small triambic icosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:142
-msgid "Snub Dodecadodecahedron"
+msgid "Snub cube"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:143
-msgid "Snub Dodecahedron"
+msgid "Snub dodecadodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:144
-msgid "Snub Icosidodecadodecahedron"
+msgid "Snub dodecahedron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:146
-msgid "Stellated Truncated Hexahedron"
+#: hacks/config/polyhedra.xml.h:145
+msgid "Snub icosidodecadodecahedron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:147
-msgid "Tetradyakishexahedron"
+#: hacks/config/polyhedra.xml.h:148
+msgid "Stellated truncated hexahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:149
-msgid "Tetrahemihexacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:150
-msgid "Tetrahemihexahedron"
+msgid "Tetradyakishexahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:151
-msgid "Tetrakishexahedron"
+msgid "Tetrahemihexacron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:152
-msgid "Triakisicosahedron"
+msgid "Tetrahemihexahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:153
-msgid "Triakisoctahedron"
+msgid "Tetrakishexahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:154
-msgid "Triakistetrahedron"
+msgid "Triakisicosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:155
-msgid "Tridyakisicosahedron"
+msgid "Triakisoctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:156
-msgid "Truncated Cube"
+msgid "Triakistetrahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:157
-msgid "Truncated Cuboctahedron"
+msgid "Tridyakisicosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:158
-msgid "Truncated Dodecadodecahedron"
+msgid "Truncated cube"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:159
-msgid "Truncated Dodecahedron"
+msgid "Truncated cuboctahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:160
-msgid "Truncated Great Dodecahedron"
+msgid "Truncated dodecadodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:161
-msgid "Truncated Icosahedron"
+msgid "Truncated dodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:162
-msgid "Truncated Icosidodechedon"
+msgid "Truncated great dodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:163
-msgid "Truncated Octahedron"
+msgid "Truncated icosahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:164
-msgid "Truncated Tetrahedron"
+msgid "Truncated icosidodechedon"
+msgstr ""
+
+#: hacks/config/polyhedra.xml.h:165
+msgid "Truncated octahedron"
+msgstr ""
+
+#: hacks/config/polyhedra.xml.h:166
+msgid "Truncated tetrahedron"
 msgstr ""
 
-#: hacks/config/polyominoes.xml.h:3
-msgid "Identical Pieces"
+#: hacks/config/polyhedra.xml.h:167
+msgid "Utah teapotahedron"
 msgstr ""
 
-#: hacks/config/polyominoes.xml.h:7
+#: hacks/config/polyominoes.xml.h:4
+#, fuzzy
+msgid "Identical pieces"
+msgstr "カラーマップをインストールする"
+
+#: hacks/config/polyominoes.xml.h:9
 msgid "Polyominoes"
 msgstr ""
 
-#: hacks/config/polyominoes.xml.h:8
+#: hacks/config/polyominoes.xml.h:10
 msgid ""
 "Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
-"puzzle pieces. Written by Stephen Montgomery-Smith."
+"puzzle pieces. http://en.wikipedia.org/wiki/Polyomino Written by Stephen "
+"Montgomery-Smith; 2002."
 msgstr ""
 
 #: hacks/config/polytopes.xml.h:2
-msgid "120-Cell"
+msgid "120-cell"
 msgstr ""
 
 #: hacks/config/polytopes.xml.h:3
-msgid "16-Cell (Hyper-Octahedron)"
+msgid "16-cell (hyper-octahedron)"
 msgstr ""
 
 #: hacks/config/polytopes.xml.h:4
-msgid "24-Cell"
+msgid "24-cell"
 msgstr ""
 
 #: hacks/config/polytopes.xml.h:6
-msgid "5-Cell (Hyper-Tetrahedron)"
+msgid "5-cell (hyper-tetrahedron)"
 msgstr ""
 
 #: hacks/config/polytopes.xml.h:7
-msgid "600-Cell"
+msgid "600-cell"
 msgstr ""
 
 #: hacks/config/polytopes.xml.h:8
-msgid "8-Cell (Hypercube / Tesseract)"
+msgid "8-cell (hypercube / tesseract)"
 msgstr ""
 
 #: hacks/config/polytopes.xml.h:9
@@ -6984,312 +7360,377 @@ msgid "Colors By 4D Depth"
 msgstr ""
 
 #: hacks/config/polytopes.xml.h:17
-msgid "Regular 4D Polytopes"
+msgid "Polytopes"
 msgstr ""
 
-#: hacks/config/polytopes.xml.h:19
+#: hacks/config/polytopes.xml.h:20
 #, fuzzy
-msgid "Single Color"
+msgid "Single color"
 msgstr "DirectColor"
 
 #: hacks/config/polytopes.xml.h:22
 msgid ""
-"This program shows one of the six regular 4D polytopes rotating in 4D. "
-"Written by Carsten Steger, inspired by H.S.M Coxeter's book \"Regular "
-"Polytopes\", 3rd Edition, Dover Publications, Inc., 1973, and Thomas "
-"Banchoff's book \"Beyond the Third Dimension: Geometry, Computer Graphics, "
-"and Higher Dimensions\", Scientific American Library, 1990."
+"This shows one of the six regular 4D polytopes rotating in 4D. 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. http://en.wikipedia.org/wiki/Hypercube http://en.wikipedia."
+"org/wiki/Regular_polytope Written by Carsten Steger; 2003."
+msgstr ""
+
+#: hacks/config/pong.xml.h:1
+msgid "Clock mode"
 msgstr ""
 
 #: hacks/config/pong.xml.h:2
-msgid "Pong"
+msgid "Crisp"
 msgstr ""
 
-#: hacks/config/pong.xml.h:6
-msgid ""
-"The pong program simulates an ancient Pong home video game, as well as "
-"various artifacts from displaying it on a color TV set. Written by Jeremy "
-"English and Trevor Blackwell."
+#: hacks/config/pong.xml.h:4
+msgid "Game speed"
 msgstr ""
 
-#: hacks/config/popsquares.xml.h:2
-msgid "End color"
+#: hacks/config/pong.xml.h:5
+msgid "Noise"
 msgstr ""
 
-#: hacks/config/popsquares.xml.h:7
-msgid "Start color"
+#: hacks/config/pong.xml.h:6
+msgid "Noisy"
 msgstr ""
 
-#: hacks/config/popsquares.xml.h:8
-msgid "Subdivision"
+#: hacks/config/pong.xml.h:7
+msgid "Pong"
 msgstr ""
 
-#: hacks/config/popsquares.xml.h:9
+#: hacks/config/pong.xml.h:10
 msgid ""
-"This draws a pop-art-ish looking grid of pulsing colors. By Levi Burton."
+"This simulates the 1971 Pong home video game, as well as various artifacts "
+"from displaying it on a color TV set. In clock mode, the score keeps track "
+"of the current time. http://en.wikipedia.org/wiki/Pong Written by Jeremy "
+"English and Trevor Blackwell; 2003."
 msgstr ""
 
-#: hacks/config/popsquares.xml.h:10
-msgid "Twitch"
+#: hacks/config/popsquares.xml.h:2
+msgid "Dark blue"
 msgstr ""
 
-#: hacks/config/popsquares.xml.h:11
-msgid "popsquares"
+#: hacks/config/popsquares.xml.h:3
+msgid "Dark cyan"
 msgstr ""
 
-#: hacks/config/providence.xml.h:1
-msgid "Draw Eye"
+#: hacks/config/popsquares.xml.h:4
+#, fuzzy
+msgid "Dark green"
+msgstr "ブランク・スクリーン"
+
+#: hacks/config/popsquares.xml.h:5
+msgid "Dark magenta"
 msgstr ""
 
-#: hacks/config/providence.xml.h:3
-msgid "Providence"
+#: hacks/config/popsquares.xml.h:6
+msgid "Dark red"
 msgstr ""
 
-#: hacks/config/providence.xml.h:8
-msgid ""
-"The providence code displays an eye, shrouded in glory, set upon the base of "
-"a pyramid. Written by Blair Tennessy."
+#: hacks/config/popsquares.xml.h:7
+msgid "Dark yellow"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:1
-msgid "Anti-alias Lines"
+#: hacks/config/popsquares.xml.h:10
+msgid "Light blue"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:3
-msgid ""
-"Draws some intersecting planes, making use of alpha blending, fog, textures, "
-"and mipmaps, plus a ``frames per second'' meter so that you can tell how "
-"fast your graphics card is... Requires OpenGL. Written by David Konerding."
+#: hacks/config/popsquares.xml.h:11
+msgid "Light cyan"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:4
-msgid "Enable Blending"
+#: hacks/config/popsquares.xml.h:12
+msgid "Light green"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:5
-msgid "Enable Depth Buffer"
+#: hacks/config/popsquares.xml.h:13
+msgid "Light magenta"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:6
-msgid "Enable Fog"
+#: hacks/config/popsquares.xml.h:14
+msgid "Light red"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:7
-msgid "Enable Lighting"
+#: hacks/config/popsquares.xml.h:15
+msgid "Light yellow"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:8
-msgid "Enable Texture Filtering"
+#: hacks/config/popsquares.xml.h:18
+msgid "PopSquares"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:9
-msgid "Enable Texture Mipmaps"
+#: hacks/config/popsquares.xml.h:20
+msgid "Subdivision"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:10
-msgid "Enable Texturing"
+#: hacks/config/popsquares.xml.h:21
+msgid ""
+"This draws a pop-art-ish looking grid of pulsing colors. Written by Levi "
+"Burton; 2003."
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:12
-msgid "Pulsar"
+#: hacks/config/popsquares.xml.h:22
+msgid "Twitch"
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:13
-msgid "Quad Count"
+#: hacks/config/providence.xml.h:1
+msgid ""
+"\"A pyramid unfinished. In the zenith an eye in a triangle, surrounded by a "
+"glory, proper.\" http://en.wikipedia.org/wiki/Eye_of_Providence Written by "
+"Blair Tennessy; 2004."
 msgstr ""
 
-#: hacks/config/pulsar.xml.h:18
-msgid "Texture PPM File"
+#: hacks/config/providence.xml.h:2
+msgid "Draw eye"
 msgstr ""
 
-#: hacks/config/pyro.xml.h:3
-msgid "Explosive Yield"
+#: hacks/config/providence.xml.h:6
+msgid "Providence"
 msgstr ""
 
-#: hacks/config/pyro.xml.h:6
-msgid "Launch Frequency"
+#: hacks/config/pulsar.xml.h:1
+msgid "Anti-alias lines"
 msgstr ""
 
-#: hacks/config/pyro.xml.h:9
-msgid "Particle Density"
+#: hacks/config/pulsar.xml.h:2
+msgid ""
+"Draws some intersecting planes, making use of alpha blending, fog, textures, "
+"and mipmaps. Written by David Konerding; 1999."
+msgstr ""
+
+#: hacks/config/pulsar.xml.h:3
+msgid "Enable blending"
+msgstr ""
+
+#: hacks/config/pulsar.xml.h:4
+msgid "Enable depth buffer"
+msgstr ""
+
+#: hacks/config/pulsar.xml.h:7
+msgid "Enable texture filtering"
+msgstr ""
+
+#: hacks/config/pulsar.xml.h:8
+msgid "Enable texture mipmaps"
+msgstr ""
+
+#: hacks/config/pulsar.xml.h:9
+msgid "Enable texturing"
+msgstr ""
+
+#: hacks/config/pulsar.xml.h:13
+msgid "Pulsar"
+msgstr ""
+
+#: hacks/config/pulsar.xml.h:14
+msgid "Quad count"
+msgstr ""
+
+#: hacks/config/pyro.xml.h:2
+msgid ""
+"Exploding fireworks. See also the \"Fireworkx\", \"Eruption\", and \"XFlame"
+"\" screen savers. Written by Jamie Zawinski; 1992."
+msgstr ""
+
+#: hacks/config/pyro.xml.h:3
+#, fuzzy
+msgid "Explosive yield"
+msgstr "表示モード"
+
+#: hacks/config/pyro.xml.h:7
+msgid "Launch frequency"
 msgstr ""
 
 #: hacks/config/pyro.xml.h:10
-msgid "Pyro"
+msgid "Particle density"
 msgstr ""
 
 #: hacks/config/pyro.xml.h:11
-msgid ""
-"Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski."
+msgid "Pyro"
 msgstr ""
 
 #: hacks/config/qix.xml.h:1
-msgid "Additive Colors"
+msgid "Additive colors"
 msgstr ""
 
-#: hacks/config/qix.xml.h:3
-msgid "Corners"
+#: hacks/config/qix.xml.h:2
+msgid ""
+"Bounces a series of line segments around the screen, and uses variations on "
+"this basic motion pattern to produce all sorts of different presentations: "
+"line segments, filled polygons, and overlapping translucent areas. http://en."
+"wikipedia.org/wiki/Qix Written by Jamie Zawinski; 1992."
 msgstr ""
 
 #: hacks/config/qix.xml.h:11
-msgid "Line Segments"
+msgid "Line segments"
 msgstr ""
 
 #: hacks/config/qix.xml.h:12
-msgid "Linear Motion"
+msgid "Linear motion"
 msgstr ""
 
 #: hacks/config/qix.xml.h:15
-msgid "Max Size"
+msgid "Max size"
 msgstr ""
 
 #: hacks/config/qix.xml.h:16
-msgid "Qix"
+msgid "Poly corners"
 msgstr ""
 
 #: hacks/config/qix.xml.h:17
-msgid "Random Motion"
+msgid "Qix"
 msgstr ""
 
-#: hacks/config/qix.xml.h:23
-msgid "Subtractive Colors"
+#: hacks/config/qix.xml.h:18
+msgid "Random motion"
 msgstr ""
 
-#: hacks/config/qix.xml.h:24
-msgid ""
-"This is the swiss army chainsaw of qix programs. It bounces a series of line "
-"segments around the screen, and uses variations on this basic motion pattern "
-"to produce all sorts of different presentations: line segments, filled "
-"polygons, overlapping translucent areas... Written by Jamie Zawinski."
+#: hacks/config/qix.xml.h:21
+msgid "Solid objects"
 msgstr ""
 
-#: hacks/config/qix.xml.h:25
+#: hacks/config/qix.xml.h:23
+msgid "Subtractive colors"
+msgstr ""
+
+#: hacks/config/qix.xml.h:24 hacks/config/webcollage.xml.h:15
 msgid "Transparent"
 msgstr ""
 
-#: hacks/config/queens.xml.h:2
+#: hacks/config/queens.xml.h:4
 msgid "Queens"
 msgstr ""
 
-#: hacks/config/queens.xml.h:5
+#: hacks/config/queens.xml.h:6
 msgid ""
-"Solves the N-Queens problem (where, in this program, N is between 5 and 10 "
-"queens.) The problem is: how may one place N queens on an NxN chessboard "
-"such that no queen can attack a sister? Written by Blair Tennessy."
-msgstr ""
-
-#: hacks/config/rd-bomb.xml.h:1
-msgid "/"
+"Solves the N-Queens problem (where N is between 5 and 10 queens). The "
+"problem is: how may one place N queens on an NxN chessboard such that no "
+"queen can attack a sister? See also the \"Endgame\" screen saver. http://en."
+"wikipedia.org/wiki/Eight_queens_puzzle Written by Blair Tennessy; 2002."
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:3
+#: hacks/config/rd-bomb.xml.h:2 hacks/config/rdbomb.xml.h:2
 #, no-c-format
 msgid "1%"
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:7
+#: hacks/config/rd-bomb.xml.h:5 hacks/config/rdbomb.xml.h:5
+msgid "Diffusion"
+msgstr ""
+
+#: hacks/config/rd-bomb.xml.h:6 hacks/config/rdbomb.xml.h:6
 msgid ""
-"Another variation of the `Bomb' program by Scott Draves. This draws a grid "
-"of growing square-like shapes that, once they overtake each other, react in "
-"unpredictable ways. ``RD'' stands for reaction-diffusion."
+"Draws a grid of growing square-like shapes that, once they overtake each "
+"other, react in unpredictable ways. \"RD\" stands for reaction-diffusion. "
+"Written by Scott Draves; 1997."
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:8
+#: hacks/config/rd-bomb.xml.h:7 hacks/config/rdbomb.xml.h:7
 msgid "Epoch"
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:10
-msgid "Fill Screen"
-msgstr ""
+#: hacks/config/rd-bomb.xml.h:9 hacks/config/rdbomb.xml.h:9
+#, fuzzy
+msgid "Fill screen"
+msgstr "ブランク・スクリーン"
 
-#: hacks/config/rd-bomb.xml.h:14
-msgid "RD-Bomb"
+#: hacks/config/rd-bomb.xml.h:14 hacks/config/rdbomb.xml.h:14
+msgid "RDbomb"
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Diffusion"
+#: hacks/config/rd-bomb.xml.h:15 hacks/config/rdbomb.xml.h:15
+#, fuzzy
+msgid "Reaction"
+msgstr "説明"
+
+#: hacks/config/rd-bomb.xml.h:16 hacks/config/rdbomb.xml.h:16
+msgid "Seed radius"
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:16
-msgid "Seed Radius"
+#: hacks/config/rd-bomb.xml.h:21 hacks/config/rdbomb.xml.h:21
+#: hacks/config/voronoi.xml.h:15
+msgid "Wander speed"
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:19 hacks/config/twang.xml.h:12
-msgid "Tile Size"
+#: hacks/config/rd-bomb.xml.h:22 hacks/config/rdbomb.xml.h:22
+msgid "X tile size"
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:22
-msgid "Wander Speed"
+#: hacks/config/rd-bomb.xml.h:23 hacks/config/rdbomb.xml.h:23
+msgid "Y tile size"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:1
-msgid "Big Drops"
+#: hacks/config/ripples.xml.h:3
+msgid "Big drops"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:2
-msgid "Colors    Two"
+#: hacks/config/ripples.xml.h:4
+msgid "Drippiness"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:3
+#: hacks/config/ripples.xml.h:5
 msgid "Drizzle"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:5
-msgid "Grab Screen Image"
+#: hacks/config/ripples.xml.h:7
+msgid "Fluidity"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:6
+#: hacks/config/ripples.xml.h:9
 #, fuzzy
 msgid "Grayscale"
 msgstr "グレースケール"
 
-#: hacks/config/ripples.xml.h:7
-msgid "Lighting Effect"
+#: hacks/config/ripples.xml.h:12
+msgid "Magic lighting effect"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:9
-msgid "Moving Splashes"
+#: hacks/config/ripples.xml.h:13
+msgid "Moving splashes"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:10
-msgid "Psychedelic Colors"
+#: hacks/config/ripples.xml.h:14
+msgid "Psychedelic colors"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:11
+#: hacks/config/ripples.xml.h:15
 msgid "Ripples"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:13
-msgid "Small Drops"
+#: hacks/config/ripples.xml.h:17
+msgid "Small drops"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:14
+#: hacks/config/ripples.xml.h:18
 msgid "Storm"
 msgstr ""
 
-#: hacks/config/ripples.xml.h:15
+#: hacks/config/ripples.xml.h:19
 msgid ""
 "This draws rippling interference patterns like splashing water. With the -"
 "water option, it manipulates your desktop image to look like something is "
-"dripping into it. Written by Tom Hammersley."
+"dripping into it. Written by Tom Hammersley; 1999."
 msgstr ""
 
-#: hacks/config/rocks.xml.h:7
+#: hacks/config/rocks.xml.h:10
 msgid "Rocks"
 msgstr ""
 
-#: hacks/config/rocks.xml.h:10
+#: hacks/config/rocks.xml.h:14
 msgid "Steering"
 msgstr ""
 
-#: hacks/config/rocks.xml.h:11
+#: hacks/config/rocks.xml.h:15
 msgid ""
 "This draws an animation of flight through an asteroid field, with changes in "
-"rotation and direction. It can also display 3D separations for red/blue "
-"glasses! Mostly written by Jamie Zawinski."
+"rotation and direction. Written by Jamie Zawinski; 1992."
 msgstr ""
 
-#: hacks/config/rocks.xml.h:13
+#: hacks/config/rocks.xml.h:17
 msgid "Velocity"
 msgstr ""
 
@@ -7297,41 +7738,37 @@ msgstr ""
 msgid "Rorschach"
 msgstr ""
 
-#: hacks/config/rorschach.xml.h:9
+#: hacks/config/rorschach.xml.h:10
 msgid ""
-"This generates random inkblot patterns. The algorithm is deceptively simple "
-"for how well it works; it merely walks a dot around the screen randomly, and "
-"then reflects the image horizontally, vertically, or both. Any deep-seated "
-"neurotic tendencies which this program reveals are your own problem. Written "
-"by Jamie Zawinski."
+"This generates random inkblot patterns via a reflected random walk. Any deep-"
+"seated neurotic tendencies which this program reveals are your own problem. "
+"http://en.wikipedia.org/wiki/Rorschach_inkblot_test http://en.wikipedia.org/"
+"wiki/Random_walk Written by Jamie Zawinski; 1992."
 msgstr ""
 
-#: hacks/config/rorschach.xml.h:10
-msgid "With X Symmetry"
+#: hacks/config/rorschach.xml.h:11
+msgid "With X symmetry"
 msgstr ""
 
-#: hacks/config/rorschach.xml.h:11
-msgid "With Y Symmetry"
+#: hacks/config/rorschach.xml.h:12
+msgid "With Y symmetry"
 msgstr ""
 
-#: hacks/config/rotor.xml.h:1
+#: hacks/config/rotor.xml.h:2
 msgid ""
-"Another ancient xlock demo, this one by Tom Lawrence. It draws a line "
-"segment moving along a complex spiraling curve."
+"Draws a line segment moving along a complex spiraling curve. Written by Tom "
+"Lawrence; 1997."
 msgstr ""
 
-#: hacks/config/rotor.xml.h:4 hacks/config/wander.xml.h:9
+#: hacks/config/rotor.xml.h:5 hacks/config/skytentacles.xml.h:9
+#: hacks/config/wander.xml.h:8
 msgid "Length"
 msgstr ""
 
-#: hacks/config/rotor.xml.h:8
+#: hacks/config/rotor.xml.h:10
 msgid "Rotor"
 msgstr ""
 
-#: hacks/config/rotzoomer.xml.h:2
-msgid "60"
-msgstr ""
-
 #: hacks/config/rotzoomer.xml.h:3
 msgid "Animate"
 msgstr ""
@@ -7339,315 +7776,359 @@ msgstr ""
 #: hacks/config/rotzoomer.xml.h:4
 msgid ""
 "Creates a collage of rotated and scaled portions of the screen. Written by "
-"Claudio Matsuoka."
+"Claudio Matsuoka; 2001."
 msgstr ""
 
-#: hacks/config/rotzoomer.xml.h:6
-msgid "Rectangle Count"
+#: hacks/config/rotzoomer.xml.h:9
+msgid "Rectangle count"
 msgstr ""
 
-#: hacks/config/rotzoomer.xml.h:7
+#: hacks/config/rotzoomer.xml.h:10
 msgid "RotZoomer"
 msgstr ""
 
-#: hacks/config/rotzoomer.xml.h:8
-msgid "Stationary Rectangles"
+#: hacks/config/rotzoomer.xml.h:12
+msgid "Stationary rectangles"
 msgstr ""
 
-#: hacks/config/rotzoomer.xml.h:9
-msgid "Sweeping Arcs"
+#: hacks/config/rotzoomer.xml.h:13
+msgid "Sweeping arcs"
 msgstr ""
 
-#: hacks/config/rotzoomer.xml.h:11
-msgid "Wandering Rectangles"
-msgstr ""
+#: hacks/config/rotzoomer.xml.h:15
+#, fuzzy
+msgid "Wandering rectangles"
+msgstr "標準"
 
-#: hacks/config/rubik.xml.h:2
+#: hacks/config/rubik.xml.h:3
+#, no-c-format
 msgid ""
 "Draws a Rubik's Cube that rotates in three dimensions and repeatedly "
-"shuffles and solves itself. Another fine GL hack by Marcelo Vianna."
+"shuffles and solves itself. See also the \"GLSnake\" and \"Cube21\" screen "
+"savers. http://en.wikipedia.org/wiki/Rubik%27s_Cube Written by Marcelo "
+"Vianna; 1997."
 msgstr ""
 
 #: hacks/config/rubik.xml.h:5
-msgid "Rubik"
+msgid "Hide shuffling"
 msgstr ""
 
-#: hacks/config/rubik.xml.h:7
-msgid "Show Shuffling"
+#: hacks/config/rubik.xml.h:9
+msgid "Rubik"
 msgstr ""
 
 #: hacks/config/sballs.xml.h:3
 msgid ""
-"Draws an animation of textured balls spinning like crazy in GL. Requires "
-"OpenGL, and a machine with fast hardware support for texture maps. Written "
-"by Eric Lassauge &lt;lassauge@users.sourceforge.net&gt;."
+"Draws an animation of textured balls spinning like crazy. Written by Eric "
+"Lassauge; 2002."
 msgstr ""
 
-#: hacks/config/sballs.xml.h:8
+#: hacks/config/sballs.xml.h:9
 msgid "Plane"
 msgstr ""
 
-#: hacks/config/sballs.xml.h:9
+#: hacks/config/sballs.xml.h:10
 msgid "Pyramid"
 msgstr ""
 
-#: hacks/config/sballs.xml.h:11
-msgid "Sballs"
+#: hacks/config/sballs.xml.h:12
+msgid "SBalls"
 msgstr ""
 
-#: hacks/config/sballs.xml.h:15
+#: hacks/config/sballs.xml.h:14
 msgid "Star"
 msgstr ""
 
-#: hacks/config/shadebobs.xml.h:7
+#: hacks/config/shadebobs.xml.h:10
 msgid "ShadeBobs"
 msgstr ""
 
-#: hacks/config/shadebobs.xml.h:11
+#: hacks/config/shadebobs.xml.h:13
 msgid ""
-"This draws smoothly-shaded oscillating oval patterns, that look something "
-"like vapor trails or neon tubes. Written by Shane Smit."
+"This draws smoothly-shaded oscillating oval patterns that look something "
+"like vapor trails or neon tubes. Written by Shane Smit; 1999."
 msgstr ""
 
-#: hacks/config/sierpinski.xml.h:6
-msgid "Sierpinski"
+#: hacks/config/sierpinski.xml.h:8 hacks/config/thornbird.xml.h:8
+#: hacks/config/voronoi.xml.h:11
+msgid "Points"
 msgstr ""
 
 #: hacks/config/sierpinski.xml.h:10
+msgid "Sierpinski"
+msgstr ""
+
+#: hacks/config/sierpinski.xml.h:12
 msgid ""
 "This draws the two-dimensional variant of the recursive Sierpinski triangle "
-"fractal. Written by Desmond Daignault."
+"fractal. See also the \"Sierpinski3D\" screen saver. http://en.wikipedia.org/"
+"wiki/Sierpinski_triangle Written by Desmond Daignault; 1997."
 msgstr ""
 
-#: hacks/config/sierpinski3d.xml.h:7
+#: hacks/config/sierpinski3d.xml.h:9
 msgid "Sierpinski3D"
 msgstr ""
 
-#: hacks/config/sierpinski3d.xml.h:11
+#: hacks/config/sierpinski3d.xml.h:10
 msgid ""
-"This draws the three-dimensional variant of the recursive Sierpinski "
-"triangle fractal, using GL. Written by Tim Robinson and Jamie Zawinski."
+"This draws the Sierpinski tetrahedron fractal, the three-dimensional variant "
+"of the recursive Sierpinski triangle. http://en.wikipedia.org/wiki/"
+"Sierpinski_triangle#Analogs_in_higher_dimension Written by Tim Robinson and "
+"Jamie Zawinski; 1999."
 msgstr ""
 
-#: hacks/config/slidescreen.xml.h:1 hacks/config/twang.xml.h:1
-#: hacks/config/zoom.xml.h:1
-msgid "Border Width"
+#: hacks/config/skytentacles.xml.h:3
+msgid "Cartoony"
 msgstr ""
 
-#: hacks/config/slidescreen.xml.h:4
-msgid "Slide Speed"
+#: hacks/config/skytentacles.xml.h:4
+msgid "Draw skin"
 msgstr ""
 
-#: hacks/config/slidescreen.xml.h:5
-msgid "SlideScreen"
+#: hacks/config/skytentacles.xml.h:6
+msgid "Flexibility"
 msgstr ""
 
-#: hacks/config/slidescreen.xml.h:8
-msgid ""
-"This takes an image, divides it into a grid, and then randomly shuffles the "
-"squares around as if it was one of those annoying ``16-puzzle'' games, where "
-"there is a grid of squares, one of which is missing. I hate trying to solve "
-"those puzzles, but watching one permute itself is more amusing. Written by "
-"Jamie Zawinski."
+#: hacks/config/skytentacles.xml.h:14
+msgid "SkyTentacles"
 msgstr ""
 
-#: hacks/config/slip.xml.h:6
-msgid "Slip"
+#: hacks/config/skytentacles.xml.h:19
+msgid "Tentacles can intersect"
 msgstr ""
 
-#: hacks/config/slip.xml.h:10
+#: hacks/config/skytentacles.xml.h:20
 msgid ""
-"This program throws some random bits on the screen, then sucks them through "
-"a jet engine and spews them out the other side. To avoid turning the image "
-"completely to mush, every now and then it will and then it interjects some "
-"splashes of color into the scene, or go into a spin cycle, or stretch the "
-"image like taffy, or (this is my addition) grab an image of your current "
-"desktop to chew on. Originally written by Scott Draves; whacked on by Jamie "
-"Zawinski."
+"There is a tentacled abomination in the sky. From above you it devours. "
+"Written by Jamie Zawinski; 2008."
 msgstr ""
 
-#: hacks/config/sonar.xml.h:1
-msgid "Ping known hosts"
+#: hacks/config/skytentacles.xml.h:24
+msgid "Wiggliness"
 msgstr ""
 
-#: hacks/config/sonar.xml.h:2
-msgid "Ping mode..."
+#: hacks/config/skytentacles.xml.h:25
+#, fuzzy
+msgid "X resolution"
+msgstr "説明"
+
+#: hacks/config/skytentacles.xml.h:26
+#, fuzzy
+msgid "Y resolution"
+msgstr "説明"
+
+#: hacks/config/slidescreen.xml.h:7
+msgid "Gutter size"
 msgstr ""
 
-#: hacks/config/sonar.xml.h:3
-msgid "Ping subnet/24 (254 hosts)"
+#: hacks/config/slidescreen.xml.h:12
+msgid "Pause"
 msgstr ""
 
-#: hacks/config/sonar.xml.h:4
-msgid "Ping subnet/25 (126 hosts)"
+#: hacks/config/slidescreen.xml.h:15
+msgid "Slide speed"
 msgstr ""
 
-#: hacks/config/sonar.xml.h:5
-msgid "Ping subnet/26 (62 hosts)"
+#: hacks/config/slidescreen.xml.h:16
+msgid "SlideScreen"
+msgstr ""
+
+#: hacks/config/slidescreen.xml.h:19
+msgid ""
+"This takes an image, divides it into a grid, and then randomly shuffles the "
+"squares around as if it was one of those \"fifteen-puzzle\" games where "
+"there is a grid of squares, one of which is missing. http://en.wikipedia.org/"
+"wiki/Fifteen_puzzle Written by Jamie Zawinski; 1994."
+msgstr ""
+
+#: hacks/config/slip.xml.h:10
+msgid "Slip"
+msgstr ""
+
+#: hacks/config/slip.xml.h:12
+msgid ""
+"This throws some random bits on the screen, then sucks them through a jet "
+"engine and spews them out the other side. To avoid turning the image "
+"completely to mush, every now and then it will it interject some splashes of "
+"color into the scene, or go into a spin cycle, or stretch the image like "
+"taffy. Written by Scott Draves and Jamie Zawinski; 1997."
+msgstr ""
+
+#: hacks/config/sonar.xml.h:1
+msgid "A count"
+msgstr ""
+
+#: hacks/config/sonar.xml.h:2
+msgid "B count"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:6
-msgid "Ping subnet/27 (31 hosts)"
+msgid "Ping known SSH hosts"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:7
-msgid "Ping subnet/28 (14 hosts)"
+msgid "Ping subnet/24 (254 hosts)"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:8
-msgid "Ping subnet/29 (6 hosts)"
+msgid "Ping subnet/25 (126 hosts)"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:9
-msgid "Ping subnet/30 (2 hosts)"
+msgid "Ping subnet/26 (62 hosts)"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:10
-msgid "Resolve Host Names"
+msgid "Ping subnet/27 (31 hosts)"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:11
-msgid "Show Ping Times"
+msgid "Ping subnet/28 (14 hosts)"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:12
-msgid "Simulation Team Members"
+msgid "Ping subnet/29 (6 hosts)"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:13
-msgid "Sonar"
+msgid "Ping subnet/30 (2 hosts)"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:14
-msgid "Team A Name"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:15
-msgid "Team B Name"
+msgid "Resolve host names"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:16
-msgid ""
-"This program draws a simulation of a sonar screen. By default, it displays a "
-"random assortment of ``bogies'' on the screen, but if installed as \"setuid "
-"root\", it can ping (pun intended) your local network, and actually plot the "
-"proximity of the other hosts on your network to you. Written by Stephen "
-"Martin and Jamie Zawinski."
+msgid "Show ping times"
 msgstr ""
 
 #: hacks/config/sonar.xml.h:17
-msgid "vs."
+msgid "Simulation team A name"
 msgstr ""
 
-#: hacks/config/speedmine.xml.h:1
-msgid "Allow Wall Collisions"
+#: hacks/config/sonar.xml.h:18
+msgid "Simulation team B name"
 msgstr ""
 
-#: hacks/config/speedmine.xml.h:2
-msgid "Display Crosshair"
+#: hacks/config/sonar.xml.h:19
+msgid "Sonar"
 msgstr ""
 
-#: hacks/config/speedmine.xml.h:7
-msgid "Max Velocity"
+#: hacks/config/sonar.xml.h:20
+msgid ""
+"This draws a sonar screen that pings (get it?) the hosts on your local "
+"network, and plots their distance (response time) from you. The three rings "
+"represent ping times of approximately 2.5, 70 and 2,000 milliseconds "
+"respectively. Alternately, it can run a simulation that doesn't involve "
+"hosts. (If pinging doesn't work, you may need to make the executable be "
+"setuid.) http://en.wikipedia.org/wiki/Ping#History Written by Stephen Martin "
+"and Jamie Zawinski; 1998."
+msgstr ""
+
+#: hacks/config/speedmine.xml.h:1
+msgid "Allow wall collisions"
 msgstr ""
 
+#: hacks/config/speedmine.xml.h:2
+#, fuzzy
+msgid "Display crosshair"
+msgstr "表示モード"
+
 #: hacks/config/speedmine.xml.h:8
-msgid "Mine Shaft"
+msgid "Max velocity"
 msgstr ""
 
 #: hacks/config/speedmine.xml.h:9
-msgid "Present Bonuses"
+msgid "Present bonuses"
 msgstr ""
 
 #: hacks/config/speedmine.xml.h:10
-msgid "Rocky Walls"
+msgid "Rocky walls"
 msgstr ""
 
 #: hacks/config/speedmine.xml.h:12
 msgid ""
 "Simulates speeding down a rocky mineshaft, or a funky dancing worm. Written "
-"by Conrad Parker."
+"by Conrad Parker; 2001."
 msgstr ""
 
-#: hacks/config/speedmine.xml.h:16
+#: hacks/config/speedmine.xml.h:14
 msgid "SpeedMine"
 msgstr ""
 
-#: hacks/config/speedmine.xml.h:17
+#: hacks/config/speedmine.xml.h:15
 msgid "Thrust"
 msgstr ""
 
-#: hacks/config/speedmine.xml.h:19 hacks/config/worm.xml.h:10
+#: hacks/config/speedmine.xml.h:16
+msgid "Tunnel"
+msgstr ""
+
+#: hacks/config/speedmine.xml.h:18 hacks/config/worm.xml.h:11
 msgid "Worm"
 msgstr ""
 
 #: hacks/config/sphere.xml.h:1
 msgid ""
-"Another of the classic screenhacks of the distant past, this one draws "
-"shaded spheres in multiple colors. This hack traces its lineage back to Tom "
-"Duff in 1982."
+"Draws shaded spheres in multiple colors. Written by Tom Duff and Jamie "
+"Zawinski; 1982, 1997."
 msgstr ""
 
-#: hacks/config/sphereeversion.xml.h:1
-msgid "SphereEversion"
-msgstr ""
-
-#: hacks/config/sphereeversion.xml.h:2
-msgid ""
-"SphereEversion draws an animation of a sphere being turned inside out. A "
-"sphere can be turned inside out, without any tears, sharp creases or "
-"discontinuities, if the surface of the sphere is allowed to intersect "
-"itself. This program animates what is known as the Thurston Eversion. "
-"Written by Nathaniel Thurston and Michael McGuffin. This program is not "
-"included with the XScreenSaver package, but if you don't have it already, "
-"you can find it at &lt;http://www.dgp.utoronto.ca/~mjmcguff/eversion/&gt;."
+#: hacks/config/spheremonics.xml.h:19
+msgid "Smoothed lines"
 msgstr ""
 
 #: hacks/config/spheremonics.xml.h:20
-msgid "Smoothed Lines"
-msgstr ""
-
-#: hacks/config/spheremonics.xml.h:23
 msgid "Spheremonics"
 msgstr ""
 
-#: hacks/config/spheremonics.xml.h:24
+#: hacks/config/spheremonics.xml.h:21
 msgid ""
 "These closed objects are commonly called spherical harmonics, although they "
 "are only remotely related to the mathematical definition found in the "
-"solution to certain wave functions, most notable the eigenfunctions of "
-"angular momentum operators. Written by Paul Bourke and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/spiral.xml.h:2 hacks/config/superquadrics.xml.h:2
-msgid "Cycles"
+"solution to certain wave functions, most notably the eigenfunctions of "
+"angular momentum operators. http://en.wikipedia.org/wiki/"
+"Spherical_harmonics#Visualization_of_the_spherical_harmonics Written by Paul "
+"Bourke and Jamie Zawinski; 2002."
 msgstr ""
 
-#: hacks/config/spiral.xml.h:7
-msgid ""
-"Moving circular patterns, by Peter Schmitzberger. Moving circular patterns "
-"means moire; interference patterns, of course."
+#: hacks/config/spiral.xml.h:8
+msgid "Moving circular moire patterns. Written by Peter Schmitzberger; 1997."
 msgstr ""
 
 #: hacks/config/spiral.xml.h:11
 msgid "Spiral"
 msgstr ""
 
-#: hacks/config/spotlight.xml.h:1
+#: hacks/config/spotlight.xml.h:3
 msgid ""
 "Draws a spotlight scanning across a black screen, illuminating the "
-"underlying desktop when it passes. Written by Rick Schultz."
+"underlying desktop (or a picture) when it passes. Written by Rick Schultz "
+"and Jamie Zawinski; 1999."
 msgstr ""
 
-#: hacks/config/spotlight.xml.h:6
+#: hacks/config/spotlight.xml.h:11
 msgid "Spotlight"
 msgstr ""
 
-#: hacks/config/sproingies.xml.h:3
-msgid "Q-Bert meets Marble Madness! Written by Ed Mackey."
+#: hacks/config/spotlight.xml.h:12
+msgid "Spotlight size"
+msgstr ""
+
+#: hacks/config/sproingies.xml.h:1
+msgid "Fall off edge"
 msgstr ""
 
 #: hacks/config/sproingies.xml.h:9
+#, no-c-format
+msgid ""
+"Slinky-like creatures walk down an infinite staircase and occasionally "
+"explode! http://en.wikipedia.org/wiki/Slinky http://en.wikipedia.org/wiki/Q%"
+"2Abert http://en.wikipedia.org/wiki/Marble_Madness Written by Ed Mackey; "
+"1997."
+msgstr ""
+
+#: hacks/config/sproingies.xml.h:10
 msgid "Sproingies"
 msgstr ""
 
@@ -7655,1372 +8136,870 @@ msgstr ""
 msgid ""
 "Draws a set of interacting, square-spiral-producing automata. The spirals "
 "grow outward until they hit something, then they go around it. Written by "
-"Jeff Epler."
+"Jeff Epler; 1999."
 msgstr ""
 
 #: hacks/config/squiral.xml.h:5
 msgid "Handedness"
 msgstr ""
 
-#: hacks/config/squiral.xml.h:7
-msgid "Left"
-msgstr ""
-
-#: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:8
-msgid "Randomness"
-msgstr ""
-
-#: hacks/config/squiral.xml.h:12
-msgid "Right"
-msgstr ""
-
-#: hacks/config/squiral.xml.h:17
-msgid "Squiral"
-msgstr ""
-
-#: hacks/config/ssystem.xml.h:1
-msgid "SSystem"
-msgstr ""
-
-#: hacks/config/ssystem.xml.h:2
-msgid ""
-"SSystem is a GL Solar System simulator. It simulates flybys of Sun, the nine "
-"planets and a few major satellites, with four camera modes. Written by Raul "
-"Alonso. This is not included with the XScreenSaver package, but is packaged "
-"separately. Note: SSystem does not work as a screen saver on all systems, "
-"because it doesn't communicate with xscreensaver properly. It happens to "
-"work with some window managers, but not with others, so your mileage may "
-"vary. SSystem was once available at &lt;http://www1.las.es/~amil/ssystem/"
-"&gt;, but is now gone. You may still be able to find copies elsewhere. "
-"SSystem has since evolved into Celestia, found at &lt;http://www.shatters."
-"net/celestia/&gt;. Sadly, Celestia does not work with xscreensaver at all. "
-"You are encouraged to nag the authors into adding xscreensaver support!"
-msgstr ""
-
-#: hacks/config/stairs.xml.h:6
-msgid "Stairs"
-msgstr ""
-
-#: hacks/config/stairs.xml.h:8
-msgid ""
-"by Marcelo Vianna's third Escher GL hack, this one draws an ``infinite'' "
-"staircase."
-msgstr ""
-
-#: hacks/config/starfish.xml.h:1
-msgid "Color Gradients"
-msgstr ""
-
-#: hacks/config/starfish.xml.h:7
-msgid "Pulsating Blob"
-msgstr ""
-
-#: hacks/config/starfish.xml.h:10
-msgid "Starfish"
-msgstr ""
-
-#: hacks/config/starfish.xml.h:13
-msgid ""
-"This generates a sequence of undulating, throbbing, star-like patterns which "
-"pulsate, rotate, and turn inside out. Another display mode uses these shapes "
-"to lay down a field of colors, which are then cycled. The motion is very "
-"organic. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/starwars.xml.h:2
-msgid "Anti-aliased Lines"
-msgstr ""
-
-#: hacks/config/starwars.xml.h:4
-msgid ""
-"Draws a stream of text slowly scrolling into the distance at an angle, over "
-"a star field, like at the beginning of the movie of the same name. The text "
-"can be the output of a program or the contents of a file or URL, as "
-"configured on the \"Advanced\" tab of the main Screensaver Preferences "
-"window. Written by Jamie Zawinski and Claudio Matauoka."
-msgstr ""
-
-#: hacks/config/starwars.xml.h:5
-msgid "Fade Out"
-msgstr ""
-
-#: hacks/config/starwars.xml.h:10
-msgid "Scroll Speed"
-msgstr ""
-
-#: hacks/config/starwars.xml.h:13
-msgid "Star Rotation Speed"
-msgstr ""
-
-#: hacks/config/starwars.xml.h:14
-msgid "StarWars"
-msgstr ""
-
-#: hacks/config/starwars.xml.h:18
-msgid "Texture-Mapped Font"
-msgstr ""
-
-#: hacks/config/starwars.xml.h:19
-msgid "Thick Lines"
-msgstr ""
-
-#: hacks/config/starwars.xml.h:20
-msgid "Wrap Long Lines"
-msgstr ""
-
-#: hacks/config/stonerview.xml.h:1
-msgid ""
-"Chains of colorful squares dance around each other in complex spiral "
-"patterns. Written by Andrew Plotkin, based on SGI's `electropaint' "
-"screensaver."
-msgstr ""
-
-#: hacks/config/stonerview.xml.h:3
-msgid "StonerView"
-msgstr ""
-
-#: hacks/config/strange.xml.h:6
-msgid "Strange"
-msgstr ""
-
-#: hacks/config/strange.xml.h:7
-msgid ""
-"This draws strange attractors: it's a colorful, unpredictably-animating "
-"field of dots that swoops and twists around. The motion is very nice. "
-"Written by Massimino Pascal."
-msgstr ""
-
-#: hacks/config/substrate.xml.h:2 hacks/config/xplanet.xml.h:2
-#, no-c-format
-msgid "0%"
-msgstr ""
-
-#: hacks/config/substrate.xml.h:5
-msgid "Circle Percentage"
-msgstr ""
-
-#: hacks/config/substrate.xml.h:9
-#, fuzzy
-msgid "Initial Cracks"
-msgstr "カラーマップをインストールする"
-
-#: hacks/config/substrate.xml.h:10
-msgid ""
-"Lines like crystals grow on a computational substrate. A simple "
-"perpendicular growth rule creates intricate city-like structures. By J. "
-"Tarbell and Mike Kershaw."
-msgstr ""
-
-#: hacks/config/substrate.xml.h:13
-#, fuzzy
-msgid "Sandgrains"
-msgstr "標準"
-
-#: hacks/config/substrate.xml.h:17
-msgid "Substrate"
-msgstr ""
-
-#: hacks/config/substrate.xml.h:18
-msgid "Wireframe only"
-msgstr ""
-
-#: hacks/config/superquadrics.xml.h:3
-msgid ""
-"Ed Mackey reports that he wrote the first version of this program in BASIC "
-"on a Commodore 64 in 1987, as a 320x200 black and white wireframe. Now it is "
-"GL and has specular reflections."
-msgstr ""
-
-#: hacks/config/superquadrics.xml.h:11
-msgid "Superquadrics"
-msgstr ""
-
-#: hacks/config/swirl.xml.h:4
-msgid ""
-"More flowing, swirly patterns. This version is by M. Dobie and R. Taylor, "
-"but you might have seen a Mac program similar to this called FlowFazer. "
-"There is also a cool Java applet of a similar concept."
-msgstr ""
-
-#: hacks/config/swirl.xml.h:8
-msgid "Swirl"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:1
-msgid "0 deg"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:2
-msgid "5 Minute Tick Marks"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:3
-msgid "90 deg"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:4
-msgid "Bigger"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:5
-msgid "Cycle Seconds"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:10
-msgid "Minute Tick Marks"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:12
-msgid "Smaller"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:14
-msgid "T3D"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:15
-msgid ""
-"This draws a working analog clock composed of floating, throbbing bubbles. "
-"Written by Bernd Paysan."
-msgstr ""
-
-#: hacks/config/t3d.xml.h:16
-msgid "Turn Side-to-Side"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:17
-msgid "Wobbliness"
-msgstr ""
-
-#: hacks/config/tangram.xml.h:3
-msgid ""
-"Lets you watch the computer solve Tangram puzzles Written by Jeremy English."
-msgstr ""
-
-#: hacks/config/tangram.xml.h:6
-msgid "Tangram"
-msgstr ""
-
-#: hacks/config/tangram.xml.h:7
-msgid "Viewing Time"
-msgstr ""
-
-#: hacks/config/tangram.xml.h:9
-msgid "X Camera Rotate"
-msgstr ""
-
-#: hacks/config/tangram.xml.h:10
-msgid "Y Camera Rotate"
-msgstr ""
-
-#: hacks/config/tangram.xml.h:11
-msgid "Z Camera Rotate"
-msgstr ""
-
-#: hacks/config/thornbird.xml.h:1
-msgid ""
-"Displays a view of the ``Bird in a Thornbush'' fractal. Written by Tim "
-"Auckland."
-msgstr ""
-
-#: hacks/config/thornbird.xml.h:6
-msgid "Points"
-msgstr ""
-
-#: hacks/config/thornbird.xml.h:12
-msgid "Thornbird"
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:1
-#, fuzzy
-msgid "0 sec"
-msgstr "秒間"
-
-#: hacks/config/timetunnel.xml.h:2
-#, fuzzy
-msgid "30 sec"
-msgstr "秒間"
-
-#: hacks/config/timetunnel.xml.h:4
-msgid "Draw Logo"
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:5
-msgid ""
-"Draws an animation similar to the opening and closing effects on the Dr. Who "
-"television show. Written by Sean P. Brennan."
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:7
-msgid "Run Backward"
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:10
-msgid "Start sequence time"
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:11
-msgid "Timetunnel"
-msgstr ""
-
-#: 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:7
-msgid "Triangle"
-msgstr ""
-
-#: hacks/config/truchet.xml.h:4
-msgid ""
-"This draws line- and arc-based Truchet patterns that tile the screen. "
-"Written by Adrian Likins."
-msgstr ""
-
-#: hacks/config/truchet.xml.h:5
-msgid "Truchet"
-msgstr ""
-
-#: hacks/config/twang.xml.h:2
-msgid ""
-"Divides the screen into a grid, and plucks them. Written by Dan Bornstein."
-msgstr ""
-
-#: hacks/config/twang.xml.h:6
-msgid "Jumpy"
-msgstr ""
-
-#: hacks/config/twang.xml.h:11
-msgid "Springiness"
-msgstr ""
-
-#: hacks/config/twang.xml.h:13
-msgid "Transference"
-msgstr ""
-
-#: hacks/config/twang.xml.h:14
-msgid "Twang"
-msgstr ""
-
-#: hacks/config/vermiculate.xml.h:1
-msgid "Draws squiggly worm-like paths. Written by Tyler Pierce."
-msgstr ""
-
-#: hacks/config/vermiculate.xml.h:2
-msgid "Vermiculate"
-msgstr ""
-
-#: hacks/config/vidwhacker.xml.h:2
-msgid "2 seconds"
-msgstr ""
-
-#: hacks/config/vidwhacker.xml.h:4
-msgid "Image Directory"
-msgstr ""
-
-#: hacks/config/vidwhacker.xml.h:5
-msgid ""
-"This is actually just a shell script that grabs a frame of video from the "
-"system's video input, and then uses some PBM filters (chosen at random) to "
-"manipulate and recombine the video frame in various ways (edge detection, "
-"subtracting the image from a rotated version of itself, etc.) Then it "
-"displays that image for a few seconds, and does it again. This works really "
-"well if you just feed broadcast television into it."
-msgstr ""
-
-#: hacks/config/vidwhacker.xml.h:6
-msgid "VidWhacker"
-msgstr ""
-
-#: hacks/config/vines.xml.h:6
-msgid ""
-"This one generates a continuous sequence of small, curvy geometric patterns. "
-"It scatters them around your screen until it fills up, then it clears the "
-"screen and starts over. Written by Tracy Camp and David Hansen."
-msgstr ""
-
-#: hacks/config/vines.xml.h:8
-msgid "Vines"
-msgstr ""
-
-#: hacks/config/wander.xml.h:5
-msgid "Draw Spots"
-msgstr ""
-
-#: hacks/config/wander.xml.h:6
-msgid ""
-"Draws a colorful random-walk, in various forms. Written by Rick Campbell."
-msgstr ""
-
-#: hacks/config/wander.xml.h:14
-msgid "Sustain"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:1
-msgid "2 min"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:2
-#, fuzzy
-msgid "30 secs"
-msgstr "秒間"
-
-#: hacks/config/webcollage.xml.h:3
-msgid "Delay:                    None"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:4
-msgid "Dictionary File"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:5
-msgid "Opacity:      Transparent"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:6
-msgid "Overall Filter Program"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:7
-msgid "Per-Image Filter Program"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:9
-msgid ""
-"This program makes collages out of random images pulled off of the World "
-"Wide Web. It finds these images by doing random web searches, and then "
-"extracting images from the returned pages. It can also be set up to filter "
-"the images through the `VidWhacker' program. WARNING: THE INTERNET SOMETIMES "
-"CONTAINS PORNOGRAPHY. The Internet being what it is, absolutely anything "
-"might show up in the collage including -- quite possibly -- pornography, or "
-"even nudity. Please act accordingly. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:10
-msgid "URL Timeout:     2 secs"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:11
-msgid "WebCollage"
-msgstr ""
-
-#: hacks/config/whirlwindwarp.xml.h:2
-msgid ""
-"Floating stars are acted upon by a mixture of simple 2D forcefields. The "
-"strength of each forcefield changes continuously, and it is also switched on "
-"and off at random. By Paul 'Joey' Clark."
-msgstr ""
-
-#: hacks/config/whirlwindwarp.xml.h:7
-msgid "Trail Size"
-msgstr ""
-
-#: hacks/config/whirlwindwarp.xml.h:8
-msgid "WhirlwindWarp"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:1
-msgid "Amplitude"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:2
-msgid "Circle"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:3
-msgid "Draws zooming chains of sinusoidal spots. Written by Ashton Trey Belew."
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:4
-#, fuzzy
-msgid "Explain modes"
-msgstr "表示モード"
-
-#: hacks/config/whirlygig.xml.h:5
-msgid "Fun"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:6
-msgid "Funky"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:7
-msgid "Innie"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:8
-msgid "Leave a trail"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:9
-msgid "Linear"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:11
-msgid "Lissajous"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:15
-#, fuzzy
-msgid "Test"
-msgstr "最適"
-
-#: hacks/config/whirlygig.xml.h:16
-msgid "Use Double Buffering"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:17
-msgid "Whirlies"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:18
-msgid "WhirlyGig"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:19
-msgid "Wrap the screen"
-msgstr ""
-
-#: hacks/config/worm.xml.h:1
-msgid ""
-"An ancient xlock hack that draws multicolored worms that crawl around the "
-"screen. Written by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik "
-"Theiling."
-msgstr ""
-
-#: hacks/config/wormhole.xml.h:6
-msgid "Star speed"
-msgstr ""
-
-#: hacks/config/wormhole.xml.h:7
-msgid "Stars Created"
-msgstr ""
-
-#: hacks/config/wormhole.xml.h:8
-msgid "Wormhole"
-msgstr ""
-
-#: hacks/config/wormhole.xml.h:9
-msgid ""
-"Wormhole simulates flying through a colored wormhole in space. Written by "
-"Jon Rafkind."
-msgstr ""
-
-#: hacks/config/xanalogtv.xml.h:1
-msgid "XAnalogTV"
-msgstr ""
-
-#: hacks/config/xanalogtv.xml.h:2
-msgid ""
-"XAnalogTV shows a detailed simulation of an old TV set showing various test "
-"patterns, with various picture artifacts like snow, bloom, distortion, "
-"ghosting, and hash noise. It also simulates the TV warming up. It will cycle "
-"through 12 channels, some with images you give it, and some with color bars "
-"or nothing but static. By Trevor Blackwell."
-msgstr ""
-
-#: hacks/config/xaos.xml.h:1
-msgid "XaoS"
-msgstr ""
-
-#: hacks/config/xaos.xml.h:2
-msgid ""
-"XaoS generates fast fly-through animations of the Mandelbrot and other "
-"fractal sets. Written by Thomas Marsh and Jan Hubicka. This is not included "
-"with the XScreenSaver package, but if you don't have it already, you can "
-"find it at &lt;http://xaos.theory.org/&gt;."
-msgstr ""
-
-#: hacks/config/xdaliclock.xml.h:1
-msgid "12-Hour Time"
+#: hacks/config/squiral.xml.h:7
+msgid "Left"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:2
-msgid "24-Hour Time"
+#: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:12
+msgid "Randomness"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:3
-msgid "Cycle Colors"
+#: hacks/config/squiral.xml.h:12
+msgid "Right"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:4
-msgid "Display Seconds"
+#: hacks/config/squiral.xml.h:16
+msgid "Squiral"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:5
-msgid "Huge Font"
+#: hacks/config/stairs.xml.h:1
+msgid ""
+"Escher's infinite staircase. http://en.wikipedia.org/wiki/"
+"Maurits_Cornelis_Escher Written by Marcelo Vianna; 1998."
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:6 hacks/config/xmatrix.xml.h:10
-msgid "Large Font"
+#: hacks/config/stairs.xml.h:6
+msgid "Stairs"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:7
-msgid "Medium Font"
+#: hacks/config/starfish.xml.h:3
+msgid "Color gradients"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:8 hacks/config/xmatrix.xml.h:16
-msgid "Small Font"
+#: hacks/config/starfish.xml.h:11
+msgid "Pulsating blob"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:9
-msgid "XDaliClock"
+#: hacks/config/starfish.xml.h:14
+msgid "Starfish"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:10
+#: hacks/config/starfish.xml.h:17
 msgid ""
-"XDaliClock draws a large digital clock, the numbers of which change by "
-"``melting'' into their new shapes. Written by Jamie Zawinski. This is not "
-"included with the XScreenSaver package, but if you don't have it already, "
-"you can find it at &lt;http://www.jwz.org/xdaliclock/&gt;."
-msgstr ""
-
-#: hacks/config/xearth.xml.h:1
-msgid "Bright"
+"This generates a sequence of undulating, throbbing, star-like patterns which "
+"pulsate, rotate, and turn inside out. Another display mode uses these shapes "
+"to lay down a field of colors, which are then cycled. The motion is very "
+"organic. Written by Jamie Zawinski; 1997."
 msgstr ""
 
-#: hacks/config/xearth.xml.h:2 hacks/config/xplanet.xml.h:7
-msgid "Date/Time Stamp"
+#: hacks/config/starwars.xml.h:1
+msgid "  Frame rate      Low"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:3
-msgid "Day  Dim"
+#: hacks/config/starwars.xml.h:2
+msgid " Stars speed     Slow"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:5
-msgid "Display Stars"
+#: hacks/config/starwars.xml.h:3
+msgid "Anti-aliased lines"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:8
-msgid "Label Cities"
+#: hacks/config/starwars.xml.h:5
+msgid ""
+"Draws a stream of text slowly scrolling into the distance at an angle, over "
+"a star field, like at the beginning of the movie of the same name. http://en."
+"wikipedia.org/wiki/Star_Wars_opening_crawl Written by Jamie Zawinski and "
+"Claudio Matauoka; 2001."
 msgstr ""
 
-#: hacks/config/xearth.xml.h:9 hacks/config/xplanet.xml.h:49
-msgid "Lower Left"
-msgstr ""
+#: hacks/config/starwars.xml.h:6
+#, fuzzy
+msgid "Fade out"
+msgstr "フェードする時間: "
 
-#: hacks/config/xearth.xml.h:10 hacks/config/xplanet.xml.h:50
-msgid "Lower Right"
+#: hacks/config/starwars.xml.h:12
+msgid "Scroll speed     Slow"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:13 hacks/config/xplanet.xml.h:51
-msgid "Mercator Projection"
+#: hacks/config/starwars.xml.h:14
+msgid "StarWars"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:14
-msgid "Night   Dim"
+#: hacks/config/starwars.xml.h:16
+msgid "Texture-mapped font"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:15
-msgid "No Stars"
-msgstr ""
+#: hacks/config/starwars.xml.h:17
+#, fuzzy
+msgid "Thick lines"
+msgstr "標準"
 
-#: hacks/config/xearth.xml.h:16
-msgid "North/South Rotation"
+#: hacks/config/starwars.xml.h:18
+msgid "Wrap long lines"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:18 hacks/config/xplanet.xml.h:53
-msgid "Orthographic Projection"
+#: hacks/config/starwars.xml.h:19
+msgid "or, Text columns"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:19 hacks/config/xplanet.xml.h:56
-msgid "Real Time"
+#: hacks/config/stonerview.xml.h:1
+msgid ""
+"Chains of colorful squares dance around each other in complex spiral "
+"patterns. Inspired by David Tristram's `electropaint' screen saver, "
+"originally written for SGI computers in the late 1980s or early 1990s. "
+"Written by Andrew Plotkin; 2001."
 msgstr ""
 
-#: hacks/config/xearth.xml.h:20
-msgid "Shaded Image"
+#: hacks/config/stonerview.xml.h:6
+msgid "StonerView"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:21
-msgid "Sharp"
+#: hacks/config/stonerview.xml.h:7
+msgid "Translucent"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:26
-msgid "Terminator   Blurry"
+#: hacks/config/strange.xml.h:7
+msgid "Strange"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:27 hacks/config/xplanet.xml.h:61
-msgid "Time Warp"
+#: hacks/config/strange.xml.h:8
+msgid ""
+"This draws iterations to strange attractors: it's a colorful, unpredictably-"
+"animating swarm of dots that swoops and twists around. http://en.wikipedia."
+"org/wiki/Attractor#Strange_attractor Written by Massimino Pascal; 1997."
 msgstr ""
 
-#: hacks/config/xearth.xml.h:29 hacks/config/xplanet.xml.h:62
-msgid "Upper Left"
+#: hacks/config/substrate.xml.h:2
+#, no-c-format
+msgid "0%"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:30 hacks/config/xplanet.xml.h:63
-msgid "Upper Right"
+#: hacks/config/substrate.xml.h:5
+msgid "Circle percentage"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:31
+#: hacks/config/substrate.xml.h:6
 msgid ""
-"XEarth draws an image of the Earth, as seen from your favorite vantage point "
-"in space, correctly shaded for the current position of the Sun. Written by "
-"Kirk Johnson. This is not included with the XScreenSaver package, but if you "
-"don't have it already, you can find it at &lt;http://www.cs.colorado.edu/"
-"~tuna/xearth/&gt;. There is also a similar (but more recent) program called "
-"xplanet to be found at &lt;http://xplanet.sourceforge.net/&gt;."
+"Crystalline lines grow on a computational substrate. A simple perpendicular "
+"growth rule creates intricate city-like structures. Written by J. Tarbell "
+"and Mike Kershaw; 2004."
 msgstr ""
 
-#: hacks/config/xearth.xml.h:32
-msgid "Xearth"
-msgstr ""
+#: hacks/config/substrate.xml.h:11
+#, fuzzy
+msgid "Initial cracks"
+msgstr "カラーマップをインストールする"
 
-#: hacks/config/xfishtank.xml.h:5
-msgid "Fish"
-msgstr ""
+#: hacks/config/substrate.xml.h:15
+#, fuzzy
+msgid "Sand grains"
+msgstr "標準"
 
-#: hacks/config/xfishtank.xml.h:6
-msgid "Fish Speed"
+#: hacks/config/substrate.xml.h:18
+msgid "Substrate"
 msgstr ""
 
-#: hacks/config/xfishtank.xml.h:7
-msgid ""
-"Fish! This is not included with the XScreenSaver package, but if you don't "
-"have it already, you can find it at &lt;http://metalab.unc.edu/pub/Linux/X11/"
-"demos/&gt;."
+#: hacks/config/substrate.xml.h:19
+msgid "Wireframe only"
 msgstr ""
 
-#: hacks/config/xfishtank.xml.h:12
-msgid "XFishTank"
+#: hacks/config/superquadrics.xml.h:8
+msgid "Morphing 3D shapes. Written by Ed Mackey; 1987, 1997."
 msgstr ""
 
-#: hacks/config/xflame.xml.h:1
-msgid "Bitmap File"
+#: hacks/config/superquadrics.xml.h:12
+msgid "Spin speed"
 msgstr ""
 
-#: hacks/config/xflame.xml.h:2
-msgid ""
-"Draws a simulation of pulsing fire. It can also take an arbitrary image and "
-"set it on fire too. Written by Carsten Haitzler, hacked on by many others."
+#: hacks/config/superquadrics.xml.h:13
+msgid "Superquadrics"
 msgstr ""
 
-#: hacks/config/xflame.xml.h:3
-msgid "Enable Blooming"
+#: hacks/config/swirl.xml.h:3
+msgid "Flowing, swirly patterns. Written by M. Dobie and R. Taylor; 1997."
 msgstr ""
 
-#: hacks/config/xflame.xml.h:8
-msgid "Xflame"
+#: hacks/config/swirl.xml.h:10
+msgid "Swirl"
 msgstr ""
 
-#: hacks/config/xjack.xml.h:4
-msgid ""
-"This program behaves schizophrenically and makes a lot of typos. Written by "
-"Jamie Zawinski. If you haven't seen Stanley Kubrick's masterpiece, ``The "
-"Shining,'' you won't get it. Those who have describe this hack as "
-"``inspired.''"
+#: hacks/config/t3d.xml.h:1
+msgid "0 deg"
 msgstr ""
 
-#: hacks/config/xjack.xml.h:5
-msgid "Xjack"
+#: hacks/config/t3d.xml.h:2
+msgid "5 minute tick marks"
 msgstr ""
 
-#: hacks/config/xlyap.xml.h:1
-msgid ""
-"This generates pretty fractal pictures by doing funky math involving the "
-"``Lyapunov exponent.'' It has a cool interactive mode, too. Written by Ron "
-"Record."
+#: hacks/config/t3d.xml.h:3
+msgid "90 deg"
 msgstr ""
 
-#: hacks/config/xlyap.xml.h:2
-msgid "Xlyap"
+#: hacks/config/t3d.xml.h:4
+msgid "Bigger"
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:3
+#: hacks/config/t3d.xml.h:5
+#, fuzzy
+msgid "Cycle seconds"
+msgstr "秒間"
+
+#: hacks/config/t3d.xml.h:6
 msgid ""
-"Draws dropping characters similar to what is seen on the computer monitors "
-"in \"The Matrix\". See also \"glmatrix\" for a 3D rendering of the similar "
-"effect that appeared in the title sequence of the movie. Written by Jamie "
-"Zawinski."
+"Draws a working analog clock composed of floating, throbbing bubbles. "
+"Written by Bernd Paysan; 1999."
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:4
-msgid "Expansion Algorithm"
+#: hacks/config/t3d.xml.h:11
+msgid "Minute tick marks"
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:6
-msgid "Full"
+#: hacks/config/t3d.xml.h:13
+msgid "Smaller"
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:9
-msgid "Knock Knock"
+#: hacks/config/t3d.xml.h:14
+msgid "T3D"
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:12
-msgid "Phone Number"
+#: hacks/config/t3d.xml.h:15
+msgid "Turn side-to-side"
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:13
-msgid "Run Trace Program"
+#: hacks/config/t3d.xml.h:16
+msgid "Wobbliness"
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:14
-msgid "Slider Algorithm"
+#: hacks/config/tangram.xml.h:12
+msgid ""
+"Solves tangram puzzles. http://en.wikipedia.org/wiki/Tangram Written by "
+"Jeremy English; 2005."
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:19
-msgid "Synergistic Algorithm"
+#: hacks/config/tangram.xml.h:13
+msgid "Tangram"
 msgstr ""
 
-#: hacks/config/xmatrix.xml.h:20
-msgid "Xmatrix"
-msgstr ""
+#: hacks/config/tangram.xml.h:15
+#, fuzzy
+msgid "X rotation"
+msgstr "フェードする時間: "
 
-#: hacks/config/xmountains.xml.h:1
-msgid "1.0"
-msgstr ""
+#: hacks/config/tangram.xml.h:16
+#, fuzzy
+msgid "Y rotation"
+msgstr "フェードする時間: "
 
-#: hacks/config/xmountains.xml.h:3
-msgid "14"
-msgstr ""
+#: hacks/config/tangram.xml.h:17
+#, fuzzy
+msgid "Z rotation"
+msgstr "フェードする時間: "
 
-#: hacks/config/xmountains.xml.h:4
-msgid "7"
+#: hacks/config/thornbird.xml.h:1
+msgid ""
+"Displays a view of the \"Bird in a Thornbush\" fractal. Written by Tim "
+"Auckland; 2002."
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:5
-msgid "Altitude  Low"
+#: hacks/config/thornbird.xml.h:13
+msgid "Thornbird"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:6
-msgid "Ambient  Low"
-msgstr ""
+#: hacks/config/timetunnel.xml.h:1
+#, fuzzy
+msgid "0 sec"
+msgstr "秒間"
 
-#: hacks/config/xmountains.xml.h:7
-msgid "Angle of Light"
+#: hacks/config/timetunnel.xml.h:4
+msgid "Draw logo"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:8
-msgid "Contour  Low"
+#: hacks/config/timetunnel.xml.h:5
+msgid ""
+"Draws an animation similar to the opening and closing effects on the Dr. Who "
+"TV show. Written by Sean P. Brennan; 2005."
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:9
-msgid "Contrast  Low"
+#: hacks/config/timetunnel.xml.h:7
+msgid "Run backward"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:10
-#, fuzzy
-msgid "Craggy"
-msgstr "グレー"
-
-#: hacks/config/xmountains.xml.h:11
-msgid "Cross Update"
+#: hacks/config/timetunnel.xml.h:10
+msgid "Start sequence time"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:12
-msgid "Distance  Low"
+#: hacks/config/timetunnel.xml.h:11
+msgid "TimeTunnel"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:14
-msgid "Foreground"
+#: hacks/config/topblock.xml.h:1
+msgid "Blob mode"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:15
-msgid "Fractal Options"
+#: hacks/config/topblock.xml.h:2
+msgid "Carpet"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:16
-msgid "Height  Low"
+#: hacks/config/topblock.xml.h:3
+msgid "Carpet size"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:18
-msgid "Horizontal  Low"
+#: hacks/config/topblock.xml.h:5
+msgid ""
+"Creates a 3D world with dropping blocks that build up and up. Written by "
+"rednuht; 2006."
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:19
+#: hacks/config/topblock.xml.h:6
 #, fuzzy
-msgid "Iteration  0"
-msgstr "フェードする時間: "
-
-#: hacks/config/xmountains.xml.h:20
-msgid "Light Level"
-msgstr ""
+msgid "Drop speed"
+msgstr "表示モード"
 
-#: hacks/config/xmountains.xml.h:21
-msgid "Recursion  0"
+#: hacks/config/topblock.xml.h:9
+msgid "Follow"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:22
-msgid "Reflections"
+#: hacks/config/topblock.xml.h:15
+msgid "Nipples"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:23
-msgid "Sea Level  Low"
+#: hacks/config/topblock.xml.h:16
+msgid "Polygon count"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:24
-msgid "Side View"
+#: hacks/config/topblock.xml.h:22
+msgid "Spawn likelyhood"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:26
-msgid "Smoothing  0"
+#: hacks/config/topblock.xml.h:23
+msgid "TopBlock"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:27
-msgid "Speed  Slow"
+#: hacks/config/topblock.xml.h:24
+msgid "Tunnel mode"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:28
-msgid "Terrain"
+#: hacks/config/triangle.xml.h:2
+msgid ""
+"Generates random mountain ranges using iterative subdivision of triangles. "
+"Written by Tobias Gloth; 1997."
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:29
-msgid "Top View"
+#: hacks/config/triangle.xml.h:8
+msgid "Triangle"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:30
-msgid "V. Shift  Low"
+#: hacks/config/truchet.xml.h:5
+msgid ""
+"This draws line- and arc-based truchet patterns that tile the screen. http://"
+"en.wikipedia.org/wiki/Tessellation Written by Adrian Likins; 1998."
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:31
-msgid "V. Stretch  Low"
+#: hacks/config/truchet.xml.h:6
+msgid "Truchet"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:32
-msgid "Variance  Low"
+#: hacks/config/twang.xml.h:3
+msgid "Border width"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:33
-msgid "Vertical  Low"
+#: hacks/config/twang.xml.h:4
+msgid ""
+"Divides the screen into a grid, and plucks them. Written by Dan Bornstein; "
+"2002."
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:34
-msgid "Viewpoint"
+#: hacks/config/twang.xml.h:9
+msgid "Jumpy"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:35
-msgid ""
-"XMountains generates realistic-looking fractal terrains of snow-capped "
-"mountains near water, with either a top view or a side view. Written by "
-"Stephen Booth. This is not included with the XScreenSaver package, but if "
-"you don't have it already, you can find it at &lt;http://www.epcc.ed.ac.uk/"
-"~spb/xmountains/&gt;. (Make sure you have version 2.7 or newer!)"
+#: hacks/config/twang.xml.h:16
+msgid "Springiness"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:36
-msgid "Xf  0.0"
+#: hacks/config/twang.xml.h:18
+msgid "Transference"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:37
-msgid "Xmountains"
+#: hacks/config/twang.xml.h:19
+msgid "Twang"
 msgstr ""
 
-#: hacks/config/xmountains.xml.h:38
-msgid "Yf  0.0"
+#: hacks/config/vermiculate.xml.h:1
+msgid "Draws squiggly worm-like paths. Written by Tyler Pierce; 2001."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:5
-msgid "Ancient Projection"
+#: hacks/config/vermiculate.xml.h:6
+msgid "Vermiculate"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:6
-msgid "Azimuthal Projection"
+#: hacks/config/vidwhacker.xml.h:2
+msgid "2 seconds"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:9
-msgid "From Ariel"
-msgstr ""
+#: hacks/config/vidwhacker.xml.h:4 hacks/config/webcollage.xml.h:6
+#, fuzzy
+msgid "Image directory"
+msgstr "フェードする時間: "
 
-#: hacks/config/xplanet.xml.h:10
-msgid "From Callisto"
+#: hacks/config/vidwhacker.xml.h:6
+msgid ""
+"This is a shell script that grabs a frame of video from the system's video "
+"input, and then uses some PBM filters (chosen at random) to manipulate and "
+"recombine the video frame in various ways (edge detection, subtracting the "
+"image from a rotated version of itself, etc.) Then it displays that image "
+"for a few seconds, and does it again. This works really well if you just "
+"feed broadcast television into it. Written by Jamie Zawinski; 1998."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:11
-msgid "From Charon"
+#: hacks/config/vidwhacker.xml.h:7
+msgid "VidWhacker"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:12
-msgid "From Deimos"
+#: hacks/config/vines.xml.h:2
+msgid ""
+"Generates a continuous sequence of small, curvy geometric patterns. Written "
+"by Tracy Camp and David Hansen; 1997."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:13
-msgid "From Dione"
+#: hacks/config/vines.xml.h:9
+msgid "Vines"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:14
-msgid "From Earth"
+#: hacks/config/voronoi.xml.h:2
+msgid "50 pixels"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:15
-msgid "From Enceladus"
+#: hacks/config/voronoi.xml.h:4
+msgid ""
+"Draws a randomly-colored Voronoi tessellation, and periodically zooms in and "
+"adds new points. The existing points also wander around. There are a set of "
+"control points on the plane, each at the center of a colored cell. Every "
+"pixel within that cell is closer to that cell's control point than to any "
+"other control point. That is what determines the cell's shapes. http://en."
+"wikipedia.org/wiki/Voronoi_diagram Written by Jamie Zawinski; 2007."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:16
-msgid "From Europa"
+#: hacks/config/voronoi.xml.h:8
+msgid "Insertion speed"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:17
-msgid "From Ganymede"
+#: hacks/config/voronoi.xml.h:10
+msgid "Point size"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:18
-msgid "From Hyperion"
+#: hacks/config/voronoi.xml.h:14
+msgid "Voronoi"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:19
-msgid "From Iapetus"
+#: hacks/config/voronoi.xml.h:16
+msgid "Zoom frequency"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:20
-msgid "From Io"
+#: hacks/config/voronoi.xml.h:17
+msgid "Zoom speed"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:21
-msgid "From Jupiter"
+#: hacks/config/wander.xml.h:3
+msgid "Draw spots"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:22
-msgid "From Major"
+#: hacks/config/wander.xml.h:4
+msgid ""
+"Draws a colorful random-walk, in various forms. http://en.wikipedia.org/wiki/"
+"Random_walk Written by Rick Campbell; 1999."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:23
-msgid "From Mars"
+#: hacks/config/webcollage.xml.h:1
+msgid "2 min"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:24
-msgid "From Mercury"
-msgstr ""
+#: hacks/config/webcollage.xml.h:2
+#, fuzzy
+msgid "2 secs"
+msgstr "秒間"
 
-#: hacks/config/xplanet.xml.h:25
-msgid "From Mimas"
-msgstr ""
+#: hacks/config/webcollage.xml.h:3
+#, fuzzy
+msgid "30 secs"
+msgstr "秒間"
 
-#: hacks/config/xplanet.xml.h:26
-msgid "From Miranda"
+#: hacks/config/webcollage.xml.h:4
+msgid "Delay between images"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:27
-msgid "From Moon"
+#: hacks/config/webcollage.xml.h:5
+msgid "Dictionary file"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:28
-msgid "From Neptune"
+#: hacks/config/webcollage.xml.h:7
+msgid "Image opacity"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:29
-msgid "From Nereid"
+#: hacks/config/webcollage.xml.h:8
+msgid "Network timeout"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:30
-msgid "From Oberon"
+#: hacks/config/webcollage.xml.h:11
+msgid "Overall filter program"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:31
-msgid "From Phobos"
+#: hacks/config/webcollage.xml.h:12
+msgid "Per-image filter program"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:32
-msgid "From Phoebe"
+#: hacks/config/webcollage.xml.h:14
+msgid ""
+"This makes collages out of random images pulled off of the World Wide Web. "
+"It finds these images by doing random web searches, and then extracting "
+"images from the returned pages. WARNING: THE INTERNET SOMETIMES CONTAINS "
+"PORNOGRAPHY. The Internet being what it is, absolutely anything might show "
+"up in the collage including -- quite possibly -- pornography, or even "
+"nudity. Please act accordingly. See also http://www.jwz.org/webcollage/ "
+"Written by Jamie Zawinski; 1999."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:33
-msgid "From Pluto"
+#: hacks/config/webcollage.xml.h:16
+msgid "WebCollage"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:34
-msgid "From Random"
+#: hacks/config/whirlwindwarp.xml.h:2
+msgid ""
+"Floating stars are acted upon by a mixture of simple 2D forcefields. The "
+"strength of each forcefield changes continuously, and it is also switched on "
+"and off at random. Written by Paul 'Joey' Clark; 2001."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:35
-msgid "From Rhea"
+#: hacks/config/whirlwindwarp.xml.h:8
+msgid "Trail size"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:36
-msgid "From Saturn"
+#: hacks/config/whirlwindwarp.xml.h:9
+msgid "WhirlWindWarp"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:37
-msgid "From Sun"
+#: hacks/config/whirlygig.xml.h:1
+msgid ""
+"Draws zooming chains of sinusoidal spots. Written by Ashton Trey Belew; 2001."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:38
-msgid "From Tethys"
-msgstr ""
+#: hacks/config/whirlygig.xml.h:2
+#, fuzzy
+msgid "Explain modes"
+msgstr "表示モード"
 
-#: hacks/config/xplanet.xml.h:39
-msgid "From Titan"
+#: hacks/config/whirlygig.xml.h:4
+msgid "Leave a trail"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:40
-msgid "From Titania"
+#: hacks/config/whirlygig.xml.h:8
+msgid "Whirlies"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:41
-msgid "From Triton"
+#: hacks/config/whirlygig.xml.h:9
+msgid "Whirlygig"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:42
-msgid "From Umbriel"
+#: hacks/config/whirlygig.xml.h:10
+msgid "Wrap the screen"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:43
-msgid "From Uranus"
+#: hacks/config/whirlygig.xml.h:11
+msgid "X amplitude"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:44
-msgid "From Venus"
+#: hacks/config/whirlygig.xml.h:12
+msgid "X circle"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:45
-msgid "Hemisphere Projection"
+#: hacks/config/whirlygig.xml.h:13
+msgid "X fun"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:46
-msgid "Lambert Projection"
+#: hacks/config/whirlygig.xml.h:14
+msgid "X funky"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:47
-msgid "Latitude"
+#: hacks/config/whirlygig.xml.h:15
+msgid "X innie"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:48
-msgid "Longitude"
+#: hacks/config/whirlygig.xml.h:16
+msgid "X linear"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:52
-msgid "Mollweide Projection"
+#: hacks/config/whirlygig.xml.h:17
+msgid "X lissajous"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:54
-msgid "Peters Projection"
+#: hacks/config/whirlygig.xml.h:18
+msgid "X random"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:57
-msgid "Rectangular Projection"
+#: hacks/config/whirlygig.xml.h:19
+msgid "X speed"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:58
-msgid "Render as a Globe"
+#: hacks/config/whirlygig.xml.h:20
+msgid "X spin"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:64
-msgid "View Ariel"
-msgstr ""
+#: hacks/config/whirlygig.xml.h:21
+#, fuzzy
+msgid "X test"
+msgstr "最適"
 
-#: hacks/config/xplanet.xml.h:65
-msgid "View Callisto"
+#: hacks/config/whirlygig.xml.h:22
+msgid "Y amplitude"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:66
-msgid "View Charon"
+#: hacks/config/whirlygig.xml.h:23
+msgid "Y circle"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:67
-msgid "View Deimos"
+#: hacks/config/whirlygig.xml.h:24
+msgid "Y fun"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:68
-msgid "View Dione"
+#: hacks/config/whirlygig.xml.h:25
+msgid "Y funky"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:69
-msgid "View Earth"
+#: hacks/config/whirlygig.xml.h:26
+msgid "Y innie"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:70
-msgid "View Enceladus"
+#: hacks/config/whirlygig.xml.h:27
+msgid "Y linear"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:71
-msgid "View Europa"
+#: hacks/config/whirlygig.xml.h:28
+msgid "Y lissajous"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:72
-msgid "View Ganymede"
+#: hacks/config/whirlygig.xml.h:29
+msgid "Y random"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:73
-msgid "View Hyperion"
+#: hacks/config/whirlygig.xml.h:30
+msgid "Y speed"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:74
-msgid "View Iapetus"
+#: hacks/config/whirlygig.xml.h:31
+msgid "Y spin"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:75
-msgid "View Io"
-msgstr ""
+#: hacks/config/whirlygig.xml.h:32
+#, fuzzy
+msgid "Y test"
+msgstr "最適"
 
-#: hacks/config/xplanet.xml.h:76
-msgid "View Jupiter"
+#: hacks/config/worm.xml.h:2
+msgid ""
+"Draws multicolored worms that crawl around the screen. Written by Brad "
+"Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling; 1991."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:77
-msgid "View Major"
+#: hacks/config/wormhole.xml.h:3
+msgid ""
+"Flying through a colored wormhole in space. Written by Jon Rafkind; 2004."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:78
-msgid "View Mars"
+#: hacks/config/wormhole.xml.h:10
+msgid "Star speed"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:79
-msgid "View Mercury"
+#: hacks/config/wormhole.xml.h:11
+msgid "Stars created"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:80
-msgid "View Mimas"
+#: hacks/config/wormhole.xml.h:12
+msgid "Wormhole"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:81
-msgid "View Miranda"
+#: hacks/config/xanalogtv.xml.h:2
+msgid "XAnalogTV"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:82
-msgid "View Moon"
+#: hacks/config/xanalogtv.xml.h:3
+msgid ""
+"XAnalogTV shows a detailed simulation of an old TV set showing various test "
+"patterns, with various picture artifacts like snow, bloom, distortion, "
+"ghosting, and hash noise. It also simulates the TV warming up. It will cycle "
+"through 12 channels, some with images you give it, and some with color bars "
+"or nothing but static. Written by Trevor Blackwell; 2003."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:83
-msgid "View Neptune"
+#: hacks/config/xflame.xml.h:1
+msgid "Bitmap file"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:84
-msgid "View Nereid"
+#: hacks/config/xflame.xml.h:2
+msgid ""
+"Draws a simulation of pulsing fire. It can also take an arbitrary image and "
+"set it on fire too. Written by Carsten Haitzler and many others; 1999."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:85
-msgid "View Oberon"
+#: hacks/config/xflame.xml.h:3
+msgid "Enable blooming"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:86
-msgid "View Phobos"
+#: hacks/config/xflame.xml.h:8
+msgid "XFlame"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:87
-msgid "View Phoebe"
+#: hacks/config/xjack.xml.h:5
+msgid ""
+"This behaves schizophrenically and makes a lot of typos. Written by Jamie "
+"Zawinski; 1997."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:88
-msgid "View Pluto"
+#: hacks/config/xjack.xml.h:6
+msgid "XJack"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:89
-msgid "View Random"
+#: hacks/config/xlyap.xml.h:8
+msgid ""
+"This generates pretty fractal pictures via the Lyapunov exponent. http://en."
+"wikipedia.org/wiki/Lyapunov_exponent Written by Ron Record; 1997."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:90
-msgid "View Rhea"
+#: hacks/config/xlyap.xml.h:9
+msgid "XLyap"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:91
-msgid "View Saturn"
+#: hacks/config/xmatrix.xml.h:3
+msgid ""
+"Draws dropping characters similar to what is seen on the computer monitors "
+"in \"The Matrix\". See also \"GLMatrix\" for a 3D rendering of the similar "
+"effect that appeared in the movie's title sequence. Written by Jamie "
+"Zawinski; 1999."
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:92
-msgid "View Sun"
+#: hacks/config/xmatrix.xml.h:4
+msgid "Expansion algorithm"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:93
-msgid "View Tethys"
+#: hacks/config/xmatrix.xml.h:10
+msgid "Knock knock"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:94
-msgid "View Titan"
+#: hacks/config/xmatrix.xml.h:11
+msgid "Large font"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:95
-msgid "View Titania"
+#: hacks/config/xmatrix.xml.h:14
+msgid "Phone number"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:96
-msgid "View Triton"
+#: hacks/config/xmatrix.xml.h:15
+msgid "Piped ASCII text"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:97
-msgid "View Umbriel"
+#: hacks/config/xmatrix.xml.h:16
+msgid "Run trace program"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:98
-msgid "View Uranus"
+#: hacks/config/xmatrix.xml.h:18
+msgid "Slider algorithm"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:99
-msgid "View Venus"
+#: hacks/config/xmatrix.xml.h:19
+msgid "Small font"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:100
-msgid "Xplanet"
+#: hacks/config/xmatrix.xml.h:21
+msgid "Synergistic algorithm"
 msgstr ""
 
-#: hacks/config/xplanet.xml.h:101
-msgid ""
-"Xplanet draws an image of the Earth, as seen from your favorite vantage "
-"point in space, correctly shaded for the current position of the Sun. "
-"Written by Hari Nair. This is not included with the XScreenSaver package, "
-"but if you don't have it already, you can find it at &lt;http://xplanet."
-"sourceforge.net/&gt;."
+#: hacks/config/xmatrix.xml.h:22
+msgid "XMatrix"
 msgstr ""
 
 #: hacks/config/xrayswarm.xml.h:1
 msgid ""
-"Draws a few swarms of critters flying around the screen, with nicely faded "
-"color trails behind them. Written by Chris Leger."
+"Draws a few swarms of critters flying around the screen, with faded color "
+"trails behind them. Written by Chris Leger; 2000."
 msgstr ""
 
-#: hacks/config/xrayswarm.xml.h:5
+#: hacks/config/xrayswarm.xml.h:6
 msgid "XRaySwarm"
 msgstr ""
 
-#: hacks/config/xsnow.xml.h:1
+#: hacks/config/xspirograph.xml.h:9
 msgid ""
-"Draws falling snow and the occasional tiny Santa. By Rick Jansen. You can "
-"find it at &lt;http://www.euronet.nl/~rja/Xsnow/&gt;."
+"Simulates that pen-in-nested-plastic-gears toy from your childhood. http://"
+"en.wikipedia.org/wiki/Spirograph Written by Rohit Singh; 2000."
 msgstr ""
 
-#: hacks/config/xsnow.xml.h:2
-msgid "Xsnow"
+#: hacks/config/xspirograph.xml.h:10
+msgid "XSpirograph"
 msgstr ""
 
-#: hacks/config/xspirograph.xml.h:5
-msgid ""
-"Simulates that pen-in-nested-plastic-gears toy from your childhood. By Rohit "
-"Singh."
+#: hacks/config/zoom.xml.h:1
+msgid "    Y lens offset"
 msgstr ""
 
-#: hacks/config/xspirograph.xml.h:6
-msgid "XSpiroGraph"
+#: hacks/config/zoom.xml.h:2
+msgid "   X lens offset"
 msgstr ""
 
-#: hacks/config/xteevee.xml.h:1
-msgid "Color Bars Enabled"
+#: hacks/config/zoom.xml.h:3
+msgid " X border width"
 msgstr ""
 
-#: hacks/config/xteevee.xml.h:2
-msgid "Cycle Through Modes"
+#: hacks/config/zoom.xml.h:4
+msgid " Y border width"
 msgstr ""
 
-#: hacks/config/xteevee.xml.h:3
-msgid "Rolling Enabled"
+#: hacks/config/zoom.xml.h:10
+msgid "Lenses"
 msgstr ""
 
-#: hacks/config/xteevee.xml.h:4
-msgid "Static Enabled"
-msgstr ""
+#: hacks/config/zoom.xml.h:13
+#, fuzzy
+msgid "X magnification"
+msgstr "画像の操作"
 
-#: hacks/config/xteevee.xml.h:5
-msgid "XTeeVee"
-msgstr ""
+#: hacks/config/zoom.xml.h:14
+#, fuzzy
+msgid "Y magnification"
+msgstr "画像の操作"
 
-#: hacks/config/xteevee.xml.h:6
+#: hacks/config/zoom.xml.h:16
 msgid ""
-"XTeeVee simulates various television problems, including static, loss of "
-"vertical hold, and a test pattern. By Greg Knauss."
+"Zooms in on a part of the screen and then moves around. With the \"Lenses\" "
+"option, the result is like looking through many overlapping lenses rather "
+"than just a simple zoom. Written by James Macnicol; 2001."
 msgstr ""
 
-#: hacks/config/zoom.xml.h:3
-msgid "Lens Offset"
-msgstr ""
+#, fuzzy
+#~ msgid "5 Seconds"
+#~ msgstr "秒間"
 
-#: hacks/config/zoom.xml.h:4
-msgid "Lenses"
-msgstr ""
+#, fuzzy
+#~ msgid "Display FPS"
+#~ msgstr "表示モード"
 
-#: hacks/config/zoom.xml.h:9
-msgid ""
-"Zooms in on a part of the screen and then moves around. With the -lenses "
-"option the result is like looking through many overlapping lenses rather "
-"than just a simple zoom. Written by James Macnicol."
-msgstr ""
+#~ msgid "Screen Image"
+#~ msgstr "スクリーンの画像"
+
+#, fuzzy
+#~ msgid "Function"
+#~ msgstr "説明"
+
+#, fuzzy
+#~ msgid "Freaky"
+#~ msgstr "グレー"
+
+#, fuzzy
+#~ msgid "Use PTY"
+#~ msgstr "ON"
+
+#, fuzzy
+#~ msgid "Test"
+#~ msgstr "最適"
+
+#, fuzzy
+#~ msgid "Craggy"
+#~ msgstr "グレー"
 
 #~ msgid "/\");"
 #~ msgstr "/\");"
index 43f85fc455a7c43f4fcab2ae07a7efd0103ca66e..70d55ae14e846daa616323936daac3e07b9aca7c 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -1,17 +1,17 @@
-# Norwegian translation of control-center (bokmål dialect).
+# Norwegian translation of control-center (bokmål dialect).
 # Copyright (C) 1999,2000 Free Software Foundation, Inc.
-# Kjartan Maraas <kmaraas@gnome.org>, 1999,2000.
+# Kjartan Maraas <kmaraas@gnome.org>, 1999,2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: control-center 1.5.8\n"
+"Project-Id-Version: xscreensaver 5.0.8\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-02-13 12:26+0100\n"
-"PO-Revision-Date: 2002-09-03 18:28+0200\n"
+"PO-Revision-Date: 2008-10-09 10:06+0200\n"
 "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
-"Language-Team: Norwegian <no@li.org>\n"
+"Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
 #: driver/demo-Gtk-conf.c:818
@@ -47,7 +47,7 @@ msgstr "_Fil"
 
 #: driver/demo-Gtk-widgets.c:202 driver/xscreensaver-demo.glade2.h:76
 msgid "_Blank Screen Now"
-msgstr "_Blank ut skjermen nå"
+msgstr "_Blank ut skjermen nå"
 
 #: driver/demo-Gtk-widgets.c:211
 msgid ""
@@ -56,11 +56,11 @@ msgstr ""
 
 #: driver/demo-Gtk-widgets.c:215 driver/xscreensaver-demo.glade2.h:89
 msgid "_Lock Screen Now"
-msgstr "_Lås skjermen nå"
+msgstr "_Lås skjermen nå"
 
 #: driver/demo-Gtk-widgets.c:224
 msgid "Lock the screen now (even if \"Lock Screen\" is unchecked.)"
-msgstr "Lås skjermen nå (selv om «Lås skjerm» ikke er avkrysset.)"
+msgstr "LÃ¥s skjermen nÃ¥ (selv om Â«LÃ¥s skjerm» ikke er avkrysset.)"
 
 #: driver/demo-Gtk-widgets.c:228 driver/xscreensaver-demo.glade2.h:87
 msgid "_Kill Daemon"
@@ -68,15 +68,15 @@ msgstr "_Terminer daemon"
 
 #: driver/demo-Gtk-widgets.c:237
 msgid "Tell the running XScreenSaver daemon to exit."
-msgstr "Be kjørende XScreenSaver daemon om å avslutte."
+msgstr "Be kjørende XScreenSaver daemon om å avslutte."
 
 #: driver/demo-Gtk-widgets.c:241 driver/xscreensaver-demo.glade2.h:98
 msgid "_Restart Daemon"
-msgstr "Sta_rt daemon på nytt"
+msgstr "Sta_rt daemon på nytt"
 
 #: driver/demo-Gtk-widgets.c:250
 msgid "Kill and re-launch the XScreenSaver daemon."
-msgstr "Terminer og start XScreeSaver daemon på nytt."
+msgstr "Terminer og start XScreeSaver daemon på nytt."
 
 #: driver/demo-Gtk-widgets.c:263
 msgid "_Exit"
@@ -106,7 +106,7 @@ msgstr "_Dokumentasjon..."
 
 #: driver/demo-Gtk-widgets.c:318
 msgid "Go to the documentation on the XScreenSaver web page."
-msgstr "Gå til dokumentasjonen på nettsidene til XScreenSaver."
+msgstr "Gå til dokumentasjonen på nettsidene til XScreenSaver."
 
 #: driver/demo-Gtk-widgets.c:348
 msgid "Cycle After"
@@ -118,7 +118,7 @@ msgstr ""
 
 #: driver/demo-Gtk-widgets.c:372
 msgid "Lock Screen After"
-msgstr "Lås skjermen etter"
+msgstr "Lås skjermen etter"
 
 #: driver/demo-Gtk-widgets.c:380
 msgid "Blank After"
@@ -138,7 +138,7 @@ msgstr "minutter"
 
 #: driver/demo-Gtk-widgets.c:482 driver/demo-Gtk.c:3233
 msgid "Preview"
-msgstr "Forhåndsvisning"
+msgstr "Forhåndsvisning"
 
 #: driver/demo-Gtk-widgets.c:490 driver/xscreensaver-demo.glade2.h:10
 msgid ""
@@ -160,7 +160,7 @@ msgstr "Modus:"
 
 #: driver/demo-Gtk-widgets.c:539
 msgid "Disable Screen Saver"
-msgstr "Slå av skjermsparer"
+msgstr "Slå av skjermsparer"
 
 #: driver/demo-Gtk-widgets.c:542
 msgid "Blank Screen Only"
@@ -168,7 +168,7 @@ msgstr "Kun blank ut skjerm"
 
 #: driver/demo-Gtk-widgets.c:545
 msgid "Only One Screen Saver"
-msgstr "Kun én skjermsparer"
+msgstr "Kun én skjermsparer"
 
 #: driver/demo-Gtk-widgets.c:548
 msgid "Random Screen Saver"
@@ -291,7 +291,7 @@ msgstr "sekunder"
 
 #: driver/demo-Gtk-widgets.c:942 driver/xscreensaver-demo.glade2.h:13
 msgid "Display Power Management"
-msgstr "Strømstyring for skjermen"
+msgstr "Strømstyring for skjermen"
 
 #: driver/demo-Gtk-widgets.c:986 driver/xscreensaver-demo.glade2.h:67
 msgid "Whether the monitor should be powered down after a while."
@@ -299,7 +299,7 @@ msgstr ""
 
 #: driver/demo-Gtk-widgets.c:988
 msgid "Power Management Enabled"
-msgstr "Strømstyring aktivert"
+msgstr "Strømstyring aktivert"
 
 #: driver/demo-Gtk-widgets.c:1056
 msgid "Off After"
@@ -433,7 +433,7 @@ msgstr "Farger"
 
 #: driver/demo-Gtk-widgets.c:1561 driver/xscreensaver-demo.glade2.h:21
 msgid "Gray"
-msgstr "Gråtone"
+msgstr "Gråtone"
 
 #: driver/demo-Gtk-widgets.c:1562 driver/xscreensaver-demo.glade2.h:32
 msgid "Mono"
@@ -546,7 +546,7 @@ msgid ""
 msgstr ""
 "Feil:\n"
 "\n"
-"Kunne ikke bestemme navn på initieringsfil!\n"
+"Kunne ikke bestemme navn på initieringsfil!\n"
 
 #: driver/demo-Gtk.c:1038
 #, c-format
@@ -567,7 +567,7 @@ msgid ""
 msgstr ""
 "Feil:\n"
 "\n"
-"ingen «manualCommand»-ressurs satt."
+"ingen Â«manualCommand»-ressurs satt."
 
 #: driver/demo-Gtk.c:1284
 #, c-format
@@ -578,7 +578,7 @@ msgid ""
 msgstr ""
 "Feil:\n"
 "\n"
-"Forstår ikke tidsformatet: «%s»\n"
+"ForstÃ¥r ikke tidsformatet: Â«%s»\n"
 
 #: driver/demo-Gtk.c:1991
 #, c-format
@@ -589,10 +589,10 @@ msgid ""
 msgstr ""
 "Feil:\n"
 "\n"
-"Katalogen eksisterer ikke: «%s»\n"
+"Katalogen eksisterer ikke: Â«%s»\n"
 
 #: driver/demo-Gtk.c:2021 driver/demo-Gtk.c:2052
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Error:\n"
 "\n"
@@ -600,11 +600,11 @@ msgid ""
 msgstr ""
 "Feil:\n"
 "\n"
-"Katalogen eksisterer ikke: «%s»\n"
+"Filen eksisterer ikke: Â«%s»\n"
 
 #: driver/demo-Gtk.c:2877
 msgid "Descriptions not available: no XML support compiled in."
-msgstr "Beskrivelser ikke tilgjengelig: ingen støtte for XML kompilert inn."
+msgstr "Beskrivelser ikke tilgjengelig: ingen støtte for XML kompilert inn."
 
 #: driver/demo-Gtk.c:2882
 msgid "No description available."
@@ -633,7 +633,7 @@ msgstr ""
 
 #: driver/demo-Gtk.c:3492
 msgid "No Preview"
-msgstr "Ingen forhåndsvisning"
+msgstr "Ingen forhåndsvisning"
 
 #: driver/demo-Gtk.c:3492
 msgid "Available"
@@ -700,9 +700,8 @@ msgid "%s: unknown option: %s\n"
 msgstr "%s: ukjent flagg: %s\n"
 
 #: driver/demo-Gtk.c:4865
-#, fuzzy
 msgid "Screensaver Preferences"
-msgstr "Skjermsparer"
+msgstr "Brukervalg for skjermsparer"
 
 #: driver/screensaver-properties.desktop.in.h:1
 msgid "Change screensaver properties"
@@ -714,7 +713,7 @@ msgstr "Skjermsparer"
 
 #: driver/xscreensaver-demo.glade2.h:1
 msgid "*"
-msgstr ""
+msgstr "*"
 
 #: driver/xscreensaver-demo.glade2.h:5
 msgid "Choose _Random Image:"
@@ -733,9 +732,8 @@ msgid "Fade to Black when _Blanking"
 msgstr ""
 
 #: driver/xscreensaver-demo.glade2.h:17
-#, fuzzy
 msgid "Fading and Colormaps"
-msgstr "Skremmende farger"
+msgstr "Utfasing og fargekart"
 
 #: driver/xscreensaver-demo.glade2.h:19
 msgid "Grab Desktop _Images"
@@ -776,7 +774,7 @@ msgid ""
 "No Preview\n"
 "Available"
 msgstr ""
-"Ingen forhåndsvisning\n"
+"Ingen forhåndsvisning\n"
 "tilgjengelig"
 
 #: driver/xscreensaver-demo.glade2.h:36
@@ -794,14 +792,12 @@ msgid "Sus_pend After"
 msgstr "_Pause etter"
 
 #: driver/xscreensaver-demo.glade2.h:46
-#, fuzzy
 msgid "Text Manipulation"
-msgstr "Bildemanipulering"
+msgstr "Tekstmanipulering"
 
 #: driver/xscreensaver-demo.glade2.h:47
-#, fuzzy
 msgid "Text _file"
-msgstr "Tekstfil"
+msgstr "Tekst_fil"
 
 #: driver/xscreensaver-demo.glade2.h:48
 msgid ""
@@ -871,9 +867,8 @@ msgid "_Blank After"
 msgstr "_Blank ut etter"
 
 #: driver/xscreensaver-demo.glade2.h:77
-#, fuzzy
 msgid "_Blank Screen Only"
-msgstr "Kun blank ut skjerm"
+msgstr "Kun _blank ut skjerm"
 
 #: driver/xscreensaver-demo.glade2.h:78
 msgid "_Browse"
@@ -888,9 +883,8 @@ msgid "_Cycle After"
 msgstr "_Skift etter"
 
 #: driver/xscreensaver-demo.glade2.h:81
-#, fuzzy
 msgid "_Disable Screen Saver"
-msgstr "S av skjermsparer"
+msgstr "S_lå av skjermsparer"
 
 #: driver/xscreensaver-demo.glade2.h:82
 msgid "_Display Modes"
@@ -898,12 +892,11 @@ msgstr "_Visningsmodi"
 
 #: driver/xscreensaver-demo.glade2.h:86
 msgid "_Host Name and Time"
-msgstr ""
+msgstr "_Vertsnavn og tid"
 
 #: driver/xscreensaver-demo.glade2.h:88
-#, fuzzy
 msgid "_Lock Screen After  "
-msgstr "_Lås skjermen etter"
+msgstr "_Lås skjermen etter  "
 
 #: driver/xscreensaver-demo.glade2.h:90
 msgid "_Mode:"
@@ -914,36 +907,32 @@ msgid "_Off After"
 msgstr "_Av etter"
 
 #: driver/xscreensaver-demo.glade2.h:92
-#, fuzzy
 msgid "_Only One Screen Saver"
-msgstr "Kun én skjermsparer"
+msgstr "K_un én skjermsparer"
 
 #: driver/xscreensaver-demo.glade2.h:93
 msgid "_Power Management Enabled"
-msgstr "_Strømstyring aktivert"
+msgstr "_Strømstyring aktivert"
 
 #: driver/xscreensaver-demo.glade2.h:94
 msgid "_Preview"
-msgstr "_Forhåndsvisning"
+msgstr "_Forhåndsvisning"
 
 #: driver/xscreensaver-demo.glade2.h:95
-#, fuzzy
 msgid "_Program"
-msgstr "Tekstprogram"
+msgstr "_Program"
 
 #: driver/xscreensaver-demo.glade2.h:96
 msgid "_Quit"
 msgstr "_Avslutt"
 
 #: driver/xscreensaver-demo.glade2.h:97
-#, fuzzy
 msgid "_Random Screen Saver"
-msgstr "Tilfeldig skjermsparer"
+msgstr "Tilfeldig skje_rmsparer"
 
 #: driver/xscreensaver-demo.glade2.h:99
-#, fuzzy
 msgid "_Same Random Savers"
-msgstr "Tegn etiketter"
+msgstr "_Noen tilfeldige skjermsparere"
 
 #: driver/xscreensaver-demo.glade2.h:100
 msgid "_Settings..."
@@ -954,13 +943,12 @@ msgid "_Standard <<"
 msgstr "_Generelt <<"
 
 #: driver/xscreensaver-demo.glade2.h:102
-#, fuzzy
 msgid "_Text"
-msgstr "Tekst"
+msgstr "_Tekst"
 
 #: driver/xscreensaver-demo.glade2.h:103
 msgid "_URL"
-msgstr ""
+msgstr "_URL"
 
 #: driver/xscreensaver-demo.glade2.h:104
 msgid "_Visual:"
@@ -972,20 +960,19 @@ msgstr "dialog1"
 
 #: driver/xscreensaver-demo.glade2.h:107
 msgid "no preview"
-msgstr "ingen forhåndsvisning"
+msgstr "ingen forhåndsvisning"
 
 #: driver/xscreensaver-demo.glade2.h:108
 msgid "not installed"
-msgstr ""
+msgstr "ikke installert"
 
 #: driver/xscreensaver-demo.glade2.h:109
-#, fuzzy
 msgid "nothing"
-msgstr "Myk"
+msgstr "ingen ting"
 
 #: driver/xscreensaver-demo.glade2.h:110
 msgid "preview"
-msgstr "forhåndsvisning"
+msgstr "forhåndsvisning"
 
 #: hacks/config/anemone.xml.h:1
 msgid "Anemone"
@@ -1100,7 +1087,7 @@ msgstr "Fort"
 #: hacks/config/whirlwindwarp.xml.h:1 hacks/config/wormhole.xml.h:3
 #: hacks/config/xfishtank.xml.h:4
 msgid "Few"
-msgstr "Få"
+msgstr "Få"
 
 #: hacks/config/anemone.xml.h:5 hacks/config/anemotaxis.xml.h:7
 #: hacks/config/ant.xml.h:9 hacks/config/apollonian.xml.h:7
@@ -1423,9 +1410,8 @@ msgid "Withdraw freqency"
 msgstr ""
 
 #: hacks/config/anemotaxis.xml.h:1
-#, fuzzy
 msgid "Anemotaxis"
-msgstr "Xfjell"
+msgstr "Anemotaxis"
 
 #: hacks/config/anemotaxis.xml.h:2
 msgid ""
@@ -1436,9 +1422,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/anemotaxis.xml.h:3
-#, fuzzy
 msgid "Distance"
-msgstr "Diskre"
+msgstr "Avstand"
 
 #: hacks/config/anemotaxis.xml.h:4 hacks/config/hyperball.xml.h:1
 #: hacks/config/hypercube.xml.h:1
@@ -1448,16 +1433,15 @@ msgstr "Fjern"
 #: hacks/config/anemotaxis.xml.h:8 hacks/config/hyperball.xml.h:7
 #: hacks/config/hypercube.xml.h:6
 msgid "Near"
-msgstr "Nær"
+msgstr "Nær"
 
 #: hacks/config/anemotaxis.xml.h:9
 msgid "Searchers"
-msgstr ""
+msgstr "Søkere"
 
 #: hacks/config/anemotaxis.xml.h:11
-#, fuzzy
 msgid "Sources"
-msgstr "Sprett"
+msgstr "Kilder"
 
 #: hacks/config/ant.xml.h:1
 msgid ""
@@ -1473,16 +1457,15 @@ msgstr "Maur"
 
 #: hacks/config/ant.xml.h:3
 msgid "Ant Size"
-msgstr "Størrelse på maur"
+msgstr "Størrelse på maur"
 
 #: hacks/config/ant.xml.h:4
 msgid "Ants Count"
 msgstr "Antall maur"
 
 #: hacks/config/ant.xml.h:5
-#, fuzzy
 msgid "Draw Eyes"
-msgstr "Tegn etiketter"
+msgstr "Tegn øyer"
 
 #: hacks/config/ant.xml.h:7
 msgid "Four Sided Cells"
@@ -1511,7 +1494,7 @@ msgstr "Nisidede celler"
 
 #: hacks/config/ant.xml.h:12
 msgid "Random Cell Shape"
-msgstr "Tilfeldig form på celler"
+msgstr "Tilfeldig form på celler"
 
 #: hacks/config/ant.xml.h:13 hacks/config/speedmine.xml.h:11
 msgid "Sharp Turns"
@@ -1564,9 +1547,8 @@ msgid "AntInspect"
 msgstr ""
 
 #: hacks/config/antinspect.xml.h:2
-#, fuzzy
 msgid "Draw Shadows"
-msgstr "Tegn flekker"
+msgstr "Tegn skygger"
 
 #: hacks/config/antinspect.xml.h:3
 msgid ""
@@ -1611,9 +1593,8 @@ msgid "Show Frames-per-Second"
 msgstr ""
 
 #: hacks/config/antmaze.xml.h:1
-#, fuzzy
 msgid "AntMaze"
-msgstr "Labyrint"
+msgstr "Maurlabyrint"
 
 #: hacks/config/antmaze.xml.h:2
 msgid ""
@@ -1622,9 +1603,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/antspotlight.xml.h:1
-#, fuzzy
 msgid "AntSpotlight"
-msgstr "lgelys"
+msgstr "Maur med følgelys"
 
 #: hacks/config/antspotlight.xml.h:2
 msgid ""
@@ -1634,7 +1614,7 @@ msgstr ""
 
 #: hacks/config/apollonian.xml.h:1
 msgid "Apollonian"
-msgstr ""
+msgstr "Apollonian"
 
 #: hacks/config/apollonian.xml.h:2
 msgid "Deep"
@@ -1693,9 +1673,8 @@ msgid "Slideshow Mode"
 msgstr ""
 
 #: hacks/config/apple2.xml.h:6
-#, fuzzy
 msgid "Text Mode"
-msgstr "Tekstfil"
+msgstr "Tekstmodus"
 
 #: hacks/config/apple2.xml.h:7 hacks/config/fliptext.xml.h:17
 #: hacks/config/fontglide.xml.h:15 hacks/config/noseguy.xml.h:7
@@ -1729,7 +1708,7 @@ msgstr "Antall haier"
 
 #: hacks/config/atlantis.xml.h:8
 msgid "Shark Proximity"
-msgstr "Haiens nærhet"
+msgstr "Haiens nærhet"
 
 #: hacks/config/atlantis.xml.h:9
 msgid "Shark Speed"
@@ -1843,7 +1822,7 @@ msgstr "Fylte splines"
 #: hacks/config/twang.xml.h:5 hacks/config/wander.xml.h:8
 #: hacks/config/xmountains.xml.h:17
 msgid "High"
-msgstr "Høy"
+msgstr "Høy"
 
 #: hacks/config/attraction.xml.h:11
 msgid "Ignore Screen Edges"
@@ -1962,7 +1941,7 @@ msgstr "Haler"
 #: hacks/config/attraction.xml.h:31 hacks/config/euler2d.xml.h:16
 #: hacks/config/juggle.xml.h:10
 msgid "Trail Length"
-msgstr "Lengde på spor"
+msgstr "Lengde på spor"
 
 #: hacks/config/atunnel.xml.h:1
 msgid "Atunnel"
@@ -1988,14 +1967,12 @@ msgid "Untextured"
 msgstr "Uten tekstur"
 
 #: hacks/config/atunnel.xml.h:9
-#, fuzzy
 msgid "Use light"
-msgstr "Bruk lyn"
+msgstr "Bruk lys"
 
 #: hacks/config/barcode.xml.h:1
-#, fuzzy
 msgid "Barcode"
-msgstr "Bla gjennom"
+msgstr "Strekkode"
 
 #: hacks/config/barcode.xml.h:2
 msgid "Barcode Clock (24 Hour)"
@@ -2043,17 +2020,16 @@ msgid "BlinkBox"
 msgstr ""
 
 #: hacks/config/blinkbox.xml.h:2
-#, fuzzy
 msgid "Box Size"
-msgstr "Maks størrelse"
+msgstr "Størrelse på boks"
 
 #: hacks/config/blinkbox.xml.h:3
 msgid "Dissolve"
-msgstr ""
+msgstr "Løs opp"
 
 #: hacks/config/blinkbox.xml.h:4 hacks/config/phosphor.xml.h:3
 msgid "Fade"
-msgstr ""
+msgstr "Fas ut"
 
 #: hacks/config/blinkbox.xml.h:6
 #, fuzzy
@@ -2116,9 +2092,8 @@ msgid "Reflective Blocks"
 msgstr ""
 
 #: hacks/config/blocktube.xml.h:10
-#, fuzzy
 msgid "Solid Blocks"
-msgstr "Helfylt gulv"
+msgstr "Helfylte blokker"
 
 #: hacks/config/blocktube.xml.h:12
 msgid ""
@@ -2127,29 +2102,25 @@ msgid ""
 msgstr ""
 
 #: hacks/config/boing.xml.h:1
-#, fuzzy
 msgid "Boing"
-msgstr "Lys"
+msgstr "Boing"
 
 #: hacks/config/boing.xml.h:3 hacks/config/boxed.xml.h:8
 #: hacks/config/fireflies.xml.h:17 hacks/config/pinion.xml.h:7
-#, fuzzy
 msgid "Huge"
-msgstr "Storbrann"
+msgstr "Stor"
 
 #: hacks/config/boing.xml.h:4 hacks/config/crackberg.xml.h:12
-#, fuzzy
 msgid "Lighting"
-msgstr "Lyn"
+msgstr "Lys"
 
 #: hacks/config/boing.xml.h:5
 msgid "Meridians"
 msgstr ""
 
 #: hacks/config/boing.xml.h:6
-#, fuzzy
 msgid "Parallels"
-msgstr "Partikler"
+msgstr "Paralleller"
 
 #: hacks/config/boing.xml.h:7
 #, fuzzy
@@ -2163,12 +2134,11 @@ msgstr "Splines"
 #: hacks/config/rubik.xml.h:8 hacks/config/sproingies.xml.h:5
 #: hacks/config/wander.xml.h:13 hacks/config/worm.xml.h:6
 msgid "Size"
-msgstr "Størrelse"
+msgstr "Størrelse"
 
 #: hacks/config/boing.xml.h:11
-#, fuzzy
 msgid "Smoothing"
-msgstr "Myk"
+msgstr "Utjevning"
 
 #: hacks/config/boing.xml.h:13
 msgid ""
@@ -2181,9 +2151,8 @@ msgstr ""
 
 #: hacks/config/boing.xml.h:14 hacks/config/boxed.xml.h:16
 #: hacks/config/fireflies.xml.h:43 hacks/config/pinion.xml.h:14
-#, fuzzy
 msgid "Tiny"
-msgstr "Tynn"
+msgstr "Liten"
 
 #: hacks/config/bouboule.xml.h:1
 msgid "Bouboule"
@@ -2191,7 +2160,7 @@ msgstr "Bouboule"
 
 #: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
 msgid "Do Red/Blue 3D separation"
-msgstr "Utfør rød/blå 3D-separasjon"
+msgstr "Utfør rød/blå 3D-separasjon"
 
 #: hacks/config/bouboule.xml.h:7
 msgid "Number of Spots"
@@ -2228,7 +2197,7 @@ msgstr ""
 #: hacks/config/bouncingcow.xml.h:4
 #, fuzzy
 msgid "Bounce Speed"
-msgstr "Løsningshastighet"
+msgstr "Løsningshastighet"
 
 #: hacks/config/bouncingcow.xml.h:5
 msgid "BouncingCow"
@@ -2239,14 +2208,12 @@ msgid "Herd"
 msgstr ""
 
 #: hacks/config/bouncingcow.xml.h:8
-#, fuzzy
 msgid "Moo"
-msgstr "Mono"
+msgstr "Mø"
 
 #: hacks/config/bouncingcow.xml.h:9
-#, fuzzy
 msgid "Number of Cows"
-msgstr "Antall farger"
+msgstr "Antall kuer"
 
 #: hacks/config/bouncingcow.xml.h:11
 msgid "Wireframe Cow"
@@ -2254,7 +2221,7 @@ msgstr ""
 
 #: hacks/config/boxed.xml.h:2 hacks/config/fluidballs.xml.h:2
 msgid "Ball Size"
-msgstr "Størrelse på ball"
+msgstr "Størrelse på ball"
 
 #: hacks/config/boxed.xml.h:3
 msgid "Boxed"
@@ -2267,9 +2234,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/boxed.xml.h:5
-#, fuzzy
 msgid "Explosion Force"
-msgstr "Eksplosjoner"
+msgstr "Eksplosjonskraft"
 
 #: hacks/config/boxed.xml.h:9 hacks/config/pipes.xml.h:9
 #: hacks/config/substrate.xml.h:12 hacks/config/wormhole.xml.h:4
@@ -2279,27 +2245,24 @@ msgstr ""
 #: hacks/config/boxed.xml.h:10 hacks/config/cubestorm.xml.h:5
 #: hacks/config/fontglide.xml.h:9 hacks/config/glknots.xml.h:6
 #: hacks/config/polyhedra.xml.h:84
-#, fuzzy
 msgid "Motion Speed"
-msgstr "Roteringshastighet"
+msgstr "Bevegelseshastighet"
 
 #: hacks/config/boxed.xml.h:11
 msgid "Nuke"
 msgstr ""
 
 #: hacks/config/boxed.xml.h:12
-#, fuzzy
 msgid "Number of Balls"
-msgstr "Antall fraktaler"
+msgstr "Antall baller"
 
 #: hacks/config/boxed.xml.h:13 hacks/config/hopalong.xml.h:18
 msgid "Popcorn"
 msgstr "Popcorn"
 
 #: hacks/config/boxfit.xml.h:1 hacks/config/popsquares.xml.h:1
-#, fuzzy
 msgid "Border"
-msgstr "Kantbredde"
+msgstr "Kant"
 
 #: hacks/config/boxfit.xml.h:2
 msgid "BoxFit"
@@ -2310,33 +2273,28 @@ msgid "Boxes"
 msgstr "Bokser"
 
 #: hacks/config/boxfit.xml.h:4
-#, fuzzy
 msgid "Boxes Only"
-msgstr "Bokser"
+msgstr "Kun bokser"
 
 #: hacks/config/boxfit.xml.h:5
-#, fuzzy
 msgid "Boxes or Circles"
-msgstr "Antall sirkler"
+msgstr "Bokser eller sirkler"
 
 #: hacks/config/boxfit.xml.h:6
-#, fuzzy
 msgid "Circles Only"
-msgstr "Omganger"
+msgstr "Kun sirkler"
 
 #: hacks/config/boxfit.xml.h:7
-#, fuzzy
 msgid "Color Gradient"
-msgstr "Fargegradienter"
+msgstr "Fargegradient"
 
 #: hacks/config/boxfit.xml.h:9
-#, fuzzy
 msgid "Grab Images"
-msgstr "Hent bilder fra skrivebordet"
+msgstr "Hent bilder"
 
 #: hacks/config/boxfit.xml.h:10
 msgid "Grow By"
-msgstr ""
+msgstr "Øk med"
 
 #: hacks/config/boxfit.xml.h:11
 msgid ""
@@ -2465,21 +2423,20 @@ msgid "MacsBug"
 msgstr ""
 
 #: hacks/config/bsod.xml.h:19
-#, fuzzy
 msgid "NCD X Terminal  "
-msgstr "NCD X-terminal"
+msgstr "NCD X-terminal  "
 
 #: hacks/config/bsod.xml.h:20
 msgid "Nvidia"
-msgstr ""
+msgstr "Nvidia"
 
 #: hacks/config/bsod.xml.h:21
 msgid "OS/2"
-msgstr ""
+msgstr "OS/2"
 
 #: hacks/config/bsod.xml.h:22
 msgid "OS/390"
-msgstr ""
+msgstr "OS/390"
 
 #: hacks/config/bsod.xml.h:23
 msgid "SCO"
@@ -2495,21 +2452,19 @@ msgstr "Solaris"
 
 #: hacks/config/bsod.xml.h:26
 msgid "Tru64"
-msgstr ""
+msgstr "Tru64"
 
 #: hacks/config/bsod.xml.h:27
 msgid "VMS"
-msgstr ""
+msgstr "VMS"
 
 #: hacks/config/bsod.xml.h:28
-#, fuzzy
 msgid "Windows 2000  "
-msgstr "Windows 2000"
+msgstr "Windows 2000  "
 
 #: hacks/config/bsod.xml.h:29
-#, fuzzy
 msgid "Windows 3.1"
-msgstr "Windows"
+msgstr "Windows 3.1"
 
 #: hacks/config/bsod.xml.h:30
 msgid "Windows NT"
@@ -2531,9 +2486,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/bubble3d.xml.h:8
-#, fuzzy
 msgid "Transparent Bubbles"
-msgstr "Gjennomsiktige blubber"
+msgstr "Gjennomsiktige bobler"
 
 #: hacks/config/bubbles.xml.h:1 hacks/config/xfishtank.xml.h:2
 msgid "Bubbles"
@@ -2557,7 +2511,7 @@ msgstr "Bobler eksisterer i tre dimensjoner"
 
 #: hacks/config/bubbles.xml.h:6
 msgid "Don't hide bubbles when they pop"
-msgstr "Ikke skjul bobler når de sprekker"
+msgstr "Ikke skjul bobler når de sprekker"
 
 #: hacks/config/bubbles.xml.h:7
 msgid "Draw circles instead of pixmap bubbles"
@@ -2590,9 +2544,8 @@ msgid "Cage"
 msgstr "Bur"
 
 #: hacks/config/cage.xml.h:7 hacks/config/cube21.xml.h:22
-#, fuzzy
 msgid "Textured"
-msgstr "Uten tekstur"
+msgstr "Med tekstur"
 
 #: hacks/config/cage.xml.h:8
 msgid ""
@@ -2610,13 +2563,12 @@ msgid "1 Minute"
 msgstr "1 minutt"
 
 #: hacks/config/carousel.xml.h:2
-#, fuzzy
 msgid "5 Seconds"
-msgstr "0 scekunder"
+msgstr "5 scekunder"
 
 #: hacks/config/carousel.xml.h:4
 msgid "Carousel"
-msgstr ""
+msgstr "Karusell"
 
 #: hacks/config/carousel.xml.h:6 hacks/config/electricsheep.xml.h:7
 #: hacks/config/fliptext.xml.h:8
@@ -2641,14 +2593,12 @@ msgid "No Tilting"
 msgstr ""
 
 #: hacks/config/carousel.xml.h:11
-#, fuzzy
 msgid "Number of Images:"
-msgstr "Antall bølger"
+msgstr "Antall bilder:"
 
 #: hacks/config/carousel.xml.h:13 hacks/config/glslideshow.xml.h:20
-#, fuzzy
 msgid "Show Image Titles"
-msgstr "Bildefil"
+msgstr "Vis bildetitler"
 
 #: hacks/config/carousel.xml.h:15
 msgid "Tilt In/Out Only"
@@ -2676,9 +2626,8 @@ msgid "0 seconds"
 msgstr "0 sekunder"
 
 #: hacks/config/ccurve.xml.h:2 hacks/config/polyhedra.xml.h:2
-#, fuzzy
 msgid "30 seconds"
-msgstr "0 sekunder"
+msgstr "30 sekunder"
 
 #: hacks/config/ccurve.xml.h:4
 msgid "C Curve"
@@ -2686,7 +2635,7 @@ msgstr "C-kurve"
 
 #: hacks/config/ccurve.xml.h:5
 msgid "Change Image Every"
-msgstr ""
+msgstr "Bytt bilde hvert"
 
 #: hacks/config/ccurve.xml.h:6 hacks/config/coral.xml.h:5
 #: hacks/config/imsmap.xml.h:5 hacks/config/kumppa.xml.h:1
@@ -2702,9 +2651,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/celtic.xml.h:1
-#, fuzzy
 msgid "Celtic"
-msgstr "Kubenetikk"
+msgstr "Keltisk"
 
 #: hacks/config/celtic.xml.h:2
 #, fuzzy
@@ -2712,9 +2660,8 @@ msgid "Draw Graph"
 msgstr "Tegn flekker"
 
 #: hacks/config/celtic.xml.h:5
-#, fuzzy
 msgid "Pause"
-msgstr "Plan"
+msgstr "Pause"
 
 #: hacks/config/celtic.xml.h:6
 msgid ""
@@ -2762,7 +2709,7 @@ msgstr "Spinn"
 #: hacks/config/cloudlife.xml.h:1 hacks/config/demon.xml.h:2
 #: hacks/config/petri.xml.h:1
 msgid "Cell Size"
-msgstr "Cellestørrelse"
+msgstr "Cellestørrelse"
 
 #: hacks/config/cloudlife.xml.h:2
 msgid "CloudLife"
@@ -2785,16 +2732,15 @@ msgstr "Partikkeltetthet"
 #: hacks/config/cloudlife.xml.h:9
 #, fuzzy
 msgid "Max Age"
-msgstr "Maks størrelse"
+msgstr "Maks størrelse"
 
 #: hacks/config/cloudlife.xml.h:10
 msgid "Old"
-msgstr ""
+msgstr "Gammel"
 
 #: hacks/config/cloudlife.xml.h:14
-#, fuzzy
 msgid "Young"
-msgstr "Langt"
+msgstr "Ung"
 
 #: hacks/config/compass.xml.h:1
 msgid "Compass"
@@ -2865,7 +2811,7 @@ msgstr ""
 
 #: hacks/config/crackberg.xml.h:1
 msgid "Confused"
-msgstr ""
+msgstr "Forvirret"
 
 #: hacks/config/crackberg.xml.h:2
 msgid "Crackberg"
@@ -2878,7 +2824,7 @@ msgstr "Stil"
 
 #: hacks/config/crackberg.xml.h:4
 msgid "Eagle Nest"
-msgstr ""
+msgstr "Ørnerede"
 
 #: hacks/config/crackberg.xml.h:5
 #, fuzzy
@@ -2903,7 +2849,7 @@ msgstr "Lys"
 
 #: hacks/config/crackberg.xml.h:9
 msgid "Ice"
-msgstr ""
+msgstr "Is"
 
 #: hacks/config/crackberg.xml.h:10
 msgid "Immediate"
@@ -2918,9 +2864,8 @@ msgid "Mouse Hole"
 msgstr ""
 
 #: hacks/config/crackberg.xml.h:15
-#, fuzzy
 msgid "Plain"
-msgstr "Plan"
+msgstr "Vanlig"
 
 #: hacks/config/crackberg.xml.h:16 hacks/config/flurry.xml.h:8
 #: hacks/config/fontglide.xml.h:12 hacks/config/jigglypuff.xml.h:13
@@ -2933,22 +2878,20 @@ msgid "Subdivisions"
 msgstr ""
 
 #: hacks/config/crackberg.xml.h:19
-#, fuzzy
 msgid "Swampy"
-msgstr "XStråleSverm"
+msgstr "Sumpaktig"
 
 #: hacks/config/crackberg.xml.h:20
 msgid "Visibility"
-msgstr ""
+msgstr "Synlighet"
 
 #: hacks/config/crackberg.xml.h:21
 msgid "Vomit"
-msgstr ""
+msgstr "Oppkast"
 
 #: hacks/config/crackberg.xml.h:22 hacks/config/flurry.xml.h:11
-#, fuzzy
 msgid "Water"
-msgstr "Vandre"
+msgstr "Vann"
 
 #: hacks/config/critical.xml.h:1
 msgid "Critical"
@@ -2962,7 +2905,7 @@ msgstr ""
 
 #: hacks/config/crystal.xml.h:1
 msgid "Center on Screen"
-msgstr "Sentrer på skjermen"
+msgstr "Sentrer på skjermen"
 
 #: hacks/config/crystal.xml.h:2 hacks/config/deluxe.xml.h:1
 #: hacks/config/fadeplot.xml.h:1 hacks/config/flow.xml.h:1
@@ -3014,33 +2957,28 @@ msgid ""
 msgstr ""
 
 #: hacks/config/cube21.xml.h:2
-#, fuzzy
 msgid "Classic Edition"
-msgstr "Glass"
+msgstr "Klassisk utgave"
 
 #: hacks/config/cube21.xml.h:3
-#, fuzzy
 msgid "Cube 21"
-msgstr "Kube"
+msgstr "Kube 21"
 
 #: hacks/config/cube21.xml.h:4
-#, fuzzy
 msgid "Cube size"
-msgstr "Cellestørrelse"
+msgstr "Størrelse på kube"
 
 #: hacks/config/cube21.xml.h:5
 msgid "Delay in ending position"
 msgstr ""
 
 #: hacks/config/cube21.xml.h:7
-#, fuzzy
 msgid "Global speed"
-msgstr "Haiens hastighet"
+msgstr "Global hastighet"
 
 #: hacks/config/cube21.xml.h:10
-#, fuzzy
 msgid "Random color"
-msgstr "Tilfeldig bevegelse"
+msgstr "Tilfeldig farge"
 
 #: hacks/config/cube21.xml.h:11 hacks/config/rocks.xml.h:8
 msgid "Rotation"
@@ -3061,23 +2999,21 @@ msgid "Spinning"
 msgstr "Pakking"
 
 #: hacks/config/cube21.xml.h:20
-#, fuzzy
 msgid "Start as cube"
-msgstr "Haiens hastighet"
+msgstr "Start som kube"
 
 #: hacks/config/cube21.xml.h:21
 msgid "Start as random shape"
 msgstr ""
 
 #: hacks/config/cube21.xml.h:23
-#, fuzzy
 msgid "Two random colors"
-msgstr "Tilfeldig bevegelse"
+msgstr "To tilfeldige farger"
 
 #: hacks/config/cube21.xml.h:25
 #, fuzzy
 msgid "Wander on screen"
-msgstr "Sentrer på skjermen"
+msgstr "Sentrer på skjermen"
 
 #: hacks/config/cube21.xml.h:26
 #, fuzzy
@@ -3085,9 +3021,8 @@ msgid "Wandering"
 msgstr "Vandre"
 
 #: hacks/config/cube21.xml.h:27
-#, fuzzy
 msgid "White"
-msgstr "Vind"
+msgstr "Hvit"
 
 #: hacks/config/cubenetic.xml.h:2
 msgid "Cubenetic"
@@ -3099,7 +3034,7 @@ msgstr "Vis helfylte farger"
 
 #: hacks/config/cubenetic.xml.h:4
 msgid "Display Surface Patterns"
-msgstr "Vis overflatemønster"
+msgstr "Vis overflatemønster"
 
 #: hacks/config/cubenetic.xml.h:5
 msgid "Display Wireframe"
@@ -3193,9 +3128,8 @@ msgid "Wander"
 msgstr "Vandre"
 
 #: hacks/config/cubestorm.xml.h:2
-#, fuzzy
 msgid "CubeStorm"
-msgstr "Storm"
+msgstr "KubeStorm"
 
 #: hacks/config/cubestorm.xml.h:3
 msgid ""
@@ -3204,9 +3138,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/cubestorm.xml.h:6
-#, fuzzy
 msgid "Number of Cubes"
-msgstr "Antall sirkler"
+msgstr "Antall kuber"
 
 #: hacks/config/cubestorm.xml.h:10
 #, fuzzy
@@ -3327,7 +3260,7 @@ msgstr ""
 
 #: hacks/config/deco.xml.h:7
 msgid "Min Size"
-msgstr "Minste størrelse"
+msgstr "Minste størrelse"
 
 #: hacks/config/deco.xml.h:9
 msgid ""
@@ -3401,11 +3334,11 @@ msgstr "Antall linser"
 
 #: hacks/config/distort.xml.h:7
 msgid "Lens Size"
-msgstr "Linsestørrelse"
+msgstr "Linsestørrelse"
 
 #: hacks/config/distort.xml.h:8
 msgid "Magnify"
-msgstr "Forstørr"
+msgstr "Forstørr"
 
 #: hacks/config/distort.xml.h:10
 msgid "Reflect"
@@ -3492,13 +3425,12 @@ msgid "Nickname"
 msgstr ""
 
 #: hacks/config/electricsheep.xml.h:9
-#, fuzzy
 msgid "No Animation"
-msgstr "Animasjonshastighet"
+msgstr "Ingen animasjon"
 
 #: hacks/config/electricsheep.xml.h:10
 msgid "No Network"
-msgstr ""
+msgstr "Uten nettverk"
 
 #: hacks/config/electricsheep.xml.h:11
 msgid "Repititions of each Sheep"
@@ -3506,12 +3438,11 @@ msgstr ""
 
 #: hacks/config/electricsheep.xml.h:12
 msgid "URL"
-msgstr ""
+msgstr "URL"
 
 #: hacks/config/electricsheep.xml.h:13
-#, fuzzy
 msgid "Unlimited"
-msgstr "Animer"
+msgstr "Ubegrenset"
 
 #: hacks/config/electricsheep.xml.h:14 hacks/config/gleidescope.xml.h:13
 #: hacks/config/hyperball.xml.h:16 hacks/config/hypercube.xml.h:16
@@ -3557,36 +3488,35 @@ msgstr ""
 
 #: hacks/config/engine.xml.h:7
 msgid "Engine"
-msgstr ""
+msgstr "Motor"
 
 #: hacks/config/engine.xml.h:9
 msgid "Honda Insight (3 cylinders)"
-msgstr ""
+msgstr "Honda Insight (3 sylindre)"
 
 #: hacks/config/engine.xml.h:10
 msgid "Jaguar XKE (12 cylinders, V)"
-msgstr ""
+msgstr "Jaguar XKE (12 sylindre, V)"
 
 #: hacks/config/engine.xml.h:11
 msgid "Porsche 911 (6 cylinders, flat)"
-msgstr ""
+msgstr "Porsche 911 (6 sylindre, flat)"
 
 #: hacks/config/engine.xml.h:12
-#, fuzzy
 msgid "Random Engine"
-msgstr "Gjør tilfeldig"
+msgstr "Tilfeldig motor"
 
 #: hacks/config/engine.xml.h:13
 msgid "Show Engine Name"
-msgstr ""
+msgstr "Vis navn på motor"
 
 #: hacks/config/engine.xml.h:18
 msgid "Subaru XT (6 cylinders, V)"
-msgstr ""
+msgstr "Subaru XT (6 sylindre, V)"
 
 #: hacks/config/engine.xml.h:19
 msgid "VW Beetle (4 cylinders, flat)"
-msgstr ""
+msgstr "VW boble (4 sylindre, flat)"
 
 #: hacks/config/epicycle.xml.h:1
 msgid "1 minute"
@@ -3621,9 +3551,8 @@ msgid "Cooling factor"
 msgstr ""
 
 #: hacks/config/eruption.xml.h:4
-#, fuzzy
 msgid "Eruption"
-msgstr "Ekstrusjon"
+msgstr ""
 
 #: hacks/config/eruption.xml.h:7 hacks/config/fluidballs.xml.h:9
 #: hacks/config/qix.xml.h:9 hacks/config/speedmine.xml.h:4
@@ -3632,12 +3561,11 @@ msgstr "Gravitet"
 
 #: hacks/config/eruption.xml.h:8
 msgid "Heat"
-msgstr ""
+msgstr "Varme"
 
 #: hacks/config/eruption.xml.h:9
-#, fuzzy
 msgid "Inferno"
-msgstr "Forstyrrelse"
+msgstr "Inferno"
 
 #: hacks/config/eruption.xml.h:10
 msgid "Little"
@@ -3645,12 +3573,11 @@ msgstr ""
 
 #: hacks/config/eruption.xml.h:13
 msgid "Negative"
-msgstr ""
+msgstr "Negativ"
 
 #: hacks/config/eruption.xml.h:15
-#, fuzzy
 msgid "Number of Particles"
-msgstr "Antall sirkler"
+msgstr "Antall partikler"
 
 #: hacks/config/eruption.xml.h:16
 #, fuzzy
@@ -3659,7 +3586,7 @@ msgstr "GLPlanet"
 
 #: hacks/config/eruption.xml.h:17
 msgid "Positive"
-msgstr ""
+msgstr "Positiv"
 
 #: hacks/config/euler2d.xml.h:2
 msgid "Euler2d"
@@ -3704,7 +3631,7 @@ msgstr "Helix 4"
 
 #: hacks/config/extrusion.xml.h:7
 msgid "Join Offset"
-msgstr "Avstand for sammenslåing"
+msgstr "Avstand for sammenslåing"
 
 #: hacks/config/extrusion.xml.h:8 hacks/config/polytopes.xml.h:16
 msgid "Random Object"
@@ -3754,9 +3681,8 @@ msgid "Fiberlamp"
 msgstr ""
 
 #: hacks/config/fiberlamp.xml.h:4
-#, fuzzy
 msgid "Fibers"
-msgstr "Fisk"
+msgstr "Fibre"
 
 #: hacks/config/fiberlamp.xml.h:8
 msgid "Time between Knocks"
@@ -3764,7 +3690,7 @@ msgstr ""
 
 #: hacks/config/fireflies.xml.h:1
 msgid "10 times"
-msgstr ""
+msgstr "10 ganger"
 
 #: hacks/config/fireflies.xml.h:2
 msgid ""
@@ -3843,7 +3769,7 @@ msgstr "Virvelvind"
 
 #: hacks/config/fireflies.xml.h:19
 msgid "Invisible"
-msgstr ""
+msgstr "Usynlig"
 
 #: hacks/config/fireflies.xml.h:20
 msgid "Kill some fireflies"
@@ -3884,12 +3810,11 @@ msgstr "Animasjonshastighet"
 #: hacks/config/fireflies.xml.h:29
 #, fuzzy
 msgid "Narrow"
-msgstr "Nær"
+msgstr "Nær"
 
 #: hacks/config/fireflies.xml.h:30
-#, fuzzy
 msgid "Never"
-msgstr "Nær"
+msgstr "Aldri"
 
 #: hacks/config/fireflies.xml.h:31
 msgid "Normal swarm motion"
@@ -3901,7 +3826,7 @@ msgstr ""
 
 #: hacks/config/fireflies.xml.h:35
 msgid "Split a swarm"
-msgstr ""
+msgstr "Del en sverm"
 
 #: hacks/config/fireflies.xml.h:36 hacks/config/fluidballs.xml.h:21
 #: hacks/config/glforestfire.xml.h:16
@@ -3929,9 +3854,8 @@ msgid "Swarm tails glow"
 msgstr ""
 
 #: hacks/config/fireflies.xml.h:44
-#, fuzzy
 msgid "Wide"
-msgstr "Vind"
+msgstr "Bred"
 
 #: hacks/config/fireflies.xml.h:45 hacks/config/fluidballs.xml.h:23
 msgid "Wind"
@@ -3946,13 +3870,12 @@ msgid "Activity"
 msgstr ""
 
 #: hacks/config/fireworkx.xml.h:4
-#, fuzzy
 msgid "Fireworkx"
-msgstr "_Fil"
+msgstr "Fyrverkeri"
 
 #: hacks/config/fireworkx.xml.h:5
 msgid "Light Flash"
-msgstr ""
+msgstr "Lysglimt"
 
 #: hacks/config/fireworkx.xml.h:6
 msgid ""
@@ -4028,9 +3951,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/flipflop.xml.h:6
-#, fuzzy
 msgid "Solid Tiles"
-msgstr "Helfylt gulv"
+msgstr "Helfylte fliser"
 
 #: hacks/config/flipscreen3d.xml.h:2
 msgid "Flipscreen3d"
@@ -4089,9 +4011,8 @@ msgid "Flow"
 msgstr "Flyt"
 
 #: hacks/config/flow.xml.h:5
-#, fuzzy
 msgid "Length of trails"
-msgstr "Etterlat spor"
+msgstr "Lengde på spor"
 
 #: hacks/config/flow.xml.h:13
 msgid ""
@@ -4130,9 +4051,8 @@ msgid "      Freefall"
 msgstr "FrittFall"
 
 #: hacks/config/fluidballs.xml.h:4
-#, fuzzy
 msgid "Clay"
-msgstr "Pause"
+msgstr "Leire"
 
 #: hacks/config/fluidballs.xml.h:7
 msgid "FluidBalls"
@@ -4155,9 +4075,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/fluidballs.xml.h:15
-#, fuzzy
 msgid "Rubber"
-msgstr "Bobler"
+msgstr "Gummi"
 
 #: hacks/config/fluidballs.xml.h:16
 msgid "Shake Box"
@@ -4169,17 +4088,15 @@ msgstr ""
 
 #: hacks/config/flurry.xml.h:1
 msgid "Binary"
-msgstr ""
+msgstr "Binær"
 
 #: hacks/config/flurry.xml.h:2
-#, fuzzy
 msgid "Classic"
-msgstr "Glass"
+msgstr "Klassisk"
 
 #: hacks/config/flurry.xml.h:3
-#, fuzzy
 msgid "Fire"
-msgstr "_Fil"
+msgstr "Flamme"
 
 #: hacks/config/flurry.xml.h:4
 msgid "Flurry"
@@ -4187,16 +4104,15 @@ msgstr ""
 
 #: hacks/config/flurry.xml.h:5
 msgid "Insane"
-msgstr ""
+msgstr "Sinnsyk"
 
 #: hacks/config/flurry.xml.h:6
-#, fuzzy
 msgid "Psychedelic"
-msgstr "Psykedeliske farger"
+msgstr "Psykedelisk"
 
 #: hacks/config/flurry.xml.h:7
 msgid "RGB"
-msgstr ""
+msgstr "RGB"
 
 #: hacks/config/flurry.xml.h:10
 msgid ""
@@ -4214,9 +4130,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/flyingtoasters.xml.h:2
-#, fuzzy
 msgid "Air Speed"
-msgstr "Animasjonshastighet"
+msgstr "Lufthastighet"
 
 #: hacks/config/flyingtoasters.xml.h:4
 msgid "Chrome Toasters"
@@ -4233,9 +4148,8 @@ msgid "None"
 msgstr "Ingen"
 
 #: hacks/config/flyingtoasters.xml.h:8
-#, fuzzy
 msgid "Number of Slices"
-msgstr "Antall sirkler"
+msgstr "Antall stykker"
 
 #: hacks/config/flyingtoasters.xml.h:9
 #, fuzzy
@@ -4243,14 +4157,12 @@ msgid "Number of Toasters"
 msgstr "Antall punkter"
 
 #: hacks/config/flyingtoasters.xml.h:12
-#, fuzzy
 msgid "Solid Colors"
-msgstr "Helfylt gulv"
+msgstr "Helfylte farger"
 
 #: hacks/config/flyingtoasters.xml.h:13
-#, fuzzy
 msgid "Swarm"
-msgstr "XStråleSverm"
+msgstr "Sverm"
 
 #: hacks/config/fontglide.xml.h:2
 #, fuzzy
@@ -4272,7 +4184,7 @@ msgstr ""
 
 #: hacks/config/fontglide.xml.h:10
 msgid "Pages of text"
-msgstr ""
+msgstr "Sider med tekst"
 
 #: hacks/config/fontglide.xml.h:11
 msgid ""
@@ -4325,9 +4237,8 @@ msgid "Layers"
 msgstr "Lag"
 
 #: hacks/config/fuzzyflakes.xml.h:14
-#, fuzzy
 msgid "Random Colors"
-msgstr "Tilfeldig bevegelse"
+msgstr "Tilfeldige farger"
 
 #: hacks/config/galaxy.xml.h:4
 msgid "Galaxy"
@@ -4336,7 +4247,7 @@ msgstr "Galakse"
 #: hacks/config/galaxy.xml.h:8
 #, fuzzy
 msgid "Rotate Viewpoint"
-msgstr "Lineær bevegelse"
+msgstr "Lineær bevegelse"
 
 #: hacks/config/galaxy.xml.h:13
 msgid ""
@@ -4396,11 +4307,11 @@ msgstr "Skjermbilde"
 
 #: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:21
 msgid "Wave Speed"
-msgstr "Bølgehastighet"
+msgstr "Bølgehastighet"
 
 #: hacks/config/gflux.xml.h:15 hacks/config/glmatrix.xml.h:20
 msgid "Waves"
-msgstr "Bølger"
+msgstr "Bølger"
 
 #: hacks/config/gflux.xml.h:16
 msgid "Wire Mesh"
@@ -4428,9 +4339,8 @@ msgstr ""
 
 #: hacks/config/gleidescope.xml.h:2 hacks/config/glslideshow.xml.h:6
 #: hacks/config/mirrorblob.xml.h:3
-#, fuzzy
 msgid "5 Minutes"
-msgstr "1 minutt"
+msgstr "5 minutter"
 
 #: hacks/config/gleidescope.xml.h:3
 msgid ""
@@ -4444,27 +4354,24 @@ msgid "Gleidescope"
 msgstr "Kaleidoskop"
 
 #: hacks/config/gleidescope.xml.h:5
-#, fuzzy
 msgid "Image Duration"
-msgstr "V_arighet for utfasing"
+msgstr "Varighet for bilde"
 
 #: hacks/config/gleidescope.xml.h:6
-#, fuzzy
 msgid "Image file"
 msgstr "Bildefil"
 
 #: hacks/config/gleidescope.xml.h:8
-#, fuzzy
 msgid "Move"
-msgstr "Flere"
+msgstr "Flytt"
 
 #: hacks/config/gleidescope.xml.h:11
 msgid "Size of tube"
-msgstr ""
+msgstr "Størrelse på rør"
 
 #: hacks/config/glforestfire.xml.h:2
 msgid "Desert"
-msgstr "Ørken"
+msgstr "Ørken"
 
 #: hacks/config/glforestfire.xml.h:3
 msgid ""
@@ -4476,7 +4383,7 @@ msgstr ""
 
 #: hacks/config/glforestfire.xml.h:5 hacks/config/glmatrix.xml.h:9
 msgid "Fog"
-msgstr "Tåke"
+msgstr "Tåke"
 
 #: hacks/config/glforestfire.xml.h:7
 msgid "GLForestFire"
@@ -4492,7 +4399,7 @@ msgstr "Ingen skygge"
 
 #: hacks/config/glforestfire.xml.h:11
 msgid "Number of trees"
-msgstr "Antall trær"
+msgstr "Antall trær"
 
 #: hacks/config/glforestfire.xml.h:12
 msgid "Rain"
@@ -4503,14 +4410,12 @@ msgid "Track mouse"
 msgstr ""
 
 #: hacks/config/glhanoi.xml.h:1
-#, fuzzy
 msgid "Enable fog"
-msgstr "Aktiver tåke"
+msgstr "Slå på tåke"
 
 #: hacks/config/glhanoi.xml.h:2
-#, fuzzy
 msgid "Enable lighting"
-msgstr "Aktiver lyn"
+msgstr "Slå på lyn"
 
 #: hacks/config/glhanoi.xml.h:4
 msgid "Frame Delay (us)"
@@ -4521,9 +4426,8 @@ msgid "GLHanoi"
 msgstr ""
 
 #: hacks/config/glhanoi.xml.h:6
-#, fuzzy
 msgid "Number of Disks"
-msgstr "Antall sirkler"
+msgstr "Antall plater"
 
 #: hacks/config/glhanoi.xml.h:9
 msgid ""
@@ -4545,12 +4449,11 @@ msgstr ""
 #: hacks/config/glknots.xml.h:7 hacks/config/lavalite.xml.h:17
 #: hacks/config/spheremonics.xml.h:9
 msgid "Resolution"
-msgstr "Oppløsing"
+msgstr "Oppløsing"
 
 #: hacks/config/glknots.xml.h:15
-#, fuzzy
 msgid "Segmented"
-msgstr "Segmenter"
+msgstr "Oppdelt"
 
 #: hacks/config/glknots.xml.h:18 hacks/config/lavalite.xml.h:28
 #: hacks/config/xmountains.xml.h:25
@@ -4601,7 +4504,7 @@ msgstr "Tetthet"
 #: hacks/config/glmatrix.xml.h:13
 #, fuzzy
 msgid "Glyph Speed"
-msgstr "Hastighet på fisk"
+msgstr "Hastighet på fisk"
 
 #: hacks/config/glmatrix.xml.h:14 hacks/config/xmatrix.xml.h:8
 msgid "Hexadecimal Encoding"
@@ -4707,16 +4610,15 @@ msgstr "GLSlange"
 
 #: hacks/config/glsnake.xml.h:8
 msgid "Loose"
-msgstr "Løs"
+msgstr "Løs"
 
 #: hacks/config/glsnake.xml.h:9
 msgid "Packing"
 msgstr "Pakking"
 
 #: hacks/config/glsnake.xml.h:11
-#, fuzzy
 msgid "Show Titles"
-msgstr "Vis etiketter"
+msgstr "Vis titler"
 
 #: hacks/config/glsnake.xml.h:14
 msgid "Tight"
@@ -4747,9 +4649,8 @@ msgid "GLText"
 msgstr "GLTekst"
 
 #: hacks/config/gltext.xml.h:6
-#, fuzzy
 msgid "Program"
-msgstr "Tekstprogram"
+msgstr "Program"
 
 #: hacks/config/gltext.xml.h:18
 msgid "Spin all the way around"
@@ -4852,9 +4753,8 @@ msgid "Dot fill factor"
 msgstr ""
 
 #: hacks/config/halftone.xml.h:3
-#, fuzzy
 msgid "Dot size"
-msgstr "Størrelse på maur"
+msgstr "Størrelse på prikk"
 
 #: hacks/config/halftone.xml.h:4
 msgid ""
@@ -4870,27 +4770,24 @@ msgid "Gravity points"
 msgstr "Gravitet"
 
 #: hacks/config/halftone.xml.h:6
-#, fuzzy
 msgid "Halftone"
-msgstr "Halo"
+msgstr "Halvtone"
 
 #: hacks/config/halftone.xml.h:10
 msgid "Maximum mass"
-msgstr ""
+msgstr "Maksimal bass"
 
 #: hacks/config/halftone.xml.h:11
-#, fuzzy
 msgid "Maximum speed"
-msgstr "Animasjonshastighet"
+msgstr "Maksimal hastighet"
 
 #: hacks/config/halftone.xml.h:12
 msgid "Minimum mass"
-msgstr ""
+msgstr "Minimum bass"
 
 #: hacks/config/halftone.xml.h:13
-#, fuzzy
 msgid "Minimum speed"
-msgstr "Animasjonshastighet"
+msgstr "Minste hastighet"
 
 #: hacks/config/halo.xml.h:1
 msgid "Animate Circles"
@@ -5047,14 +4944,12 @@ msgid "4D Hypertorus"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:4
-#, fuzzy
 msgid "Color Wheel"
-msgstr "Farger"
+msgstr "Fargehjul"
 
 #: hacks/config/hypertorus.xml.h:5 hacks/config/polytopes.xml.h:10
-#, fuzzy
 msgid "Display Speed"
-msgstr "Stil"
+msgstr "Visningshastighet"
 
 #: hacks/config/hypertorus.xml.h:7 hacks/config/polytopes.xml.h:12
 msgid "Orthographic 3d"
@@ -5098,9 +4993,8 @@ msgid "See-Through Spirals (8 Spirals)"
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:19
-#, fuzzy
 msgid "Solid Object"
-msgstr "Helfylte objekter"
+msgstr "Helfylt objekt"
 
 #: hacks/config/hypertorus.xml.h:20 hacks/config/mirrorblob.xml.h:19
 #: hacks/config/polytopes.xml.h:21 hacks/config/pulsar.xml.h:16
@@ -5116,13 +5010,12 @@ msgid ""
 msgstr ""
 
 #: hacks/config/hypertorus.xml.h:22 hacks/config/polytopes.xml.h:23
-#, fuzzy
 msgid "Transparent Surface"
-msgstr "Gjennomsiktig"
+msgstr "Gjennomsiktig overflate"
 
 #: hacks/config/hypertorus.xml.h:23
 msgid "Two-Sided"
-msgstr ""
+msgstr "Tosidig"
 
 #: hacks/config/hypertorus.xml.h:24 hacks/config/polytopes.xml.h:24
 #, fuzzy
@@ -5167,26 +5060,22 @@ msgid "Blend"
 msgstr ""
 
 #: hacks/config/ifs.xml.h:3
-#, fuzzy
 msgid "Detail"
-msgstr "Forvalg"
+msgstr "Detalj"
 
 #: hacks/config/ifs.xml.h:5
-#, fuzzy
 msgid "Function"
-msgstr "Friksjon"
+msgstr "Funksjon"
 
 #: hacks/config/ifs.xml.h:6
-#, fuzzy
 msgid "Functions"
-msgstr "Friksjon"
+msgstr "Funksjoner"
 
 #: hacks/config/ifs.xml.h:7
 msgid "IFS"
 msgstr "IFS"
 
 #: hacks/config/ifs.xml.h:9
-#, fuzzy
 msgid "Number of Colours"
 msgstr "Antall farger"
 
@@ -5209,9 +5098,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/ifs.xml.h:16
-#, fuzzy
 msgid "Translate"
-msgstr "Triangel"
+msgstr "Oversett"
 
 #: hacks/config/imsmap.xml.h:3
 msgid "Brightness Gradients"
@@ -5219,7 +5107,7 @@ msgstr ""
 
 #: hacks/config/imsmap.xml.h:7
 msgid "Hue Gradients"
-msgstr "Gradienter for glød"
+msgstr "Gradienter for glød"
 
 #: hacks/config/imsmap.xml.h:8
 msgid "IMSmap"
@@ -5295,15 +5183,15 @@ msgstr "Forstyrrelse"
 #: hacks/config/interference.xml.h:13 hacks/config/t3d.xml.h:9
 #: hacks/config/xearth.xml.h:11 hacks/config/zoom.xml.h:5
 msgid "Magnification"
-msgstr "Forstørrelse"
+msgstr "Forstørrelse"
 
 #: hacks/config/interference.xml.h:16
 msgid "Number of Waves"
-msgstr "Antall bølger"
+msgstr "Antall bølger"
 
 #: hacks/config/interference.xml.h:20
 msgid "Wave Size"
-msgstr "Bølgestørrelse"
+msgstr "Bølgestørrelse"
 
 #: hacks/config/intermomentary.xml.h:2
 msgid "Intermomentary"
@@ -5347,13 +5235,12 @@ msgid "JigglyPuff"
 msgstr ""
 
 #: hacks/config/jigglypuff.xml.h:14
-#, fuzzy
 msgid "Rotation speed"
-msgstr "Roteringshastighet"
+msgstr "Rotasjonshastighet"
 
 #: hacks/config/jigglypuff.xml.h:17 hacks/config/sphere.xml.h:7
 msgid "Sphere"
-msgstr "Sfære"
+msgstr "Sfære"
 
 #: hacks/config/jigglypuff.xml.h:18
 msgid "Sphere strength"
@@ -5399,21 +5286,19 @@ msgstr ""
 
 #: hacks/config/jigglypuff.xml.h:26
 msgid "collapse"
-msgstr ""
+msgstr "slå sammen"
 
 #: hacks/config/jigglypuff.xml.h:27
 msgid "expand"
-msgstr ""
+msgstr "utvid"
 
 #: hacks/config/jigglypuff.xml.h:28
-#, fuzzy
 msgid "none"
-msgstr "Ingen"
+msgstr "ingen"
 
 #: hacks/config/jigglypuff.xml.h:29
-#, fuzzy
 msgid "strong"
-msgstr "Rar"
+msgstr "sterk"
 
 #: hacks/config/jigsaw.xml.h:4
 msgid "Jigsaw"
@@ -5444,7 +5329,7 @@ msgstr "Jongler"
 #: hacks/config/juggle.xml.h:6
 #, fuzzy
 msgid "Performance Length"
-msgstr "Lengde på spor"
+msgstr "Lengde på spor"
 
 #: hacks/config/juggle.xml.h:11
 msgid "Use Pattern "
@@ -5508,9 +5393,8 @@ msgid "Juggling Speed"
 msgstr "Rullehastighet"
 
 #: hacks/config/juggler3d.xml.h:7
-#, fuzzy
 msgid "Max Height"
-msgstr "Maks fart"
+msgstr "Maks høyde"
 
 #: hacks/config/juggler3d.xml.h:8
 #, fuzzy
@@ -5585,7 +5469,7 @@ msgstr ""
 #: hacks/config/klein.xml.h:12
 #, fuzzy
 msgid "Wander Around the Screen"
-msgstr "Sentrer på skjermen"
+msgstr "Sentrer på skjermen"
 
 #: hacks/config/kumppa.xml.h:5
 msgid "Kumppa"
@@ -5593,7 +5477,7 @@ msgstr "Kumppa"
 
 #: hacks/config/kumppa.xml.h:7
 msgid "Randomize"
-msgstr "Gjør tilfeldig"
+msgstr "Gjør tilfeldig"
 
 #: hacks/config/kumppa.xml.h:10
 msgid ""
@@ -5723,7 +5607,7 @@ msgstr "LMorph"
 
 #: hacks/config/lmorph.xml.h:6
 msgid "Less"
-msgstr "Færre"
+msgstr "Færre"
 
 #: hacks/config/lmorph.xml.h:8
 msgid "More"
@@ -5731,11 +5615,11 @@ msgstr "Flere"
 
 #: hacks/config/lmorph.xml.h:9
 msgid "Open Figures"
-msgstr "Åpne figurer"
+msgstr "Åpne figurer"
 
 #: hacks/config/lmorph.xml.h:10
 msgid "Open and Closed Figures"
-msgstr "Åpne og lukkede figurer"
+msgstr "Åpne og lukkede figurer"
 
 #: hacks/config/lmorph.xml.h:15
 msgid ""
@@ -5745,7 +5629,7 @@ msgstr ""
 
 #: hacks/config/loop.xml.h:3
 msgid "Loop"
-msgstr "Løkke"
+msgstr "Løkke"
 
 #: hacks/config/loop.xml.h:10
 msgid ""
@@ -5797,7 +5681,7 @@ msgstr ""
 
 #: hacks/config/maze.xml.h:15
 msgid "Solve Speed"
-msgstr "Løsningshastighet"
+msgstr "Løsningshastighet"
 
 #: hacks/config/maze.xml.h:16
 msgid ""
@@ -5848,9 +5732,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/metaballs.xml.h:1
-#, fuzzy
 msgid "Big"
-msgstr "Lys"
+msgstr "Stor"
 
 #: hacks/config/metaballs.xml.h:2
 msgid ""
@@ -5901,9 +5784,8 @@ msgid "Enable Reflected Image"
 msgstr ""
 
 #: hacks/config/mirrorblob.xml.h:10
-#, fuzzy
 msgid "Enable Walls"
-msgstr "Aktiver tåke"
+msgstr "Aktiver vegger"
 
 #: hacks/config/mirrorblob.xml.h:12
 #, fuzzy
@@ -5930,12 +5812,12 @@ msgstr ""
 #: hacks/config/mirrorblob.xml.h:24
 #, fuzzy
 msgid "X Resolution"
-msgstr "Oppløsing"
+msgstr "Oppløsing"
 
 #: hacks/config/mirrorblob.xml.h:25
 #, fuzzy
 msgid "Y Resolution"
-msgstr "Oppløsing"
+msgstr "Oppløsing"
 
 #: hacks/config/mismunch.xml.h:5
 #, fuzzy
@@ -6124,7 +6006,7 @@ msgstr ""
 
 #: hacks/config/nerverot.xml.h:17
 msgid "Nervousness"
-msgstr "Nervøshet"
+msgstr "Nervøshet"
 
 #: hacks/config/nerverot.xml.h:18 hacks/config/pyro.xml.h:12
 msgid "Seldom"
@@ -6171,14 +6053,12 @@ msgid "Use Text Below"
 msgstr ""
 
 #: hacks/config/pacman.xml.h:2
-#, fuzzy
 msgid "Pacman"
-msgstr "Pakking"
+msgstr "Pacman"
 
 #: hacks/config/pacman.xml.h:3
-#, fuzzy
 msgid "Player Size"
-msgstr "Flisstørrelse"
+msgstr "Størrelse på spiller"
 
 #: hacks/config/pacman.xml.h:4
 msgid ""
@@ -6239,16 +6119,16 @@ 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 ""
-"Tegner kvasiperiodiske fliser; tenk på implikasjonene for moderne formica-"
+"Tegner kvasiperiodiske fliser; tenk på implikasjonene for moderne formica-"
 "teknologi. Skrevet av Timo Korvola. \n"
 "I april 1997 anla Sir Roger Penrose, som har jobbet med Stephen Hawking med "
 "emner som relativitet, sorte hull og om tiden har en start, en rettsak om "
-"brudd på opphavsrett mot Kimberly-Clark Corporation fordi Penrose mente de "
-"hadde stjålet et mønster han hadde laget (et mønster som demonstrerer at "
-"\"et ikke-repeterende mønster kan eksistere i naturen\") til bruk på sitt "
-"Kleenex toalettpapir. Penrose sa han ikke likte det, men \"Når det kommer "
-"til at den engelske befolkningen blir invitert til å tørke seg i baken med "
-"noe som ser ut til å være arbeidet til en 'Knight of the realm', så må noen "
+"brudd på opphavsrett mot Kimberly-Clark Corporation fordi Penrose mente de "
+"hadde stjålet et mønster han hadde laget (et mønster som demonstrerer at "
+"\"et ikke-repeterende mønster kan eksistere i naturen\") til bruk på sitt "
+"Kleenex toalettpapir. Penrose sa han ikke likte det, men \"Når det kommer "
+"til at den engelske befolkningen blir invitert til å tørke seg i baken med "
+"noe som ser ut til å være arbeidet til en 'Knight of the realm', så må noen "
 "ta standpunkt.\" \t\t\t\t\t\t\t\t    \n"
 "\n"
 "Som rapportert av News of the Weird #491, 4-jul-1997."
@@ -6346,9 +6226,8 @@ msgid "Phosphor"
 msgstr "Fosfor"
 
 #: hacks/config/phosphor.xml.h:10
-#, fuzzy
 msgid "Use PTY"
-msgstr "Bruk"
+msgstr "Bruk PTY"
 
 #: hacks/config/piecewise.xml.h:1
 msgid "Color shifting speed"
@@ -6373,13 +6252,12 @@ msgid ""
 msgstr ""
 
 #: hacks/config/pinion.xml.h:1
-#, fuzzy
 msgid "100"
-msgstr "100%"
+msgstr "100"
 
 #: hacks/config/pinion.xml.h:2
 msgid "2000"
-msgstr ""
+msgstr "2000"
 
 #: hacks/config/pinion.xml.h:4
 msgid ""
@@ -6390,7 +6268,7 @@ msgstr ""
 #: hacks/config/pinion.xml.h:6
 #, fuzzy
 msgid "Gear Size"
-msgstr "Maks størrelse"
+msgstr "Maks størrelse"
 
 #: hacks/config/pinion.xml.h:8
 #, fuzzy
@@ -6418,11 +6296,11 @@ msgstr "Baller"
 
 #: hacks/config/pipes.xml.h:3
 msgid "Curved Pipes"
-msgstr "Kurvede rør"
+msgstr "Kurvede rør"
 
 #: hacks/config/pipes.xml.h:6
 msgid "Fisheye Lens"
-msgstr "Fiskeøyelinse"
+msgstr "Fiskeøyelinse"
 
 #: hacks/config/pipes.xml.h:7
 msgid "Gadgetry"
@@ -6436,7 +6314,7 @@ msgstr ""
 
 #: hacks/config/pipes.xml.h:11
 msgid "Number of Pipe Systems"
-msgstr "Antall rørsystemer"
+msgstr "Antall rørsystemer"
 
 #: hacks/config/pipes.xml.h:12
 msgid "Pipe Fittings"
@@ -6444,7 +6322,7 @@ msgstr ""
 
 #: hacks/config/pipes.xml.h:13
 msgid "Pipes"
-msgstr "Rør"
+msgstr "Rør"
 
 #: hacks/config/pipes.xml.h:17
 msgid "System Length"
@@ -6871,9 +6749,8 @@ msgid "Rhombidodecadodecahedron"
 msgstr ""
 
 #: hacks/config/polyhedra.xml.h:109
-#, fuzzy
 msgid "Show Description"
-msgstr "Beskrivelse"
+msgstr "Vis beskrivelse"
 
 #: hacks/config/polyhedra.xml.h:112
 msgid "Small Cubicuboctahedron"
@@ -7189,9 +7066,8 @@ msgid "popsquares"
 msgstr "Firkantet"
 
 #: hacks/config/providence.xml.h:1
-#, fuzzy
 msgid "Draw Eye"
-msgstr "Tegn etiketter"
+msgstr "Tegn øye"
 
 #: hacks/config/providence.xml.h:3
 msgid "Providence"
@@ -7224,7 +7100,7 @@ msgstr ""
 
 #: hacks/config/pulsar.xml.h:6
 msgid "Enable Fog"
-msgstr "Aktiver tåke"
+msgstr "Aktiver tåke"
 
 #: hacks/config/pulsar.xml.h:7
 msgid "Enable Lighting"
@@ -7282,7 +7158,7 @@ msgstr "Additive farger"
 
 #: hacks/config/qix.xml.h:3
 msgid "Corners"
-msgstr "Hjørner"
+msgstr "Hjørner"
 
 #: hacks/config/qix.xml.h:11
 msgid "Line Segments"
@@ -7290,11 +7166,11 @@ msgstr "Linjesegmenter"
 
 #: hacks/config/qix.xml.h:12
 msgid "Linear Motion"
-msgstr "Lineær bevegelse"
+msgstr "Lineær bevegelse"
 
 #: hacks/config/qix.xml.h:15
 msgid "Max Size"
-msgstr "Maks størrelse"
+msgstr "Maks størrelse"
 
 #: hacks/config/qix.xml.h:16
 msgid "Qix"
@@ -7370,7 +7246,7 @@ msgstr "Utgangsverdier"
 
 #: hacks/config/rd-bomb.xml.h:19 hacks/config/twang.xml.h:12
 msgid "Tile Size"
-msgstr "Flisstørrelse"
+msgstr "Flisstørrelse"
 
 #: hacks/config/rd-bomb.xml.h:22
 msgid "Wander Speed"
@@ -7378,7 +7254,7 @@ msgstr "Vandrehastighet"
 
 #: hacks/config/ripples.xml.h:1
 msgid "Big Drops"
-msgstr "Store dråper"
+msgstr "Store dråper"
 
 #: hacks/config/ripples.xml.h:2
 msgid "Colors    Two"
@@ -7393,9 +7269,8 @@ msgid "Grab Screen Image"
 msgstr ""
 
 #: hacks/config/ripples.xml.h:6
-#, fuzzy
 msgid "Grayscale"
-msgstr "GreyScale"
+msgstr "Gråtone"
 
 #: hacks/config/ripples.xml.h:7
 msgid "Lighting Effect"
@@ -7411,11 +7286,11 @@ msgstr "Psykedeliske farger"
 
 #: hacks/config/ripples.xml.h:11
 msgid "Ripples"
-msgstr "Bølger"
+msgstr "Bølger"
 
 #: hacks/config/ripples.xml.h:13
 msgid "Small Drops"
-msgstr "Små dråper"
+msgstr "Små dråper"
 
 #: hacks/config/ripples.xml.h:14
 msgid "Storm"
@@ -7675,11 +7550,11 @@ msgstr "Sonar"
 
 #: hacks/config/sonar.xml.h:14
 msgid "Team A Name"
-msgstr "Navn på lag A"
+msgstr "Navn på lag A"
 
 #: hacks/config/sonar.xml.h:15
 msgid "Team B Name"
-msgstr "Navn på lag B"
+msgstr "Navn på lag B"
 
 #: hacks/config/sonar.xml.h:16
 msgid ""
@@ -7796,7 +7671,7 @@ msgstr ""
 
 #: hacks/config/spotlight.xml.h:6
 msgid "Spotlight"
-msgstr "Følgelys"
+msgstr "Følgelys"
 
 #: hacks/config/sproingies.xml.h:3
 msgid "Q-Bert meets Marble Madness! Written by Ed Mackey."
@@ -7827,7 +7702,7 @@ msgstr "Tilfeldighet"
 
 #: hacks/config/squiral.xml.h:12
 msgid "Right"
-msgstr "Høyre"
+msgstr "Høyre"
 
 #: hacks/config/squiral.xml.h:17
 msgid "Squiral"
@@ -7948,9 +7823,9 @@ msgid ""
 msgstr ""
 
 #: hacks/config/substrate.xml.h:2 hacks/config/xplanet.xml.h:2
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "0%"
-msgstr "100%"
+msgstr "0%"
 
 #: hacks/config/substrate.xml.h:5
 msgid "Circle Percentage"
@@ -7969,9 +7844,8 @@ msgid ""
 msgstr ""
 
 #: hacks/config/substrate.xml.h:13
-#, fuzzy
 msgid "Sandgrains"
-msgstr "Forvalg"
+msgstr "Sandkorn"
 
 #: hacks/config/substrate.xml.h:17
 #, fuzzy
@@ -8006,7 +7880,7 @@ msgstr "Swirl"
 
 #: hacks/config/t3d.xml.h:1
 msgid "0 deg"
-msgstr ""
+msgstr "0 grader"
 
 #: hacks/config/t3d.xml.h:2
 msgid "5 Minute Tick Marks"
@@ -8014,11 +7888,11 @@ msgstr ""
 
 #: hacks/config/t3d.xml.h:3
 msgid "90 deg"
-msgstr ""
+msgstr "90 grader"
 
 #: hacks/config/t3d.xml.h:4
 msgid "Bigger"
-msgstr ""
+msgstr "Større"
 
 #: hacks/config/t3d.xml.h:5
 #, fuzzy
@@ -8093,19 +7967,16 @@ msgid "Thornbird"
 msgstr ""
 
 #: hacks/config/timetunnel.xml.h:1
-#, fuzzy
 msgid "0 sec"
-msgstr "0 sekunder"
+msgstr "0 sek"
 
 #: hacks/config/timetunnel.xml.h:2
-#, fuzzy
 msgid "30 sec"
-msgstr "0 sekunder"
+msgstr "0 sek"
 
 #: hacks/config/timetunnel.xml.h:4
-#, fuzzy
 msgid "Draw Logo"
-msgstr "Tegn flekker"
+msgstr "Tegn logo"
 
 #: hacks/config/timetunnel.xml.h:5
 msgid ""
@@ -8115,7 +7986,7 @@ msgstr ""
 
 #: hacks/config/timetunnel.xml.h:7
 msgid "Run Backward"
-msgstr ""
+msgstr "Kjør baklengs"
 
 #: hacks/config/timetunnel.xml.h:10
 msgid "Start sequence time"
@@ -8123,7 +7994,7 @@ msgstr ""
 
 #: hacks/config/timetunnel.xml.h:11
 msgid "Timetunnel"
-msgstr ""
+msgstr "Tidtunnel"
 
 #: hacks/config/triangle.xml.h:2
 msgid ""
@@ -8156,7 +8027,7 @@ msgstr "Spretten"
 
 #: hacks/config/twang.xml.h:11
 msgid "Springiness"
-msgstr "Fjærethet"
+msgstr "Fjærethet"
 
 #: hacks/config/twang.xml.h:13
 msgid "Transference"
@@ -8221,14 +8092,12 @@ msgid "Sustain"
 msgstr ""
 
 #: hacks/config/webcollage.xml.h:1
-#, fuzzy
 msgid "2 min"
-msgstr "2 minutter"
+msgstr "2 min"
 
 #: hacks/config/webcollage.xml.h:2
-#, fuzzy
 msgid "30 secs"
-msgstr "0 sekunder"
+msgstr "30 sek"
 
 #: hacks/config/webcollage.xml.h:3
 msgid "Delay:                    None"
@@ -8280,7 +8149,7 @@ msgstr ""
 
 #: hacks/config/whirlwindwarp.xml.h:7
 msgid "Trail Size"
-msgstr "Størrelse på spor"
+msgstr "Størrelse på spor"
 
 #: hacks/config/whirlwindwarp.xml.h:8
 msgid "WhirlwindWarp"
@@ -8291,9 +8160,8 @@ msgid "Amplitude"
 msgstr "Amplityde"
 
 #: hacks/config/whirlygig.xml.h:2
-#, fuzzy
 msgid "Circle"
-msgstr "Omganger"
+msgstr "Sirkel"
 
 #: hacks/config/whirlygig.xml.h:3
 msgid "Draws zooming chains of sinusoidal spots. Written by Ashton Trey Belew."
@@ -8317,14 +8185,12 @@ msgid "Innie"
 msgstr ""
 
 #: hacks/config/whirlygig.xml.h:8
-#, fuzzy
 msgid "Leave a trail"
 msgstr "Etterlat spor"
 
 #: hacks/config/whirlygig.xml.h:9
-#, fuzzy
 msgid "Linear"
-msgstr "Linjer"
+msgstr "Linr"
 
 #: hacks/config/whirlygig.xml.h:11
 #, fuzzy
@@ -8332,9 +8198,8 @@ msgid "Lissajous"
 msgstr "Lisa"
 
 #: hacks/config/whirlygig.xml.h:15
-#, fuzzy
 msgid "Test"
-msgstr "Best"
+msgstr "Test"
 
 #: hacks/config/whirlygig.xml.h:16
 #, fuzzy
@@ -8371,9 +8236,8 @@ msgid "Stars Created"
 msgstr ""
 
 #: hacks/config/wormhole.xml.h:8
-#, fuzzy
 msgid "Wormhole"
-msgstr "Orm"
+msgstr "Ormehull"
 
 #: hacks/config/wormhole.xml.h:9
 msgid ""
@@ -8420,9 +8284,8 @@ msgid "Cycle Colors"
 msgstr "Veksle mellom farger."
 
 #: hacks/config/xdaliclock.xml.h:4
-#, fuzzy
 msgid "Display Seconds"
-msgstr "Stil"
+msgstr "Vis sekunder"
 
 #: hacks/config/xdaliclock.xml.h:5
 msgid "Huge Font"
@@ -8478,7 +8341,7 @@ msgstr "Nedre venstre"
 
 #: hacks/config/xearth.xml.h:10 hacks/config/xplanet.xml.h:50
 msgid "Lower Right"
-msgstr "Nedre høyre"
+msgstr "Nedre høyre"
 
 #: hacks/config/xearth.xml.h:13 hacks/config/xplanet.xml.h:51
 msgid "Mercator Projection"
@@ -8522,11 +8385,11 @@ msgstr ""
 
 #: hacks/config/xearth.xml.h:29 hacks/config/xplanet.xml.h:62
 msgid "Upper Left"
-msgstr "Øvre venstre"
+msgstr "Øvre venstre"
 
 #: hacks/config/xearth.xml.h:30 hacks/config/xplanet.xml.h:63
 msgid "Upper Right"
-msgstr "Øvre høyre"
+msgstr "Øvre høyre"
 
 #: hacks/config/xearth.xml.h:31
 msgid ""
@@ -8548,7 +8411,7 @@ msgstr "Fisk"
 
 #: hacks/config/xfishtank.xml.h:6
 msgid "Fish Speed"
-msgstr "Hastighet på fisk"
+msgstr "Hastighet på fisk"
 
 #: hacks/config/xfishtank.xml.h:7
 msgid ""
@@ -8647,13 +8510,12 @@ msgid "1.0"
 msgstr ""
 
 #: hacks/config/xmountains.xml.h:3
-#, fuzzy
 msgid "14"
-msgstr "1"
+msgstr "14"
 
 #: hacks/config/xmountains.xml.h:4
 msgid "7"
-msgstr ""
+msgstr "7"
 
 #: hacks/config/xmountains.xml.h:5
 #, fuzzy
@@ -8771,7 +8633,7 @@ msgstr ""
 #: hacks/config/xmountains.xml.h:34
 #, fuzzy
 msgid "Viewpoint"
-msgstr "Lineær bevegelse"
+msgstr "Lineær bevegelse"
 
 #: hacks/config/xmountains.xml.h:35
 msgid ""
@@ -8851,9 +8713,8 @@ msgid "From Io"
 msgstr ""
 
 #: hacks/config/xplanet.xml.h:21
-#, fuzzy
 msgid "From Jupiter"
-msgstr "Jupiter"
+msgstr "Fra Jupiter"
 
 #: hacks/config/xplanet.xml.h:22
 msgid "From Major"
@@ -8861,11 +8722,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:23
 msgid "From Mars"
-msgstr ""
+msgstr "Fra Mars"
 
 #: hacks/config/xplanet.xml.h:24
 msgid "From Mercury"
-msgstr ""
+msgstr "Fra Merkur"
 
 #: hacks/config/xplanet.xml.h:25
 msgid "From Mimas"
@@ -8876,13 +8737,12 @@ msgid "From Miranda"
 msgstr ""
 
 #: hacks/config/xplanet.xml.h:27
-#, fuzzy
 msgid "From Moon"
-msgstr "Tilfeldig bevegelse"
+msgstr "Fra Månen"
 
 #: hacks/config/xplanet.xml.h:28
 msgid "From Neptune"
-msgstr ""
+msgstr "Fra Neptun"
 
 #: hacks/config/xplanet.xml.h:29
 msgid "From Nereid"
@@ -8902,12 +8762,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:33
 msgid "From Pluto"
-msgstr ""
+msgstr "Fra Pluto"
 
 #: hacks/config/xplanet.xml.h:34
-#, fuzzy
 msgid "From Random"
-msgstr "Tilfeldig"
+msgstr "Fra tilfeldig"
 
 #: hacks/config/xplanet.xml.h:35
 msgid "From Rhea"
@@ -8915,11 +8774,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:36
 msgid "From Saturn"
-msgstr ""
+msgstr "Fra Saturn"
 
 #: hacks/config/xplanet.xml.h:37
 msgid "From Sun"
-msgstr ""
+msgstr "Fra solen"
 
 #: hacks/config/xplanet.xml.h:38
 msgid "From Tethys"
@@ -8934,9 +8793,8 @@ msgid "From Titania"
 msgstr ""
 
 #: hacks/config/xplanet.xml.h:41
-#, fuzzy
 msgid "From Triton"
-msgstr "Friksjon"
+msgstr ""
 
 #: hacks/config/xplanet.xml.h:42
 msgid "From Umbriel"
@@ -8944,11 +8802,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:43
 msgid "From Uranus"
-msgstr ""
+msgstr "Fra Uranus"
 
 #: hacks/config/xplanet.xml.h:44
 msgid "From Venus"
-msgstr ""
+msgstr "Fra Venus"
 
 #: hacks/config/xplanet.xml.h:45
 msgid "Hemisphere Projection"
@@ -9004,9 +8862,8 @@ msgid "View Dione"
 msgstr ""
 
 #: hacks/config/xplanet.xml.h:69
-#, fuzzy
 msgid "View Earth"
-msgstr "Xklode"
+msgstr "Vis jorden"
 
 #: hacks/config/xplanet.xml.h:70
 msgid "View Enceladus"
@@ -9014,11 +8871,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:71
 msgid "View Europa"
-msgstr ""
+msgstr "Vis Europa"
 
 #: hacks/config/xplanet.xml.h:72
 msgid "View Ganymede"
-msgstr ""
+msgstr "Vis Ganymedes"
 
 #: hacks/config/xplanet.xml.h:73
 msgid "View Hyperion"
@@ -9030,12 +8887,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:75
 msgid "View Io"
-msgstr ""
+msgstr "Vis Io"
 
 #: hacks/config/xplanet.xml.h:76
-#, fuzzy
 msgid "View Jupiter"
-msgstr "Jupiter"
+msgstr "Vis Jupiter"
 
 #: hacks/config/xplanet.xml.h:77
 msgid "View Major"
@@ -9043,11 +8899,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:78
 msgid "View Mars"
-msgstr ""
+msgstr "Vis Mars"
 
 #: hacks/config/xplanet.xml.h:79
 msgid "View Mercury"
-msgstr ""
+msgstr "Vis Merkur"
 
 #: hacks/config/xplanet.xml.h:80
 msgid "View Mimas"
@@ -9058,13 +8914,12 @@ msgid "View Miranda"
 msgstr ""
 
 #: hacks/config/xplanet.xml.h:82
-#, fuzzy
 msgid "View Moon"
-msgstr "Lineær bevegelse"
+msgstr "Vis månen"
 
 #: hacks/config/xplanet.xml.h:83
 msgid "View Neptune"
-msgstr ""
+msgstr "Vis Neptun"
 
 #: hacks/config/xplanet.xml.h:84
 msgid "View Nereid"
@@ -9084,12 +8939,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:88
 msgid "View Pluto"
-msgstr ""
+msgstr "Vis Pluto"
 
 #: hacks/config/xplanet.xml.h:89
-#, fuzzy
 msgid "View Random"
-msgstr "Tilfeldig"
+msgstr "Vis tilfeldig"
 
 #: hacks/config/xplanet.xml.h:90
 msgid "View Rhea"
@@ -9097,11 +8951,11 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:91
 msgid "View Saturn"
-msgstr ""
+msgstr "Vis Saturn"
 
 #: hacks/config/xplanet.xml.h:92
 msgid "View Sun"
-msgstr ""
+msgstr "Vis solen"
 
 #: hacks/config/xplanet.xml.h:93
 msgid "View Tethys"
@@ -9125,16 +8979,15 @@ msgstr ""
 
 #: hacks/config/xplanet.xml.h:98
 msgid "View Uranus"
-msgstr ""
+msgstr "Vis Uranus"
 
 #: hacks/config/xplanet.xml.h:99
 msgid "View Venus"
-msgstr ""
+msgstr "Vis Venus"
 
 #: hacks/config/xplanet.xml.h:100
-#, fuzzy
 msgid "Xplanet"
-msgstr "Plan"
+msgstr "XPlanet"
 
 #: hacks/config/xplanet.xml.h:101
 msgid ""
@@ -9153,7 +9006,7 @@ msgstr ""
 
 #: hacks/config/xrayswarm.xml.h:5
 msgid "XRaySwarm"
-msgstr "XStråleSverm"
+msgstr "XStråleSverm"
 
 #: hacks/config/xsnow.xml.h:1
 msgid ""
@@ -9163,7 +9016,7 @@ msgstr ""
 
 #: hacks/config/xsnow.xml.h:2
 msgid "Xsnow"
-msgstr "Xsnø"
+msgstr "Xsnø"
 
 #: hacks/config/xspirograph.xml.h:5
 msgid ""
@@ -9216,61 +9069,3 @@ msgid ""
 "option the result is like looking through many overlapping lenses rather "
 "than just a simple zoom. Written by James Macnicol."
 msgstr ""
-
-#~ msgid "/\");"
-#~ msgstr "/\");"
-
-#~ msgid "Display Subprocess _Errors"
-#~ msgstr "Vis f_eil i underprosesser"
-
-#~ msgid "Display _Splash Screen at Startup"
-#~ msgstr "Vis opp_startsskjerm"
-
-#, fuzzy
-#~ msgid "_Verbose Diagnostics"
-#~ msgstr "Utfyllende diagnostikk"
-
-#, fuzzy
-#~ msgid "Hide Sheep"
-#~ msgstr "Lysbildehastighet"
-
-#, fuzzy
-#~ msgid "Standalone"
-#~ msgstr "Forvalg"
-
-#, fuzzy
-#~ msgid "Light effect"
-#~ msgstr "Lyneffekt"
-
-#, fuzzy
-#~ msgid "Shoot"
-#~ msgstr "Kort"
-
-#, fuzzy
-#~ msgid "Enable Background Image"
-#~ msgstr "Flat bakgrunn"
-
-#, fuzzy
-#~ msgid "Linux"
-#~ msgstr "Sparc Linux"
-
-#~ msgid "Sparc Linux"
-#~ msgstr "Sparc Linux"
-
-#~ msgid "Checkered Balls"
-#~ msgstr "Rutete baller"
-
-#~ msgid "Ping Subnet"
-#~ msgstr "Ping subnett"
-
-#~ msgid "Scary Colors"
-#~ msgstr "Skremmende farger"
-
-#~ msgid "Y Rotation"
-#~ msgstr "Y-rotasjon"
-
-#~ msgid "Z Rotation"
-#~ msgstr "Z-rotasjon"
-
-#~ msgid "Curviness"
-#~ msgstr "Kurvethet"
diff --git a/po/no.po b/po/no.po
deleted file mode 100644 (file)
index 43f85fc..0000000
--- a/po/no.po
+++ /dev/null
@@ -1,9276 +0,0 @@
-# Norwegian translation of control-center (bokmål dialect).
-# Copyright (C) 1999,2000 Free Software Foundation, Inc.
-# Kjartan Maraas <kmaraas@gnome.org>, 1999,2000.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: control-center 1.5.8\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-02-13 12:26+0100\n"
-"PO-Revision-Date: 2002-09-03 18:28+0200\n"
-"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
-"Language-Team: Norwegian <no@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8-bit\n"
-
-#: driver/demo-Gtk-conf.c:818
-msgid "Browse..."
-msgstr "Bla gjennom..."
-
-#: driver/demo-Gtk-conf.c:1110
-msgid "Select file."
-msgstr "Velg fil."
-
-#: driver/demo-Gtk-support.c:135
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Kunne ikke finne pixmap-fil: %s"
-
-#: driver/demo-Gtk-support.c:147 driver/demo-Gtk-support.c:179
-#, c-format
-msgid "Error loading pixmap file: %s"
-msgstr "Feil under lasting av pixmap-fil: %s"
-
-#: driver/demo-Gtk-support.c:182
-#, c-format
-msgid "reason: %s\n"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:161 driver/xscreensaver-demo.glade2.h:71
-msgid "XScreenSaver"
-msgstr "XScreenSaver"
-
-#: driver/demo-Gtk-widgets.c:182 driver/xscreensaver-demo.glade2.h:84
-msgid "_File"
-msgstr "_Fil"
-
-#: driver/demo-Gtk-widgets.c:202 driver/xscreensaver-demo.glade2.h:76
-msgid "_Blank Screen Now"
-msgstr "_Blank ut skjermen nå"
-
-#: driver/demo-Gtk-widgets.c:211
-msgid ""
-"Activate the XScreenSaver daemon now (locking the screen if so configured.)"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:215 driver/xscreensaver-demo.glade2.h:89
-msgid "_Lock Screen Now"
-msgstr "_Lås skjermen nå"
-
-#: driver/demo-Gtk-widgets.c:224
-msgid "Lock the screen now (even if \"Lock Screen\" is unchecked.)"
-msgstr "Lås skjermen nå (selv om «Lås skjerm» ikke er avkrysset.)"
-
-#: driver/demo-Gtk-widgets.c:228 driver/xscreensaver-demo.glade2.h:87
-msgid "_Kill Daemon"
-msgstr "_Terminer daemon"
-
-#: driver/demo-Gtk-widgets.c:237
-msgid "Tell the running XScreenSaver daemon to exit."
-msgstr "Be kjørende XScreenSaver daemon om å avslutte."
-
-#: driver/demo-Gtk-widgets.c:241 driver/xscreensaver-demo.glade2.h:98
-msgid "_Restart Daemon"
-msgstr "Sta_rt daemon på nytt"
-
-#: driver/demo-Gtk-widgets.c:250
-msgid "Kill and re-launch the XScreenSaver daemon."
-msgstr "Terminer og start XScreeSaver daemon på nytt."
-
-#: driver/demo-Gtk-widgets.c:263
-msgid "_Exit"
-msgstr "_Avslutt"
-
-#: driver/demo-Gtk-widgets.c:272
-msgid ""
-"Exit the xscreensaver-demo program (but leave the XScreenSaver daemon "
-"running in the background.)"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:276 driver/xscreensaver-demo.glade2.h:85
-msgid "_Help"
-msgstr "_Hjelp"
-
-#: driver/demo-Gtk-widgets.c:296 driver/xscreensaver-demo.glade2.h:72
-msgid "_About..."
-msgstr "_Om..."
-
-#: driver/demo-Gtk-widgets.c:305
-msgid "Display version information."
-msgstr "Vis versjonsinformasjon."
-
-#: driver/demo-Gtk-widgets.c:309 driver/xscreensaver-demo.glade2.h:83
-msgid "_Documentation..."
-msgstr "_Dokumentasjon..."
-
-#: driver/demo-Gtk-widgets.c:318
-msgid "Go to the documentation on the XScreenSaver web page."
-msgstr "Gå til dokumentasjonen på nettsidene til XScreenSaver."
-
-#: driver/demo-Gtk-widgets.c:348
-msgid "Cycle After"
-msgstr "Skift etter"
-
-#: driver/demo-Gtk-widgets.c:370 driver/xscreensaver-demo.glade2.h:63
-msgid "Whether a password should be required to un-blank the screen."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:372
-msgid "Lock Screen After"
-msgstr "Lås skjermen etter"
-
-#: driver/demo-Gtk-widgets.c:380
-msgid "Blank After"
-msgstr "Blank ut etter"
-
-#: driver/demo-Gtk-widgets.c:403 driver/demo-Gtk-widgets.c:453
-#: driver/demo-Gtk-widgets.c:467 driver/demo-Gtk-widgets.c:1016
-msgid "How long before the monitor goes completely black."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:407 driver/demo-Gtk-widgets.c:419
-#: driver/demo-Gtk-widgets.c:431 driver/demo-Gtk-widgets.c:1020
-#: driver/demo-Gtk-widgets.c:1032 driver/demo-Gtk-widgets.c:1044
-#: driver/xscreensaver-demo.glade2.h:106
-msgid "minutes"
-msgstr "minutter"
-
-#: driver/demo-Gtk-widgets.c:482 driver/demo-Gtk.c:3233
-msgid "Preview"
-msgstr "Forhåndsvisning"
-
-#: driver/demo-Gtk-widgets.c:490 driver/xscreensaver-demo.glade2.h:10
-msgid ""
-"Demo the selected screen saver in full-screen mode (click the mouse to "
-"return.)"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:492
-msgid "Settings..."
-msgstr "Innstillinger..."
-
-#: driver/demo-Gtk-widgets.c:500 driver/xscreensaver-demo.glade2.h:7
-msgid "Customization and explanation of the selected screen saver."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:521
-msgid "Mode:"
-msgstr "Modus:"
-
-#: driver/demo-Gtk-widgets.c:539
-msgid "Disable Screen Saver"
-msgstr "Slå av skjermsparer"
-
-#: driver/demo-Gtk-widgets.c:542
-msgid "Blank Screen Only"
-msgstr "Kun blank ut skjerm"
-
-#: driver/demo-Gtk-widgets.c:545
-msgid "Only One Screen Saver"
-msgstr "Kun én skjermsparer"
-
-#: driver/demo-Gtk-widgets.c:548
-msgid "Random Screen Saver"
-msgstr "Tilfeldig skjermsparer"
-
-#: driver/demo-Gtk-widgets.c:571 driver/demo-Gtk.c:2419
-msgid "Use"
-msgstr "Bruk"
-
-#: driver/demo-Gtk-widgets.c:591 driver/demo-Gtk.c:2429
-msgid "Screen Saver"
-msgstr "Skjermsparer"
-
-#: driver/demo-Gtk-widgets.c:644
-msgid "\\/"
-msgstr "\\/"
-
-#: driver/demo-Gtk-widgets.c:652 driver/xscreensaver-demo.glade2.h:39
-msgid ""
-"Run the next screen saver in the list in full-screen mode (click the mouse "
-"to return.)"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:654
-msgid "/\\"
-msgstr "/\\"
-
-#: driver/demo-Gtk-widgets.c:662 driver/xscreensaver-demo.glade2.h:40
-msgid ""
-"Run the previous screen saver in the list in full-screen mode (click the "
-"mouse to return.)"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:664 driver/demo-Gtk-widgets.c:1607
-#: driver/xscreensaver-demo.glade2.h:11
-msgid "Description"
-msgstr "Beskrivelse"
-
-#: driver/demo-Gtk-widgets.c:691
-msgid "Display Modes"
-msgstr "Visningsmodi"
-
-#: driver/demo-Gtk-widgets.c:707
-msgid "Diagnostics"
-msgstr "Diagnostikk"
-
-#: driver/demo-Gtk-widgets.c:751
-msgid "Whether the daemon should print lots of debugging information."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:753
-msgid "Verbose Diagnostics"
-msgstr "Utfyllende diagnostikk"
-
-#: driver/demo-Gtk-widgets.c:768
-msgid ""
-"Whether any error output of the display modes should be redirected to the "
-"screen."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:770
-msgid "Display Subprocess Errors"
-msgstr "Vis feil i underprosesser"
-
-#: driver/demo-Gtk-widgets.c:785
-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:787
-msgid "Display Splash Screen at Startup"
-msgstr "Vis oppstartsskjerm"
-
-#: driver/demo-Gtk-widgets.c:796
-msgid "Colormaps"
-msgstr "Fargekart"
-
-#: driver/demo-Gtk-widgets.c:840 driver/xscreensaver-demo.glade2.h:70
-msgid ""
-"Whether to install a private colormap when running in 8-bit mode on the "
-"default Visual."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:842
-msgid "Install Colormap"
-msgstr "Installer fargekart"
-
-#: driver/demo-Gtk-widgets.c:865 driver/xscreensaver-demo.glade2.h:69
-msgid ""
-"Whether the screen should slowly fade to black when the screen saver "
-"activates."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:867
-msgid "Fade To Black When Blanking"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:882 driver/xscreensaver-demo.glade2.h:68
-msgid ""
-"Whether the screen should slowly fade in from black when the screen saver "
-"deactivates."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:884
-msgid "Fade From Black When Unblanking"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:910
-msgid "Fade Duration"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:928 driver/xscreensaver-demo.glade2.h:26
-msgid "How long it should take for the screen to fade in and out."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:932 driver/xscreensaver-demo.glade2.h:111
-msgid "seconds"
-msgstr "sekunder"
-
-#: driver/demo-Gtk-widgets.c:942 driver/xscreensaver-demo.glade2.h:13
-msgid "Display Power Management"
-msgstr "Strømstyring for skjermen"
-
-#: driver/demo-Gtk-widgets.c:986 driver/xscreensaver-demo.glade2.h:67
-msgid "Whether the monitor should be powered down after a while."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:988
-msgid "Power Management Enabled"
-msgstr "Strømstyring aktivert"
-
-#: driver/demo-Gtk-widgets.c:1056
-msgid "Off After"
-msgstr "Av etter"
-
-#: driver/demo-Gtk-widgets.c:1069
-msgid "Suspend After"
-msgstr "Pause etter"
-
-#: driver/demo-Gtk-widgets.c:1082
-msgid "Standby After"
-msgstr "Ventemodus etter"
-
-#: driver/demo-Gtk-widgets.c:1105 driver/xscreensaver-demo.glade2.h:28
-msgid "How long until the monitor goes into power-saving mode."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1119 driver/xscreensaver-demo.glade2.h:29
-msgid "How long until the monitor powers down."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1123 driver/xscreensaver-demo.glade2.h:30
-msgid "Image Manipulation"
-msgstr "Bildemanipulering"
-
-#: driver/demo-Gtk-widgets.c:1167 driver/xscreensaver-demo.glade2.h:64
-msgid ""
-"Whether the image-manipulating modes should be allowed to operate on an "
-"image of your desktop."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1169
-msgid "Grab Desktop Images"
-msgstr "Hent bilder fra skrivebordet"
-
-#: driver/demo-Gtk-widgets.c:1184
-msgid ""
-"Whether the image-manipulating modes should operate on images captured from "
-"the system's video input (if there is one)."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1186
-msgid "Grab Video Frames"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1201 driver/xscreensaver-demo.glade2.h:66
-msgid ""
-"Whether the image-manipulating modes should operate on random images loaded "
-"from disk."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1203
-msgid "Choose Random Image:"
-msgstr "Velg tilfeldig bilde:"
-
-#: driver/demo-Gtk-widgets.c:1236 driver/xscreensaver-demo.glade2.h:53
-msgid "The directory from which images will be randomly chosen."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1238
-msgid "Browse"
-msgstr "Bla gjennom"
-
-#: driver/demo-Gtk-widgets.c:1246 driver/demo-Gtk-widgets.c:1599
-#: driver/xscreensaver-demo.glade2.h:2
-msgid "Advanced"
-msgstr "Avansert"
-
-#: driver/demo-Gtk-widgets.c:1444
-msgid "XScreenSaver: Mode-Specific Settings"
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1466 driver/xscreensaver-demo.glade2.h:41
-msgid "Settings"
-msgstr "Innstillinger"
-
-#: driver/demo-Gtk-widgets.c:1495 driver/xscreensaver-demo.glade2.h:43
-msgid "Standard"
-msgstr "Forvalg"
-
-#: driver/demo-Gtk-widgets.c:1532
-msgid "Visual:"
-msgstr "Synlig:"
-
-#: driver/demo-Gtk-widgets.c:1550 driver/demo-Gtk-widgets.c:1573
-#: driver/demo-Gtk.c:1695 driver/demo-Gtk.c:3252
-#: driver/xscreensaver-demo.glade2.h:3
-msgid "Any"
-msgstr "Enhver"
-
-#: driver/demo-Gtk-widgets.c:1551 driver/xscreensaver-demo.glade2.h:4
-msgid "Best"
-msgstr "Best"
-
-#: driver/demo-Gtk-widgets.c:1552 driver/xscreensaver-demo.glade2.h:8
-msgid "Default"
-msgstr "Forvalg"
-
-#: driver/demo-Gtk-widgets.c:1553 driver/xscreensaver-demo.glade2.h:9
-msgid "Default-N"
-msgstr "Forvalg-N"
-
-#: driver/demo-Gtk-widgets.c:1554 driver/xscreensaver-demo.glade2.h:18
-msgid "GL"
-msgstr "GL"
-
-#: driver/demo-Gtk-widgets.c:1555 driver/xscreensaver-demo.glade2.h:54
-msgid "TrueColor"
-msgstr "Sanne farger"
-
-#: driver/demo-Gtk-widgets.c:1556 driver/xscreensaver-demo.glade2.h:38
-msgid "PseudoColor"
-msgstr "Pseudofarge"
-
-#: driver/demo-Gtk-widgets.c:1557 driver/xscreensaver-demo.glade2.h:44
-msgid "StaticGray"
-msgstr "StaticGray"
-
-#: driver/demo-Gtk-widgets.c:1558 driver/xscreensaver-demo.glade2.h:22
-msgid "GrayScale"
-msgstr "GreyScale"
-
-#: driver/demo-Gtk-widgets.c:1559 driver/xscreensaver-demo.glade2.h:12
-msgid "DirectColor"
-msgstr "DirectColor"
-
-#: driver/demo-Gtk-widgets.c:1560 driver/xscreensaver-demo.glade2.h:6
-#: hacks/config/fuzzyflakes.xml.h:3
-msgid "Color"
-msgstr "Farger"
-
-#: driver/demo-Gtk-widgets.c:1561 driver/xscreensaver-demo.glade2.h:21
-msgid "Gray"
-msgstr "Gråtone"
-
-#: driver/demo-Gtk-widgets.c:1562 driver/xscreensaver-demo.glade2.h:32
-msgid "Mono"
-msgstr "Mono"
-
-#: driver/demo-Gtk-widgets.c:1572
-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:1575
-msgid "Command Line:"
-msgstr "Kommandolinje:"
-
-#: driver/demo-Gtk-widgets.c:1647
-msgid "Documentation..."
-msgstr "Dokumentasjon..."
-
-#: driver/demo-Gtk-widgets.c:1655
-msgid "Click here to read the manual for this display mode, if it has one."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1680
-msgid "Advanced >>"
-msgstr "Avansert >>"
-
-#: driver/demo-Gtk-widgets.c:1688
-msgid "Edit the command line directly."
-msgstr "Rediger kommandolinjen direkte."
-
-#: driver/demo-Gtk-widgets.c:1690
-msgid "Standard <<"
-msgstr "Generell <<"
-
-#: driver/demo-Gtk-widgets.c:1698
-msgid "Back to the graphical configuration options."
-msgstr ""
-
-#: driver/demo-Gtk-widgets.c:1709 driver/demo-Gtk.c:832
-msgid "OK"
-msgstr "OK"
-
-#: driver/demo-Gtk-widgets.c:1718
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: driver/demo-Gtk.c:692 driver/demo-Gtk.c:4282
-#, c-format
-msgid ""
-"Warning:\n"
-"\n"
-"The XScreenSaver daemon doesn't seem to be running\n"
-"on display \"%s\".  Launch it now?"
-msgstr ""
-
-#: driver/demo-Gtk.c:740
-msgid "For updates, check http://www.jwz.org/xscreensaver/"
-msgstr "For oppdateringer, sjekk http://www.jwz.org/xscreensaver/"
-
-#: driver/demo-Gtk.c:870
-msgid ""
-"Error:\n"
-"\n"
-"No Help URL has been specified.\n"
-msgstr ""
-"Feil:\n"
-"\n"
-"Ingen URL oppgitt for hjelp.\n"
-
-#: driver/demo-Gtk.c:967
-msgid ""
-"Error:\n"
-"\n"
-"The xscreensaver daemon did not start up properly.\n"
-"\n"
-msgstr ""
-"Feil:\n"
-"\n"
-"Xscreensaver daemonen startet ikke opp riktig.\n"
-
-#: driver/demo-Gtk.c:979
-msgid ""
-"You are running as root.  This usually means that xscreensaver\n"
-"was unable to contact your X server because access control is\n"
-"turned on.  Try running this command:\n"
-"\n"
-"                        xhost +localhost\n"
-"\n"
-"and then selecting `File / Restart Daemon'.\n"
-"\n"
-"Note that turning off access control will allow anyone logged\n"
-"on to this machine to access your screen, which might be\n"
-"considered a security problem.  Please read the xscreensaver\n"
-"manual and FAQ for more information.\n"
-"\n"
-"You shouldn't run X as root. Instead, you should log in as a\n"
-"normal user, and `su' as necessary."
-msgstr ""
-
-#: driver/demo-Gtk.c:995
-msgid "Please check your $PATH and permissions."
-msgstr "Vennligst sjekk $PATH og rettigheter."
-
-#: driver/demo-Gtk.c:1033
-msgid ""
-"Error:\n"
-"\n"
-"Couldn't determine init file name!\n"
-msgstr ""
-"Feil:\n"
-"\n"
-"Kunne ikke bestemme navn på initieringsfil!\n"
-
-#: driver/demo-Gtk.c:1038
-#, c-format
-msgid ""
-"Error:\n"
-"\n"
-"Couldn't write %s\n"
-msgstr ""
-"Feil:\n"
-"\n"
-"Kunne ikke skrive %s\n"
-
-#: driver/demo-Gtk.c:1101
-msgid ""
-"Error:\n"
-"\n"
-"no `manualCommand' resource set."
-msgstr ""
-"Feil:\n"
-"\n"
-"ingen «manualCommand»-ressurs satt."
-
-#: driver/demo-Gtk.c:1284
-#, c-format
-msgid ""
-"Error:\n"
-"\n"
-"Unparsable time format: \"%s\"\n"
-msgstr ""
-"Feil:\n"
-"\n"
-"Forstår ikke tidsformatet: «%s»\n"
-
-#: driver/demo-Gtk.c:1991
-#, c-format
-msgid ""
-"Error:\n"
-"\n"
-"Directory does not exist: \"%s\"\n"
-msgstr ""
-"Feil:\n"
-"\n"
-"Katalogen eksisterer ikke: «%s»\n"
-
-#: driver/demo-Gtk.c:2021 driver/demo-Gtk.c:2052
-#, fuzzy, c-format
-msgid ""
-"Error:\n"
-"\n"
-"File does not exist: \"%s\"\n"
-msgstr ""
-"Feil:\n"
-"\n"
-"Katalogen eksisterer ikke: «%s»\n"
-
-#: driver/demo-Gtk.c:2877
-msgid "Descriptions not available: no XML support compiled in."
-msgstr "Beskrivelser ikke tilgjengelig: ingen støtte for XML kompilert inn."
-
-#: driver/demo-Gtk.c:2882
-msgid "No description available."
-msgstr "Ingen beskrivelse tilgjengelig."
-
-#: driver/demo-Gtk.c:3204
-msgid "Blank Screen"
-msgstr "Blank skjerm"
-
-#: driver/demo-Gtk.c:3210
-msgid "Screen Saver Disabled"
-msgstr "Skjermsparer deaktivert"
-
-#: driver/demo-Gtk.c:3243
-#, c-format
-msgid "%s: %.100s Settings"
-msgstr ""
-
-#: driver/demo-Gtk.c:3407
-#, c-format
-msgid ""
-"Warning:\n"
-"\n"
-"file \"%s\" has changed, reloading.\n"
-msgstr ""
-
-#: driver/demo-Gtk.c:3492
-msgid "No Preview"
-msgstr "Ingen forhåndsvisning"
-
-#: driver/demo-Gtk.c:3492
-msgid "Available"
-msgstr "Tilgjengelig"
-
-#: driver/demo-Gtk.c:3493
-msgid "Not"
-msgstr ""
-
-#: driver/demo-Gtk.c:3493
-msgid "Installed"
-msgstr ""
-
-#: driver/demo-Gtk.c:4292
-#, c-format
-msgid ""
-"Warning:\n"
-"\n"
-"%s is running as user \"%s\" on host \"%s\".\n"
-"But the xscreensaver managing display \"%s\"\n"
-"is running as user \"%s\" on host \"%s\".\n"
-"\n"
-"Since they are different users, they won't be reading/writing\n"
-"the same ~/.xscreensaver file, so %s isn't\n"
-"going to work right.\n"
-"\n"
-"You should either re-run %s as \"%s\", or re-run\n"
-"xscreensaver as \"%s\".\n"
-"\n"
-"Restart the xscreensaver daemon now?\n"
-msgstr ""
-
-#: driver/demo-Gtk.c:4317
-#, c-format
-msgid ""
-"Warning:\n"
-"\n"
-"%s is running as user \"%s\" on host \"%s\".\n"
-"But the xscreensaver managing display \"%s\"\n"
-"is running as user \"%s\" on host \"%s\".\n"
-"\n"
-"If those two machines don't share a file system (that is,\n"
-"if they don't see the same ~%s/.xscreensaver file) then\n"
-"%s won't work right.\n"
-"\n"
-"Restart the daemon on \"%s\" as \"%s\" now?\n"
-msgstr ""
-
-#: driver/demo-Gtk.c:4339
-#, c-format
-msgid ""
-"Warning:\n"
-"\n"
-"This is %s version %s.\n"
-"But the xscreensaver managing display \"%s\"\n"
-"is version %s.  This could cause problems.\n"
-"\n"
-"Restart the xscreensaver daemon now?\n"
-msgstr ""
-
-#: driver/demo-Gtk.c:4800
-#, c-format
-msgid "%s: unknown option: %s\n"
-msgstr "%s: ukjent flagg: %s\n"
-
-#: driver/demo-Gtk.c:4865
-#, fuzzy
-msgid "Screensaver Preferences"
-msgstr "Skjermsparer"
-
-#: driver/screensaver-properties.desktop.in.h:1
-msgid "Change screensaver properties"
-msgstr ""
-
-#: driver/screensaver-properties.desktop.in.h:2
-msgid "Screensaver"
-msgstr "Skjermsparer"
-
-#: driver/xscreensaver-demo.glade2.h:1
-msgid "*"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:5
-msgid "Choose _Random Image:"
-msgstr "Velg _tilfeldig bilde:"
-
-#: driver/xscreensaver-demo.glade2.h:14
-msgid "F_ade Duration"
-msgstr "V_arighet for utfasing"
-
-#: driver/xscreensaver-demo.glade2.h:15
-msgid "Fade from Black When _Unblanking"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:16
-msgid "Fade to Black when _Blanking"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:17
-#, fuzzy
-msgid "Fading and Colormaps"
-msgstr "Skremmende farger"
-
-#: driver/xscreensaver-demo.glade2.h:19
-msgid "Grab Desktop _Images"
-msgstr "Hent b_ilder fra skrivebordet"
-
-#: driver/xscreensaver-demo.glade2.h:20
-msgid "Grab _Video Frames"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:23
-msgid "How long after the screen blanks until a password will be required."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:24
-msgid "How long before the screen saver activates."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:25
-msgid ""
-"How long each display mode should run before choosing a new one (in Random "
-"mode.)"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:27
-msgid "How long until the monitor goes completely black."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:31
-msgid "Install _Colormap"
-msgstr "Installer _fargekart"
-
-#: driver/xscreensaver-demo.glade2.h:33
-msgid "Never blank the screen or power down the monitor."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:34
-msgid ""
-"No Preview\n"
-"Available"
-msgstr ""
-"Ingen forhåndsvisning\n"
-"tilgjengelig"
-
-#: driver/xscreensaver-demo.glade2.h:36
-msgid ""
-"Not\n"
-"Installed"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:42
-msgid "Stand_by After"
-msgstr "_Ventemodus etter"
-
-#: driver/xscreensaver-demo.glade2.h:45
-msgid "Sus_pend After"
-msgstr "_Pause etter"
-
-#: driver/xscreensaver-demo.glade2.h:46
-#, fuzzy
-msgid "Text Manipulation"
-msgstr "Bildemanipulering"
-
-#: driver/xscreensaver-demo.glade2.h:47
-#, fuzzy
-msgid "Text _file"
-msgstr "Tekstfil"
-
-#: driver/xscreensaver-demo.glade2.h:48
-msgid ""
-"Text-displaying modes will display the contents of this URL (HTML or RSS)."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:49
-msgid "Text-displaying modes will display the contents of this file."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:50
-msgid "Text-displaying modes will display the local host name, date, and time."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:51
-msgid "Text-displaying modes will display the output of this program."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:52
-msgid "Text-displaying modes will display the text typed here."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:55
-msgid ""
-"Very few (or no) screen savers appear to be available.\n"
-"\n"
-"This probably means that the \"xscreensaver-extras\" and\n"
-"\"xscreensaver-gl-extras\" packages are not installed."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:59
-msgid "When idle or locked, blacken the screen only."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:60
-msgid ""
-"When idle or locked, choose a random display mode from among the checked "
-"items in the list below."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:61
-msgid ""
-"When idle or locked, choose a random display mode from among the checked "
-"items in the list below.  Run that same mode on each monitor."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:62
-msgid "When idle or locked, run the display mode selected below."
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:65
-msgid ""
-"Whether the image-manipulating modes should operate on images captured from "
-"the system's video input (if there is one.)"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:73
-msgid "_Advanced"
-msgstr "_Avansert"
-
-#: driver/xscreensaver-demo.glade2.h:74
-msgid "_Advanced >>"
-msgstr "_Avansert >>"
-
-#: driver/xscreensaver-demo.glade2.h:75
-msgid "_Blank After"
-msgstr "_Blank ut etter"
-
-#: driver/xscreensaver-demo.glade2.h:77
-#, fuzzy
-msgid "_Blank Screen Only"
-msgstr "Kun blank ut skjerm"
-
-#: driver/xscreensaver-demo.glade2.h:78
-msgid "_Browse"
-msgstr "_Bla gjennom"
-
-#: driver/xscreensaver-demo.glade2.h:79
-msgid "_Command Line:"
-msgstr "_Kommandolinje:"
-
-#: driver/xscreensaver-demo.glade2.h:80
-msgid "_Cycle After"
-msgstr "_Skift etter"
-
-#: driver/xscreensaver-demo.glade2.h:81
-#, fuzzy
-msgid "_Disable Screen Saver"
-msgstr "Slå av skjermsparer"
-
-#: driver/xscreensaver-demo.glade2.h:82
-msgid "_Display Modes"
-msgstr "_Visningsmodi"
-
-#: driver/xscreensaver-demo.glade2.h:86
-msgid "_Host Name and Time"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:88
-#, fuzzy
-msgid "_Lock Screen After  "
-msgstr "_Lås skjermen etter"
-
-#: driver/xscreensaver-demo.glade2.h:90
-msgid "_Mode:"
-msgstr "_Modus:"
-
-#: driver/xscreensaver-demo.glade2.h:91
-msgid "_Off After"
-msgstr "_Av etter"
-
-#: driver/xscreensaver-demo.glade2.h:92
-#, fuzzy
-msgid "_Only One Screen Saver"
-msgstr "Kun én skjermsparer"
-
-#: driver/xscreensaver-demo.glade2.h:93
-msgid "_Power Management Enabled"
-msgstr "_Strømstyring aktivert"
-
-#: driver/xscreensaver-demo.glade2.h:94
-msgid "_Preview"
-msgstr "_Forhåndsvisning"
-
-#: driver/xscreensaver-demo.glade2.h:95
-#, fuzzy
-msgid "_Program"
-msgstr "Tekstprogram"
-
-#: driver/xscreensaver-demo.glade2.h:96
-msgid "_Quit"
-msgstr "_Avslutt"
-
-#: driver/xscreensaver-demo.glade2.h:97
-#, fuzzy
-msgid "_Random Screen Saver"
-msgstr "Tilfeldig skjermsparer"
-
-#: driver/xscreensaver-demo.glade2.h:99
-#, fuzzy
-msgid "_Same Random Savers"
-msgstr "Tegn etiketter"
-
-#: driver/xscreensaver-demo.glade2.h:100
-msgid "_Settings..."
-msgstr "_Innstillinger..."
-
-#: driver/xscreensaver-demo.glade2.h:101
-msgid "_Standard <<"
-msgstr "_Generelt <<"
-
-#: driver/xscreensaver-demo.glade2.h:102
-#, fuzzy
-msgid "_Text"
-msgstr "Tekst"
-
-#: driver/xscreensaver-demo.glade2.h:103
-msgid "_URL"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:104
-msgid "_Visual:"
-msgstr "_Synlig:"
-
-#: driver/xscreensaver-demo.glade2.h:105
-msgid "dialog1"
-msgstr "dialog1"
-
-#: driver/xscreensaver-demo.glade2.h:107
-msgid "no preview"
-msgstr "ingen forhåndsvisning"
-
-#: driver/xscreensaver-demo.glade2.h:108
-msgid "not installed"
-msgstr ""
-
-#: driver/xscreensaver-demo.glade2.h:109
-#, fuzzy
-msgid "nothing"
-msgstr "Myk"
-
-#: driver/xscreensaver-demo.glade2.h:110
-msgid "preview"
-msgstr "forhåndsvisning"
-
-#: hacks/config/anemone.xml.h:1
-msgid "Anemone"
-msgstr "Anemone"
-
-#: hacks/config/anemone.xml.h:2 hacks/config/fuzzyflakes.xml.h:1
-msgid "Arms"
-msgstr "Armer"
-
-#: hacks/config/anemone.xml.h:3 hacks/config/anemotaxis.xml.h:5
-#: hacks/config/ant.xml.h:6 hacks/config/antinspect.xml.h:4
-#: hacks/config/antmaze.xml.h:3 hacks/config/antspotlight.xml.h:3
-#: hacks/config/apollonian.xml.h:5 hacks/config/atlantis.xml.h:4
-#: hacks/config/attraction.xml.h:8 hacks/config/atunnel.xml.h:3
-#: hacks/config/barcode.xml.h:4 hacks/config/blaster.xml.h:3
-#: hacks/config/blinkbox.xml.h:5 hacks/config/blitspin.xml.h:4
-#: hacks/config/blocktube.xml.h:4 hacks/config/boing.xml.h:2
-#: hacks/config/bouboule.xml.h:3 hacks/config/bouncingcow.xml.h:6
-#: hacks/config/boxed.xml.h:6 hacks/config/boxfit.xml.h:8
-#: hacks/config/braid.xml.h:4 hacks/config/bubble3d.xml.h:4
-#: hacks/config/bubbles.xml.h:8 hacks/config/bumps.xml.h:3
-#: hacks/config/cage.xml.h:2 hacks/config/carousel.xml.h:5
-#: hacks/config/ccurve.xml.h:7 hacks/config/celtic.xml.h:3
-#: hacks/config/circuit.xml.h:4 hacks/config/cloudlife.xml.h:3
-#: hacks/config/compass.xml.h:3 hacks/config/coral.xml.h:7
-#: hacks/config/critical.xml.h:3 hacks/config/crystal.xml.h:6
-#: hacks/config/cube21.xml.h:6 hacks/config/cubenetic.xml.h:8
-#: hacks/config/cubestorm.xml.h:4 hacks/config/cynosure.xml.h:4
-#: hacks/config/dangerball.xml.h:3 hacks/config/decayscreen.xml.h:2
-#: hacks/config/deluxe.xml.h:4 hacks/config/demon.xml.h:4
-#: hacks/config/discrete.xml.h:2 hacks/config/distort.xml.h:4
-#: hacks/config/drift.xml.h:3 hacks/config/endgame.xml.h:3
-#: hacks/config/engine.xml.h:8 hacks/config/epicycle.xml.h:5
-#: hacks/config/eruption.xml.h:5 hacks/config/euler2d.xml.h:3
-#: hacks/config/extrusion.xml.h:3 hacks/config/fadeplot.xml.h:4
-#: hacks/config/fireworkx.xml.h:3 hacks/config/flag.xml.h:2
-#: hacks/config/flame.xml.h:6 hacks/config/flipflop.xml.h:1
-#: hacks/config/flipscreen3d.xml.h:1 hacks/config/fliptext.xml.h:3
-#: hacks/config/flow.xml.h:2 hacks/config/fluidballs.xml.h:5
-#: hacks/config/flyingtoasters.xml.h:5 hacks/config/fontglide.xml.h:4
-#: hacks/config/forest.xml.h:1 hacks/config/fuzzyflakes.xml.h:7
-#: hacks/config/galaxy.xml.h:3 hacks/config/gears.xml.h:2
-#: hacks/config/gflux.xml.h:6 hacks/config/glblur.xml.h:4
-#: hacks/config/glforestfire.xml.h:4 hacks/config/glhanoi.xml.h:3
-#: hacks/config/glknots.xml.h:3 hacks/config/glmatrix.xml.h:8
-#: hacks/config/glplanet.xml.h:2 hacks/config/glsnake.xml.h:6
-#: hacks/config/gltext.xml.h:4 hacks/config/goop.xml.h:4
-#: hacks/config/grav.xml.h:2 hacks/config/greynetic.xml.h:1
-#: hacks/config/halo.xml.h:2 hacks/config/hopalong.xml.h:9
-#: hacks/config/hyperball.xml.h:2 hacks/config/hypercube.xml.h:2
-#: hacks/config/hypertorus.xml.h:6 hacks/config/ifs.xml.h:4
-#: hacks/config/interaggregate.xml.h:1 hacks/config/interference.xml.h:7
-#: hacks/config/intermomentary.xml.h:1 hacks/config/jigglypuff.xml.h:6
-#: hacks/config/jigsaw.xml.h:3 hacks/config/juggle.xml.h:2
-#: hacks/config/juggler3d.xml.h:2 hacks/config/julia.xml.h:2
-#: hacks/config/kaleidescope.xml.h:2 hacks/config/klein.xml.h:2
-#: hacks/config/kumppa.xml.h:3 hacks/config/lament.xml.h:2
-#: hacks/config/laser.xml.h:3 hacks/config/lavalite.xml.h:10
-#: hacks/config/lightning.xml.h:1 hacks/config/lisa.xml.h:2
-#: hacks/config/lissie.xml.h:3 hacks/config/lmorph.xml.h:3
-#: hacks/config/loop.xml.h:1 hacks/config/maze.xml.h:4
-#: hacks/config/memscroller.xml.h:5 hacks/config/menger.xml.h:3
-#: hacks/config/metaballs.xml.h:4 hacks/config/mirrorblob.xml.h:11
-#: hacks/config/mismunch.xml.h:2 hacks/config/moebius.xml.h:3
-#: hacks/config/moire2.xml.h:2 hacks/config/molecule.xml.h:11
-#: hacks/config/morph3d.xml.h:3 hacks/config/mountain.xml.h:2
-#: hacks/config/munch.xml.h:3 hacks/config/nerverot.xml.h:9
-#: hacks/config/noof.xml.h:2 hacks/config/pacman.xml.h:1
-#: hacks/config/penetrate.xml.h:3 hacks/config/penrose.xml.h:3
-#: hacks/config/petri.xml.h:5 hacks/config/phosphor.xml.h:4
-#: hacks/config/piecewise.xml.h:4 hacks/config/pinion.xml.h:5
-#: hacks/config/pipes.xml.h:5 hacks/config/polyhedra.xml.h:17
-#: hacks/config/polyominoes.xml.h:2 hacks/config/polytopes.xml.h:11
-#: hacks/config/pong.xml.h:1 hacks/config/popsquares.xml.h:3
-#: hacks/config/providence.xml.h:2 hacks/config/pulsar.xml.h:11
-#: hacks/config/pyro.xml.h:4 hacks/config/qix.xml.h:7
-#: hacks/config/queens.xml.h:1 hacks/config/rd-bomb.xml.h:9
-#: hacks/config/ripples.xml.h:4 hacks/config/rocks.xml.h:4
-#: hacks/config/rotor.xml.h:3 hacks/config/rubik.xml.h:3
-#: hacks/config/sballs.xml.h:4 hacks/config/shadebobs.xml.h:3
-#: hacks/config/sierpinski.xml.h:2 hacks/config/sierpinski3d.xml.h:2
-#: hacks/config/slidescreen.xml.h:2 hacks/config/slip.xml.h:2
-#: hacks/config/speedmine.xml.h:3 hacks/config/sphere.xml.h:2
-#: hacks/config/spheremonics.xml.h:5 hacks/config/spiral.xml.h:3
-#: hacks/config/spotlight.xml.h:2 hacks/config/sproingies.xml.h:2
-#: hacks/config/squiral.xml.h:4 hacks/config/stairs.xml.h:1
-#: hacks/config/starfish.xml.h:3 hacks/config/starwars.xml.h:6
-#: hacks/config/strange.xml.h:1 hacks/config/substrate.xml.h:7
-#: hacks/config/superquadrics.xml.h:4 hacks/config/swirl.xml.h:2
-#: hacks/config/t3d.xml.h:6 hacks/config/tangram.xml.h:2
-#: hacks/config/thornbird.xml.h:2 hacks/config/triangle.xml.h:1
-#: hacks/config/truchet.xml.h:1 hacks/config/twang.xml.h:3
-#: hacks/config/vines.xml.h:1 hacks/config/worm.xml.h:3
-#: hacks/config/wormhole.xml.h:2 hacks/config/xearth.xml.h:7
-#: hacks/config/xfishtank.xml.h:3 hacks/config/xflame.xml.h:4
-#: hacks/config/xjack.xml.h:1 hacks/config/xmatrix.xml.h:5
-#: hacks/config/xmountains.xml.h:13 hacks/config/xplanet.xml.h:8
-#: hacks/config/xrayswarm.xml.h:2 hacks/config/zoom.xml.h:2
-msgid "Fast"
-msgstr "Fort"
-
-#: hacks/config/anemone.xml.h:4 hacks/config/anemotaxis.xml.h:6
-#: hacks/config/blaster.xml.h:4 hacks/config/bouboule.xml.h:4
-#: hacks/config/boxed.xml.h:7 hacks/config/coral.xml.h:8
-#: hacks/config/cubenetic.xml.h:9 hacks/config/eruption.xml.h:6
-#: hacks/config/euler2d.xml.h:4 hacks/config/fiberlamp.xml.h:2
-#: hacks/config/flame.xml.h:7 hacks/config/fluidballs.xml.h:6
-#: hacks/config/fuzzyflakes.xml.h:8 hacks/config/kaleidescope.xml.h:3
-#: hacks/config/lisa.xml.h:3 hacks/config/pedal.xml.h:4
-#: hacks/config/petri.xml.h:7 hacks/config/qix.xml.h:8
-#: hacks/config/substrate.xml.h:8 hacks/config/thornbird.xml.h:3
-#: hacks/config/whirlwindwarp.xml.h:1 hacks/config/wormhole.xml.h:3
-#: hacks/config/xfishtank.xml.h:4
-msgid "Few"
-msgstr "Få"
-
-#: hacks/config/anemone.xml.h:5 hacks/config/anemotaxis.xml.h:7
-#: hacks/config/ant.xml.h:9 hacks/config/apollonian.xml.h:7
-#: hacks/config/attraction.xml.h:18 hacks/config/blaster.xml.h:6
-#: hacks/config/bouboule.xml.h:5 hacks/config/braid.xml.h:7
-#: hacks/config/coral.xml.h:9 hacks/config/critical.xml.h:4
-#: hacks/config/crystal.xml.h:8 hacks/config/cubenetic.xml.h:13
-#: hacks/config/cynosure.xml.h:6 hacks/config/deco.xml.h:5
-#: hacks/config/deluxe.xml.h:6 hacks/config/demon.xml.h:6
-#: hacks/config/discrete.xml.h:4 hacks/config/drift.xml.h:9
-#: hacks/config/epicycle.xml.h:8 hacks/config/eruption.xml.h:12
-#: hacks/config/euler2d.xml.h:8 hacks/config/fadeplot.xml.h:6
-#: hacks/config/fiberlamp.xml.h:6 hacks/config/flag.xml.h:5
-#: hacks/config/flame.xml.h:11 hacks/config/flow.xml.h:7
-#: hacks/config/fluidballs.xml.h:13 hacks/config/forest.xml.h:3
-#: hacks/config/fuzzyflakes.xml.h:12 hacks/config/galaxy.xml.h:6
-#: hacks/config/grav.xml.h:4 hacks/config/halo.xml.h:4
-#: hacks/config/hopalong.xml.h:15 hacks/config/ifs.xml.h:8
-#: hacks/config/imsmap.xml.h:9 hacks/config/interference.xml.h:14
-#: hacks/config/julia.xml.h:6 hacks/config/kaleidescope.xml.h:5
-#: hacks/config/laser.xml.h:6 hacks/config/lightning.xml.h:3
-#: hacks/config/lisa.xml.h:5 hacks/config/lissie.xml.h:6
-#: hacks/config/loop.xml.h:4 hacks/config/metaballs.xml.h:6
-#: hacks/config/mismunch.xml.h:4 hacks/config/moire.xml.h:5
-#: hacks/config/moire2.xml.h:3 hacks/config/mountain.xml.h:4
-#: hacks/config/nerverot.xml.h:15 hacks/config/pedal.xml.h:6
-#: hacks/config/penrose.xml.h:4 hacks/config/petri.xml.h:11
-#: hacks/config/polyominoes.xml.h:5 hacks/config/qix.xml.h:14
-#: hacks/config/rd-bomb.xml.h:12 hacks/config/ripples.xml.h:8
-#: hacks/config/rocks.xml.h:5 hacks/config/rotor.xml.h:6
-#: hacks/config/shadebobs.xml.h:5 hacks/config/sierpinski.xml.h:4
-#: hacks/config/slip.xml.h:4 hacks/config/sphere.xml.h:3
-#: hacks/config/spiral.xml.h:6 hacks/config/squiral.xml.h:9
-#: hacks/config/starfish.xml.h:5 hacks/config/strange.xml.h:2
-#: hacks/config/swirl.xml.h:3 hacks/config/thornbird.xml.h:4
-#: hacks/config/triangle.xml.h:3 hacks/config/vines.xml.h:2
-#: hacks/config/whirlwindwarp.xml.h:4 hacks/config/worm.xml.h:4
-#: hacks/config/xearth.xml.h:12 hacks/config/xfishtank.xml.h:8
-msgid "Many"
-msgstr "Mange"
-
-#: hacks/config/anemone.xml.h:6 hacks/config/ant.xml.h:11
-#: hacks/config/apollonian.xml.h:8 hacks/config/attraction.xml.h:19
-#: hacks/config/bouboule.xml.h:6 hacks/config/braid.xml.h:9
-#: hacks/config/critical.xml.h:5 hacks/config/crystal.xml.h:10
-#: hacks/config/cynosure.xml.h:7 hacks/config/deco.xml.h:8
-#: hacks/config/deluxe.xml.h:7 hacks/config/demon.xml.h:7
-#: hacks/config/discrete.xml.h:6 hacks/config/drift.xml.h:10
-#: hacks/config/epicycle.xml.h:9 hacks/config/eruption.xml.h:14
-#: hacks/config/euler2d.xml.h:9 hacks/config/fadeplot.xml.h:7
-#: hacks/config/flag.xml.h:6 hacks/config/flame.xml.h:12
-#: hacks/config/flow.xml.h:8 hacks/config/forest.xml.h:4
-#: hacks/config/galaxy.xml.h:7 hacks/config/grav.xml.h:5
-#: hacks/config/halo.xml.h:6 hacks/config/hopalong.xml.h:17
-#: hacks/config/imsmap.xml.h:10 hacks/config/interference.xml.h:15
-#: hacks/config/julia.xml.h:7 hacks/config/laser.xml.h:8
-#: hacks/config/lightning.xml.h:4 hacks/config/lisa.xml.h:6
-#: hacks/config/lissie.xml.h:7 hacks/config/loop.xml.h:5
-#: hacks/config/metaballs.xml.h:10 hacks/config/moire.xml.h:7
-#: hacks/config/moire2.xml.h:5 hacks/config/mountain.xml.h:6
-#: hacks/config/penrose.xml.h:5 hacks/config/polyominoes.xml.h:6
-#: hacks/config/popsquares.xml.h:4 hacks/config/rd-bomb.xml.h:13
-#: hacks/config/rocks.xml.h:6 hacks/config/rotor.xml.h:7
-#: hacks/config/shadebobs.xml.h:6 hacks/config/sierpinski.xml.h:5
-#: hacks/config/slip.xml.h:5 hacks/config/sphere.xml.h:4
-#: hacks/config/spiral.xml.h:8 hacks/config/squiral.xml.h:10
-#: hacks/config/starfish.xml.h:6 hacks/config/strange.xml.h:3
-#: hacks/config/swirl.xml.h:5 hacks/config/thornbird.xml.h:5
-#: hacks/config/triangle.xml.h:4 hacks/config/vines.xml.h:3
-#: hacks/config/worm.xml.h:5 hacks/config/xearth.xml.h:17
-#: hacks/config/xfishtank.xml.h:9
-msgid "Number of Colors"
-msgstr "Antall farger"
-
-#: hacks/config/anemone.xml.h:7 hacks/config/fireflies.xml.h:32
-#: hacks/config/pyro.xml.h:8
-msgid "Often"
-msgstr "Ofte"
-
-#: hacks/config/anemone.xml.h:8
-msgid "Rarely"
-msgstr ""
-
-#: hacks/config/anemone.xml.h:9 hacks/config/anemotaxis.xml.h:10
-#: hacks/config/ant.xml.h:15 hacks/config/antinspect.xml.h:6
-#: hacks/config/antmaze.xml.h:5 hacks/config/antspotlight.xml.h:5
-#: hacks/config/apollonian.xml.h:11 hacks/config/atlantis.xml.h:13
-#: hacks/config/attraction.xml.h:26 hacks/config/atunnel.xml.h:6
-#: hacks/config/barcode.xml.h:6 hacks/config/blaster.xml.h:8
-#: hacks/config/blinkbox.xml.h:8 hacks/config/blitspin.xml.h:7
-#: hacks/config/blocktube.xml.h:9 hacks/config/boing.xml.h:10
-#: hacks/config/bouboule.xml.h:8 hacks/config/bouncingcow.xml.h:10
-#: hacks/config/boxed.xml.h:15 hacks/config/boxfit.xml.h:12
-#: hacks/config/braid.xml.h:11 hacks/config/bubble3d.xml.h:6
-#: hacks/config/bubbles.xml.h:10 hacks/config/bumps.xml.h:4
-#: hacks/config/cage.xml.h:4 hacks/config/carousel.xml.h:14
-#: hacks/config/ccurve.xml.h:11 hacks/config/celtic.xml.h:8
-#: hacks/config/circuit.xml.h:10 hacks/config/cloudlife.xml.h:11
-#: hacks/config/compass.xml.h:4 hacks/config/coral.xml.h:12
-#: hacks/config/critical.xml.h:6 hacks/config/crystal.xml.h:11
-#: hacks/config/cube21.xml.h:16 hacks/config/cubenetic.xml.h:22
-#: hacks/config/cubestorm.xml.h:8 hacks/config/cynosure.xml.h:9
-#: hacks/config/dangerball.xml.h:5 hacks/config/decayscreen.xml.h:17
-#: hacks/config/deluxe.xml.h:8 hacks/config/demon.xml.h:8
-#: hacks/config/discrete.xml.h:7 hacks/config/distort.xml.h:11
-#: hacks/config/drift.xml.h:12 hacks/config/endgame.xml.h:5
-#: hacks/config/engine.xml.h:15 hacks/config/epicycle.xml.h:10
-#: hacks/config/eruption.xml.h:19 hacks/config/euler2d.xml.h:14
-#: hacks/config/extrusion.xml.h:11 hacks/config/fadeplot.xml.h:8
-#: hacks/config/fireworkx.xml.h:9 hacks/config/flag.xml.h:7
-#: hacks/config/flame.xml.h:14 hacks/config/flipflop.xml.h:5
-#: hacks/config/flipscreen3d.xml.h:6 hacks/config/fliptext.xml.h:13
-#: hacks/config/flow.xml.h:10 hacks/config/fluidballs.xml.h:18
-#: hacks/config/flyingtoasters.xml.h:11 hacks/config/fontglide.xml.h:13
-#: hacks/config/forest.xml.h:5 hacks/config/fuzzyflakes.xml.h:15
-#: hacks/config/galaxy.xml.h:11 hacks/config/gears.xml.h:7
-#: hacks/config/gflux.xml.h:12 hacks/config/glblur.xml.h:14
-#: hacks/config/glforestfire.xml.h:14 hacks/config/glhanoi.xml.h:8
-#: hacks/config/glknots.xml.h:17 hacks/config/glmatrix.xml.h:18
-#: hacks/config/glplanet.xml.h:8 hacks/config/glsnake.xml.h:12
-#: hacks/config/gltext.xml.h:15 hacks/config/goop.xml.h:10
-#: hacks/config/grav.xml.h:8 hacks/config/greynetic.xml.h:3
-#: hacks/config/halo.xml.h:10 hacks/config/hopalong.xml.h:21
-#: hacks/config/hyperball.xml.h:8 hacks/config/hypercube.xml.h:7
-#: hacks/config/hypertorus.xml.h:18 hacks/config/ifs.xml.h:13
-#: hacks/config/interaggregate.xml.h:4 hacks/config/interference.xml.h:17
-#: hacks/config/intermomentary.xml.h:4 hacks/config/jigglypuff.xml.h:16
-#: hacks/config/jigsaw.xml.h:5 hacks/config/juggle.xml.h:8
-#: hacks/config/juggler3d.xml.h:12 hacks/config/julia.xml.h:8
-#: hacks/config/kaleidescope.xml.h:7 hacks/config/klein.xml.h:7
-#: hacks/config/kumppa.xml.h:8 hacks/config/lament.xml.h:6
-#: hacks/config/laser.xml.h:10 hacks/config/lavalite.xml.h:27
-#: hacks/config/lightning.xml.h:5 hacks/config/lisa.xml.h:8
-#: hacks/config/lissie.xml.h:9 hacks/config/lmorph.xml.h:11
-#: hacks/config/loop.xml.h:7 hacks/config/maze.xml.h:14
-#: hacks/config/memscroller.xml.h:7 hacks/config/menger.xml.h:16
-#: hacks/config/metaballs.xml.h:13 hacks/config/mirrorblob.xml.h:18
-#: hacks/config/mismunch.xml.h:10 hacks/config/moebius.xml.h:7
-#: hacks/config/moire2.xml.h:6 hacks/config/molecule.xml.h:23
-#: hacks/config/morph3d.xml.h:6 hacks/config/mountain.xml.h:7
-#: hacks/config/munch.xml.h:7 hacks/config/nerverot.xml.h:20
-#: hacks/config/noof.xml.h:5 hacks/config/pacman.xml.h:5
-#: hacks/config/penetrate.xml.h:6 hacks/config/penrose.xml.h:8
-#: hacks/config/petri.xml.h:23 hacks/config/phosphor.xml.h:7
-#: hacks/config/piecewise.xml.h:9 hacks/config/pinion.xml.h:13
-#: hacks/config/pipes.xml.h:15 hacks/config/polyhedra.xml.h:111
-#: hacks/config/polyominoes.xml.h:10 hacks/config/polytopes.xml.h:20
-#: hacks/config/pong.xml.h:4 hacks/config/popsquares.xml.h:5
-#: hacks/config/providence.xml.h:5 hacks/config/pulsar.xml.h:15
-#: hacks/config/pyro.xml.h:13 hacks/config/qix.xml.h:19
-#: hacks/config/queens.xml.h:4 hacks/config/rd-bomb.xml.h:17
-#: hacks/config/ripples.xml.h:12 hacks/config/rocks.xml.h:9
-#: hacks/config/rotor.xml.h:11 hacks/config/rubik.xml.h:9
-#: hacks/config/sballs.xml.h:13 hacks/config/shadebobs.xml.h:9
-#: hacks/config/sierpinski.xml.h:7 hacks/config/sierpinski3d.xml.h:8
-#: hacks/config/slidescreen.xml.h:6 hacks/config/slip.xml.h:7
-#: hacks/config/speedmine.xml.h:13 hacks/config/sphere.xml.h:5
-#: hacks/config/spheremonics.xml.h:19 hacks/config/spiral.xml.h:9
-#: hacks/config/spotlight.xml.h:4 hacks/config/sproingies.xml.h:6
-#: hacks/config/squiral.xml.h:14 hacks/config/stairs.xml.h:3
-#: hacks/config/starfish.xml.h:8 hacks/config/starwars.xml.h:12
-#: hacks/config/strange.xml.h:4 hacks/config/substrate.xml.h:15
-#: hacks/config/superquadrics.xml.h:8 hacks/config/swirl.xml.h:6
-#: hacks/config/t3d.xml.h:11 hacks/config/tangram.xml.h:4
-#: hacks/config/thornbird.xml.h:7 hacks/config/triangle.xml.h:5
-#: hacks/config/truchet.xml.h:2 hacks/config/twang.xml.h:9
-#: hacks/config/vines.xml.h:4 hacks/config/worm.xml.h:7
-#: hacks/config/wormhole.xml.h:5 hacks/config/xearth.xml.h:22
-#: hacks/config/xfishtank.xml.h:10 hacks/config/xflame.xml.h:5
-#: hacks/config/xjack.xml.h:2 hacks/config/xmatrix.xml.h:15
-#: hacks/config/xplanet.xml.h:59 hacks/config/xrayswarm.xml.h:3
-#: hacks/config/zoom.xml.h:6
-msgid "Slow"
-msgstr "Sakte"
-
-#: hacks/config/anemone.xml.h:10 hacks/config/anemotaxis.xml.h:12
-#: hacks/config/ant.xml.h:17 hacks/config/antinspect.xml.h:7
-#: hacks/config/antmaze.xml.h:6 hacks/config/antspotlight.xml.h:6
-#: hacks/config/apollonian.xml.h:12 hacks/config/attraction.xml.h:28
-#: hacks/config/atunnel.xml.h:7 hacks/config/barcode.xml.h:7
-#: hacks/config/blaster.xml.h:9 hacks/config/blinkbox.xml.h:9
-#: hacks/config/blocktube.xml.h:11 hacks/config/boing.xml.h:12
-#: hacks/config/bouboule.xml.h:9 hacks/config/boxfit.xml.h:14
-#: hacks/config/braid.xml.h:12 hacks/config/bubble3d.xml.h:7
-#: hacks/config/bubbles.xml.h:11 hacks/config/bumps.xml.h:5
-#: hacks/config/cage.xml.h:6 hacks/config/celtic.xml.h:9
-#: hacks/config/circuit.xml.h:11 hacks/config/cloudlife.xml.h:13
-#: hacks/config/compass.xml.h:5 hacks/config/coral.xml.h:14
-#: hacks/config/critical.xml.h:7 hacks/config/crystal.xml.h:12
-#: hacks/config/cubenetic.xml.h:24 hacks/config/cynosure.xml.h:10
-#: hacks/config/dangerball.xml.h:6 hacks/config/decayscreen.xml.h:18
-#: hacks/config/deluxe.xml.h:9 hacks/config/demon.xml.h:10
-#: hacks/config/discrete.xml.h:9 hacks/config/distort.xml.h:13
-#: hacks/config/drift.xml.h:13 hacks/config/endgame.xml.h:6
-#: hacks/config/engine.xml.h:16 hacks/config/epicycle.xml.h:11
-#: hacks/config/eruption.xml.h:20 hacks/config/euler2d.xml.h:15
-#: hacks/config/extrusion.xml.h:13 hacks/config/fadeplot.xml.h:10
-#: hacks/config/fireworkx.xml.h:11 hacks/config/flag.xml.h:9
-#: hacks/config/flame.xml.h:15 hacks/config/flipflop.xml.h:7
-#: hacks/config/flipscreen3d.xml.h:7 hacks/config/fliptext.xml.h:14
-#: hacks/config/flow.xml.h:12 hacks/config/fluidballs.xml.h:20
-#: hacks/config/forest.xml.h:6 hacks/config/fuzzyflakes.xml.h:17
-#: hacks/config/galaxy.xml.h:12 hacks/config/glblur.xml.h:16
-#: hacks/config/glforestfire.xml.h:15 hacks/config/glplanet.xml.h:10
-#: hacks/config/gltext.xml.h:17 hacks/config/goop.xml.h:11
-#: hacks/config/grav.xml.h:9 hacks/config/greynetic.xml.h:4
-#: hacks/config/halo.xml.h:11 hacks/config/hopalong.xml.h:23
-#: hacks/config/hyperball.xml.h:9 hacks/config/hypercube.xml.h:8
-#: hacks/config/ifs.xml.h:14 hacks/config/interaggregate.xml.h:5
-#: hacks/config/intermomentary.xml.h:5 hacks/config/jigsaw.xml.h:7
-#: hacks/config/juggle.xml.h:9 hacks/config/julia.xml.h:10
-#: hacks/config/kaleidescope.xml.h:8 hacks/config/klein.xml.h:8
-#: hacks/config/kumppa.xml.h:9 hacks/config/lament.xml.h:7
-#: hacks/config/laser.xml.h:11 hacks/config/lavalite.xml.h:30
-#: hacks/config/lightning.xml.h:6 hacks/config/lisa.xml.h:9
-#: hacks/config/lissie.xml.h:11 hacks/config/lmorph.xml.h:12
-#: hacks/config/loop.xml.h:9 hacks/config/memscroller.xml.h:8
-#: hacks/config/menger.xml.h:18 hacks/config/metaballs.xml.h:15
-#: hacks/config/mirrorblob.xml.h:20 hacks/config/mismunch.xml.h:12
-#: hacks/config/moebius.xml.h:10 hacks/config/moire2.xml.h:7
-#: hacks/config/molecule.xml.h:25 hacks/config/morph3d.xml.h:7
-#: hacks/config/mountain.xml.h:8 hacks/config/munch.xml.h:9
-#: hacks/config/nerverot.xml.h:22 hacks/config/noof.xml.h:6
-#: hacks/config/pacman.xml.h:6 hacks/config/penrose.xml.h:9
-#: hacks/config/petri.xml.h:25 hacks/config/phosphor.xml.h:8
-#: hacks/config/piecewise.xml.h:11 hacks/config/pipes.xml.h:16
-#: hacks/config/polyominoes.xml.h:11 hacks/config/pong.xml.h:5
-#: hacks/config/popsquares.xml.h:6 hacks/config/providence.xml.h:7
-#: hacks/config/pulsar.xml.h:17 hacks/config/qix.xml.h:22
-#: hacks/config/queens.xml.h:6 hacks/config/rotor.xml.h:12
-#: hacks/config/rubik.xml.h:11 hacks/config/sballs.xml.h:14
-#: hacks/config/shadebobs.xml.h:10 hacks/config/sierpinski.xml.h:9
-#: hacks/config/sierpinski3d.xml.h:10 hacks/config/slidescreen.xml.h:7
-#: hacks/config/slip.xml.h:9 hacks/config/speedmine.xml.h:15
-#: hacks/config/sphere.xml.h:6 hacks/config/spheremonics.xml.h:22
-#: hacks/config/spiral.xml.h:10 hacks/config/spotlight.xml.h:5
-#: hacks/config/sproingies.xml.h:8 hacks/config/squiral.xml.h:16
-#: hacks/config/stairs.xml.h:5 hacks/config/starfish.xml.h:9
-#: hacks/config/strange.xml.h:5 hacks/config/substrate.xml.h:16
-#: hacks/config/superquadrics.xml.h:10 hacks/config/swirl.xml.h:7
-#: hacks/config/t3d.xml.h:13 hacks/config/tangram.xml.h:5
-#: hacks/config/thornbird.xml.h:8 hacks/config/triangle.xml.h:6
-#: hacks/config/truchet.xml.h:3 hacks/config/twang.xml.h:10
-#: hacks/config/vines.xml.h:5 hacks/config/whirlygig.xml.h:13
-#: hacks/config/worm.xml.h:8 hacks/config/xearth.xml.h:25
-#: hacks/config/xflame.xml.h:6 hacks/config/xjack.xml.h:3
-#: hacks/config/xmatrix.xml.h:18 hacks/config/xplanet.xml.h:60
-#: hacks/config/xrayswarm.xml.h:4 hacks/config/zoom.xml.h:7
-msgid "Speed"
-msgstr "Hastighet"
-
-#: hacks/config/anemone.xml.h:11
-msgid "Tentacles"
-msgstr "Tentakler"
-
-#: hacks/config/anemone.xml.h:12 hacks/config/cubestorm.xml.h:11
-#: hacks/config/deluxe.xml.h:10 hacks/config/fuzzyflakes.xml.h:18
-#: hacks/config/glknots.xml.h:19 hacks/config/lmorph.xml.h:13
-#: hacks/config/pong.xml.h:7 hacks/config/starfish.xml.h:11
-#: hacks/config/thornbird.xml.h:9
-msgid "Thick"
-msgstr "Tykk"
-
-#: hacks/config/anemone.xml.h:13 hacks/config/fuzzyflakes.xml.h:19
-#: hacks/config/glknots.xml.h:20 hacks/config/moire2.xml.h:8
-#: hacks/config/thornbird.xml.h:10
-msgid "Thickness"
-msgstr "Tykkhet"
-
-#: hacks/config/anemone.xml.h:14 hacks/config/cubestorm.xml.h:12
-#: hacks/config/deluxe.xml.h:11 hacks/config/fuzzyflakes.xml.h:20
-#: hacks/config/glknots.xml.h:21 hacks/config/lmorph.xml.h:14
-#: hacks/config/pong.xml.h:8 hacks/config/starfish.xml.h:12
-#: hacks/config/thornbird.xml.h:11
-msgid "Thin"
-msgstr "Tynn"
-
-#: hacks/config/anemone.xml.h:15
-msgid "Turn speed"
-msgstr ""
-
-#: hacks/config/anemone.xml.h:16 hacks/config/ant.xml.h:22
-#: hacks/config/apollonian.xml.h:13 hacks/config/attraction.xml.h:32
-#: hacks/config/bouboule.xml.h:11 hacks/config/braid.xml.h:13
-#: hacks/config/critical.xml.h:8 hacks/config/crystal.xml.h:13
-#: hacks/config/cynosure.xml.h:11 hacks/config/deco.xml.h:10
-#: hacks/config/deluxe.xml.h:14 hacks/config/demon.xml.h:13
-#: hacks/config/discrete.xml.h:11 hacks/config/drift.xml.h:14
-#: hacks/config/epicycle.xml.h:13 hacks/config/euler2d.xml.h:17
-#: hacks/config/fadeplot.xml.h:12 hacks/config/flag.xml.h:13
-#: hacks/config/flame.xml.h:16 hacks/config/flow.xml.h:15
-#: hacks/config/forest.xml.h:8 hacks/config/galaxy.xml.h:14
-#: hacks/config/grav.xml.h:11 hacks/config/halo.xml.h:13
-#: hacks/config/hopalong.xml.h:25 hacks/config/imsmap.xml.h:15
-#: hacks/config/interference.xml.h:19 hacks/config/julia.xml.h:12
-#: hacks/config/laser.xml.h:12 hacks/config/lightning.xml.h:8
-#: hacks/config/lisa.xml.h:12 hacks/config/lissie.xml.h:13
-#: hacks/config/loop.xml.h:12 hacks/config/metaballs.xml.h:16
-#: hacks/config/moire.xml.h:11 hacks/config/moire2.xml.h:9
-#: hacks/config/mountain.xml.h:9 hacks/config/nerverot.xml.h:23
-#: hacks/config/penrose.xml.h:10 hacks/config/polyominoes.xml.h:12
-#: hacks/config/rd-bomb.xml.h:20 hacks/config/rocks.xml.h:12
-#: hacks/config/rotor.xml.h:13 hacks/config/shadebobs.xml.h:12
-#: hacks/config/sierpinski.xml.h:12 hacks/config/slip.xml.h:12
-#: hacks/config/sphere.xml.h:8 hacks/config/spiral.xml.h:12
-#: hacks/config/squiral.xml.h:18 hacks/config/starfish.xml.h:14
-#: hacks/config/strange.xml.h:8 hacks/config/swirl.xml.h:9
-#: hacks/config/thornbird.xml.h:13 hacks/config/triangle.xml.h:8
-#: hacks/config/vines.xml.h:7 hacks/config/worm.xml.h:9
-#: hacks/config/xearth.xml.h:28 hacks/config/xfishtank.xml.h:11
-msgid "Two"
-msgstr "To"
-
-#: hacks/config/anemone.xml.h:17
-msgid "Wiggling tentacles. By Gabriel Finch."
-msgstr ""
-
-#: hacks/config/anemone.xml.h:18
-msgid "Withdraw freqency"
-msgstr ""
-
-#: hacks/config/anemotaxis.xml.h:1
-#, fuzzy
-msgid "Anemotaxis"
-msgstr "Xfjell"
-
-#: hacks/config/anemotaxis.xml.h:2
-msgid ""
-"Anemotaxis demonstrates a search algorithm designed for locating a source of "
-"odor in turbulent atmosphere. The searcher is able to sense the odor and "
-"determine local instantaneous wind direction. The goal is to find the source "
-"in the shortest mean time. Written by Eugene Balkovsky."
-msgstr ""
-
-#: hacks/config/anemotaxis.xml.h:3
-#, fuzzy
-msgid "Distance"
-msgstr "Diskre"
-
-#: hacks/config/anemotaxis.xml.h:4 hacks/config/hyperball.xml.h:1
-#: hacks/config/hypercube.xml.h:1
-msgid "Far"
-msgstr "Fjern"
-
-#: hacks/config/anemotaxis.xml.h:8 hacks/config/hyperball.xml.h:7
-#: hacks/config/hypercube.xml.h:6
-msgid "Near"
-msgstr "Nær"
-
-#: hacks/config/anemotaxis.xml.h:9
-msgid "Searchers"
-msgstr ""
-
-#: hacks/config/anemotaxis.xml.h:11
-#, fuzzy
-msgid "Sources"
-msgstr "Sprett"
-
-#: hacks/config/ant.xml.h:1
-msgid ""
-"A cellular automaton that is really a two-dimensional Turing machine: as the "
-"heads (``ants'') walk along the screen, they change pixel values in their "
-"path. Then, as they pass over changed pixels, their behavior is influenced. "
-"Written by David Bagley."
-msgstr ""
-
-#: hacks/config/ant.xml.h:2
-msgid "Ant"
-msgstr "Maur"
-
-#: hacks/config/ant.xml.h:3
-msgid "Ant Size"
-msgstr "Størrelse på maur"
-
-#: hacks/config/ant.xml.h:4
-msgid "Ants Count"
-msgstr "Antall maur"
-
-#: hacks/config/ant.xml.h:5
-#, fuzzy
-msgid "Draw Eyes"
-msgstr "Tegn etiketter"
-
-#: hacks/config/ant.xml.h:7
-msgid "Four Sided Cells"
-msgstr "Firesidede celler"
-
-#: hacks/config/ant.xml.h:8 hacks/config/attraction.xml.h:13
-#: hacks/config/cloudlife.xml.h:7 hacks/config/cube21.xml.h:8
-#: hacks/config/cubenetic.xml.h:11 hacks/config/demon.xml.h:5
-#: hacks/config/discrete.xml.h:3 hacks/config/distort.xml.h:5
-#: hacks/config/fadeplot.xml.h:5 hacks/config/flag.xml.h:4
-#: hacks/config/flow.xml.h:4 hacks/config/fluidballs.xml.h:12
-#: hacks/config/fuzzyflakes.xml.h:10 hacks/config/gleidescope.xml.h:7
-#: hacks/config/halftone.xml.h:8 hacks/config/hopalong.xml.h:13
-#: hacks/config/interference.xml.h:11 hacks/config/julia.xml.h:5
-#: hacks/config/lissie.xml.h:4 hacks/config/loop.xml.h:2
-#: hacks/config/moire.xml.h:4 hacks/config/piecewise.xml.h:5
-#: hacks/config/rd-bomb.xml.h:11 hacks/config/rorschach.xml.h:5
-#: hacks/config/rubik.xml.h:4 hacks/config/sierpinski.xml.h:3
-#: hacks/config/slip.xml.h:3
-msgid "Large"
-msgstr "Stor"
-
-#: hacks/config/ant.xml.h:10
-msgid "Nine Sided Cells"
-msgstr "Nisidede celler"
-
-#: hacks/config/ant.xml.h:12
-msgid "Random Cell Shape"
-msgstr "Tilfeldig form på celler"
-
-#: hacks/config/ant.xml.h:13 hacks/config/speedmine.xml.h:11
-msgid "Sharp Turns"
-msgstr "Skarpe svinger"
-
-#: hacks/config/ant.xml.h:14
-msgid "Six Sided Cells"
-msgstr "Sekssidede celler"
-
-#: hacks/config/ant.xml.h:16 hacks/config/attraction.xml.h:27
-#: hacks/config/cloudlife.xml.h:12 hacks/config/cube21.xml.h:17
-#: hacks/config/cubenetic.xml.h:23 hacks/config/demon.xml.h:9
-#: hacks/config/discrete.xml.h:8 hacks/config/distort.xml.h:12
-#: hacks/config/fadeplot.xml.h:9 hacks/config/flag.xml.h:8
-#: hacks/config/flow.xml.h:11 hacks/config/fluidballs.xml.h:19
-#: hacks/config/fuzzyflakes.xml.h:16 hacks/config/gleidescope.xml.h:12
-#: hacks/config/halftone.xml.h:14 hacks/config/hopalong.xml.h:22
-#: hacks/config/interference.xml.h:18 hacks/config/julia.xml.h:9
-#: hacks/config/lissie.xml.h:10 hacks/config/loop.xml.h:8
-#: hacks/config/metaballs.xml.h:14 hacks/config/moire.xml.h:9
-#: hacks/config/piecewise.xml.h:10 hacks/config/rd-bomb.xml.h:18
-#: hacks/config/rorschach.xml.h:8 hacks/config/rubik.xml.h:10
-#: hacks/config/sierpinski.xml.h:8 hacks/config/slip.xml.h:8
-msgid "Small"
-msgstr "Liten"
-
-#: hacks/config/ant.xml.h:18
-msgid "Three Sided Cells"
-msgstr "Tresidede celler"
-
-#: hacks/config/ant.xml.h:19 hacks/config/demon.xml.h:12
-#: hacks/config/discrete.xml.h:10 hacks/config/fadeplot.xml.h:11
-#: hacks/config/flag.xml.h:12 hacks/config/flow.xml.h:14
-#: hacks/config/lissie.xml.h:12 hacks/config/loop.xml.h:11
-#: hacks/config/rubik.xml.h:12 hacks/config/sierpinski.xml.h:11
-#: hacks/config/slip.xml.h:11
-msgid "Timeout"
-msgstr "Tidsavbrudd"
-
-#: hacks/config/ant.xml.h:20
-msgid "Truchet Lines"
-msgstr "Truchet-linjer"
-
-#: hacks/config/ant.xml.h:21
-msgid "Twelve Sided Cells"
-msgstr "Tolvsidede celler"
-
-#: hacks/config/antinspect.xml.h:1
-msgid "AntInspect"
-msgstr ""
-
-#: hacks/config/antinspect.xml.h:2
-#, fuzzy
-msgid "Draw Shadows"
-msgstr "Tegn flekker"
-
-#: hacks/config/antinspect.xml.h:3
-msgid ""
-"Draws a trio of ants moving their spheres around a circle. Written by Blair "
-"Tennessy."
-msgstr ""
-
-#: hacks/config/antinspect.xml.h:5 hacks/config/antmaze.xml.h:4
-#: hacks/config/antspotlight.xml.h:4 hacks/config/atlantis.xml.h:11
-#: hacks/config/atunnel.xml.h:5 hacks/config/blocktube.xml.h:8
-#: hacks/config/boing.xml.h:8 hacks/config/boxed.xml.h:14
-#: hacks/config/bubble3d.xml.h:5 hacks/config/cage.xml.h:3
-#: hacks/config/carousel.xml.h:12 hacks/config/circuit.xml.h:9
-#: hacks/config/cube21.xml.h:13 hacks/config/cubenetic.xml.h:21
-#: hacks/config/cubestorm.xml.h:7 hacks/config/dangerball.xml.h:4
-#: hacks/config/endgame.xml.h:4 hacks/config/engine.xml.h:14
-#: hacks/config/extrusion.xml.h:10 hacks/config/flipflop.xml.h:4
-#: hacks/config/flipscreen3d.xml.h:5 hacks/config/fliptext.xml.h:12
-#: hacks/config/fluidballs.xml.h:17 hacks/config/flurry.xml.h:9
-#: hacks/config/flyingtoasters.xml.h:10 hacks/config/gears.xml.h:6
-#: hacks/config/gflux.xml.h:11 hacks/config/glblur.xml.h:13
-#: hacks/config/gleidescope.xml.h:10 hacks/config/glforestfire.xml.h:13
-#: hacks/config/glhanoi.xml.h:7 hacks/config/glknots.xml.h:16
-#: hacks/config/glmatrix.xml.h:17 hacks/config/glplanet.xml.h:7
-#: hacks/config/glslideshow.xml.h:19 hacks/config/glsnake.xml.h:10
-#: hacks/config/gltext.xml.h:14 hacks/config/hypertorus.xml.h:17
-#: hacks/config/jigglypuff.xml.h:15 hacks/config/juggler3d.xml.h:11
-#: hacks/config/klein.xml.h:6 hacks/config/lament.xml.h:5
-#: hacks/config/lavalite.xml.h:26 hacks/config/menger.xml.h:15
-#: hacks/config/mirrorblob.xml.h:17 hacks/config/moebius.xml.h:6
-#: hacks/config/molecule.xml.h:22 hacks/config/morph3d.xml.h:5
-#: hacks/config/noof.xml.h:4 hacks/config/pinion.xml.h:12
-#: hacks/config/pipes.xml.h:14 hacks/config/polyhedra.xml.h:110
-#: hacks/config/polytopes.xml.h:18 hacks/config/providence.xml.h:4
-#: hacks/config/pulsar.xml.h:14 hacks/config/queens.xml.h:3
-#: hacks/config/rubik.xml.h:6 hacks/config/sballs.xml.h:12
-#: hacks/config/sierpinski3d.xml.h:6 hacks/config/spheremonics.xml.h:18
-#: hacks/config/sproingies.xml.h:4 hacks/config/stairs.xml.h:2
-#: hacks/config/starwars.xml.h:11 hacks/config/superquadrics.xml.h:7
-#: hacks/config/timetunnel.xml.h:9
-msgid "Show Frames-per-Second"
-msgstr ""
-
-#: hacks/config/antmaze.xml.h:1
-#, fuzzy
-msgid "AntMaze"
-msgstr "Labyrint"
-
-#: hacks/config/antmaze.xml.h:2
-msgid ""
-"Antmaze draws a few views of a few ants walking around in a simple maze. "
-"Written by Blair Tennessy."
-msgstr ""
-
-#: hacks/config/antspotlight.xml.h:1
-#, fuzzy
-msgid "AntSpotlight"
-msgstr "Følgelys"
-
-#: hacks/config/antspotlight.xml.h:2
-msgid ""
-"Antspotlight draws an ant (with a headlight) who walks on top of an image of "
-"your desktop or other image. Written by Blair Tennessy."
-msgstr ""
-
-#: hacks/config/apollonian.xml.h:1
-msgid "Apollonian"
-msgstr ""
-
-#: hacks/config/apollonian.xml.h:2
-msgid "Deep"
-msgstr "Dyp"
-
-#: hacks/config/apollonian.xml.h:3
-msgid "Depth"
-msgstr "Dybde"
-
-#: hacks/config/apollonian.xml.h:4
-msgid "Draw Labels"
-msgstr "Tegn etiketter"
-
-#: hacks/config/apollonian.xml.h:6
-msgid "Include Alternate Geometries"
-msgstr ""
-
-#: hacks/config/apollonian.xml.h:9
-msgid ""
-"Packs a large circle with smaller circles, demonstrating the Descartes "
-"Circle Theorem. Written by Allan R. Wilks and David Bagley."
-msgstr ""
-
-#: hacks/config/apollonian.xml.h:10
-msgid "Shallow"
-msgstr "Grunn"
-
-#: hacks/config/apple2.xml.h:1
-msgid "Apple ]["
-msgstr ""
-
-#: hacks/config/apple2.xml.h:2
-msgid "Basic Programming Mode"
-msgstr ""
-
-#: hacks/config/apple2.xml.h:3 hacks/config/halo.xml.h:8
-#: hacks/config/imsmap.xml.h:11
-msgid "Random Mode"
-msgstr "Tilfeldig modus"
-
-#: hacks/config/apple2.xml.h:4
-msgid ""
-"Simulates an original Apple ][ Plus computer in all its 1979 glory. It also "
-"reproduces the appearance of display on a color television set of the "
-"period. In \"Text Mode\", it displays the output of a program, or the "
-"contents of a file or URL, as configured on the \"Advanced\" tab of the main "
-"Screensaver Preferences window. In \"Slideshow Mode\", it chooses a number "
-"of images from the image source you configured into XScreenSaver and "
-"displays them within the limitations of the Apple ][ display hardware. (Six "
-"available colors in hi-res mode!) In \"Basic Programming Mode\", a simulated "
-"user types in a BASIC program and runs it. By Trevor Blackwell."
-msgstr ""
-
-#: hacks/config/apple2.xml.h:5
-msgid "Slideshow Mode"
-msgstr ""
-
-#: hacks/config/apple2.xml.h:6
-#, fuzzy
-msgid "Text Mode"
-msgstr "Tekstfil"
-
-#: hacks/config/apple2.xml.h:7 hacks/config/fliptext.xml.h:17
-#: hacks/config/fontglide.xml.h:15 hacks/config/noseguy.xml.h:7
-#: hacks/config/phosphor.xml.h:9 hacks/config/starwars.xml.h:17
-msgid "Text Program"
-msgstr "Tekstprogram"
-
-#: hacks/config/atlantis.xml.h:1
-msgid "Agressive"
-msgstr "Agressiv"
-
-#: hacks/config/atlantis.xml.h:2
-msgid "Atlantis"
-msgstr "Atlantis"
-
-#: hacks/config/atlantis.xml.h:3
-msgid "Clear Water"
-msgstr "Klart vann"
-
-#: hacks/config/atlantis.xml.h:5
-msgid "Flat Background"
-msgstr "Flat bakgrunn"
-
-#: hacks/config/atlantis.xml.h:6
-msgid "Gradient Background"
-msgstr "Gradient bakgrunn"
-
-#: hacks/config/atlantis.xml.h:7
-msgid "Number of Sharks"
-msgstr "Antall haier"
-
-#: hacks/config/atlantis.xml.h:8
-msgid "Shark Proximity"
-msgstr "Haiens nærhet"
-
-#: hacks/config/atlantis.xml.h:9
-msgid "Shark Speed"
-msgstr "Haiens hastighet"
-
-#: hacks/config/atlantis.xml.h:10
-msgid "Shimmering Water"
-msgstr ""
-
-#: hacks/config/atlantis.xml.h:12
-msgid "Shy"
-msgstr "Sky"
-
-#: hacks/config/atlantis.xml.h:14 hacks/config/cage.xml.h:5
-#: hacks/config/extrusion.xml.h:12 hacks/config/gears.xml.h:8
-#: hacks/config/glplanet.xml.h:9 hacks/config/glsnake.xml.h:13
-#: hacks/config/gltext.xml.h:16 hacks/config/menger.xml.h:17
-#: hacks/config/mismunch.xml.h:11 hacks/config/molecule.xml.h:24
-#: hacks/config/munch.xml.h:8 hacks/config/providence.xml.h:6
-#: hacks/config/sierpinski3d.xml.h:9 hacks/config/speedmine.xml.h:14
-#: hacks/config/spheremonics.xml.h:21 hacks/config/sproingies.xml.h:7
-#: hacks/config/stairs.xml.h:4 hacks/config/stonerview.xml.h:2
-#: hacks/config/superquadrics.xml.h:9 hacks/config/webcollage.xml.h:8
-msgid "Solid"
-msgstr "Helfylt"
-
-#: hacks/config/atlantis.xml.h:15
-msgid ""
-"This is xfishtank writ large: a GL animation of a number of sharks, "
-"dolphins, and whales. The swimming motions are great. Originally written by "
-"Mark Kilgard."
-msgstr ""
-
-#: hacks/config/atlantis.xml.h:16
-msgid "Whale Speed"
-msgstr "Hvalens hastighet"
-
-#: hacks/config/atlantis.xml.h:17 hacks/config/atunnel.xml.h:10
-#: hacks/config/blinkbox.xml.h:10 hacks/config/blocktube.xml.h:13
-#: hacks/config/boing.xml.h:15 hacks/config/boxed.xml.h:17
-#: hacks/config/cage.xml.h:9 hacks/config/crackberg.xml.h:23
-#: hacks/config/cube21.xml.h:28 hacks/config/cubestorm.xml.h:14
-#: hacks/config/dangerball.xml.h:11 hacks/config/extrusion.xml.h:19
-#: hacks/config/flipflop.xml.h:8 hacks/config/flyingtoasters.xml.h:14
-#: hacks/config/gears.xml.h:11 hacks/config/glforestfire.xml.h:20
-#: hacks/config/glhanoi.xml.h:10 hacks/config/glknots.xml.h:23
-#: hacks/config/glplanet.xml.h:15 hacks/config/glsnake.xml.h:15
-#: hacks/config/gltext.xml.h:21 hacks/config/jigglypuff.xml.h:25
-#: hacks/config/juggler3d.xml.h:13 hacks/config/lament.xml.h:9
-#: hacks/config/lavalite.xml.h:32 hacks/config/menger.xml.h:21
-#: hacks/config/mirrorblob.xml.h:23 hacks/config/moebius.xml.h:11
-#: hacks/config/molecule.xml.h:27 hacks/config/pinion.xml.h:15
-#: hacks/config/polyhedra.xml.h:166 hacks/config/providence.xml.h:9
-#: hacks/config/pulsar.xml.h:20 hacks/config/queens.xml.h:7
-#: hacks/config/sballs.xml.h:18 hacks/config/sierpinski3d.xml.h:12
-#: hacks/config/speedmine.xml.h:18 hacks/config/spheremonics.xml.h:26
-#: hacks/config/sproingies.xml.h:10 hacks/config/stairs.xml.h:7
-#: hacks/config/stonerview.xml.h:4 hacks/config/superquadrics.xml.h:12
-#: hacks/config/tangram.xml.h:8
-msgid "Wireframe"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:1
-msgid "Attraction"
-msgstr "Tiltrekning"
-
-#: hacks/config/attraction.xml.h:2
-msgid "Ball Count"
-msgstr "Antall baller"
-
-#: hacks/config/attraction.xml.h:3
-msgid "Ball Mass"
-msgstr "Ballens masse"
-
-#: hacks/config/attraction.xml.h:4 hacks/config/fluidballs.xml.h:3
-msgid "Balls"
-msgstr "Baller"
-
-#: hacks/config/attraction.xml.h:5
-msgid "Bounce Off Walls"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:6 hacks/config/hopalong.xml.h:1
-#: hacks/config/interference.xml.h:5 hacks/config/qix.xml.h:2
-#: hacks/config/wander.xml.h:3
-msgid "Color Contrast"
-msgstr "Fargekontrast"
-
-#: hacks/config/attraction.xml.h:7
-msgid "Environmental Viscosity"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:9
-msgid "Filled Splines"
-msgstr "Fylte splines"
-
-#: hacks/config/attraction.xml.h:10 hacks/config/carousel.xml.h:7
-#: hacks/config/ccurve.xml.h:9 hacks/config/cloudlife.xml.h:5
-#: hacks/config/cubenetic.xml.h:10 hacks/config/euler2d.xml.h:5
-#: hacks/config/flame.xml.h:9 hacks/config/fliptext.xml.h:9
-#: hacks/config/glslideshow.xml.h:13 hacks/config/goop.xml.h:6
-#: hacks/config/halftone.xml.h:7 hacks/config/hopalong.xml.h:10
-#: hacks/config/hyperball.xml.h:3 hacks/config/hypercube.xml.h:3
-#: hacks/config/interference.xml.h:8 hacks/config/jigglypuff.xml.h:8
-#: hacks/config/kumppa.xml.h:4 hacks/config/lavalite.xml.h:12
-#: hacks/config/nerverot.xml.h:11 hacks/config/petri.xml.h:8
-#: hacks/config/pyro.xml.h:5 hacks/config/qix.xml.h:10
-#: hacks/config/speedmine.xml.h:5 hacks/config/spheremonics.xml.h:6
-#: hacks/config/spiral.xml.h:4 hacks/config/squiral.xml.h:6
-#: hacks/config/superquadrics.xml.h:5 hacks/config/t3d.xml.h:7
-#: hacks/config/twang.xml.h:5 hacks/config/wander.xml.h:8
-#: hacks/config/xmountains.xml.h:17
-msgid "High"
-msgstr "Høy"
-
-#: hacks/config/attraction.xml.h:11
-msgid "Ignore Screen Edges"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:12
-msgid "Inward"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:14
-msgid ""
-"Like qix, this uses a simple simple motion model to generate many different "
-"display modes. The control points attract each other up to a certain "
-"distance, and then begin to repel each other. The attraction/repulsion is "
-"proportional to the distance between any two particles, similar to the "
-"strong and weak nuclear forces. One of the most interesting ways to watch "
-"this hack is simply as bouncing balls, because their motions and "
-"interactions with each other are so odd. Sometimes two balls will get into a "
-"tight orbit around each other, to be interrupted later by a third, or by the "
-"edge of the screen. It looks quite chaotic. Written by Jamie Zawinski, based "
-"on Lisp code by John Pezaris."
-msgstr ""
-
-#: hacks/config/attraction.xml.h:15 hacks/config/deluxe.xml.h:5
-#: hacks/config/lmorph.xml.h:7 hacks/config/pedal.xml.h:5
-#: hacks/config/starfish.xml.h:4 hacks/config/whirlygig.xml.h:10
-msgid "Lines"
-msgstr "Linjer"
-
-#: hacks/config/attraction.xml.h:16 hacks/config/blocktube.xml.h:5
-#: hacks/config/braid.xml.h:6 hacks/config/celtic.xml.h:4
-#: hacks/config/crackberg.xml.h:13 hacks/config/cube21.xml.h:9
-#: hacks/config/cynosure.xml.h:5 hacks/config/drift.xml.h:8
-#: hacks/config/eruption.xml.h:11 hacks/config/euler2d.xml.h:6
-#: hacks/config/fiberlamp.xml.h:5 hacks/config/fireflies.xml.h:21
-#: hacks/config/flow.xml.h:6 hacks/config/fontglide.xml.h:8
-#: hacks/config/galaxy.xml.h:5 hacks/config/juggle.xml.h:4
-#: hacks/config/klein.xml.h:4 hacks/config/laser.xml.h:5
-#: hacks/config/menger.xml.h:4 hacks/config/metaballs.xml.h:5
-#: hacks/config/mismunch.xml.h:3 hacks/config/munch.xml.h:4
-#: hacks/config/nerverot.xml.h:13 hacks/config/petri.xml.h:9
-#: hacks/config/polyominoes.xml.h:4 hacks/config/rotor.xml.h:5
-#: hacks/config/shadebobs.xml.h:4 hacks/config/sierpinski3d.xml.h:3
-#: hacks/config/spheremonics.xml.h:7 hacks/config/substrate.xml.h:11
-#: hacks/config/timetunnel.xml.h:6 hacks/config/wander.xml.h:10
-#: hacks/config/whirlwindwarp.xml.h:3
-msgid "Long"
-msgstr "Langt"
-
-#: hacks/config/attraction.xml.h:17 hacks/config/carousel.xml.h:9
-#: hacks/config/ccurve.xml.h:10 hacks/config/cloudlife.xml.h:8
-#: hacks/config/cubenetic.xml.h:12 hacks/config/euler2d.xml.h:7
-#: hacks/config/flame.xml.h:10 hacks/config/fliptext.xml.h:10
-#: hacks/config/glslideshow.xml.h:16 hacks/config/goop.xml.h:7
-#: hacks/config/halftone.xml.h:9 hacks/config/hopalong.xml.h:14
-#: hacks/config/hyperball.xml.h:6 hacks/config/hypercube.xml.h:5
-#: hacks/config/interference.xml.h:12 hacks/config/jigglypuff.xml.h:11
-#: hacks/config/kumppa.xml.h:6 hacks/config/lavalite.xml.h:14
-#: hacks/config/nerverot.xml.h:14 hacks/config/petri.xml.h:10
-#: hacks/config/pyro.xml.h:7 hacks/config/qix.xml.h:13
-#: hacks/config/speedmine.xml.h:6 hacks/config/spheremonics.xml.h:8
-#: hacks/config/spiral.xml.h:5 hacks/config/squiral.xml.h:8
-#: hacks/config/superquadrics.xml.h:6 hacks/config/t3d.xml.h:8
-#: hacks/config/twang.xml.h:7 hacks/config/wander.xml.h:11
-msgid "Low"
-msgstr "Lav "
-
-#: hacks/config/attraction.xml.h:20
-msgid "Orbital Mode"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:21
-msgid "Outward"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:22
-msgid "Polygons"
-msgstr "Polygoner"
-
-#: hacks/config/attraction.xml.h:23 hacks/config/fuzzyflakes.xml.h:13
-#: hacks/config/spotlight.xml.h:3 hacks/config/xplanet.xml.h:55
-msgid "Radius"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:24
-msgid "Repulsion Threshold"
-msgstr ""
-
-#: hacks/config/attraction.xml.h:25 hacks/config/blocktube.xml.h:7
-#: hacks/config/braid.xml.h:10 hacks/config/celtic.xml.h:7
-#: hacks/config/crackberg.xml.h:17 hacks/config/cube21.xml.h:12
-#: hacks/config/cynosure.xml.h:8 hacks/config/drift.xml.h:11
-#: hacks/config/eruption.xml.h:18 hacks/config/euler2d.xml.h:12
-#: hacks/config/fiberlamp.xml.h:7 hacks/config/fireflies.xml.h:34
-#: hacks/config/flow.xml.h:9 hacks/config/galaxy.xml.h:9
-#: hacks/config/juggle.xml.h:7 hacks/config/klein.xml.h:5
-#: hacks/config/laser.xml.h:9 hacks/config/menger.xml.h:14
-#: hacks/config/metaballs.xml.h:12 hacks/config/mismunch.xml.h:8
-#: hacks/config/munch.xml.h:6 hacks/config/nerverot.xml.h:19
-#: hacks/config/petri.xml.h:22 hacks/config/polyominoes.xml.h:9
-#: hacks/config/rotor.xml.h:9 hacks/config/shadebobs.xml.h:8
-#: hacks/config/sierpinski3d.xml.h:5 hacks/config/spheremonics.xml.h:17
-#: hacks/config/substrate.xml.h:14 hacks/config/timetunnel.xml.h:8
-#: hacks/config/wander.xml.h:12 hacks/config/whirlwindwarp.xml.h:6
-msgid "Short"
-msgstr "Kort"
-
-#: hacks/config/attraction.xml.h:29
-msgid "Splines"
-msgstr "Splines"
-
-#: hacks/config/attraction.xml.h:30 hacks/config/fireflies.xml.h:42
-msgid "Tails"
-msgstr "Haler"
-
-#: hacks/config/attraction.xml.h:31 hacks/config/euler2d.xml.h:16
-#: hacks/config/juggle.xml.h:10
-msgid "Trail Length"
-msgstr "Lengde på spor"
-
-#: hacks/config/atunnel.xml.h:1
-msgid "Atunnel"
-msgstr ""
-
-#: hacks/config/atunnel.xml.h:2
-msgid ""
-"Draws an animation of a textured tunnel in GL. Requires OpenGL, and a "
-"machine with fast hardware support for texture maps. Written by Eric "
-"Lassauge and Roman Podobedov."
-msgstr ""
-
-#: hacks/config/atunnel.xml.h:4 hacks/config/distort.xml.h:9
-#: hacks/config/glforestfire.xml.h:10 hacks/config/lament.xml.h:4
-#: hacks/config/sballs.xml.h:6
-msgid "Normal"
-msgstr "Normal"
-
-#: hacks/config/atunnel.xml.h:8 hacks/config/cube21.xml.h:24
-#: hacks/config/glforestfire.xml.h:18 hacks/config/lament.xml.h:8
-#: hacks/config/sballs.xml.h:17
-msgid "Untextured"
-msgstr "Uten tekstur"
-
-#: hacks/config/atunnel.xml.h:9
-#, fuzzy
-msgid "Use light"
-msgstr "Bruk lyn"
-
-#: hacks/config/barcode.xml.h:1
-#, fuzzy
-msgid "Barcode"
-msgstr "Bla gjennom"
-
-#: hacks/config/barcode.xml.h:2
-msgid "Barcode Clock (24 Hour)"
-msgstr ""
-
-#: hacks/config/barcode.xml.h:3
-msgid "Barcode Clock (AM/PM)"
-msgstr ""
-
-#: hacks/config/barcode.xml.h:5
-msgid "Scrolling Barcodes"
-msgstr ""
-
-#: hacks/config/barcode.xml.h:8
-msgid ""
-"This draws a random sequence of colorful barcodes scrolling across your "
-"screen. CONSUME! By Dan Bornstein."
-msgstr ""
-
-#: hacks/config/blaster.xml.h:1
-msgid "Blaster"
-msgstr "Blaster"
-
-#: hacks/config/blaster.xml.h:2
-msgid ""
-"Draws a simulation of flying space-combat robots (cleverly disguised as "
-"colored circles) doing battle in front of a moving star field. Written by "
-"Jonathan Lin."
-msgstr ""
-
-#: hacks/config/blaster.xml.h:5 hacks/config/penetrate.xml.h:4
-msgid "Lasers"
-msgstr "Lasere"
-
-#: hacks/config/blaster.xml.h:7
-msgid "Robots"
-msgstr "Roboter"
-
-#: hacks/config/blaster.xml.h:10 hacks/config/glplanet.xml.h:11
-msgid "Stars"
-msgstr "Stjerner"
-
-#: hacks/config/blinkbox.xml.h:1
-msgid "BlinkBox"
-msgstr ""
-
-#: hacks/config/blinkbox.xml.h:2
-#, fuzzy
-msgid "Box Size"
-msgstr "Maks størrelse"
-
-#: hacks/config/blinkbox.xml.h:3
-msgid "Dissolve"
-msgstr ""
-
-#: hacks/config/blinkbox.xml.h:4 hacks/config/phosphor.xml.h:3
-msgid "Fade"
-msgstr ""
-
-#: hacks/config/blinkbox.xml.h:6
-#, fuzzy
-msgid "Motion Blur"
-msgstr "Roteringshastighet"
-
-#: hacks/config/blinkbox.xml.h:7
-msgid ""
-"Shows a ball contained inside of a bounding box. Colored blocks blink in "
-"when the ball hits the edges. Written by Jeremy English."
-msgstr ""
-
-#: hacks/config/blitspin.xml.h:1
-msgid "90 deg Rotation Speed"
-msgstr "Roteringshastighet for 90 grader"
-
-#: hacks/config/blitspin.xml.h:2
-msgid "Bitmap to rotate"
-msgstr "Bilde som skal roteres"
-
-#: hacks/config/blitspin.xml.h:3
-msgid "BlitSpin"
-msgstr "BlitSpin"
-
-#: hacks/config/blitspin.xml.h:5
-msgid "Fuzzy Rotation Speed"
-msgstr ""
-
-#: hacks/config/blitspin.xml.h:6
-msgid "Grab Screen"
-msgstr "Hent skjerm"
-
-#: hacks/config/blitspin.xml.h:8
-msgid ""
-"The ``blitspin'' hack repeatedly rotates a bitmap by 90 degrees by using "
-"logical operations: the bitmap is divided into quadrants, and the quadrants "
-"are shifted clockwise. Then the same thing is done again with progressively "
-"smaller quadrants, except that all sub-quadrants of a given size are rotated "
-"in parallel. Written by Jamie Zawinski based on some cool SmallTalk code "
-"seen in in Byte Magazine in 1981. As you watch it, the image appears to "
-"dissolve into static and then reconstitute itself, but rotated. You can "
-"provide the image to use, as an XBM or XPM file, or tell it to grab a screen "
-"image and rotate that."
-msgstr ""
-
-#: hacks/config/blocktube.xml.h:1
-msgid "BlockTube"
-msgstr ""
-
-#: hacks/config/blocktube.xml.h:2 hacks/config/timetunnel.xml.h:3
-msgid "Color Change Time"
-msgstr ""
-
-#: hacks/config/blocktube.xml.h:3
-msgid "Color Hold Time"
-msgstr ""
-
-#: hacks/config/blocktube.xml.h:6
-msgid "Reflective Blocks"
-msgstr ""
-
-#: hacks/config/blocktube.xml.h:10
-#, fuzzy
-msgid "Solid Blocks"
-msgstr "Helfylt gulv"
-
-#: hacks/config/blocktube.xml.h:12
-msgid ""
-"This hack draws a swirling, falling tunnel of reflective slabs. They fade "
-"from hue to hue. Written by Lars R. Damerow."
-msgstr ""
-
-#: hacks/config/boing.xml.h:1
-#, fuzzy
-msgid "Boing"
-msgstr "Lys"
-
-#: hacks/config/boing.xml.h:3 hacks/config/boxed.xml.h:8
-#: hacks/config/fireflies.xml.h:17 hacks/config/pinion.xml.h:7
-#, fuzzy
-msgid "Huge"
-msgstr "Storbrann"
-
-#: hacks/config/boing.xml.h:4 hacks/config/crackberg.xml.h:12
-#, fuzzy
-msgid "Lighting"
-msgstr "Lyn"
-
-#: hacks/config/boing.xml.h:5
-msgid "Meridians"
-msgstr ""
-
-#: hacks/config/boing.xml.h:6
-#, fuzzy
-msgid "Parallels"
-msgstr "Partikler"
-
-#: hacks/config/boing.xml.h:7
-#, fuzzy
-msgid "Scanlines"
-msgstr "Splines"
-
-#: hacks/config/boing.xml.h:9 hacks/config/galaxy.xml.h:10
-#: hacks/config/lisa.xml.h:7 hacks/config/lissie.xml.h:8
-#: hacks/config/loop.xml.h:6 hacks/config/penrose.xml.h:7
-#: hacks/config/pong.xml.h:3 hacks/config/rotor.xml.h:10
-#: hacks/config/rubik.xml.h:8 hacks/config/sproingies.xml.h:5
-#: hacks/config/wander.xml.h:13 hacks/config/worm.xml.h:6
-msgid "Size"
-msgstr "Størrelse"
-
-#: hacks/config/boing.xml.h:11
-#, fuzzy
-msgid "Smoothing"
-msgstr "Myk"
-
-#: hacks/config/boing.xml.h:13
-msgid ""
-"This bouncing ball is a clone of the first graphics demo for the Amiga 1000, "
-"which was written by Dale Luck and RJ Mical during a break at the 1984 "
-"Consumer Electronics Show (or so the legend goes.) This looks like the "
-"original Amiga demo if you turn off \"smoothing\" and \"lighting\" and turn "
-"on \"scanlines\". Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/boing.xml.h:14 hacks/config/boxed.xml.h:16
-#: hacks/config/fireflies.xml.h:43 hacks/config/pinion.xml.h:14
-#, fuzzy
-msgid "Tiny"
-msgstr "Tynn"
-
-#: hacks/config/bouboule.xml.h:1
-msgid "Bouboule"
-msgstr "Bouboule"
-
-#: hacks/config/bouboule.xml.h:2 hacks/config/rocks.xml.h:3
-msgid "Do Red/Blue 3D separation"
-msgstr "Utfør rød/blå 3D-separasjon"
-
-#: hacks/config/bouboule.xml.h:7
-msgid "Number of Spots"
-msgstr "Antall punkter"
-
-#: hacks/config/bouboule.xml.h:10
-#, fuzzy
-msgid ""
-"This draws what looks like a spinning, deforming balloon with varying-sized "
-"spots painted on its invisible surface. Written by Jeremie Petit."
-msgstr "Gjenopprett konfigurasjonen fra et bestemt punkt"
-
-#: hacks/config/bouncingcow.xml.h:1
-msgid "A Cow. A Trampoline. Together, they fight crime. By Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/bouncingcow.xml.h:2 hacks/config/boxed.xml.h:1
-#: hacks/config/carousel.xml.h:3 hacks/config/ccurve.xml.h:3
-#: hacks/config/cubestorm.xml.h:1 hacks/config/flyingtoasters.xml.h:3
-#: hacks/config/fontglide.xml.h:1 hacks/config/gears.xml.h:1
-#: hacks/config/gflux.xml.h:1 hacks/config/glknots.xml.h:1
-#: hacks/config/glmatrix.xml.h:1 hacks/config/jigglypuff.xml.h:1
-#: hacks/config/pinion.xml.h:3 hacks/config/polyhedra.xml.h:3
-#: hacks/config/pyro.xml.h:1 hacks/config/rd-bomb.xml.h:6
-#: hacks/config/rocks.xml.h:1 hacks/config/starwars.xml.h:1
-#: hacks/config/wormhole.xml.h:1 hacks/config/xfishtank.xml.h:1
-msgid "Animation Speed"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/bouncingcow.xml.h:3
-msgid "Beefy Cow"
-msgstr ""
-
-#: hacks/config/bouncingcow.xml.h:4
-#, fuzzy
-msgid "Bounce Speed"
-msgstr "Løsningshastighet"
-
-#: hacks/config/bouncingcow.xml.h:5
-msgid "BouncingCow"
-msgstr ""
-
-#: hacks/config/bouncingcow.xml.h:7
-msgid "Herd"
-msgstr ""
-
-#: hacks/config/bouncingcow.xml.h:8
-#, fuzzy
-msgid "Moo"
-msgstr "Mono"
-
-#: hacks/config/bouncingcow.xml.h:9
-#, fuzzy
-msgid "Number of Cows"
-msgstr "Antall farger"
-
-#: hacks/config/bouncingcow.xml.h:11
-msgid "Wireframe Cow"
-msgstr ""
-
-#: hacks/config/boxed.xml.h:2 hacks/config/fluidballs.xml.h:2
-msgid "Ball Size"
-msgstr "Størrelse på ball"
-
-#: hacks/config/boxed.xml.h:3
-msgid "Boxed"
-msgstr ""
-
-#: hacks/config/boxed.xml.h:4
-msgid ""
-"Draws a box full of 3D bouncing balls that explode. Written by Sander van "
-"Grieken."
-msgstr ""
-
-#: hacks/config/boxed.xml.h:5
-#, fuzzy
-msgid "Explosion Force"
-msgstr "Eksplosjoner"
-
-#: hacks/config/boxed.xml.h:9 hacks/config/pipes.xml.h:9
-#: hacks/config/substrate.xml.h:12 hacks/config/wormhole.xml.h:4
-msgid "Lots"
-msgstr ""
-
-#: hacks/config/boxed.xml.h:10 hacks/config/cubestorm.xml.h:5
-#: hacks/config/fontglide.xml.h:9 hacks/config/glknots.xml.h:6
-#: hacks/config/polyhedra.xml.h:84
-#, fuzzy
-msgid "Motion Speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/boxed.xml.h:11
-msgid "Nuke"
-msgstr ""
-
-#: hacks/config/boxed.xml.h:12
-#, fuzzy
-msgid "Number of Balls"
-msgstr "Antall fraktaler"
-
-#: hacks/config/boxed.xml.h:13 hacks/config/hopalong.xml.h:18
-msgid "Popcorn"
-msgstr "Popcorn"
-
-#: hacks/config/boxfit.xml.h:1 hacks/config/popsquares.xml.h:1
-#, fuzzy
-msgid "Border"
-msgstr "Kantbredde"
-
-#: hacks/config/boxfit.xml.h:2
-msgid "BoxFit"
-msgstr ""
-
-#: hacks/config/boxfit.xml.h:3 hacks/config/cubenetic.xml.h:1
-msgid "Boxes"
-msgstr "Bokser"
-
-#: hacks/config/boxfit.xml.h:4
-#, fuzzy
-msgid "Boxes Only"
-msgstr "Bokser"
-
-#: hacks/config/boxfit.xml.h:5
-#, fuzzy
-msgid "Boxes or Circles"
-msgstr "Antall sirkler"
-
-#: hacks/config/boxfit.xml.h:6
-#, fuzzy
-msgid "Circles Only"
-msgstr "Omganger"
-
-#: hacks/config/boxfit.xml.h:7
-#, fuzzy
-msgid "Color Gradient"
-msgstr "Fargegradienter"
-
-#: hacks/config/boxfit.xml.h:9
-#, fuzzy
-msgid "Grab Images"
-msgstr "Hent bilder fra skrivebordet"
-
-#: hacks/config/boxfit.xml.h:10
-msgid "Grow By"
-msgstr ""
-
-#: hacks/config/boxfit.xml.h:11
-msgid ""
-"Packs the screen with growing squares or circles, colored according to a "
-"horizontal or vertical gradient, or according to the colors of the desktop "
-"or a loaded image file. The objects grow until they touch, then stop. When "
-"the screen is full, they shrink away and the process restarts. Written by "
-"Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/boxfit.xml.h:13 hacks/config/xearth.xml.h:23
-msgid "Spacing"
-msgstr "Mellomrom"
-
-#: hacks/config/braid.xml.h:1
-msgid "Braid"
-msgstr "Flette"
-
-#: hacks/config/braid.xml.h:2
-msgid ""
-"Draws random color-cycling inter-braided concentric circles. Written by John "
-"Neil."
-msgstr ""
-
-#: hacks/config/braid.xml.h:3 hacks/config/bsod.xml.h:9
-#: hacks/config/coral.xml.h:6 hacks/config/cynosure.xml.h:3
-#: hacks/config/deco.xml.h:4 hacks/config/drift.xml.h:2
-#: hacks/config/epicycle.xml.h:3 hacks/config/eruption.xml.h:3
-#: hacks/config/euler2d.xml.h:1 hacks/config/flame.xml.h:5
-#: hacks/config/galaxy.xml.h:2 hacks/config/glsnake.xml.h:5
-#: hacks/config/helix.xml.h:3 hacks/config/hopalong.xml.h:2
-#: hacks/config/imsmap.xml.h:6 hacks/config/klein.xml.h:1
-#: hacks/config/laser.xml.h:2 hacks/config/menger.xml.h:2
-#: hacks/config/metaballs.xml.h:3 hacks/config/mismunch.xml.h:1
-#: hacks/config/moire.xml.h:3 hacks/config/molecule.xml.h:10
-#: hacks/config/munch.xml.h:2 hacks/config/nerverot.xml.h:8
-#: hacks/config/pedal.xml.h:3 hacks/config/polyhedra.xml.h:16
-#: hacks/config/polyominoes.xml.h:1 hacks/config/rorschach.xml.h:3
-#: hacks/config/rotzoomer.xml.h:5 hacks/config/shadebobs.xml.h:2
-#: hacks/config/sierpinski3d.xml.h:1 hacks/config/spheremonics.xml.h:4
-#: hacks/config/starfish.xml.h:2 hacks/config/substrate.xml.h:6
-#: hacks/config/vidwhacker.xml.h:3 hacks/config/wander.xml.h:7
-#: hacks/config/xspirograph.xml.h:3
-msgid "Duration"
-msgstr "Varighet"
-
-#: hacks/config/braid.xml.h:5 hacks/config/epicycle.xml.h:7
-#: hacks/config/nerverot.xml.h:12
-msgid "Line Thickness"
-msgstr ""
-
-#: hacks/config/braid.xml.h:8
-msgid "Max Rings"
-msgstr "Maks antall ringer"
-
-#: hacks/config/bsod.xml.h:1 hacks/config/molecule.xml.h:1
-#: hacks/config/vidwhacker.xml.h:1
-msgid "2 minutes"
-msgstr "2 minutter"
-
-#: hacks/config/bsod.xml.h:2 hacks/config/molecule.xml.h:2
-msgid "5 seconds"
-msgstr "5 sekunder"
-
-#: hacks/config/bsod.xml.h:3
-msgid "AmigaDOS"
-msgstr "AmigaDOS"
-
-#: hacks/config/bsod.xml.h:4
-msgid "Apple II"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:5
-msgid "Atari"
-msgstr "Atari"
-
-#: hacks/config/bsod.xml.h:6
-msgid "BSD"
-msgstr "BSD"
-
-#: hacks/config/bsod.xml.h:7
-msgid "BSOD"
-msgstr "BSOD"
-
-#: hacks/config/bsod.xml.h:8
-msgid ""
-"BSOD stands for ``Blue Screen of Death.'' The finest in personal computer "
-"emulation, this hack simulates popular screen savers from a number of less "
-"robust operating systems. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/bsod.xml.h:10
-msgid "HPUX"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:11
-msgid "HVX/GCOS6"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:12
-msgid "Linux (fsck)"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:13
-msgid "Linux (hppa)"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:14
-msgid "Linux (sparc)"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:15
-msgid "MS-DOS"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:16
-msgid "Mac Bomb"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:17
-msgid "MacOS X"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:18
-msgid "MacsBug"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:19
-#, fuzzy
-msgid "NCD X Terminal  "
-msgstr "NCD X-terminal"
-
-#: hacks/config/bsod.xml.h:20
-msgid "Nvidia"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:21
-msgid "OS/2"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:22
-msgid "OS/390"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:23
-msgid "SCO"
-msgstr "SCO"
-
-#: hacks/config/bsod.xml.h:24
-msgid "Sad Mac"
-msgstr "Trist Mac"
-
-#: hacks/config/bsod.xml.h:25
-msgid "Solaris"
-msgstr "Solaris"
-
-#: hacks/config/bsod.xml.h:26
-msgid "Tru64"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:27
-msgid "VMS"
-msgstr ""
-
-#: hacks/config/bsod.xml.h:28
-#, fuzzy
-msgid "Windows 2000  "
-msgstr "Windows 2000"
-
-#: hacks/config/bsod.xml.h:29
-#, fuzzy
-msgid "Windows 3.1"
-msgstr "Windows"
-
-#: hacks/config/bsod.xml.h:30
-msgid "Windows NT"
-msgstr "Windows NT"
-
-#: hacks/config/bubble3d.xml.h:1
-#, fuzzy
-msgid "Bubble Color"
-msgstr "Bobler flyter"
-
-#: hacks/config/bubble3d.xml.h:2
-msgid "Bubble3D"
-msgstr "Boble3D"
-
-#: hacks/config/bubble3d.xml.h:3
-msgid ""
-"Draws a stream of rising, undulating 3D bubbles, rising toward the top of "
-"the screen, with nice specular reflections. Written by Richard Jones."
-msgstr ""
-
-#: hacks/config/bubble3d.xml.h:8
-#, fuzzy
-msgid "Transparent Bubbles"
-msgstr "Gjennomsiktige blubber"
-
-#: hacks/config/bubbles.xml.h:1 hacks/config/xfishtank.xml.h:2
-msgid "Bubbles"
-msgstr "Bobler"
-
-#: hacks/config/bubbles.xml.h:2
-msgid "Bubbles Fall"
-msgstr "Bobler faller"
-
-#: hacks/config/bubbles.xml.h:3
-msgid "Bubbles Float"
-msgstr "Bobler flyter"
-
-#: hacks/config/bubbles.xml.h:4
-msgid "Bubbles Rise"
-msgstr "Bobler stiger"
-
-#: hacks/config/bubbles.xml.h:5
-msgid "Bubbles exist in three dimensions"
-msgstr "Bobler eksisterer i tre dimensjoner"
-
-#: hacks/config/bubbles.xml.h:6
-msgid "Don't hide bubbles when they pop"
-msgstr "Ikke skjul bobler når de sprekker"
-
-#: hacks/config/bubbles.xml.h:7
-msgid "Draw circles instead of pixmap bubbles"
-msgstr "Tegn sirkler istedet for pixmap-bobler"
-
-#: hacks/config/bubbles.xml.h:9
-msgid "Leave Trails"
-msgstr "Etterlat spor"
-
-#: hacks/config/bubbles.xml.h:12
-msgid ""
-"This simulates the kind of bubble formation that happens when water boils:"
-"small bubbles appear, and as they get closer to each other, they combine to "
-"form larger bubbles, which eventually pop. Written by James Macnicol."
-msgstr ""
-
-#: hacks/config/bumps.xml.h:1
-msgid ""
-"A bit like `Spotlight', except that instead of merely exposing part of your "
-"desktop, it creates a bump map from it. Basically, it 3D-izes a roaming "
-"section of your desktop, based on color intensity. Written by Shane Smit."
-msgstr ""
-
-#: hacks/config/bumps.xml.h:2
-msgid "Bumps"
-msgstr "Humper"
-
-#: hacks/config/cage.xml.h:1
-msgid "Cage"
-msgstr "Bur"
-
-#: hacks/config/cage.xml.h:7 hacks/config/cube21.xml.h:22
-#, fuzzy
-msgid "Textured"
-msgstr "Uten tekstur"
-
-#: hacks/config/cage.xml.h: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 ""
-
-#: hacks/config/carousel.xml.h:1 hacks/config/coral.xml.h:1
-#: hacks/config/deco.xml.h:1 hacks/config/helix.xml.h:1
-#: hacks/config/imsmap.xml.h:1 hacks/config/jigsaw.xml.h:2
-#: hacks/config/moire.xml.h:1 hacks/config/pedal.xml.h:1
-#: hacks/config/rorschach.xml.h:1 hacks/config/wander.xml.h:2
-#: hacks/config/xspirograph.xml.h:1
-msgid "1 Minute"
-msgstr "1 minutt"
-
-#: hacks/config/carousel.xml.h:2
-#, fuzzy
-msgid "5 Seconds"
-msgstr "0 scekunder"
-
-#: hacks/config/carousel.xml.h:4
-msgid "Carousel"
-msgstr ""
-
-#: hacks/config/carousel.xml.h:6 hacks/config/electricsheep.xml.h:7
-#: hacks/config/fliptext.xml.h:8
-msgid "Frame Rate"
-msgstr ""
-
-#: hacks/config/carousel.xml.h:8
-msgid ""
-"Loads several random images, and displays them flying in a circular "
-"formation. The circle changes speed and direction randomly, tilts on its "
-"axis, and the images move in and out. To tell it where to find the images to "
-"display, go to the \"Advanced\" tab on the Screensaver Preferences window. "
-"Select \"Choose Random Images\", and enter your image directory in the text "
-"field right below that. (Note: not the the \"Advanced\" button at the bottom "
-"of this window: the tab at the top of the *other* window.) This program "
-"requires a good video card capable of supporting large textures. Written by "
-"Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/carousel.xml.h:10
-msgid "No Tilting"
-msgstr ""
-
-#: hacks/config/carousel.xml.h:11
-#, fuzzy
-msgid "Number of Images:"
-msgstr "Antall bølger"
-
-#: hacks/config/carousel.xml.h:13 hacks/config/glslideshow.xml.h:20
-#, fuzzy
-msgid "Show Image Titles"
-msgstr "Bildefil"
-
-#: hacks/config/carousel.xml.h:15
-msgid "Tilt In/Out Only"
-msgstr ""
-
-#: hacks/config/carousel.xml.h:16
-msgid "Tilt In/Out and Left/Right"
-msgstr ""
-
-#: hacks/config/carousel.xml.h:17
-msgid "Tilt Left/Right Only"
-msgstr ""
-
-#: hacks/config/carousel.xml.h:18 hacks/config/glslideshow.xml.h:21
-#: hacks/config/mirrorblob.xml.h:21
-msgid "Time until loading a new image:"
-msgstr ""
-
-#: hacks/config/carousel.xml.h:19
-msgid "Zoom In/Out"
-msgstr ""
-
-#: hacks/config/ccurve.xml.h:1
-msgid "0 seconds"
-msgstr "0 sekunder"
-
-#: hacks/config/ccurve.xml.h:2 hacks/config/polyhedra.xml.h:2
-#, fuzzy
-msgid "30 seconds"
-msgstr "0 sekunder"
-
-#: hacks/config/ccurve.xml.h:4
-msgid "C Curve"
-msgstr "C-kurve"
-
-#: hacks/config/ccurve.xml.h:5
-msgid "Change Image Every"
-msgstr ""
-
-#: hacks/config/ccurve.xml.h:6 hacks/config/coral.xml.h:5
-#: hacks/config/imsmap.xml.h:5 hacks/config/kumppa.xml.h:1
-#: hacks/config/qix.xml.h:6 hacks/config/squiral.xml.h:2
-#: hacks/config/wander.xml.h:4 hacks/config/xmatrix.xml.h:2
-msgid "Density"
-msgstr "Tetthet"
-
-#: hacks/config/ccurve.xml.h:8
-msgid ""
-"Generates self-similar linear fractals, including the classic ``C Curve.'' "
-"Written by Rick Campbell."
-msgstr ""
-
-#: hacks/config/celtic.xml.h:1
-#, fuzzy
-msgid "Celtic"
-msgstr "Kubenetikk"
-
-#: hacks/config/celtic.xml.h:2
-#, fuzzy
-msgid "Draw Graph"
-msgstr "Tegn flekker"
-
-#: hacks/config/celtic.xml.h:5
-#, fuzzy
-msgid "Pause"
-msgstr "Plan"
-
-#: hacks/config/celtic.xml.h:6
-msgid ""
-"Repeatedly draws random Celtic cross-stitch patterns. By Max Froumentin."
-msgstr ""
-
-#: hacks/config/circuit.xml.h:1
-msgid "Animates a number of 3D electronic components. Written by Ben Buxton."
-msgstr ""
-
-#: hacks/config/circuit.xml.h:2
-msgid "Circuit"
-msgstr ""
-
-#: hacks/config/circuit.xml.h:3 hacks/config/gflux.xml.h:4
-#: hacks/config/pulsar.xml.h:2
-msgid "Directional Lighting"
-msgstr ""
-
-#: hacks/config/circuit.xml.h:5
-msgid "Flat Coloring"
-msgstr "Flate farger"
-
-#: hacks/config/circuit.xml.h:6
-msgid "Parts"
-msgstr "Deler"
-
-#: hacks/config/circuit.xml.h:7 hacks/config/flipscreen3d.xml.h:4
-#: hacks/config/gleidescope.xml.h:9 hacks/config/glplanet.xml.h:6
-#: hacks/config/ifs.xml.h:10
-msgid "Rotate"
-msgstr "Roter"
-
-#: hacks/config/circuit.xml.h:8 hacks/config/pinion.xml.h:10
-msgid "Rotation Speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/circuit.xml.h:12 hacks/config/cube21.xml.h:18
-#: hacks/config/cubestorm.xml.h:9 hacks/config/dangerball.xml.h:9
-#: hacks/config/engine.xml.h:17 hacks/config/klein.xml.h:9
-#: hacks/config/polyhedra.xml.h:145 hacks/config/whirlygig.xml.h:14
-msgid "Spin"
-msgstr "Spinn"
-
-#: hacks/config/cloudlife.xml.h:1 hacks/config/demon.xml.h:2
-#: hacks/config/petri.xml.h:1
-msgid "Cell Size"
-msgstr "Cellestørrelse"
-
-#: hacks/config/cloudlife.xml.h:2
-msgid "CloudLife"
-msgstr ""
-
-#: hacks/config/cloudlife.xml.h:4
-msgid ""
-"Generates cloud-like formations based on a variant of Conway's Life. The "
-"difference is that cells have a maximum age, after which they count as 3 for "
-"populating the next generation. This makes long-lived formations explode "
-"instead of just sitting there burning a hole in your screen. Written by Don "
-"Marti."
-msgstr ""
-
-#: hacks/config/cloudlife.xml.h:6
-#, fuzzy
-msgid "Initial Density"
-msgstr "Partikkeltetthet"
-
-#: hacks/config/cloudlife.xml.h:9
-#, fuzzy
-msgid "Max Age"
-msgstr "Maks størrelse"
-
-#: hacks/config/cloudlife.xml.h:10
-msgid "Old"
-msgstr ""
-
-#: hacks/config/cloudlife.xml.h:14
-#, fuzzy
-msgid "Young"
-msgstr "Langt"
-
-#: hacks/config/compass.xml.h:1
-msgid "Compass"
-msgstr "Kompass"
-
-#: hacks/config/compass.xml.h:2 hacks/config/deluxe.xml.h:3
-#: hacks/config/fontglide.xml.h:3 hacks/config/fuzzyflakes.xml.h:5
-#: hacks/config/interference.xml.h:6 hacks/config/kumppa.xml.h:2
-#: hacks/config/nerverot.xml.h:6 hacks/config/piecewise.xml.h:3
-#: hacks/config/pipes.xml.h:4
-msgid "Double Buffer"
-msgstr "Double buffer"
-
-#: hacks/config/compass.xml.h:6
-msgid ""
-"This draws a compass, with all elements spinning about randomly, for that "
-"``lost and nauseous'' feeling. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/coral.xml.h:2 hacks/config/deco.xml.h:2
-#: hacks/config/glslideshow.xml.h:1 hacks/config/helix.xml.h:2
-#: hacks/config/imsmap.xml.h:2 hacks/config/moire.xml.h:2
-#: hacks/config/pedal.xml.h:2 hacks/config/rorschach.xml.h:2
-#: hacks/config/xspirograph.xml.h:2
-msgid "1 Second"
-msgstr "1 sekund"
-
-#: hacks/config/coral.xml.h:3
-msgid "Coral"
-msgstr "Korall"
-
-#: hacks/config/coral.xml.h:4 hacks/config/fireworkx.xml.h:2
-#: hacks/config/gflux.xml.h:3 hacks/config/glblur.xml.h:2
-#: hacks/config/glmatrix.xml.h:3 hacks/config/imsmap.xml.h:4
-#: hacks/config/lavalite.xml.h:6 hacks/config/pyro.xml.h:2
-#: hacks/config/qix.xml.h:5 hacks/config/squiral.xml.h:1
-#: hacks/config/xearth.xml.h:4
-msgid "Dense"
-msgstr "Tett"
-
-#: hacks/config/coral.xml.h:10 hacks/config/squiral.xml.h:13
-msgid "Seeds"
-msgstr "Utgangsverdier"
-
-#: hacks/config/coral.xml.h:11
-msgid ""
-"Simulates coral growth, albeit somewhat slowly. Written by Frederick Roeber."
-msgstr ""
-
-#: hacks/config/coral.xml.h:13 hacks/config/fireworkx.xml.h:10
-#: hacks/config/gflux.xml.h:13 hacks/config/glblur.xml.h:15
-#: hacks/config/glmatrix.xml.h:19 hacks/config/imsmap.xml.h:13
-#: hacks/config/lavalite.xml.h:29 hacks/config/pyro.xml.h:14
-#: hacks/config/qix.xml.h:21 hacks/config/squiral.xml.h:15
-#: hacks/config/xearth.xml.h:24 hacks/config/xmatrix.xml.h:17
-msgid "Sparse"
-msgstr ""
-
-#: hacks/config/cosmos.xml.h:1
-msgid "Cosmos"
-msgstr "Kosmos"
-
-#: hacks/config/cosmos.xml.h:2
-msgid ""
-"Draws fireworks and zooming, fading flares. By Tom Campbell. You can find it "
-"at &lt;http://www.cosmosx.org/&gt;"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:1
-msgid "Confused"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:2
-msgid "Crackberg"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:3
-#, fuzzy
-msgid "Display FPS"
-msgstr "Stil"
-
-#: hacks/config/crackberg.xml.h:4
-msgid "Eagle Nest"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:5
-#, fuzzy
-msgid "Flat Shading"
-msgstr "Flatt lyn"
-
-#: hacks/config/crackberg.xml.h:6
-msgid ""
-"Flies through height maps, optionally animating the creation and destruction "
-"of generated tiles; tiles `grow' into place."
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:7
-#, fuzzy
-msgid "Frame Delay"
-msgstr "Pause"
-
-#: hacks/config/crackberg.xml.h:8
-#, fuzzy
-msgid "Growing"
-msgstr "Lys"
-
-#: hacks/config/crackberg.xml.h:9
-msgid "Ice"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:10
-msgid "Immediate"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:11 hacks/config/glslideshow.xml.h:14
-msgid "Letterbox"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:14
-msgid "Mouse Hole"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:15
-#, fuzzy
-msgid "Plain"
-msgstr "Plan"
-
-#: hacks/config/crackberg.xml.h:16 hacks/config/flurry.xml.h:8
-#: hacks/config/fontglide.xml.h:12 hacks/config/jigglypuff.xml.h:13
-#: hacks/config/sballs.xml.h:10 hacks/config/whirlygig.xml.h:12
-msgid "Random"
-msgstr "Tilfeldig"
-
-#: hacks/config/crackberg.xml.h:18
-msgid "Subdivisions"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:19
-#, fuzzy
-msgid "Swampy"
-msgstr "XStråleSverm"
-
-#: hacks/config/crackberg.xml.h:20
-msgid "Visibility"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:21
-msgid "Vomit"
-msgstr ""
-
-#: hacks/config/crackberg.xml.h:22 hacks/config/flurry.xml.h:11
-#, fuzzy
-msgid "Water"
-msgstr "Vandre"
-
-#: hacks/config/critical.xml.h:1
-msgid "Critical"
-msgstr "Kritisk"
-
-#: hacks/config/critical.xml.h:2
-msgid ""
-"Draws a system of self-organizing lines. It starts out as random squiggles, "
-"but after a few iterations, order begins to appear. Written by Martin Pool."
-msgstr ""
-
-#: hacks/config/crystal.xml.h:1
-msgid "Center on Screen"
-msgstr "Sentrer på skjermen"
-
-#: hacks/config/crystal.xml.h:2 hacks/config/deluxe.xml.h:1
-#: hacks/config/fadeplot.xml.h:1 hacks/config/flow.xml.h:1
-#: hacks/config/galaxy.xml.h:1 hacks/config/glforestfire.xml.h:1
-#: hacks/config/grav.xml.h:1 hacks/config/julia.xml.h:1
-#: hacks/config/laser.xml.h:1 hacks/config/lisa.xml.h:1
-#: hacks/config/lissie.xml.h:2 hacks/config/morph3d.xml.h:2
-#: hacks/config/mountain.xml.h:1 hacks/config/piecewise.xml.h:2
-#: hacks/config/qix.xml.h:4 hacks/config/rocks.xml.h:2
-#: hacks/config/rotor.xml.h:2 hacks/config/rubik.xml.h:1
-#: hacks/config/shadebobs.xml.h:1 hacks/config/sierpinski.xml.h:1
-#: hacks/config/slip.xml.h:1 hacks/config/spiral.xml.h:1
-#: hacks/config/sproingies.xml.h:1 hacks/config/superquadrics.xml.h:1
-#: hacks/config/swirl.xml.h:1 hacks/config/worm.xml.h:2
-msgid "Count"
-msgstr "Antall"
-
-#: hacks/config/crystal.xml.h:3
-msgid "Crystal"
-msgstr "Krystall"
-
-#: hacks/config/crystal.xml.h:4
-msgid "Draw Cell"
-msgstr "Tegn celle"
-
-#: hacks/config/crystal.xml.h:5 hacks/config/spheremonics.xml.h:3
-#: hacks/config/xearth.xml.h:6
-msgid "Draw Grid"
-msgstr "Tegn rutenett"
-
-#: hacks/config/crystal.xml.h:7
-msgid "Horizontal Symmetries"
-msgstr "Horisontal symmetri"
-
-#: 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:14
-msgid "Vertical Symmetries"
-msgstr "Vertikal symmetri"
-
-#: hacks/config/cube21.xml.h:1
-msgid ""
-"Animates a Rubik-like puzzle known as Cube 21 or Square-1. The rotations are "
-"chosen randomly. Requires OpenGL. Written by Vasek Potocek."
-msgstr ""
-
-#: hacks/config/cube21.xml.h:2
-#, fuzzy
-msgid "Classic Edition"
-msgstr "Glass"
-
-#: hacks/config/cube21.xml.h:3
-#, fuzzy
-msgid "Cube 21"
-msgstr "Kube"
-
-#: hacks/config/cube21.xml.h:4
-#, fuzzy
-msgid "Cube size"
-msgstr "Cellestørrelse"
-
-#: hacks/config/cube21.xml.h:5
-msgid "Delay in ending position"
-msgstr ""
-
-#: hacks/config/cube21.xml.h:7
-#, fuzzy
-msgid "Global speed"
-msgstr "Haiens hastighet"
-
-#: hacks/config/cube21.xml.h:10
-#, fuzzy
-msgid "Random color"
-msgstr "Tilfeldig bevegelse"
-
-#: hacks/config/cube21.xml.h:11 hacks/config/rocks.xml.h:8
-msgid "Rotation"
-msgstr "Rotasjon"
-
-#: hacks/config/cube21.xml.h:14
-msgid "Silver Edition"
-msgstr ""
-
-#: hacks/config/cube21.xml.h:15
-#, fuzzy
-msgid "Six random colors"
-msgstr "Tilfeldig bevegelse"
-
-#: hacks/config/cube21.xml.h:19
-#, fuzzy
-msgid "Spinning"
-msgstr "Pakking"
-
-#: hacks/config/cube21.xml.h:20
-#, fuzzy
-msgid "Start as cube"
-msgstr "Haiens hastighet"
-
-#: hacks/config/cube21.xml.h:21
-msgid "Start as random shape"
-msgstr ""
-
-#: hacks/config/cube21.xml.h:23
-#, fuzzy
-msgid "Two random colors"
-msgstr "Tilfeldig bevegelse"
-
-#: hacks/config/cube21.xml.h:25
-#, fuzzy
-msgid "Wander on screen"
-msgstr "Sentrer på skjermen"
-
-#: hacks/config/cube21.xml.h:26
-#, fuzzy
-msgid "Wandering"
-msgstr "Vandre"
-
-#: hacks/config/cube21.xml.h:27
-#, fuzzy
-msgid "White"
-msgstr "Vind"
-
-#: hacks/config/cubenetic.xml.h:2
-msgid "Cubenetic"
-msgstr "Kubenetikk"
-
-#: hacks/config/cubenetic.xml.h:3
-msgid "Display Solid Colors"
-msgstr "Vis helfylte farger"
-
-#: hacks/config/cubenetic.xml.h:4
-msgid "Display Surface Patterns"
-msgstr "Vis overflatemønster"
-
-#: hacks/config/cubenetic.xml.h:5
-msgid "Display Wireframe"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:6 hacks/config/glblur.xml.h:3
-#: hacks/config/glknots.xml.h:2 hacks/config/gltext.xml.h:3
-#: hacks/config/lavalite.xml.h:7 hacks/config/menger.xml.h:1
-#: hacks/config/molecule.xml.h:4 hacks/config/spheremonics.xml.h:1
-#: hacks/config/tangram.xml.h:1
-msgid "Don't Rotate"
-msgstr "Ikke roter"
-
-#: hacks/config/cubenetic.xml.h:7
-msgid ""
-"Draws a pulsating set of overlapping boxes with ever-chaning blobby patterns "
-"undulating across their surfaces. It's sort of a cubist Lavalite. Written by "
-"Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:14 hacks/config/glblur.xml.h:6
-#: hacks/config/glknots.xml.h:8 hacks/config/gltext.xml.h:7
-#: hacks/config/lavalite.xml.h:19 hacks/config/menger.xml.h:7
-#: hacks/config/molecule.xml.h:15 hacks/config/spheremonics.xml.h:10
-msgid "Rotate around X and Y axes"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:15 hacks/config/glblur.xml.h:7
-#: hacks/config/glknots.xml.h:9 hacks/config/gltext.xml.h:8
-#: hacks/config/lavalite.xml.h:20 hacks/config/menger.xml.h:8
-#: hacks/config/molecule.xml.h:16 hacks/config/spheremonics.xml.h:11
-msgid "Rotate around X and Z axes"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:16 hacks/config/glblur.xml.h:8
-#: hacks/config/glknots.xml.h:10 hacks/config/gltext.xml.h:9
-#: hacks/config/lavalite.xml.h:21 hacks/config/menger.xml.h:9
-#: hacks/config/molecule.xml.h:17 hacks/config/spheremonics.xml.h:12
-msgid "Rotate around X axis"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:17 hacks/config/glblur.xml.h:9
-#: hacks/config/glknots.xml.h:11 hacks/config/gltext.xml.h:10
-#: hacks/config/lavalite.xml.h:22 hacks/config/menger.xml.h:10
-#: hacks/config/molecule.xml.h:18 hacks/config/spheremonics.xml.h:13
-msgid "Rotate around Y and Z axes"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:18 hacks/config/glblur.xml.h:10
-#: hacks/config/glknots.xml.h:12 hacks/config/gltext.xml.h:11
-#: hacks/config/lavalite.xml.h:23 hacks/config/menger.xml.h:11
-#: hacks/config/molecule.xml.h:19 hacks/config/spheremonics.xml.h:14
-msgid "Rotate around Y axis"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:19 hacks/config/glblur.xml.h:11
-#: hacks/config/glknots.xml.h:13 hacks/config/gltext.xml.h:12
-#: hacks/config/lavalite.xml.h:24 hacks/config/menger.xml.h:12
-#: hacks/config/molecule.xml.h:20 hacks/config/spheremonics.xml.h:15
-msgid "Rotate around Z axis"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:20 hacks/config/glblur.xml.h:12
-#: hacks/config/glknots.xml.h:14 hacks/config/gltext.xml.h:13
-#: hacks/config/lavalite.xml.h:25 hacks/config/menger.xml.h:13
-#: hacks/config/molecule.xml.h:21 hacks/config/spheremonics.xml.h:16
-msgid "Rotate around all three axes"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:25
-msgid "Surface Pattern Complexity"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:26
-msgid "Surface Pattern Overlap"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:27
-msgid "Surface Pattern Speed"
-msgstr ""
-
-#: hacks/config/cubenetic.xml.h:28 hacks/config/cubestorm.xml.h:13
-#: hacks/config/dangerball.xml.h:10 hacks/config/engine.xml.h:20
-#: hacks/config/glblur.xml.h:18 hacks/config/glforestfire.xml.h:19
-#: hacks/config/glknots.xml.h:22 hacks/config/glplanet.xml.h:14
-#: hacks/config/gltext.xml.h:20 hacks/config/lavalite.xml.h:31
-#: hacks/config/menger.xml.h:20 hacks/config/molecule.xml.h:26
-#: hacks/config/polyhedra.xml.h:165 hacks/config/spheremonics.xml.h:25
-#: hacks/config/wander.xml.h:15
-msgid "Wander"
-msgstr "Vandre"
-
-#: hacks/config/cubestorm.xml.h:2
-#, fuzzy
-msgid "CubeStorm"
-msgstr "Storm"
-
-#: hacks/config/cubestorm.xml.h:3
-msgid ""
-"Draws a series of rotating 3D boxes that intersect each other and eventually "
-"fill space. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/cubestorm.xml.h:6
-#, fuzzy
-msgid "Number of Cubes"
-msgstr "Antall sirkler"
-
-#: hacks/config/cubestorm.xml.h:10
-#, fuzzy
-msgid "Strut Thickness"
-msgstr "Tykkhet"
-
-#: hacks/config/cynosure.xml.h:1
-msgid ""
-"A hack similar to `greynetic', but less frenetic. The first implementation "
-"was by Stephen Linhart; then Ozymandias G. Desiderata wrote a Java applet "
-"clone. That clone was discovered by Jamie Zawinski, and ported to C for "
-"inclusion here."
-msgstr ""
-
-#: hacks/config/cynosure.xml.h:2
-msgid "Cynosure"
-msgstr "Cynosure"
-
-#: hacks/config/dangerball.xml.h:1
-msgid "DangerBall"
-msgstr "FareBall"
-
-#: hacks/config/dangerball.xml.h:2
-msgid ""
-"Draws a ball that periodically extrudes many random spikes. Ouch! Written by "
-"Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/dangerball.xml.h:7
-msgid "Spike Count"
-msgstr ""
-
-#: hacks/config/dangerball.xml.h:8
-msgid "Spike Growth"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:1
-msgid "DecayScreen"
-msgstr "Nedbrutt skjerm"
-
-#: hacks/config/decayscreen.xml.h:3
-msgid "Fuzzy Melt"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:4
-msgid "Melt Away From Center"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:5
-msgid "Melt Down"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:6
-msgid "Melt Down, Left"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:7
-msgid "Melt Down, Right"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:8
-msgid "Melt Left"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:9
-msgid "Melt Right"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:10
-msgid "Melt Towards Center"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:11
-msgid "Melt Up"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:12
-msgid "Melt Up, Left"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:13
-msgid "Melt Up, Right"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:14
-msgid "Melty Melt"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:15
-msgid "Random Melt Style"
-msgstr "Tilfeldig stil for smelting"
-
-#: hacks/config/decayscreen.xml.h:16
-msgid "Shuffle Melt"
-msgstr ""
-
-#: hacks/config/decayscreen.xml.h:19
-msgid "Stretchy Melt"
-msgstr "Strukket smelting"
-
-#: hacks/config/decayscreen.xml.h:20
-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 "
-"best if there's something colorful visible. Warning, if the effect continues "
-"after the screen saver is off, seek medical attention. Written by David "
-"Wald, Vivek Khera, Jamie Zawinski, and Vince Levey."
-msgstr ""
-
-#: hacks/config/deco.xml.h:3
-msgid "Deco"
-msgstr "Deko"
-
-#: hacks/config/deco.xml.h:6 hacks/config/menger.xml.h:5
-#: hacks/config/sierpinski3d.xml.h:4
-msgid "Max Depth"
-msgstr ""
-
-#: hacks/config/deco.xml.h:7
-msgid "Min Size"
-msgstr "Minste størrelse"
-
-#: hacks/config/deco.xml.h:9
-msgid ""
-"This one subdivides and colors rectangles randomly. It looks kind of like "
-"Brady-Bunch-era rec-room wall paneling. (Raven says: ``this screensaver is "
-"ugly enough to peel paint.'') Written by Jamie Zawinski, inspired by Java "
-"code by Michael Bayne."
-msgstr ""
-
-#: hacks/config/deco.xml.h:11 hacks/config/rd-bomb.xml.h:23
-#: hacks/config/whirlygig.xml.h:20 hacks/config/xearth.xml.h:33
-#: hacks/config/zoom.xml.h:10
-msgid "x"
-msgstr "x"
-
-#: hacks/config/deluxe.xml.h:2
-msgid "Deluxe"
-msgstr "Deluxe"
-
-#: hacks/config/deluxe.xml.h:12
-msgid ""
-"This draws a pulsing sequence of stars, circles, and lines. It would look "
-"better if it was faster, but as far as I can tell, there is no way to make "
-"this be both: fast, and flicker-free. Yet another reason X sucks. Written by "
-"Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/deluxe.xml.h:13
-msgid "Transparency"
-msgstr "Gjennomsiktighet"
-
-#: hacks/config/demon.xml.h:1
-msgid ""
-"A cellular automaton that starts with a random field, and organizes it into "
-"stripes and spirals. Written by David Bagley."
-msgstr ""
-
-#: hacks/config/demon.xml.h:3
-msgid "Demon"
-msgstr "Demon"
-
-#: hacks/config/demon.xml.h:11
-msgid "States"
-msgstr "Stater"
-
-#: hacks/config/discrete.xml.h:1
-msgid "Discrete"
-msgstr "Diskre"
-
-#: hacks/config/discrete.xml.h:5
-msgid ""
-"More ``discrete map'' systems, including new variants of Hopalong and Julia, "
-"and a few others. Written by Tim Auckland."
-msgstr ""
-
-#: hacks/config/distort.xml.h:1
-msgid "Black Hole"
-msgstr "Sort hull"
-
-#: hacks/config/distort.xml.h:2
-msgid "Bounce"
-msgstr "Sprett"
-
-#: hacks/config/distort.xml.h:3
-msgid "Distort"
-msgstr "Forvreng"
-
-#: hacks/config/distort.xml.h:6
-msgid "Lens Count"
-msgstr "Antall linser"
-
-#: hacks/config/distort.xml.h:7
-msgid "Lens Size"
-msgstr "Linsestørrelse"
-
-#: hacks/config/distort.xml.h:8
-msgid "Magnify"
-msgstr "Forstørr"
-
-#: hacks/config/distort.xml.h:10
-msgid "Reflect"
-msgstr "Reflekter"
-
-#: hacks/config/distort.xml.h:14
-msgid "Swamp Thing"
-msgstr "Sumpting"
-
-#: hacks/config/distort.xml.h:15
-msgid ""
-"This hack grabs an image of the screen, and then lets a transparent lens "
-"wander around the screen, magnifying whatever is underneath. Written by "
-"Jonas Munsin."
-msgstr ""
-
-#: hacks/config/distort.xml.h:16 hacks/config/moire.xml.h:12
-#: hacks/config/rd-bomb.xml.h:21 hacks/config/ripples.xml.h:16
-#: hacks/config/rotzoomer.xml.h:10 hacks/config/swirl.xml.h:10
-#: hacks/config/twang.xml.h:15 hacks/config/xflame.xml.h:7
-msgid "Use Shared Memory"
-msgstr "Bruk delt minne"
-
-#: hacks/config/distort.xml.h:17
-msgid "Vortex"
-msgstr ""
-
-#: hacks/config/drift.xml.h:1
-msgid "Drift"
-msgstr "Driv"
-
-#: hacks/config/drift.xml.h:4
-msgid "Fractal Growth"
-msgstr "Fraktal vekst"
-
-#: hacks/config/drift.xml.h:5
-msgid "High Dimensional Sphere"
-msgstr ""
-
-#: hacks/config/drift.xml.h:6
-msgid ""
-"How could one possibly describe this except as ``drifting recursive fractal "
-"cosmic flames?'' Another fine hack from the Scott Draves collection of fine "
-"hacks."
-msgstr ""
-
-#: hacks/config/drift.xml.h:7
-msgid "Lissojous Figures"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:1
-msgid "1 Gbyte cache"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:2
-msgid "100 Mbyte cache"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:3
-msgid "3 Gbyte cache"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:4
-msgid "300 Mbyte cache"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:5
-msgid "ElectricSheep"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:6
-msgid ""
-"ElectricSheep is an xscreensaver module that displays mpeg video of an "
-"animated fractal flame. In the background, it contributes render cycles to "
-"the next animation. Periodically it uploades completed frames to the server, "
-"where they are compressed for distribution to all clients. This program is "
-"recommended only if you have a high bandwidth, always-on connection to the "
-"Internet. By Scott Draves. You can find it at &lt;http://www.electricsheep."
-"org/&gt;."
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:8
-msgid "Nickname"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:9
-#, fuzzy
-msgid "No Animation"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/electricsheep.xml.h:10
-msgid "No Network"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:11
-msgid "Repititions of each Sheep"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:12
-msgid "URL"
-msgstr ""
-
-#: hacks/config/electricsheep.xml.h:13
-#, fuzzy
-msgid "Unlimited"
-msgstr "Animer"
-
-#: hacks/config/electricsheep.xml.h:14 hacks/config/gleidescope.xml.h:13
-#: hacks/config/hyperball.xml.h:16 hacks/config/hypercube.xml.h:16
-#: hacks/config/zoom.xml.h:8
-msgid "Zoom"
-msgstr "Zoom"
-
-#: hacks/config/endgame.xml.h:1
-msgid ""
-"Black slips out of three mating nets, but the fourth one holds him tight! A "
-"brilliant composition! Written by Blair Tennessy."
-msgstr ""
-
-#: hacks/config/endgame.xml.h:2
-msgid "Endgame"
-msgstr ""
-
-#: hacks/config/engine.xml.h:1
-msgid "Audi Quattro (5 cylinders)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:2
-msgid "BMW M3 (4 cylinders)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:3
-msgid "BMW M5 (6 cylinders)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:4
-msgid "Corvette Z06 (8 cylinders, V)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:5
-msgid "Dodge Viper (10 cylinders, V)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:6
-msgid ""
-"Draws a simple model of an engine that floats around the screen. Written by "
-"Ben Buxton and Ed Beroset."
-msgstr ""
-
-#: hacks/config/engine.xml.h:7
-msgid "Engine"
-msgstr ""
-
-#: hacks/config/engine.xml.h:9
-msgid "Honda Insight (3 cylinders)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:10
-msgid "Jaguar XKE (12 cylinders, V)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:11
-msgid "Porsche 911 (6 cylinders, flat)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:12
-#, fuzzy
-msgid "Random Engine"
-msgstr "Gjør tilfeldig"
-
-#: hacks/config/engine.xml.h:13
-msgid "Show Engine Name"
-msgstr ""
-
-#: hacks/config/engine.xml.h:18
-msgid "Subaru XT (6 cylinders, V)"
-msgstr ""
-
-#: hacks/config/engine.xml.h:19
-msgid "VW Beetle (4 cylinders, flat)"
-msgstr ""
-
-#: hacks/config/epicycle.xml.h:1
-msgid "1 minute"
-msgstr "1 minutt"
-
-#: hacks/config/epicycle.xml.h:2 hacks/config/polyhedra.xml.h:1
-msgid "1 second"
-msgstr "1 sekund"
-
-#: hacks/config/epicycle.xml.h:4
-msgid "Epicycle"
-msgstr "Episyklus"
-
-#: hacks/config/epicycle.xml.h:6
-msgid "Harmonics"
-msgstr ""
-
-#: hacks/config/epicycle.xml.h:12
-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 ""
-
-#: hacks/config/eruption.xml.h:1
-msgid "An exposive version of XFlame. By W.P. van Paassen."
-msgstr ""
-
-#: hacks/config/eruption.xml.h:2
-msgid "Cooling factor"
-msgstr ""
-
-#: hacks/config/eruption.xml.h:4
-#, fuzzy
-msgid "Eruption"
-msgstr "Ekstrusjon"
-
-#: hacks/config/eruption.xml.h:7 hacks/config/fluidballs.xml.h:9
-#: hacks/config/qix.xml.h:9 hacks/config/speedmine.xml.h:4
-msgid "Gravity"
-msgstr "Gravitet"
-
-#: hacks/config/eruption.xml.h:8
-msgid "Heat"
-msgstr ""
-
-#: hacks/config/eruption.xml.h:9
-#, fuzzy
-msgid "Inferno"
-msgstr "Forstyrrelse"
-
-#: hacks/config/eruption.xml.h:10
-msgid "Little"
-msgstr ""
-
-#: hacks/config/eruption.xml.h:13
-msgid "Negative"
-msgstr ""
-
-#: hacks/config/eruption.xml.h:15
-#, fuzzy
-msgid "Number of Particles"
-msgstr "Antall sirkler"
-
-#: hacks/config/eruption.xml.h:16
-#, fuzzy
-msgid "Pleasant"
-msgstr "GLPlanet"
-
-#: hacks/config/eruption.xml.h:17
-msgid "Positive"
-msgstr ""
-
-#: hacks/config/euler2d.xml.h:2
-msgid "Euler2d"
-msgstr ""
-
-#: hacks/config/euler2d.xml.h:10 hacks/config/whirlwindwarp.xml.h:5
-msgid "Particles"
-msgstr "Partikler"
-
-#: hacks/config/euler2d.xml.h:11
-msgid "Power"
-msgstr "Kraft"
-
-#: hacks/config/euler2d.xml.h:13
-msgid ""
-"Simulates two dimensional Incompressible Inviscid Fluid Flow. Written by "
-"Stephen Montgomery-Smith."
-msgstr ""
-
-#: hacks/config/extrusion.xml.h:1
-msgid ""
-"Draws various rotating extruded shapes that twist around, lengthen, and turn "
-"inside out. Created by David Konerding from the samples that come with the "
-"GL Extrusion library by Linas Vepstas."
-msgstr ""
-
-#: hacks/config/extrusion.xml.h:2
-msgid "Extrusion"
-msgstr "Ekstrusjon"
-
-#: hacks/config/extrusion.xml.h:4
-msgid "Helix 2"
-msgstr "Helix 2"
-
-#: hacks/config/extrusion.xml.h:5
-msgid "Helix 3"
-msgstr "Helix 3"
-
-#: hacks/config/extrusion.xml.h:6
-msgid "Helix 4"
-msgstr "Helix 4"
-
-#: hacks/config/extrusion.xml.h:7
-msgid "Join Offset"
-msgstr "Avstand for sammenslåing"
-
-#: hacks/config/extrusion.xml.h:8 hacks/config/polytopes.xml.h:16
-msgid "Random Object"
-msgstr "Tilfeldig objekt"
-
-#: hacks/config/extrusion.xml.h:9
-msgid "Screw"
-msgstr "Skru"
-
-#: hacks/config/extrusion.xml.h:14
-msgid "Taper"
-msgstr ""
-
-#: hacks/config/extrusion.xml.h:15
-msgid "Texture Image"
-msgstr "Teksturbilde"
-
-#: hacks/config/extrusion.xml.h:16
-msgid "Twistoid"
-msgstr "Vridning"
-
-#: hacks/config/extrusion.xml.h:17 hacks/config/glplanet.xml.h:12
-#: hacks/config/pulsar.xml.h:19
-msgid "Use Flat Coloring"
-msgstr ""
-
-#: hacks/config/extrusion.xml.h:18 hacks/config/glplanet.xml.h:13
-msgid "Use Lighting"
-msgstr "Bruk lyn"
-
-#: hacks/config/fadeplot.xml.h:2
-msgid ""
-"Draws what looks like a waving ribbon following a sinusoidal path. Written "
-"by Bas van Gaalen and Charles Vidal."
-msgstr ""
-
-#: hacks/config/fadeplot.xml.h:3
-msgid "FadePlot"
-msgstr "FadePlot"
-
-#: hacks/config/fiberlamp.xml.h:1
-msgid "Draws a groovy rotating fiber optic lamp. Written by Tim Auckland."
-msgstr ""
-
-#: hacks/config/fiberlamp.xml.h:3
-msgid "Fiberlamp"
-msgstr ""
-
-#: hacks/config/fiberlamp.xml.h:4
-#, fuzzy
-msgid "Fibers"
-msgstr "Fisk"
-
-#: hacks/config/fiberlamp.xml.h:8
-msgid "Time between Knocks"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:1
-msgid "10 times"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:2
-msgid ""
-"A bunch of fireflies chase a few baits around the screen, leaving colorful "
-"tails which get blown around by the wind. Written by Matt Perry. This "
-"program is not included with the XScreenSaver package, but if you don't have "
-"it already, you can find it at &lt;http://somewhere.fscked.org/fireflies/"
-"&gt;."
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:3
-msgid "Add some fireflies"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:4
-msgid "Bait accel"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:5
-#, fuzzy
-msgid "Bait speed"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/fireflies.xml.h:6
-msgid "Color cycle speed"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:7
-#, fuzzy
-msgid "Draw baits"
-msgstr "Tegn maur"
-
-#: hacks/config/fireflies.xml.h:8
-#, fuzzy
-msgid "Faded colors"
-msgstr "Skremmende farger"
-
-#: hacks/config/fireflies.xml.h:9
-msgid "Fast Forward speed"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:10
-#, fuzzy
-msgid "Fireflies"
-msgstr "_Fil"
-
-#: hacks/config/fireflies.xml.h:11
-msgid "Firefly accel"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:12
-msgid "Firefly size"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:13
-#, fuzzy
-msgid "Firefly speed"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/fireflies.xml.h:14
-msgid "Frames per sec"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:15
-msgid "Glow factor"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:16
-#, fuzzy
-msgid "Half"
-msgstr "Halo"
-
-#: hacks/config/fireflies.xml.h:18 hacks/config/fluidballs.xml.h:10
-msgid "Hurricane"
-msgstr "Virvelvind"
-
-#: hacks/config/fireflies.xml.h:19
-msgid "Invisible"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:20
-msgid "Kill some fireflies"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:22
-msgid "Make all swarms do something"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:23
-msgid "Matrix (pause and rotate)"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:24
-#, fuzzy
-msgid "Maximum baits"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/fireflies.xml.h:25
-#, fuzzy
-msgid "Maximum flies"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/fireflies.xml.h:26
-msgid "Merge two swarms"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:27
-#, fuzzy
-msgid "Minimum baits"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/fireflies.xml.h:28
-#, fuzzy
-msgid "Minimum flies"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/fireflies.xml.h:29
-#, fuzzy
-msgid "Narrow"
-msgstr "Nær"
-
-#: hacks/config/fireflies.xml.h:30
-#, fuzzy
-msgid "Never"
-msgstr "Nær"
-
-#: hacks/config/fireflies.xml.h:31
-msgid "Normal swarm motion"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:33
-msgid "Opaque"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:35
-msgid "Split a swarm"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:36 hacks/config/fluidballs.xml.h:21
-#: hacks/config/glforestfire.xml.h:16
-msgid "Still"
-msgstr "Stille"
-
-#: hacks/config/fireflies.xml.h:37
-msgid "Swarm bursts into rainbow               "
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:38
-msgid "Swarm comes to a halt"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:39
-msgid "Swarm does loops"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:40
-msgid "Swarm hyperspeed"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:41
-msgid "Swarm tails glow"
-msgstr ""
-
-#: hacks/config/fireflies.xml.h:44
-#, fuzzy
-msgid "Wide"
-msgstr "Vind"
-
-#: hacks/config/fireflies.xml.h:45 hacks/config/fluidballs.xml.h:23
-msgid "Wind"
-msgstr "Vind"
-
-#: hacks/config/fireflies.xml.h:46
-msgid "Wind picks up"
-msgstr ""
-
-#: hacks/config/fireworkx.xml.h:1 hacks/config/lavalite.xml.h:3
-msgid "Activity"
-msgstr ""
-
-#: hacks/config/fireworkx.xml.h:4
-#, fuzzy
-msgid "Fireworkx"
-msgstr "_Fil"
-
-#: hacks/config/fireworkx.xml.h:5
-msgid "Light Flash"
-msgstr ""
-
-#: hacks/config/fireworkx.xml.h:6
-msgid ""
-"Pyrotechnics simulation eye-candy, MMX optimized. Turn off Light for speed. "
-"Clicks on the preview window Explodes..! Written by Rony B Chandran. http://"
-"www.ronybc.8k.com"
-msgstr ""
-
-#: hacks/config/fireworkx.xml.h:7
-msgid "Self Glowing Smoke!"
-msgstr ""
-
-#: hacks/config/fireworkx.xml.h:8
-msgid "Shoot The Shells up"
-msgstr ""
-
-#: hacks/config/flag.xml.h:1
-msgid "Bitmap for Flag"
-msgstr "Bitkart for flagg"
-
-#: hacks/config/flag.xml.h:3
-msgid "Flag"
-msgstr "Flagg"
-
-#: hacks/config/flag.xml.h:10
-msgid "Text for Flag"
-msgstr "Tekst for flagg"
-
-#: hacks/config/flag.xml.h:11
-msgid ""
-"This draws a waving colored flag, that undulates its way around the screen. "
-"The trick is the flag can contain arbitrary text and images. By default, it "
-"displays either the current system name and OS type, or a picture of "
-"``Bob,'' but you can replace the text or the image with a command-line "
-"option. Written by Charles Vidal and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/flame.xml.h:1 hacks/config/jigsaw.xml.h:1
-#: hacks/config/maze.xml.h:1 hacks/config/wander.xml.h:1
-msgid "0 Seconds"
-msgstr "0 scekunder"
-
-#: hacks/config/flame.xml.h:2 hacks/config/gleidescope.xml.h:1
-#: hacks/config/glslideshow.xml.h:2 hacks/config/maze.xml.h:2
-#: hacks/config/mirrorblob.xml.h:1
-msgid "10 Seconds"
-msgstr "10 sekunder"
-
-#: hacks/config/flame.xml.h:3
-msgid "Another iterative fractal generator. Written by Scott Draves."
-msgstr ""
-
-#: hacks/config/flame.xml.h:4 hacks/config/jigglypuff.xml.h:4
-msgid "Complexity"
-msgstr "Kompleksitet"
-
-#: hacks/config/flame.xml.h:8
-msgid "Flame"
-msgstr "Flamme"
-
-#: hacks/config/flame.xml.h:13
-msgid "Number of Fractals"
-msgstr "Antall fraktaler"
-
-#: hacks/config/flipflop.xml.h:2
-msgid "FlipFlop"
-msgstr ""
-
-#: hacks/config/flipflop.xml.h:3
-msgid ""
-"Flipflop draws a grid of 3D colored tiles that change positions with each "
-"other. Written by Kevin Ogden."
-msgstr ""
-
-#: hacks/config/flipflop.xml.h:6
-#, fuzzy
-msgid "Solid Tiles"
-msgstr "Helfylt gulv"
-
-#: hacks/config/flipscreen3d.xml.h:2
-msgid "Flipscreen3d"
-msgstr ""
-
-#: hacks/config/flipscreen3d.xml.h:3
-msgid ""
-"Grabs an image of the desktop, turns it into a GL texture map, and spins it "
-"around and deforms it in various ways. Written by Ben Buxton."
-msgstr ""
-
-#: hacks/config/fliptext.xml.h:1 hacks/config/starwars.xml.h:3
-msgid "Centered Text"
-msgstr "Sentrert tekst"
-
-#: hacks/config/fliptext.xml.h:2
-msgid ""
-"Draws successive pages of text. The lines flip in and out in a soothing 3D "
-"pattern. The text can be the output of a program or the contents of a file "
-"or URL, as configured on the \"Advanced\" tab of the main Screensaver "
-"Preferences window. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/fliptext.xml.h:4
-#, fuzzy
-msgid "FlipText"
-msgstr "Tekst"
-
-#: hacks/config/fliptext.xml.h:5 hacks/config/starwars.xml.h:7
-msgid "Flush Left Text"
-msgstr ""
-
-#: hacks/config/fliptext.xml.h:6 hacks/config/starwars.xml.h:8
-msgid "Flush Right Text"
-msgstr ""
-
-#: hacks/config/fliptext.xml.h:7 hacks/config/starwars.xml.h:9
-msgid "Font Point Size"
-msgstr ""
-
-#: hacks/config/fliptext.xml.h:11
-#, fuzzy
-msgid "Random Text Alignment"
-msgstr "Tilfeldig stil for smelting"
-
-#: hacks/config/fliptext.xml.h:15 hacks/config/starwars.xml.h:15
-msgid "Text Columns"
-msgstr "Tekstkolonner"
-
-#: hacks/config/fliptext.xml.h:16 hacks/config/starwars.xml.h:16
-msgid "Text Lines"
-msgstr "Tekstlinjer"
-
-#: hacks/config/flow.xml.h:3
-msgid "Flow"
-msgstr "Flyt"
-
-#: hacks/config/flow.xml.h:5
-#, fuzzy
-msgid "Length of trails"
-msgstr "Etterlat spor"
-
-#: hacks/config/flow.xml.h:13
-msgid ""
-"Strange attractors formed of flows in a 3D differential equation phase "
-"space. Written by Tim Auckland."
-msgstr ""
-
-#: hacks/config/flow.xml.h:16
-msgid "turn on/off bounding box."
-msgstr ""
-
-#: hacks/config/flow.xml.h:17
-#, fuzzy
-msgid "turn on/off double buffering."
-msgstr "Double buffer"
-
-#: hacks/config/flow.xml.h:18
-msgid "turn on/off periodic attractors."
-msgstr ""
-
-#: hacks/config/flow.xml.h:19
-msgid "turn on/off ride in the flow."
-msgstr ""
-
-#: hacks/config/flow.xml.h:20
-msgid "turn on/off rotating around attractor."
-msgstr ""
-
-#: hacks/config/flow.xml.h:21
-msgid "turn on/off search for new attractors."
-msgstr ""
-
-#: hacks/config/fluidballs.xml.h:1
-#, fuzzy
-msgid "      Freefall"
-msgstr "FrittFall"
-
-#: hacks/config/fluidballs.xml.h:4
-#, fuzzy
-msgid "Clay"
-msgstr "Pause"
-
-#: hacks/config/fluidballs.xml.h:7
-msgid "FluidBalls"
-msgstr "FlytendeBaller"
-
-#: hacks/config/fluidballs.xml.h:8 hacks/config/twang.xml.h:4
-msgid "Friction"
-msgstr "Friksjon"
-
-#: hacks/config/fluidballs.xml.h:11
-msgid "Jupiter"
-msgstr "Jupiter"
-
-#: hacks/config/fluidballs.xml.h:14
-msgid ""
-"Models the physics of bouncing balls, or of particles in a gas or fluid, "
-"depending on the settings. If \"Shake Box\" is selected, then every now and "
-"then, the box will be rotated, changing which direction is down (in order to "
-"keep the settled balls in motion.) By Peter Birtles and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/fluidballs.xml.h:15
-#, fuzzy
-msgid "Rubber"
-msgstr "Bobler"
-
-#: hacks/config/fluidballs.xml.h:16
-msgid "Shake Box"
-msgstr "Risteboks"
-
-#: hacks/config/fluidballs.xml.h:22
-msgid "Various Ball Sizes"
-msgstr ""
-
-#: hacks/config/flurry.xml.h:1
-msgid "Binary"
-msgstr ""
-
-#: hacks/config/flurry.xml.h:2
-#, fuzzy
-msgid "Classic"
-msgstr "Glass"
-
-#: hacks/config/flurry.xml.h:3
-#, fuzzy
-msgid "Fire"
-msgstr "_Fil"
-
-#: hacks/config/flurry.xml.h:4
-msgid "Flurry"
-msgstr ""
-
-#: hacks/config/flurry.xml.h:5
-msgid "Insane"
-msgstr ""
-
-#: hacks/config/flurry.xml.h:6
-#, fuzzy
-msgid "Psychedelic"
-msgstr "Psykedeliske farger"
-
-#: hacks/config/flurry.xml.h:7
-msgid "RGB"
-msgstr ""
-
-#: hacks/config/flurry.xml.h:10
-msgid ""
-"This port of the OSX screensaver of the same name draws a colourful star"
-"(fish)like flurry of particles. xscreensaver port by Tobias Sargeant &lt;"
-"tobias.sargeant@bigpond.com&gt; Original Mac version by Calum Robinson &lt;"
-"calumr@mac.com&gt; http://homepage.mac.com/calumr"
-msgstr ""
-
-#: hacks/config/flyingtoasters.xml.h:1
-msgid ""
-"A fleet of 3d space-age jet-powered flying toasters (and toast!) Inspired by "
-"the ancient Berkeley Systems After Dark flying toasters. By Jamie Zawinski "
-"and Baconmonkey."
-msgstr ""
-
-#: hacks/config/flyingtoasters.xml.h:2
-#, fuzzy
-msgid "Air Speed"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/flyingtoasters.xml.h:4
-msgid "Chrome Toasters"
-msgstr ""
-
-#: hacks/config/flyingtoasters.xml.h:6
-msgid "Flying Toasters"
-msgstr ""
-
-#: hacks/config/flyingtoasters.xml.h:7 hacks/config/glslideshow.xml.h:17
-#: hacks/config/jigglypuff.xml.h:12 hacks/config/juggle.xml.h:5
-#: hacks/config/mirrorblob.xml.h:15 hacks/config/pipes.xml.h:10
-msgid "None"
-msgstr "Ingen"
-
-#: hacks/config/flyingtoasters.xml.h:8
-#, fuzzy
-msgid "Number of Slices"
-msgstr "Antall sirkler"
-
-#: hacks/config/flyingtoasters.xml.h:9
-#, fuzzy
-msgid "Number of Toasters"
-msgstr "Antall punkter"
-
-#: hacks/config/flyingtoasters.xml.h:12
-#, fuzzy
-msgid "Solid Colors"
-msgstr "Helfylt gulv"
-
-#: hacks/config/flyingtoasters.xml.h:13
-#, fuzzy
-msgid "Swarm"
-msgstr "XStråleSverm"
-
-#: hacks/config/fontglide.xml.h:2
-#, fuzzy
-msgid "Brief"
-msgstr "Driv"
-
-#: hacks/config/fontglide.xml.h:5
-#, fuzzy
-msgid "Font Border Thickness"
-msgstr "Tykkhet"
-
-#: hacks/config/fontglide.xml.h:6
-msgid "FontGlide"
-msgstr ""
-
-#: hacks/config/fontglide.xml.h:7
-msgid "Horizontally scrolling text"
-msgstr ""
-
-#: hacks/config/fontglide.xml.h:10
-msgid "Pages of text"
-msgstr ""
-
-#: hacks/config/fontglide.xml.h:11
-msgid ""
-"Puts text on the screen using large characters that glide in from the edges, "
-"assemble, then disperse. Alternately, it can simply scroll whole sentences "
-"from right to left. The text can be the output of a program or the contents "
-"of a file or URL, as configured on the \"Advanced\" tab of the main "
-"Screensaver Preferences window. Written Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/fontglide.xml.h:14
-#, fuzzy
-msgid "Text Linger"
-msgstr "Tekstlinjer"
-
-#: hacks/config/fontglide.xml.h:16
-#, fuzzy
-msgid "Vapor Trails"
-msgstr "Spor"
-
-#: hacks/config/forest.xml.h:2 hacks/config/glforestfire.xml.h:6
-msgid "Forest"
-msgstr "Skog"
-
-#: hacks/config/forest.xml.h:7
-msgid ""
-"This draws fractal trees. Written by Peter Baumung. Everybody loves "
-"fractals, right?"
-msgstr ""
-
-#: hacks/config/fuzzyflakes.xml.h:2
-#, fuzzy
-msgid "Border Thickness"
-msgstr "Tykkhet"
-
-#: hacks/config/fuzzyflakes.xml.h:4
-msgid "Delay"
-msgstr "Pause"
-
-#: hacks/config/fuzzyflakes.xml.h:6
-msgid "Falling colored snowflake/flower shapes. Written by Barry Dmytro."
-msgstr ""
-
-#: hacks/config/fuzzyflakes.xml.h:9
-msgid "FuzzyFlakes"
-msgstr ""
-
-#: hacks/config/fuzzyflakes.xml.h:11 hacks/config/xspirograph.xml.h:4
-msgid "Layers"
-msgstr "Lag"
-
-#: hacks/config/fuzzyflakes.xml.h:14
-#, fuzzy
-msgid "Random Colors"
-msgstr "Tilfeldig bevegelse"
-
-#: hacks/config/galaxy.xml.h:4
-msgid "Galaxy"
-msgstr "Galakse"
-
-#: hacks/config/galaxy.xml.h:8
-#, fuzzy
-msgid "Rotate Viewpoint"
-msgstr "Lineær bevegelse"
-
-#: hacks/config/galaxy.xml.h:13
-msgid ""
-"This draws spinning galaxies, which then collide and scatter their stars to "
-"the, uh, four winds or something. Originally an Amiga program by Uli "
-"Siegmund."
-msgstr ""
-
-#: hacks/config/gears.xml.h:3
-msgid "Gears"
-msgstr "Gears"
-
-#: hacks/config/gears.xml.h:4
-msgid "Planetary Gear System"
-msgstr ""
-
-#: hacks/config/gears.xml.h:5 hacks/config/goop.xml.h:9
-msgid "Rotational Speed"
-msgstr ""
-
-#: hacks/config/gears.xml.h:9
-msgid ""
-"This draws sets of turning, interlocking gears, rotating in three "
-"dimensions. Another GL hack, by Danny Sung, Brian Paul, Ed Mackey, and Jamie "
-"Zawinski."
-msgstr ""
-
-#: hacks/config/gears.xml.h:10
-msgid "Three Gear System"
-msgstr ""
-
-#: hacks/config/gflux.xml.h:2
-msgid "Checkerboard"
-msgstr "Sjakkbrett"
-
-#: hacks/config/gflux.xml.h:5
-msgid ""
-"Draws a rippling waves on a rotating wireframe grid, using GL. Written by "
-"Josiah Pease."
-msgstr ""
-
-#: hacks/config/gflux.xml.h:7
-msgid "Flat Lighting"
-msgstr "Flatt lyn"
-
-#: hacks/config/gflux.xml.h:8
-msgid "GFlux"
-msgstr "GFlux"
-
-#: hacks/config/gflux.xml.h:9
-msgid "Mesh Density"
-msgstr ""
-
-#: hacks/config/gflux.xml.h:10
-msgid "Screen Image"
-msgstr "Skjermbilde"
-
-#: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:21
-msgid "Wave Speed"
-msgstr "Bølgehastighet"
-
-#: hacks/config/gflux.xml.h:15 hacks/config/glmatrix.xml.h:20
-msgid "Waves"
-msgstr "Bølger"
-
-#: hacks/config/gflux.xml.h:16
-msgid "Wire Mesh"
-msgstr ""
-
-#: hacks/config/glblur.xml.h:1
-#, fuzzy
-msgid "Blur Smoothness"
-msgstr "Myke linjer"
-
-#: hacks/config/glblur.xml.h:5
-msgid "GLBlur"
-msgstr ""
-
-#: hacks/config/glblur.xml.h:17
-msgid ""
-"This program draws a box and a few line segments, and generates a radial "
-"blur outward from it. This creates flowing field effects. This is done by "
-"rendering the scene into a small texture, then repeatedly rendering "
-"increasingly-enlarged and increasingly-transparent versions of that texture "
-"onto the frame buffer. As such, it's quite graphics intensive: don't bother "
-"trying to run this if you don't have hardware-accelerated OpenGL texture "
-"support. It will hurt your machine bad."
-msgstr ""
-
-#: hacks/config/gleidescope.xml.h:2 hacks/config/glslideshow.xml.h:6
-#: hacks/config/mirrorblob.xml.h:3
-#, fuzzy
-msgid "5 Minutes"
-msgstr "1 minutt"
-
-#: hacks/config/gleidescope.xml.h:3
-msgid ""
-"An OpenGL kaleidescope that operates on your desktop image, or on image "
-"files loaded from disk. Written by andrew dean."
-msgstr ""
-
-#: hacks/config/gleidescope.xml.h:4
-#, fuzzy
-msgid "Gleidescope"
-msgstr "Kaleidoskop"
-
-#: hacks/config/gleidescope.xml.h:5
-#, fuzzy
-msgid "Image Duration"
-msgstr "V_arighet for utfasing"
-
-#: hacks/config/gleidescope.xml.h:6
-#, fuzzy
-msgid "Image file"
-msgstr "Bildefil"
-
-#: hacks/config/gleidescope.xml.h:8
-#, fuzzy
-msgid "Move"
-msgstr "Flere"
-
-#: hacks/config/gleidescope.xml.h:11
-msgid "Size of tube"
-msgstr ""
-
-#: hacks/config/glforestfire.xml.h:2
-msgid "Desert"
-msgstr "Ørken"
-
-#: hacks/config/glforestfire.xml.h:3
-msgid ""
-"Draws an animation of sprinkling fire-like 3D triangles in a landscape "
-"filled with trees. Requires OpenGL, and a machine with fast hardware support "
-"for texture maps. Written by Eric Lassauge &lt;lassauge@users.sourceforge."
-"net&gt;."
-msgstr ""
-
-#: hacks/config/glforestfire.xml.h:5 hacks/config/glmatrix.xml.h:9
-msgid "Fog"
-msgstr "Tåke"
-
-#: hacks/config/glforestfire.xml.h:7
-msgid "GLForestFire"
-msgstr "GLSkogbrann"
-
-#: hacks/config/glforestfire.xml.h:8
-msgid "Huge Fire"
-msgstr "Storbrann"
-
-#: hacks/config/glforestfire.xml.h:9
-msgid "No shadow"
-msgstr "Ingen skygge"
-
-#: hacks/config/glforestfire.xml.h:11
-msgid "Number of trees"
-msgstr "Antall trær"
-
-#: hacks/config/glforestfire.xml.h:12
-msgid "Rain"
-msgstr "Regn"
-
-#: hacks/config/glforestfire.xml.h:17
-msgid "Track mouse"
-msgstr ""
-
-#: hacks/config/glhanoi.xml.h:1
-#, fuzzy
-msgid "Enable fog"
-msgstr "Aktiver tåke"
-
-#: hacks/config/glhanoi.xml.h:2
-#, fuzzy
-msgid "Enable lighting"
-msgstr "Aktiver lyn"
-
-#: hacks/config/glhanoi.xml.h:4
-msgid "Frame Delay (us)"
-msgstr ""
-
-#: hacks/config/glhanoi.xml.h:5
-msgid "GLHanoi"
-msgstr ""
-
-#: hacks/config/glhanoi.xml.h:6
-#, fuzzy
-msgid "Number of Disks"
-msgstr "Antall sirkler"
-
-#: hacks/config/glhanoi.xml.h:9
-msgid ""
-"Solves the Towers of Hanoi puzzle. Move N disks from one pole to another, "
-"one disk at a time, with no disk ever resting on a disk smaller than itself. "
-"Written by Dave Atkinson."
-msgstr ""
-
-#: hacks/config/glknots.xml.h:4
-msgid "GLKnots"
-msgstr ""
-
-#: hacks/config/glknots.xml.h:5
-msgid ""
-"Generates some twisting 3d knot patterns. Spins 'em around. Written by Jamie "
-"Zawinski."
-msgstr ""
-
-#: hacks/config/glknots.xml.h:7 hacks/config/lavalite.xml.h:17
-#: hacks/config/spheremonics.xml.h:9
-msgid "Resolution"
-msgstr "Oppløsing"
-
-#: hacks/config/glknots.xml.h:15
-#, fuzzy
-msgid "Segmented"
-msgstr "Segmenter"
-
-#: hacks/config/glknots.xml.h:18 hacks/config/lavalite.xml.h:28
-#: hacks/config/xmountains.xml.h:25
-msgid "Smooth"
-msgstr "Myk"
-
-#: hacks/config/glmatrix.xml.h:2 hacks/config/xmatrix.xml.h:1
-msgid "Binary Encoding"
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:4
-#, fuzzy
-msgid "Draw Glyphs"
-msgstr "Tegn flekker"
-
-#: hacks/config/glmatrix.xml.h:5
-#, fuzzy
-msgid "Draw Outlines"
-msgstr "Tegn maur"
-
-#: hacks/config/glmatrix.xml.h:6
-#, fuzzy
-msgid "Draw Solid Boxes"
-msgstr "Tegn flekker"
-
-#: hacks/config/glmatrix.xml.h:7
-msgid ""
-"Draws 3D dropping characters similar to what is seen in the title sequence "
-"of \"The Matrix\". See also \"xmatrix\" for a 2D rendering of the similar "
-"effect that appeared on the computer monitors actually *in* the movie. "
-"Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:10
-#, fuzzy
-msgid "GLMatrix"
-msgstr "Xmatrise"
-
-#: hacks/config/glmatrix.xml.h:11 hacks/config/xmatrix.xml.h:7
-msgid "Genetic Encoding"
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:12
-#, fuzzy
-msgid "Glyph Density"
-msgstr "Tetthet"
-
-#: hacks/config/glmatrix.xml.h:13
-#, fuzzy
-msgid "Glyph Speed"
-msgstr "Hastighet på fisk"
-
-#: hacks/config/glmatrix.xml.h:14 hacks/config/xmatrix.xml.h:8
-msgid "Hexadecimal Encoding"
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:15 hacks/config/xmatrix.xml.h:11
-msgid "Matrix Encoding"
-msgstr ""
-
-#: hacks/config/glmatrix.xml.h:16
-#, fuzzy
-msgid "Panning"
-msgstr "Pakking"
-
-#: hacks/config/glplanet.xml.h:1
-msgid ""
-"Draws a planet bouncing around in space. Written by David Konerding. The "
-"built-in image is a map of the earth (extracted from `xearth'), but you can "
-"wrap any texture around the sphere, e.g., the planetary textures that come "
-"with `ssystem'."
-msgstr ""
-
-#: hacks/config/glplanet.xml.h:3
-msgid "GLPlanet"
-msgstr "GLPlanet"
-
-#: hacks/config/glplanet.xml.h:4
-msgid "Image File"
-msgstr "Bildefil"
-
-#: hacks/config/glplanet.xml.h:5
-msgid "Roll"
-msgstr ""
-
-#: hacks/config/glslideshow.xml.h:4 hacks/config/rd-bomb.xml.h:5
-#: hacks/config/substrate.xml.h:4 hacks/config/xplanet.xml.h:4
-#, no-c-format
-msgid "100%"
-msgstr "100%"
-
-#: hacks/config/glslideshow.xml.h:5 hacks/config/glsnake.xml.h:2
-#: hacks/config/mirrorblob.xml.h:2
-msgid "30 Seconds"
-msgstr "30 sekunder"
-
-#: hacks/config/glslideshow.xml.h:8
-#, no-c-format
-msgid "50%"
-msgstr ""
-
-#: hacks/config/glslideshow.xml.h:9
-msgid "Always show at least this much of the image:"
-msgstr ""
-
-#: hacks/config/glslideshow.xml.h:10 hacks/config/mirrorblob.xml.h:6
-#, fuzzy
-msgid "Crossfade Duration:"
-msgstr "V_arighet for utfasing"
-
-#: hacks/config/glslideshow.xml.h:11
-msgid "Frame Rate:"
-msgstr ""
-
-#: hacks/config/glslideshow.xml.h:12
-msgid "GLSlideshow"
-msgstr ""
-
-#: hacks/config/glslideshow.xml.h:15
-msgid ""
-"Loads a random sequence of images and smoothly scans and zooms around in "
-"each, fading from pan to pan. To tell it where to find the images to "
-"display, go to the \"Advanced\" tab on the Screensaver Preferences window. "
-"Select \"Choose Random Images\", and enter your image directory in the text "
-"field right below that. (Note: not the the \"Advanced\" button at the bottom "
-"of this window: the tab at the top of the *other* window.) This program "
-"requires a good video card capable of supporting large textures. Written by "
-"Jamie Zawinski and Mike Oliphant."
-msgstr ""
-
-#: hacks/config/glslideshow.xml.h:18
-#, fuzzy
-msgid "Pan/Zoom Duration:"
-msgstr "V_arighet for utfasing"
-
-#: hacks/config/glsnake.xml.h:1 hacks/config/lavalite.xml.h:1
-msgid "1"
-msgstr "1"
-
-#: hacks/config/glsnake.xml.h:3
-#, fuzzy
-msgid "Angular Velocity"
-msgstr "Maks fart"
-
-#: hacks/config/glsnake.xml.h:4
-msgid ""
-"Draws a simulation of the Rubik's Snake puzzle. Written by Jamie Wilkinson, "
-"Andrew Bennetts, and Peter Aylett."
-msgstr ""
-
-#: hacks/config/glsnake.xml.h:7
-msgid "GlSnake"
-msgstr "GLSlange"
-
-#: hacks/config/glsnake.xml.h:8
-msgid "Loose"
-msgstr "Løs"
-
-#: hacks/config/glsnake.xml.h:9
-msgid "Packing"
-msgstr "Pakking"
-
-#: hacks/config/glsnake.xml.h:11
-#, fuzzy
-msgid "Show Titles"
-msgstr "Vis etiketter"
-
-#: hacks/config/glsnake.xml.h:14
-msgid "Tight"
-msgstr "Tett"
-
-#: hacks/config/glsnake.xml.h:16
-#, fuzzy
-msgid "Y Angular Velocity"
-msgstr "Maks fart"
-
-#: hacks/config/glsnake.xml.h:17
-#, fuzzy
-msgid "Z Angular Velocity"
-msgstr "Maks fart"
-
-#: hacks/config/gltext.xml.h:1
-msgid "Always face front"
-msgstr ""
-
-#: hacks/config/gltext.xml.h:2
-msgid ""
-"Displays a few lines of text spinning around in a solid 3D font. Written by "
-"Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/gltext.xml.h:5
-msgid "GLText"
-msgstr "GLTekst"
-
-#: hacks/config/gltext.xml.h:6
-#, fuzzy
-msgid "Program"
-msgstr "Tekstprogram"
-
-#: hacks/config/gltext.xml.h:18
-msgid "Spin all the way around"
-msgstr ""
-
-#: hacks/config/gltext.xml.h:19 hacks/config/noseguy.xml.h:5
-msgid "Text"
-msgstr "Tekst"
-
-#: hacks/config/goban.xml.h:1
-msgid "Goban"
-msgstr "Goban"
-
-#: hacks/config/goban.xml.h:2
-msgid ""
-"Replays historical games of go (aka wei-chi and baduk) on the screen. By "
-"Scott Draves. You can find it at &lt;http://www.draves.org/goban/&gt;."
-msgstr ""
-
-#: hacks/config/goop.xml.h:1
-msgid "Additive Colors (reflected light)"
-msgstr ""
-
-#: hacks/config/goop.xml.h:2
-msgid "Blob Count"
-msgstr "Antall blubber"
-
-#: hacks/config/goop.xml.h:3
-msgid "Elasticity"
-msgstr "Elastisitet"
-
-#: hacks/config/goop.xml.h:5
-msgid "Goop"
-msgstr "Goop"
-
-#: hacks/config/goop.xml.h:8
-msgid "Opaque Blobs"
-msgstr ""
-
-#: hacks/config/goop.xml.h:12
-msgid "Speed Limit"
-msgstr "Fartsgrense"
-
-#: hacks/config/goop.xml.h:13
-msgid "Subtractive Colors (transmitted light)"
-msgstr ""
-
-#: hacks/config/goop.xml.h:14
-msgid ""
-"This draws set of animating, transparent, amoeba-like blobs. The blobs "
-"change shape as they wander around the screen, and they are translucent, so "
-"you can see the lower blobs through the higher ones, and when one passes "
-"over another, their colors merge. I got the idea for this from a cool mouse "
-"pad I have, which achieves the same kind of effect in real life by having "
-"several layers plastic with colored oil between them. Written by Jamie "
-"Zawinski."
-msgstr ""
-
-#: hacks/config/goop.xml.h:15
-msgid "Transparent Blobs"
-msgstr "Gjennomsiktige blubber"
-
-#: hacks/config/goop.xml.h:16
-msgid "XOR Blobs"
-msgstr "XOR-blubber"
-
-#: hacks/config/grav.xml.h:3
-msgid "Grav"
-msgstr "Grav"
-
-#: hacks/config/grav.xml.h:6
-msgid "Object Trails"
-msgstr "Objektspor"
-
-#: hacks/config/grav.xml.h:7
-msgid "Orbital Decay"
-msgstr "Avtagning i banen"
-
-#: 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/greynetic.xml.h:2
-msgid "Greynetic"
-msgstr "Greynetic"
-
-#: hacks/config/greynetic.xml.h:5
-msgid ""
-"This draws random colored and stippled rectangles. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/halftone.xml.h:1
-msgid "Delay (Large = low cpu load)"
-msgstr ""
-
-#: hacks/config/halftone.xml.h:2
-msgid "Dot fill factor"
-msgstr ""
-
-#: hacks/config/halftone.xml.h:3
-#, fuzzy
-msgid "Dot size"
-msgstr "Størrelse på maur"
-
-#: hacks/config/halftone.xml.h:4
-msgid ""
-"Draws the gravity force in each point on the screen seen through a halftone "
-"dot pattern. The gravity force is calculated from a set of moving mass "
-"points. View it from a distance for best effect. Written by Peter Jaric &lt;"
-"peter@jaric.org&gt;."
-msgstr ""
-
-#: hacks/config/halftone.xml.h:5
-#, fuzzy
-msgid "Gravity points"
-msgstr "Gravitet"
-
-#: hacks/config/halftone.xml.h:6
-#, fuzzy
-msgid "Halftone"
-msgstr "Halo"
-
-#: hacks/config/halftone.xml.h:10
-msgid "Maximum mass"
-msgstr ""
-
-#: hacks/config/halftone.xml.h:11
-#, fuzzy
-msgid "Maximum speed"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/halftone.xml.h:12
-msgid "Minimum mass"
-msgstr ""
-
-#: hacks/config/halftone.xml.h:13
-#, fuzzy
-msgid "Minimum speed"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/halo.xml.h:1
-msgid "Animate Circles"
-msgstr "Animer sirkler"
-
-#: hacks/config/halo.xml.h:3
-msgid "Halo"
-msgstr "Halo"
-
-#: hacks/config/halo.xml.h:5
-msgid "Number of Circles"
-msgstr "Antall sirkler"
-
-#: hacks/config/halo.xml.h:7
-#, fuzzy
-msgid "Ramp Mode"
-msgstr "Tilfeldig modus"
-
-#: hacks/config/halo.xml.h:9
-msgid "Seuss Mode"
-msgstr ""
-
-#: hacks/config/halo.xml.h:12
-msgid ""
-"This draws trippy psychedelic circular patterns that hurt to look at. It can "
-"also animate the control-points, but that takes a lot of CPU and bandwidth. "
-"Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/helix.xml.h:4
-msgid "Helix"
-msgstr "Helix"
-
-#: hacks/config/helix.xml.h:5
-msgid ""
-"This repeatedly generates spirally string-art-ish patterns. Written by Jamie "
-"Zawinski."
-msgstr ""
-
-#: hacks/config/hopalong.xml.h:3
-msgid "EJK1"
-msgstr ""
-
-#: hacks/config/hopalong.xml.h:4
-msgid "EJK2"
-msgstr ""
-
-#: hacks/config/hopalong.xml.h:5
-msgid "EJK3"
-msgstr ""
-
-#: hacks/config/hopalong.xml.h:6
-msgid "EJK4"
-msgstr ""
-
-#: hacks/config/hopalong.xml.h:7
-msgid "EJK5"
-msgstr ""
-
-#: hacks/config/hopalong.xml.h:8
-msgid "EJK6"
-msgstr ""
-
-#: hacks/config/hopalong.xml.h:11
-msgid "Hopalong"
-msgstr "Hopalong"
-
-#: hacks/config/hopalong.xml.h:12
-msgid "Jong"
-msgstr "Jong"
-
-#: hacks/config/hopalong.xml.h:16
-msgid "Martin"
-msgstr "Martin"
-
-#: hacks/config/hopalong.xml.h:19
-msgid "RR"
-msgstr "RR"
-
-#: hacks/config/hopalong.xml.h:20
-msgid "Sine"
-msgstr "Sinus"
-
-#: hacks/config/hopalong.xml.h:24
-msgid ""
-"This draws lacy fractal patterns, based on iteration in the imaginary plane, "
-"from a 1986 Scientific American article. Mostly written by Patrick Naughton."
-msgstr ""
-
-#: hacks/config/hyperball.xml.h:4
-msgid "Hyperball"
-msgstr "Hyperball"
-
-#: hacks/config/hyperball.xml.h:5
-msgid ""
-"Hyperball is to hypercube as dodecahedron is to cube: this displays a 2D "
-"projection of the sequence of 3D objects which are the projections of the 4D "
-"analog to the dodecahedron. Technically, it is a \"120 cell polytope.\" "
-"Written by Joe Keane. See also the \"polytopes\" hack for a more general "
-"version of this using OpenGL."
-msgstr ""
-
-#: hacks/config/hyperball.xml.h:10 hacks/config/hypercube.xml.h:10
-msgid "XW Rotation"
-msgstr ""
-
-#: hacks/config/hyperball.xml.h:11 hacks/config/hypercube.xml.h:11
-msgid "XY Rotation"
-msgstr ""
-
-#: hacks/config/hyperball.xml.h:12 hacks/config/hypercube.xml.h:12
-msgid "XZ Rotation"
-msgstr ""
-
-#: hacks/config/hyperball.xml.h:13 hacks/config/hypercube.xml.h:13
-msgid "YW Rotation"
-msgstr ""
-
-#: hacks/config/hyperball.xml.h:14 hacks/config/hypercube.xml.h:14
-msgid "YZ Rotation"
-msgstr ""
-
-#: hacks/config/hyperball.xml.h:15 hacks/config/hypercube.xml.h:15
-msgid "ZW Rotation"
-msgstr ""
-
-#: hacks/config/hypercube.xml.h:4
-msgid "Hypercube"
-msgstr "Hyperkube"
-
-#: hacks/config/hypercube.xml.h:9
-msgid ""
-"This displays 2D projections of the sequence of 3D objects which are the "
-"projections of the 4D analog to the cube: as a square is composed of four "
-"lines, each touching two others; and a cube is composed of six squares, each "
-"touching four others; a hypercube is composed of eight cubes, each touching "
-"six others. To make it easier to visualize the rotation, it uses a different "
-"color for the edges of each face. Don't think about it too long, or your "
-"brain will melt. Written by Joe Keane, Fritz Mueller, and Jamie Zawinski. "
-"See also the \"polytopes\" hack for a more general version of this using "
-"OpenGL."
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:1 hacks/config/polytopes.xml.h:1
-msgid "-4.0"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:2 hacks/config/polytopes.xml.h:5
-msgid "4.0"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:3
-msgid "4D Hypertorus"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:4
-#, fuzzy
-msgid "Color Wheel"
-msgstr "Farger"
-
-#: hacks/config/hypertorus.xml.h:5 hacks/config/polytopes.xml.h:10
-#, fuzzy
-msgid "Display Speed"
-msgstr "Stil"
-
-#: hacks/config/hypertorus.xml.h:7 hacks/config/polytopes.xml.h:12
-msgid "Orthographic 3d"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:8 hacks/config/polytopes.xml.h:13
-msgid "Orthographic 4d"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:9 hacks/config/polytopes.xml.h:14
-msgid "Perspective 3d"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:10 hacks/config/polytopes.xml.h:15
-msgid "Perspective 4d"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:11
-#, fuzzy
-msgid "See-Through Bands"
-msgstr "Veksle mellom farger."
-
-#: hacks/config/hypertorus.xml.h:12
-msgid "See-Through Spirals (1 Spiral)"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:13
-msgid "See-Through Spirals (16 Spirals)"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:14
-msgid "See-Through Spirals (2 Spirals)"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:15
-msgid "See-Through Spirals (4 Spirals)"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:16
-msgid "See-Through Spirals (8 Spirals)"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:19
-#, fuzzy
-msgid "Solid Object"
-msgstr "Helfylte objekter"
-
-#: hacks/config/hypertorus.xml.h:20 hacks/config/mirrorblob.xml.h:19
-#: hacks/config/polytopes.xml.h:21 hacks/config/pulsar.xml.h:16
-msgid "Solid Surface"
-msgstr "Hel overflate"
-
-#: hacks/config/hypertorus.xml.h:21
-msgid ""
-"This program shows a rotating Clifford Torus: a torus lying on the \"surface"
-"\" of a 4D hypersphere. Written by Carsten Steger, inspired by Thomas "
-"Banchoff's book \"Beyond the Third Dimension: Geometry, Computer Graphics, "
-"and Higher Dimensions\", Scientific American Library, 1990."
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:22 hacks/config/polytopes.xml.h:23
-#, fuzzy
-msgid "Transparent Surface"
-msgstr "Gjennomsiktig"
-
-#: hacks/config/hypertorus.xml.h:23
-msgid "Two-Sided"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:24 hacks/config/polytopes.xml.h:24
-#, fuzzy
-msgid "WX Rotation Speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/hypertorus.xml.h:25 hacks/config/polytopes.xml.h:25
-#, fuzzy
-msgid "WY Rotation Speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/hypertorus.xml.h:26 hacks/config/polytopes.xml.h:26
-#, fuzzy
-msgid "WZ Rotation Speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/hypertorus.xml.h:27 hacks/config/polytopes.xml.h:27
-msgid "Wireframe Mesh"
-msgstr ""
-
-#: hacks/config/hypertorus.xml.h:28 hacks/config/polytopes.xml.h:28
-#, fuzzy
-msgid "XY Rotation Speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/hypertorus.xml.h:29 hacks/config/polytopes.xml.h:29
-#, fuzzy
-msgid "XZ Rotation Speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/hypertorus.xml.h:30 hacks/config/polytopes.xml.h:30
-#, fuzzy
-msgid "YZ Rotation Speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/ifs.xml.h:1
-msgid "2"
-msgstr ""
-
-#: hacks/config/ifs.xml.h:2
-msgid "Blend"
-msgstr ""
-
-#: hacks/config/ifs.xml.h:3
-#, fuzzy
-msgid "Detail"
-msgstr "Forvalg"
-
-#: hacks/config/ifs.xml.h:5
-#, fuzzy
-msgid "Function"
-msgstr "Friksjon"
-
-#: hacks/config/ifs.xml.h:6
-#, fuzzy
-msgid "Functions"
-msgstr "Friksjon"
-
-#: hacks/config/ifs.xml.h:7
-msgid "IFS"
-msgstr "IFS"
-
-#: hacks/config/ifs.xml.h:9
-#, fuzzy
-msgid "Number of Colours"
-msgstr "Antall farger"
-
-#: hacks/config/ifs.xml.h:11 hacks/config/phosphor.xml.h:6
-msgid "Scale"
-msgstr "Skala"
-
-#: hacks/config/ifs.xml.h:12
-#, fuzzy
-msgid "Single"
-msgstr "Sinus"
-
-#: hacks/config/ifs.xml.h:15
-msgid ""
-"This one draws spinning, colliding iterated-function-system images. Note "
-"that the \"quality\" parameter is exponential. Number of points drawn is "
-"functions^detail. The number of colours is only used in Blend mode to "
-"provide a palette to create the base colours. These are then blended "
-"together in a non-colourmap friendly fashion. Written by Chris Le Sueur."
-msgstr ""
-
-#: hacks/config/ifs.xml.h:16
-#, fuzzy
-msgid "Translate"
-msgstr "Triangel"
-
-#: hacks/config/imsmap.xml.h:3
-msgid "Brightness Gradients"
-msgstr ""
-
-#: hacks/config/imsmap.xml.h:7
-msgid "Hue Gradients"
-msgstr "Gradienter for glød"
-
-#: hacks/config/imsmap.xml.h:8
-msgid "IMSmap"
-msgstr "IMSkart"
-
-#: hacks/config/imsmap.xml.h:12
-msgid "Saturation Gradients"
-msgstr "Metningsgradienter"
-
-#: hacks/config/imsmap.xml.h:14
-msgid ""
-"This generates random cloud-like patterns. It looks quite different in "
-"monochrome and color. The basic idea is to take four points on the edge of "
-"the image, and assign each a random ``elevation''. Then find the point "
-"between them, and give it a value which is the average of the other four, "
-"plus some small random offset. Then coloration is done based on elevation. "
-"The color selection is done by binding the elevation to either hue, "
-"saturation, or brightness, and assigning random values to the others. The "
-"``brightness'' mode tends to yield cloudlike patterns, and the others tend "
-"to generate images that look like heat-maps or CAT-scans. Written by Juergen "
-"Nickelsen and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/interaggregate.xml.h:2
-#, fuzzy
-msgid "Interaggregate"
-msgstr "Forstyrrelse"
-
-#: hacks/config/interaggregate.xml.h:3 hacks/config/intermomentary.xml.h:3
-#, fuzzy
-msgid "Number of Discs"
-msgstr "Antall sirkler"
-
-#: hacks/config/interaggregate.xml.h:6
-msgid ""
-"The Intersection Aggregate is a fun visualization defining the relationships "
-"between objects with Casey Reas, William Ngan, and Robert Hodgin. "
-"Commissioned for display at the Whitney Museum of American Art. A surface "
-"filled with 100 medium to small sized circles. Each circle has a different "
-"size and direction, but moves at the same slow rate. Display: A. The "
-"instantaneous intersections of the circles. B. The aggregate intersections "
-"of the circles. Ported to XScreensaver from the art project \"InterAggregate"
-"\" at http://www.complexification.net"
-msgstr ""
-
-#: hacks/config/interference.xml.h:1 hacks/config/rotzoomer.xml.h:1
-msgid "0"
-msgstr ""
-
-#: hacks/config/interference.xml.h:2
-msgid "360"
-msgstr ""
-
-#: hacks/config/interference.xml.h:3
-msgid "Anim Speed"
-msgstr "Animasjonshastighet"
-
-#: hacks/config/interference.xml.h:4
-msgid ""
-"Another color-field hack, this one works by computing decaying sinusoidal "
-"waves, and allowing them to interfere with each other as their origins move. "
-"Written by Hannu Mallat."
-msgstr ""
-
-#: hacks/config/interference.xml.h:9
-msgid "Hue"
-msgstr ""
-
-#: hacks/config/interference.xml.h:10
-msgid "Interference"
-msgstr "Forstyrrelse"
-
-#: hacks/config/interference.xml.h:13 hacks/config/t3d.xml.h:9
-#: hacks/config/xearth.xml.h:11 hacks/config/zoom.xml.h:5
-msgid "Magnification"
-msgstr "Forstørrelse"
-
-#: hacks/config/interference.xml.h:16
-msgid "Number of Waves"
-msgstr "Antall bølger"
-
-#: hacks/config/interference.xml.h:20
-msgid "Wave Size"
-msgstr "Bølgestørrelse"
-
-#: hacks/config/intermomentary.xml.h:2
-msgid "Intermomentary"
-msgstr ""
-
-#: hacks/config/intermomentary.xml.h:6
-msgid ""
-"The Intersection Momentary is a fun visualization defining the relationships "
-"between objects with Casey Reas, William Ngan, and Robert Hodgin. "
-"Commissioned for display at the Whitney Museum of American Art. A surface "
-"filled with 100 medium to small sized circles. Each circle has a different "
-"size and direction, but moves at the same slow rate. Display: A. The "
-"instantaneous intersections of the circles. B. The aggregate intersections "
-"of the circles. Ported to XScreensaver from the art project \"InterMomentary"
-"\" at http://www.complexification.net"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:2
-msgid "Chrome"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:3
-msgid "Clown barf"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:5
-#, fuzzy
-msgid "Cycle"
-msgstr "Omganger"
-
-#: hacks/config/jigglypuff.xml.h:7
-msgid "Flower box"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:9
-msgid "Inertial damping"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:10
-msgid "JigglyPuff"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:14
-#, fuzzy
-msgid "Rotation speed"
-msgstr "Roteringshastighet"
-
-#: hacks/config/jigglypuff.xml.h:17 hacks/config/sphere.xml.h:7
-msgid "Sphere"
-msgstr "Sfære"
-
-#: hacks/config/jigglypuff.xml.h:18
-msgid "Sphere strength"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:19
-#, fuzzy
-msgid "Spookiness"
-msgstr "Splines"
-
-#: hacks/config/jigglypuff.xml.h:20
-msgid "Spoooooky"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:21 hacks/config/polyhedra.xml.h:148
-#: hacks/config/sballs.xml.h:16
-msgid "Tetrahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/jigglypuff.xml.h:22
-msgid ""
-"This little gem does bad things with quasi-spherical objects. The gist of it "
-"is that you have what is, structurally, a tetrahedron with tesselated faces. "
-"the vertices on these faces have forces on them in the form of one "
-"proportional to their distance from the surface of a sphere, and one which "
-"is proportional to how far they differ from some ideal distance from their "
-"neighbors. They also have inertia. The forces and distance are parameters "
-"and there are also a couple of visual parameters. The resulting effect can "
-"range from a shape that does nothing, to a frenetic polygon storm. Somewhere "
-"in between there it usually manifests as a blob that jiggles in a kind of "
-"disturbing manner. woo. It doesn't matter, however. You should just pick "
-"'random'. It overrides all the other options, except for fps, delay and "
-"complexity. By Keith Macleod"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:23
-msgid "Vertex-vertex behavior"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:24
-msgid "Vertex-vertex force"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:26
-msgid "collapse"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:27
-msgid "expand"
-msgstr ""
-
-#: hacks/config/jigglypuff.xml.h:28
-#, fuzzy
-msgid "none"
-msgstr "Ingen"
-
-#: hacks/config/jigglypuff.xml.h:29
-#, fuzzy
-msgid "strong"
-msgstr "Rar"
-
-#: hacks/config/jigsaw.xml.h:4
-msgid "Jigsaw"
-msgstr "Puslespill"
-
-#: hacks/config/jigsaw.xml.h:6
-msgid "Solved Duration"
-msgstr ""
-
-#: hacks/config/jigsaw.xml.h:8
-msgid ""
-"This grabs a screen image, carves it up into a jigsaw puzzle, shuffles it, "
-"and then solves the puzzle. This works especially well when you feed it an "
-"external video signal instead of letting it grab the screen image (actually, "
-"I guess this is generally true...) When it is grabbing a video image, it is "
-"sometimes pretty hard to guess what the image is going to look like once the "
-"puzzle is solved. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/juggle.xml.h:1
-msgid "Draws a juggling stick-man. Written by Tim Auckland."
-msgstr ""
-
-#: hacks/config/juggle.xml.h:3
-msgid "Juggle"
-msgstr "Jongler"
-
-#: hacks/config/juggle.xml.h:6
-#, fuzzy
-msgid "Performance Length"
-msgstr "Lengde på spor"
-
-#: hacks/config/juggle.xml.h:11
-msgid "Use Pattern "
-msgstr ""
-
-#: hacks/config/juggle.xml.h:12
-msgid "turn on/off Balls."
-msgstr ""
-
-#: hacks/config/juggle.xml.h:13
-#, fuzzy
-msgid "turn on/off Bowling Balls."
-msgstr "Double buffer"
-
-#: hacks/config/juggle.xml.h:14
-#, fuzzy
-msgid "turn on/off Clubs."
-msgstr "Double buffer"
-
-#: hacks/config/juggle.xml.h:15
-msgid "turn on/off Flaming Torches."
-msgstr ""
-
-#: hacks/config/juggle.xml.h:16
-msgid "turn on/off Knives."
-msgstr ""
-
-#: hacks/config/juggle.xml.h:17
-#, fuzzy
-msgid "turn on/off Rings."
-msgstr "Double buffer"
-
-#: hacks/config/juggle.xml.h:18
-#, fuzzy
-msgid "turn on/off pattern descriptions."
-msgstr "Double buffer"
-
-#: hacks/config/juggler3d.xml.h:1
-msgid ""
-"3D simulation of a juggler performing with balls, clubs and rings. Written "
-"by Brian Apps and partially based on his Win32 Juggle Saver program."
-msgstr ""
-
-#: hacks/config/juggler3d.xml.h:3
-#, fuzzy
-msgid "Juggler Horizontal Speed"
-msgstr "Horisontal symmetri"
-
-#: hacks/config/juggler3d.xml.h:4
-msgid "Juggler Spin Speed"
-msgstr ""
-
-#: hacks/config/juggler3d.xml.h:5
-#, fuzzy
-msgid "Juggler3D"
-msgstr "Jongler"
-
-#: hacks/config/juggler3d.xml.h:6
-#, fuzzy
-msgid "Juggling Speed"
-msgstr "Rullehastighet"
-
-#: hacks/config/juggler3d.xml.h:7
-#, fuzzy
-msgid "Max Height"
-msgstr "Maks fart"
-
-#: hacks/config/juggler3d.xml.h:8
-#, fuzzy
-msgid "Max Objects"
-msgstr "Helfylte objekter"
-
-#: hacks/config/juggler3d.xml.h:9
-msgid "Min Height"
-msgstr ""
-
-#: hacks/config/juggler3d.xml.h:10
-#, fuzzy
-msgid "Min Objects"
-msgstr "Helfylte objekter"
-
-#: hacks/config/julia.xml.h:3 hacks/config/rorschach.xml.h:4
-msgid "Iterations"
-msgstr "Gjennomganger"
-
-#: hacks/config/julia.xml.h:4
-msgid "Julia"
-msgstr "Julia"
-
-#: hacks/config/julia.xml.h:11
-msgid ""
-"This one draws spinning, animating (are you detecting a pattern here yet?) "
-"explorations of the Julia set. You've probably seen static images of this "
-"fractal form before, but it's a lot of fun to watch in motion as well. One "
-"interesting thing is that there is a small swinging dot passing in front of "
-"the image, which indicates the control point from which the rest of the "
-"image was generated. Written by Sean McCullough."
-msgstr ""
-
-#: hacks/config/kaleidescope.xml.h:1
-msgid ""
-"Another clone of an ancient meme, consisting largely of frenetic rotational "
-"motion of colored lines. This one is by Ron Tapia. The motion is nice, but I "
-"think it needs more solids, or perhaps just brighter colors. More variations "
-"in the rotational speed might help, too."
-msgstr ""
-
-#: hacks/config/kaleidescope.xml.h:4
-msgid "Kaleidescope"
-msgstr "Kaleidoskop"
-
-#: hacks/config/kaleidescope.xml.h:6 hacks/config/qix.xml.h:18
-msgid "Segments"
-msgstr "Segmenter"
-
-#: hacks/config/kaleidescope.xml.h:9
-msgid "Symmetry"
-msgstr ""
-
-#: hacks/config/kaleidescope.xml.h:10
-msgid "Trails"
-msgstr "Spor"
-
-#: hacks/config/klein.xml.h:3
-msgid "Klein"
-msgstr ""
-
-#: hacks/config/klein.xml.h:10
-msgid ""
-"This draws a visualization of a Klein bottle or some other interesting "
-"parametric surfaces. Written by Andrey Mirtchovski."
-msgstr ""
-
-#: hacks/config/klein.xml.h:11
-msgid "Use Randomized Surfaces and Primitives"
-msgstr ""
-
-#: hacks/config/klein.xml.h:12
-#, fuzzy
-msgid "Wander Around the Screen"
-msgstr "Sentrer på skjermen"
-
-#: hacks/config/kumppa.xml.h:5
-msgid "Kumppa"
-msgstr "Kumppa"
-
-#: hacks/config/kumppa.xml.h:7
-msgid "Randomize"
-msgstr "Gjør tilfeldig"
-
-#: 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/lament.xml.h:1
-msgid ""
-"Animates a simulation of Lemarchand's Box, repeatedly solving itself. "
-"Requires OpenGL, and a machine with fast hardware support for texture maps. "
-"Warning: occasionally opens doors. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/lament.xml.h:3
-msgid "Lament"
-msgstr "Lament"
-
-#: hacks/config/laser.xml.h:4
-msgid "Laser"
-msgstr "Laser"
-
-#: hacks/config/laser.xml.h:7
-msgid ""
-"Moving radiating lines, that look vaguely like scanning laser beams. Written "
-"by Pascal Pensa. (Frankie say: relax.)"
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:2 hacks/config/xmountains.xml.h:2
-msgid "10"
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:4
-msgid "Classic Lavalite"
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:5
-msgid "Cone Lavalite"
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:8
-msgid ""
-"Draws a 3D Simulation a Lava Lite(r): odd-shaped blobs of a mysterious "
-"substance are heated, slowly rise to the top of the bottle, and then drop "
-"back down as they cool. This program requires OpenGL and a fairly fast "
-"machine (both CPU and 3D performance.) Written by Jamie Zawinski. \"LAVA LITE"
-"(r) and the configuration of the LAVA(r) brand motion lamp are registered "
-"trademarks of Haggerty Enterprises, Inc. The configuration of the globe and "
-"base of the motion lamp are registered trademarks of Haggerty Enterprises, "
-"Inc. in the U.S.A. and in other countries around the world.\""
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:9
-msgid "Faceted"
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:11
-msgid "Giant Lavalite"
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:13
-msgid "LavaLite"
-msgstr ""
-
-#: hacks/config/lavalite.xml.h:15
-msgid "Max Blobs"
-msgstr "Maks antall blubber"
-
-#: hacks/config/lavalite.xml.h:16
-msgid "Random Lamp Style"
-msgstr "Tilfeldig lampestil"
-
-#: hacks/config/lavalite.xml.h:18
-msgid "Rocket Lavalite"
-msgstr ""
-
-#: hacks/config/lightning.xml.h:2
-msgid "Lightning"
-msgstr "Lyn"
-
-#: 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/lisa.xml.h:4
-msgid "Lisa"
-msgstr "Lisa"
-
-#: hacks/config/lisa.xml.h:10
-msgid "Steps"
-msgstr "Steg"
-
-#: hacks/config/lisa.xml.h:11
-msgid ""
-"This draws Lisajous loops, by Caleb Cullen. Remember that device they had "
-"the Phantom Zone prisoners in during their trial in Superman? I think that "
-"was one of these."
-msgstr ""
-
-#: hacks/config/lissie.xml.h:1
-msgid ""
-"Another Lissajous figure. This one draws the progress of circular shapes "
-"along a path. Written by Alexander Jolk."
-msgstr ""
-
-#: hacks/config/lissie.xml.h:5
-msgid "Lissie"
-msgstr "Lissie"
-
-#: hacks/config/lmorph.xml.h:1
-msgid "Closed Figures"
-msgstr ""
-
-#: hacks/config/lmorph.xml.h:2
-msgid "Control Points"
-msgstr "Kontrollpunkter"
-
-#: hacks/config/lmorph.xml.h:4
-msgid "Interpolation Steps"
-msgstr "Steg i interpolasjon"
-
-#: hacks/config/lmorph.xml.h:5
-msgid "LMorph"
-msgstr "LMorph"
-
-#: hacks/config/lmorph.xml.h:6
-msgid "Less"
-msgstr "Færre"
-
-#: hacks/config/lmorph.xml.h:8
-msgid "More"
-msgstr "Flere"
-
-#: hacks/config/lmorph.xml.h:9
-msgid "Open Figures"
-msgstr "Åpne figurer"
-
-#: hacks/config/lmorph.xml.h:10
-msgid "Open and Closed Figures"
-msgstr "Åpne og lukkede figurer"
-
-#: 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/loop.xml.h:3
-msgid "Loop"
-msgstr "Løkke"
-
-#: hacks/config/loop.xml.h:10
-msgid ""
-"This one produces loop-shaped colonies that spawn, age, and eventually die. "
-"Written by David Bagley."
-msgstr ""
-
-#: hacks/config/maze.xml.h:3
-msgid "Backtracking Generator"
-msgstr ""
-
-#: hacks/config/maze.xml.h:5 hacks/config/slidescreen.xml.h:3
-msgid "Grid Size"
-msgstr ""
-
-#: hacks/config/maze.xml.h:6
-msgid "Head Toward Exit"
-msgstr ""
-
-#: hacks/config/maze.xml.h:7
-msgid "Ignorant of Exit Direction"
-msgstr ""
-
-#: hacks/config/maze.xml.h:8
-msgid "Joining Generator"
-msgstr ""
-
-#: hacks/config/maze.xml.h:9
-msgid "Maze"
-msgstr "Labyrint"
-
-#: hacks/config/maze.xml.h:10
-#, fuzzy
-msgid "Post-Solve Delay"
-msgstr "Lengre pause"
-
-#: hacks/config/maze.xml.h:11
-#, fuzzy
-msgid "Pre-Solve Delay"
-msgstr "Lengre pause"
-
-#: hacks/config/maze.xml.h:12
-msgid "Random Generator"
-msgstr "Tilfeldighetsgenerator"
-
-#: hacks/config/maze.xml.h:13
-msgid "Seeding Generator"
-msgstr ""
-
-#: hacks/config/maze.xml.h:15
-msgid "Solve Speed"
-msgstr "Løsningshastighet"
-
-#: hacks/config/maze.xml.h:16
-msgid ""
-"This is the ancient X maze demo, modified to work with xscreensaver. It "
-"generates a random maze, then solves it with visual feedback. Originally by "
-"Jim Randell; modified by a cast of thousands."
-msgstr ""
-
-#: hacks/config/memscroller.xml.h:1
-#, fuzzy
-msgid "Draw Green"
-msgstr "Tegn rutenett"
-
-#: hacks/config/memscroller.xml.h:2
-#, fuzzy
-msgid "Draw Random Numbers"
-msgstr "Tegn etiketter"
-
-#: hacks/config/memscroller.xml.h:3
-#, fuzzy
-msgid "Draw in RGB"
-msgstr "Tegn maur"
-
-#: hacks/config/memscroller.xml.h:4
-msgid "Dump Memory"
-msgstr ""
-
-#: hacks/config/memscroller.xml.h:6
-#, fuzzy
-msgid "MemScroller"
-msgstr "Rullehastighet"
-
-#: hacks/config/memscroller.xml.h:9
-msgid ""
-"This draws a dump of its own process memory scrolling across the screen in "
-"three windows at three different rates. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/menger.xml.h:6
-msgid "Menger"
-msgstr "Menger"
-
-#: hacks/config/menger.xml.h:19
-msgid ""
-"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
-"by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/metaballs.xml.h:1
-#, fuzzy
-msgid "Big"
-msgstr "Lys"
-
-#: hacks/config/metaballs.xml.h:2
-msgid ""
-"Draws two dimensional metaballs: overlapping and merging balls with fuzzy "
-"edges. By W.P. van Paassen."
-msgstr ""
-
-#: hacks/config/metaballs.xml.h:7
-msgid "MetaBall Movement"
-msgstr ""
-
-#: hacks/config/metaballs.xml.h:8
-#, fuzzy
-msgid "MetaBall Radius"
-msgstr "Utgangsverdier"
-
-#: hacks/config/metaballs.xml.h:9
-#, fuzzy
-msgid "MetaBalls"
-msgstr "Baller"
-
-#: hacks/config/metaballs.xml.h:11
-#, fuzzy
-msgid "Number of MetaBalls"
-msgstr "Antall fraktaler"
-
-#: hacks/config/mirrorblob.xml.h:4
-msgid "Blobby"
-msgstr ""
-
-#: hacks/config/mirrorblob.xml.h:5 hacks/config/nerverot.xml.h:2
-msgid "Calm"
-msgstr "Rolig"
-
-#: hacks/config/mirrorblob.xml.h:7
-msgid ""
-"Draws a wobbly blob that distorts the image behind it. Requires OpenGL "
-"hardware acceleration for nice animation. Written by Jon Dowdall."
-msgstr ""
-
-#: hacks/config/mirrorblob.xml.h:8
-#, fuzzy
-msgid "Enable Colouring"
-msgstr "Aktiver teksturer"
-
-#: hacks/config/mirrorblob.xml.h:9
-msgid "Enable Reflected Image"
-msgstr ""
-
-#: hacks/config/mirrorblob.xml.h:10
-#, fuzzy
-msgid "Enable Walls"
-msgstr "Aktiver tåke"
-
-#: hacks/config/mirrorblob.xml.h:12
-#, fuzzy
-msgid "Field Points"
-msgstr "Punkter"
-
-#: hacks/config/mirrorblob.xml.h:13
-#, fuzzy
-msgid "Freaky"
-msgstr "_Fil"
-
-#: hacks/config/mirrorblob.xml.h:14
-msgid "MirrorBlob"
-msgstr ""
-
-#: hacks/config/mirrorblob.xml.h:16
-msgid "Offset Texture Coordinates"
-msgstr ""
-
-#: hacks/config/mirrorblob.xml.h:22
-msgid "Very Freaky"
-msgstr ""
-
-#: hacks/config/mirrorblob.xml.h:24
-#, fuzzy
-msgid "X Resolution"
-msgstr "Oppløsing"
-
-#: hacks/config/mirrorblob.xml.h:25
-#, fuzzy
-msgid "Y Resolution"
-msgstr "Oppløsing"
-
-#: hacks/config/mismunch.xml.h:5
-#, fuzzy
-msgid "Mismunch"
-msgstr "Munch"
-
-#: hacks/config/mismunch.xml.h:6
-msgid ""
-"Munching errors! This is a creatively broken misimplementation of the "
-"classic munching squares graphics hack. Written by Steven Hazel."
-msgstr ""
-
-#: hacks/config/mismunch.xml.h:7
-msgid "One"
-msgstr ""
-
-#: hacks/config/mismunch.xml.h:9
-msgid "Simultaneous Squares"
-msgstr ""
-
-#: hacks/config/mismunch.xml.h:13 hacks/config/munch.xml.h:10
-#: hacks/config/qix.xml.h:26
-msgid "XOR"
-msgstr "XOR"
-
-#: hacks/config/moebius.xml.h:1
-msgid ""
-"Another M. C. Escher hack by Marcelo Vianna, this one draws ``Moebius Strip "
-"II,'' a GL image of ants walking along the surface of a moebius strip."
-msgstr ""
-
-#: hacks/config/moebius.xml.h:2
-msgid "Draw Ants"
-msgstr "Tegn maur"
-
-#: hacks/config/moebius.xml.h:4
-msgid "Mesh Floor"
-msgstr ""
-
-#: hacks/config/moebius.xml.h:5
-msgid "Moebius"
-msgstr "Moebius"
-
-#: hacks/config/moebius.xml.h:8
-msgid "Solid Floor"
-msgstr "Helfylt gulv"
-
-#: hacks/config/moebius.xml.h:9 hacks/config/qix.xml.h:20
-msgid "Solid Objects"
-msgstr "Helfylte objekter"
-
-#: hacks/config/moire.xml.h:6
-msgid "Moire"
-msgstr "Moire"
-
-#: hacks/config/moire.xml.h:8 hacks/config/rorschach.xml.h:6
-msgid "Offset"
-msgstr "Avstand"
-
-#: hacks/config/moire.xml.h:10
-msgid ""
-"This one draws cool circular interference patterns. Most of the circles you "
-"see aren't explicitly rendered, but show up as a result of interactions "
-"between the other pixels that were drawn. Written by Jamie Zawinski, "
-"inspired by Java code by Michael Bayne. As he pointed out, the beauty of "
-"this one is that the heart of the display algorithm can be expressed with "
-"just a pair of loops and a handful of arithmetic, giving it a high ``display "
-"hack metric''."
-msgstr ""
-
-#: hacks/config/moire2.xml.h:1
-msgid ""
-"Another example of the fun you can have with moire interference patterns; "
-"this hack generates fields of concentric circles or ovals, and combines the "
-"planes with various operations. The planes are moving independently of one "
-"another, causing the interference lines to ``spray.'' Written by Jamie "
-"Zawinski."
-msgstr ""
-
-#: hacks/config/moire2.xml.h:4
-msgid "Moire2"
-msgstr "Moire2"
-
-#: hacks/config/molecule.xml.h:3
-msgid "Describe Molecule"
-msgstr "Beskriv molekyl"
-
-#: hacks/config/molecule.xml.h:5
-msgid "Draw Atomic Bonds"
-msgstr ""
-
-#: hacks/config/molecule.xml.h:6
-#, fuzzy
-msgid "Draw Atomic Nuclei"
-msgstr "Tegn atomer"
-
-#: hacks/config/molecule.xml.h:7 hacks/config/spheremonics.xml.h:2
-msgid "Draw Bounding Box"
-msgstr ""
-
-#: hacks/config/molecule.xml.h:8
-msgid "Draw Electron Shells"
-msgstr ""
-
-#: hacks/config/molecule.xml.h:9
-msgid ""
-"Draws several different representations of molecules. Some common molecules "
-"are built in, and it can also read PDB (Protein Data Base) files as input. "
-"Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/molecule.xml.h:12
-msgid "Label Atoms"
-msgstr ""
-
-#: hacks/config/molecule.xml.h:13
-msgid "Molecule"
-msgstr "Molekyl"
-
-#: hacks/config/molecule.xml.h:14
-#, fuzzy
-msgid "PDB File or Directory"
-msgstr "Bildekatalog"
-
-#: hacks/config/morph3d.xml.h:1
-msgid ""
-"Another 3d shape-changing GL hack, by Marcelo Vianna. It has the same shiny-"
-"plastic feel as Superquadrics, as many computer-generated objects do..."
-msgstr ""
-
-#: hacks/config/morph3d.xml.h:4
-msgid "Morph3D"
-msgstr "Morph3D"
-
-#: hacks/config/mountain.xml.h:3
-msgid ""
-"Generates random 3d plots that look vaguely mountainous. Written by Pascal "
-"Pensa."
-msgstr ""
-
-#: hacks/config/mountain.xml.h:5
-msgid "Mountain"
-msgstr "Fjell"
-
-#: hacks/config/munch.xml.h:1
-msgid ""
-"DATAI 2 ADDB 1,2 ROTC 2,-22 XOR 1,2 JRST .-4 As reported by HAKMEM, in 1962, "
-"Jackson Wright wrote the above PDP-1 code. That code still lives on in this "
-"screenhack, some 35 years later. The number of lines of enclosing code has "
-"increased substantially, however. This version is by Tim Showalter."
-msgstr ""
-
-#: hacks/config/munch.xml.h:5
-msgid "Munch"
-msgstr "Munch"
-
-#: hacks/config/nerverot.xml.h:1
-msgid "Blot Count"
-msgstr ""
-
-#: hacks/config/nerverot.xml.h:3
-msgid "Changes"
-msgstr "Endringer"
-
-#: hacks/config/nerverot.xml.h:4
-msgid "Colors"
-msgstr "Farger"
-
-#: hacks/config/nerverot.xml.h:5
-msgid "Crunchiness"
-msgstr ""
-
-#: hacks/config/nerverot.xml.h:7
-msgid ""
-"Draws different shapes composed of nervously vibrating squiggles, as if seen "
-"through a camera operated by a monkey on crack. By Dan Bornstein."
-msgstr ""
-
-#: hacks/config/nerverot.xml.h:10
-msgid "Frequent"
-msgstr ""
-
-#: hacks/config/nerverot.xml.h:16
-msgid "NerveRot"
-msgstr ""
-
-#: hacks/config/nerverot.xml.h:17
-msgid "Nervousness"
-msgstr "Nervøshet"
-
-#: hacks/config/nerverot.xml.h:18 hacks/config/pyro.xml.h:12
-msgid "Seldom"
-msgstr "Sjelden"
-
-#: hacks/config/nerverot.xml.h:21
-msgid "Spastic"
-msgstr "Spastisk"
-
-#: hacks/config/noof.xml.h:1
-msgid "Draws some rotatey patterns, using OpenGL. Written by Mark Kilgard."
-msgstr ""
-
-#: hacks/config/noof.xml.h:3
-msgid "Noof"
-msgstr ""
-
-#: hacks/config/noseguy.xml.h:1
-msgid ""
-"A little man with a big nose wanders around your screen saying things. The "
-"things which he says are the output of a program or the contents of a file "
-"or URL, as configured on the \"Advanced\" tab of the main Screensaver "
-"Preferences window. By Dan Heller and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/noseguy.xml.h:2
-msgid "Get Text from File"
-msgstr ""
-
-#: hacks/config/noseguy.xml.h:3
-msgid "Get Text from Program"
-msgstr ""
-
-#: hacks/config/noseguy.xml.h:4
-msgid "Noseguy"
-msgstr "Nesefyr"
-
-#: hacks/config/noseguy.xml.h:6
-msgid "Text File"
-msgstr "Tekstfil"
-
-#: hacks/config/noseguy.xml.h:8
-msgid "Use Text Below"
-msgstr ""
-
-#: hacks/config/pacman.xml.h:2
-#, fuzzy
-msgid "Pacman"
-msgstr "Pakking"
-
-#: hacks/config/pacman.xml.h:3
-#, fuzzy
-msgid "Player Size"
-msgstr "Flisstørrelse"
-
-#: hacks/config/pacman.xml.h:4
-msgid ""
-"Simulates a game of Pac-Man on a randomly-created level. Written by Edwin de "
-"Jong."
-msgstr ""
-
-#: hacks/config/pedal.xml.h:7
-msgid "Pedal"
-msgstr "Pedal"
-
-#: hacks/config/pedal.xml.h:8
-msgid ""
-"This is sort of a combination spirograph/string-art. It generates a large, "
-"complex polygon, and lets the X server do the bulk of the work by giving it "
-"an even/odd winding rule. Written by Dale Moore, based on some ancient PDP-"
-"11 code."
-msgstr ""
-
-#: hacks/config/penetrate.xml.h:1
-msgid "Always play well"
-msgstr ""
-
-#: hacks/config/penetrate.xml.h:2
-msgid "Explosions"
-msgstr "Eksplosjoner"
-
-#: hacks/config/penetrate.xml.h:5
-msgid "Penetrate"
-msgstr "Gjennomtreng"
-
-#: hacks/config/penetrate.xml.h:7
-msgid "Start badly, but learn"
-msgstr ""
-
-#: hacks/config/penetrate.xml.h:8
-msgid ""
-"This hack simulates the classic arcade game Missile Command. Written by Adam "
-"Miller."
-msgstr ""
-
-#: hacks/config/penrose.xml.h:1
-msgid "Draw Ammann Lines"
-msgstr ""
-
-#: hacks/config/penrose.xml.h:2
-#, fuzzy
-msgid ""
-"Draws quasiperiodic tilings; think of the implications on modern formica "
-"technology. Written by Timo Korvola. In April 1997, Sir Roger Penrose, a "
-"British math professor who has worked with Stephen Hawking on such topics as "
-"relativity, black holes, and whether time has a beginning, filed a copyright-"
-"infringement lawsuit against the Kimberly-Clark Corporation, which Penrose "
-"said copied a pattern he created (a pattern demonstrating that ``a "
-"nonrepeating pattern could exist in nature'') for its Kleenex quilted toilet "
-"paper. Penrose said he doesn't like litigation but, ``When it comes to the "
-"population of Great Britain being invited by a multinational to wipe their "
-"bottoms on what appears to be the work of a Knight of the Realm, then a last "
-"stand must be taken.'' As reported by News of the Weird #491, 4-jul-1997."
-msgstr ""
-"Tegner kvasiperiodiske fliser; tenk på implikasjonene for moderne formica-"
-"teknologi. Skrevet av Timo Korvola. \n"
-"I april 1997 anla Sir Roger Penrose, som har jobbet med Stephen Hawking med "
-"emner som relativitet, sorte hull og om tiden har en start, en rettsak om "
-"brudd på opphavsrett mot Kimberly-Clark Corporation fordi Penrose mente de "
-"hadde stjålet et mønster han hadde laget (et mønster som demonstrerer at "
-"\"et ikke-repeterende mønster kan eksistere i naturen\") til bruk på sitt "
-"Kleenex toalettpapir. Penrose sa han ikke likte det, men \"Når det kommer "
-"til at den engelske befolkningen blir invitert til å tørke seg i baken med "
-"noe som ser ut til å være arbeidet til en 'Knight of the realm', så må noen "
-"ta standpunkt.\" \t\t\t\t\t\t\t\t    \n"
-"\n"
-"Som rapportert av News of the Weird #491, 4-jul-1997."
-
-#: hacks/config/penrose.xml.h:6
-msgid "Penrose"
-msgstr "Pennerose"
-
-#: hacks/config/petri.xml.h:2
-msgid "Colony Shape"
-msgstr ""
-
-#: hacks/config/petri.xml.h:3
-msgid "Death Comes"
-msgstr ""
-
-#: hacks/config/petri.xml.h:4
-msgid "Diamond"
-msgstr "Diamant"
-
-#: hacks/config/petri.xml.h:6
-msgid "Fertility"
-msgstr "Fruktbarhet"
-
-#: hacks/config/petri.xml.h:12
-msgid "Maximum Lifespan"
-msgstr ""
-
-#: hacks/config/petri.xml.h:13
-msgid "Maximum Rate of Death"
-msgstr ""
-
-#: hacks/config/petri.xml.h:14
-msgid "Maximum Rate of Growth"
-msgstr ""
-
-#: hacks/config/petri.xml.h:15
-msgid "Minimum Lifespan"
-msgstr ""
-
-#: hacks/config/petri.xml.h:16
-msgid "Minimum Rate of Death"
-msgstr ""
-
-#: hacks/config/petri.xml.h:17
-msgid "Minimum Rate of Growth"
-msgstr ""
-
-#: hacks/config/petri.xml.h:18
-msgid "Mold Varieties"
-msgstr "Variasjoner for mugg"
-
-#: hacks/config/petri.xml.h:19
-msgid "Offspring"
-msgstr "Avkom"
-
-#: hacks/config/petri.xml.h:20
-msgid "Petri"
-msgstr "Petri"
-
-#: hacks/config/petri.xml.h:21
-msgid "Quickly"
-msgstr "Raskt"
-
-#: hacks/config/petri.xml.h:24
-msgid "Slowly"
-msgstr "Sakte"
-
-#: hacks/config/petri.xml.h:26
-msgid "Square"
-msgstr "Firkantet"
-
-#: hacks/config/petri.xml.h:27
-msgid ""
-"This simulates colonies of mold growing in a petri dish. Growing colored "
-"circles overlap and leave spiral interference in their wake. Written by Dan "
-"Bornstein."
-msgstr ""
-
-#: hacks/config/phosphor.xml.h:1
-msgid ""
-"Draws a simulation of an old terminal, with large pixels and long-sustain "
-"phosphor. This program is also a fully-functional VT100 emulator! The text "
-"can be the output of a program or the contents of a file or URL, as "
-"configured on the \"Advanced\" tab of the main Screensaver Preferences "
-"window. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/phosphor.xml.h:2
-msgid "Dump pipe"
-msgstr ""
-
-#: hacks/config/phosphor.xml.h:5
-msgid "Phosphor"
-msgstr "Fosfor"
-
-#: hacks/config/phosphor.xml.h:10
-#, fuzzy
-msgid "Use PTY"
-msgstr "Bruk"
-
-#: hacks/config/piecewise.xml.h:1
-msgid "Color shifting speed"
-msgstr ""
-
-#: hacks/config/piecewise.xml.h:6
-msgid "Maximum radius"
-msgstr ""
-
-#: hacks/config/piecewise.xml.h:7
-msgid "Minimum radius"
-msgstr ""
-
-#: hacks/config/piecewise.xml.h:8
-msgid "Piecewise"
-msgstr ""
-
-#: hacks/config/piecewise.xml.h:12
-msgid ""
-"This draws a bunch of moving circles which switch from visibility to "
-"invisibility at intersection points. Written by Geoffrey Irving."
-msgstr ""
-
-#: hacks/config/pinion.xml.h:1
-#, fuzzy
-msgid "100"
-msgstr "100%"
-
-#: hacks/config/pinion.xml.h:2
-msgid "2000"
-msgstr ""
-
-#: hacks/config/pinion.xml.h:4
-msgid ""
-"Draws an interconnected set of gears moving across the screen. Written by "
-"Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/pinion.xml.h:6
-#, fuzzy
-msgid "Gear Size"
-msgstr "Maks størrelse"
-
-#: hacks/config/pinion.xml.h:8
-#, fuzzy
-msgid "Max RPM"
-msgstr "Maks antall ringer"
-
-#: hacks/config/pinion.xml.h:9
-#, fuzzy
-msgid "Pinion"
-msgstr "Pakking"
-
-#: hacks/config/pinion.xml.h:11
-#, fuzzy
-msgid "Scrolling Speed"
-msgstr "Rullehastighet"
-
-#: hacks/config/pipes.xml.h:1
-msgid "Allow Tight Turns"
-msgstr ""
-
-#: hacks/config/pipes.xml.h:2
-#, fuzzy
-msgid "Ball Joints"
-msgstr "Baller"
-
-#: hacks/config/pipes.xml.h:3
-msgid "Curved Pipes"
-msgstr "Kurvede rør"
-
-#: hacks/config/pipes.xml.h:6
-msgid "Fisheye Lens"
-msgstr "Fiskeøyelinse"
-
-#: hacks/config/pipes.xml.h:7
-msgid "Gadgetry"
-msgstr ""
-
-#: hacks/config/pipes.xml.h:8
-msgid ""
-"If you've ever been in the same room with a Windows NT machine, you've "
-"probably seen this GL hack. This version is by Marcelo Vianna."
-msgstr ""
-
-#: hacks/config/pipes.xml.h:11
-msgid "Number of Pipe Systems"
-msgstr "Antall rørsystemer"
-
-#: hacks/config/pipes.xml.h:12
-msgid "Pipe Fittings"
-msgstr ""
-
-#: hacks/config/pipes.xml.h:13
-msgid "Pipes"
-msgstr "Rør"
-
-#: hacks/config/pipes.xml.h:17
-msgid "System Length"
-msgstr "Systemlengde"
-
-#: hacks/config/polyhedra.xml.h:4 hacks/config/sballs.xml.h:1
-msgid "Cube"
-msgstr "Kube"
-
-#: hacks/config/polyhedra.xml.h:5
-msgid "Cubitruncated Cuboctahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:6
-#, fuzzy
-msgid "Cuboctahedron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:7
-#, fuzzy
-msgid "Cubohemioctahedron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:8
-msgid "Deltoidal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:9
-msgid "Deltoidal Icositetrahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:10
-msgid "Disdyakisdodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:11
-msgid "Disdyakistriacontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:12
-msgid "Display Random Polyhedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:13
-msgid ""
-"Displays different 3D solids and some information about each. A new solid is "
-"chosen every few seconds. There are 75 uniform polyhedra, plus 5 infinite "
-"sets of prisms and antiprisms; including their duals brings the total to "
-"160. Written by Dr. Zvi Har'El and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:14
-msgid "Ditrigonal Dodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:15 hacks/config/sballs.xml.h:2
-msgid "Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:18
-msgid "Great Cubicuboctahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:19
-msgid "Great Deltoidal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:20
-msgid "Great Deltoidal Icositetrahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:21
-msgid "Great Dirhombicosidodecacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:22
-msgid "Great Dirhombicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:23
-msgid "Great Disdyakisdodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:24
-msgid "Great Disdyakistriacontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:25
-msgid "Great Ditrigonal Dodecacronic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:26
-msgid "Great Ditrigonal Dodecicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:27
-msgid "Great Ditrigonal Icosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:28
-msgid "Great Dodecacronic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:29
-msgid "Great Dodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:30
-#, fuzzy
-msgid "Great Dodecahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyhedra.xml.h:31
-msgid "Great Dodecahemicosacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:32
-msgid "Great Dodecahemicosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:33
-msgid "Great Dodecahemidodecacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:34
-msgid "Great Dodecahemidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:35
-msgid "Great Dodecicosacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:36
-msgid "Great Dodecicosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:37
-msgid "Great Dodecicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:38
-msgid "Great Hexacronic Icositetrahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:39
-msgid "Great Hexagonal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:40
-msgid "Great Icosacronic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:41
-#, fuzzy
-msgid "Great Icosahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyhedra.xml.h:42
-msgid "Great Icosicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:43
-msgid "Great Icosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:44
-msgid "Great Icosihemidodecacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:45
-msgid "Great Icosihemidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:46
-msgid "Great Inverted Pentagonal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:47
-msgid "Great Inverted Snub Icosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:48
-msgid "Great Pentagonal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:49
-msgid "Great Pentagrammic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:50
-msgid "Great Pentakisdodekahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:51
-msgid "Great Retrosnub Icosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:52
-msgid "Great Rhombic Triacontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:53
-msgid "Great Rhombicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:54
-msgid "Great Rhombicuboctahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:55
-msgid "Great Rhombidodecacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:56
-msgid "Great Rhombidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:57
-msgid "Great Rhombihexacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:58
-msgid "Great Rhombihexahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:59
-msgid "Great Snub Dodecicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:60
-msgid "Great Snub Icosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:61
-msgid "Great Stellapentakisdodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:62
-msgid "Great Stellated Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:63
-msgid "Great Stellated Truncated Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:64
-msgid "Great Triakisicosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:65
-msgid "Great Triakisoctahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:66
-msgid "Great Triambic Icosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:67
-msgid "Great Truncated Cuboctahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:68
-msgid "Great Truncated Icosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:69
-msgid "Great Truncated Icosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:70
-msgid "Hexahemioctacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:71 hacks/config/sballs.xml.h:5
-msgid "Icosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:72
-msgid "Icosidodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:73
-msgid "Icosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:74
-msgid "Icositruncated Dodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:75
-msgid "Inverted Snub Dodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:76
-msgid "Medial Deltoidal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:77
-msgid "Medial Disdyakistriacontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:78
-msgid "Medial Hexagonal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:79
-msgid "Medial Icosacronic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:80
-msgid "Medial Inverted Pentagonal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:81
-msgid "Medial Pentagonal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:82
-msgid "Medial Rhombic Triacontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:83
-msgid "Medial Triambic Icosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:85 hacks/config/sballs.xml.h:7
-msgid "Octahedron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:86
-#, fuzzy
-msgid "Octahemioctacron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:87
-#, fuzzy
-msgid "Octahemioctahedron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:88
-msgid "Pentagonal Antiprism"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:89
-msgid "Pentagonal Deltohedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:90
-msgid "Pentagonal Dipyramid"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:91
-msgid "Pentagonal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:92
-msgid "Pentagonal Icositetrahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:93
-msgid "Pentagonal Prism"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:94
-msgid "Pentagrammic Antiprism"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:95
-msgid "Pentagrammic Concave Deltohedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:96
-msgid "Pentagrammic Crossed Antiprism"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:97
-msgid "Pentagrammic Deltohedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:98
-msgid "Pentagrammic Dipyramid"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:99
-msgid "Pentagrammic Prism"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:100
-msgid "Pentakisdodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:101
-msgid "Polyhedra"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:102
-msgid "Rhombic Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:103
-msgid "Rhombic Triacontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:104
-msgid "Rhombicosacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:105
-#, fuzzy
-msgid "Rhombicosahedron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:106
-msgid "Rhombicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:107
-#, fuzzy
-msgid "Rhombicuboctahedron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:108
-msgid "Rhombidodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:109
-#, fuzzy
-msgid "Show Description"
-msgstr "Beskrivelse"
-
-#: hacks/config/polyhedra.xml.h:112
-msgid "Small Cubicuboctahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:113
-msgid "Small Ditrigonal Dodecacronic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:114
-msgid "Small Ditrigonal Dodecicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:115
-msgid "Small Ditrigonal Icosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:116
-msgid "Small Dodecacronic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:117
-msgid "Small Dodecahemicosacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:118
-msgid "Small Dodecahemicosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:119
-msgid "Small Dodecahemidodecacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:120
-msgid "Small Dodecahemidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:121
-msgid "Small Dodecicosacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:122
-msgid "Small Dodecicosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:123
-msgid "Small Dodecicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:124
-msgid "Small Hexacronic Icositetrahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:125
-msgid "Small Hexagonal Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:126
-msgid "Small Hexagrammic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:127
-msgid "Small Icosacronic Hexecontahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:128
-msgid "Small Icosicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:129
-msgid "Small Icosihemidodecacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:130
-msgid "Small Icosihemidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:131
-msgid "Small Retrosnub Icosicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:132
-msgid "Small Rhombidodecacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:133
-msgid "Small Rhombidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:134
-msgid "Small Rhombihexacron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:135
-msgid "Small Rhombihexahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:136
-msgid "Small Snub Icosicosidodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:137
-msgid "Small Stellapentakisdodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:138
-msgid "Small Stellated Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:139
-msgid "Small Stellated Truncated Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:140
-msgid "Small Triambic Icosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:141
-#, fuzzy
-msgid "Snub Cube"
-msgstr "Kube"
-
-#: hacks/config/polyhedra.xml.h:142
-msgid "Snub Dodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:143
-msgid "Snub Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:144
-msgid "Snub Icosidodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:146
-msgid "Stellated Truncated Hexahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:147
-#, fuzzy
-msgid "Tetradyakishexahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyhedra.xml.h:149
-#, fuzzy
-msgid "Tetrahemihexacron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyhedra.xml.h:150
-#, fuzzy
-msgid "Tetrahemihexahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyhedra.xml.h:151
-#, fuzzy
-msgid "Tetrakishexahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyhedra.xml.h:152
-#, fuzzy
-msgid "Triakisicosahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyhedra.xml.h:153
-#, fuzzy
-msgid "Triakisoctahedron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:154
-#, fuzzy
-msgid "Triakistetrahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyhedra.xml.h:155
-msgid "Tridyakisicosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:156
-msgid "Truncated Cube"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:157
-msgid "Truncated Cuboctahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:158
-msgid "Truncated Dodecadodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:159
-msgid "Truncated Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:160
-msgid "Truncated Great Dodecahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:161
-msgid "Truncated Icosahedron"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:162
-msgid "Truncated Icosidodechedon"
-msgstr ""
-
-#: hacks/config/polyhedra.xml.h:163
-#, fuzzy
-msgid "Truncated Octahedron"
-msgstr "Oktahedron"
-
-#: hacks/config/polyhedra.xml.h:164
-#, fuzzy
-msgid "Truncated Tetrahedron"
-msgstr "Tetrahedron"
-
-#: hacks/config/polyominoes.xml.h:3
-msgid "Identical Pieces"
-msgstr "Identiske deler"
-
-#: hacks/config/polyominoes.xml.h:7
-msgid "Polyominoes"
-msgstr "Polyminoer"
-
-#: hacks/config/polyominoes.xml.h:8
-msgid ""
-"Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
-"puzzle pieces. Written by Stephen Montgomery-Smith."
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:2
-msgid "120-Cell"
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:3
-msgid "16-Cell (Hyper-Octahedron)"
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:4
-msgid "24-Cell"
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:6
-msgid "5-Cell (Hyper-Tetrahedron)"
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:7
-msgid "600-Cell"
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:8
-msgid "8-Cell (Hypercube / Tesseract)"
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:9
-msgid "Colors By 4D Depth"
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:17
-msgid "Regular 4D Polytopes"
-msgstr ""
-
-#: hacks/config/polytopes.xml.h:19
-#, fuzzy
-msgid "Single Color"
-msgstr "Veksle mellom farger."
-
-#: hacks/config/polytopes.xml.h:22
-msgid ""
-"This program shows one of the six regular 4D polytopes rotating in 4D. "
-"Written by Carsten Steger, inspired by H.S.M Coxeter's book \"Regular "
-"Polytopes\", 3rd Edition, Dover Publications, Inc., 1973, and Thomas "
-"Banchoff's book \"Beyond the Third Dimension: Geometry, Computer Graphics, "
-"and Higher Dimensions\", Scientific American Library, 1990."
-msgstr ""
-
-#: hacks/config/pong.xml.h:2
-#, fuzzy
-msgid "Pong"
-msgstr "Langt"
-
-#: hacks/config/pong.xml.h:6
-msgid ""
-"The pong program simulates an ancient Pong home video game, as well as "
-"various artifacts from displaying it on a color TV set. Written by Jeremy "
-"English and Trevor Blackwell."
-msgstr ""
-
-#: hacks/config/popsquares.xml.h:2
-msgid "End color"
-msgstr ""
-
-#: hacks/config/popsquares.xml.h:7
-#, fuzzy
-msgid "Start color"
-msgstr "Skremmende farger"
-
-#: hacks/config/popsquares.xml.h:8
-msgid "Subdivision"
-msgstr ""
-
-#: hacks/config/popsquares.xml.h:9
-msgid ""
-"This draws a pop-art-ish looking grid of pulsing colors. By Levi Burton."
-msgstr ""
-
-#: hacks/config/popsquares.xml.h:10
-msgid "Twitch"
-msgstr ""
-
-#: hacks/config/popsquares.xml.h:11
-#, fuzzy
-msgid "popsquares"
-msgstr "Firkantet"
-
-#: hacks/config/providence.xml.h:1
-#, fuzzy
-msgid "Draw Eye"
-msgstr "Tegn etiketter"
-
-#: hacks/config/providence.xml.h:3
-msgid "Providence"
-msgstr ""
-
-#: hacks/config/providence.xml.h:8
-msgid ""
-"The providence code displays an eye, shrouded in glory, set upon the base of "
-"a pyramid. Written by Blair Tennessy."
-msgstr ""
-
-#: hacks/config/pulsar.xml.h:1
-msgid "Anti-alias Lines"
-msgstr ""
-
-#: hacks/config/pulsar.xml.h:3
-msgid ""
-"Draws some intersecting planes, making use of alpha blending, fog, textures, "
-"and mipmaps, plus a ``frames per second'' meter so that you can tell how "
-"fast your graphics card is... Requires OpenGL. Written by David Konerding."
-msgstr ""
-
-#: hacks/config/pulsar.xml.h:4
-msgid "Enable Blending"
-msgstr "Bruk blanding"
-
-#: hacks/config/pulsar.xml.h:5
-msgid "Enable Depth Buffer"
-msgstr ""
-
-#: hacks/config/pulsar.xml.h:6
-msgid "Enable Fog"
-msgstr "Aktiver tåke"
-
-#: hacks/config/pulsar.xml.h:7
-msgid "Enable Lighting"
-msgstr "Aktiver lyn"
-
-#: hacks/config/pulsar.xml.h:8
-msgid "Enable Texture Filtering"
-msgstr ""
-
-#: hacks/config/pulsar.xml.h:9
-msgid "Enable Texture Mipmaps"
-msgstr ""
-
-#: hacks/config/pulsar.xml.h:10
-msgid "Enable Texturing"
-msgstr "Aktiver teksturer"
-
-#: hacks/config/pulsar.xml.h:12
-msgid "Pulsar"
-msgstr "Pulsar"
-
-#: hacks/config/pulsar.xml.h:13
-#, fuzzy
-msgid "Quad Count"
-msgstr "Antall:"
-
-#: hacks/config/pulsar.xml.h:18
-msgid "Texture PPM File"
-msgstr "PPM-fil for tekstur"
-
-#: hacks/config/pyro.xml.h:3
-msgid "Explosive Yield"
-msgstr ""
-
-#: hacks/config/pyro.xml.h:6
-msgid "Launch Frequency"
-msgstr ""
-
-#: hacks/config/pyro.xml.h:9
-msgid "Particle Density"
-msgstr "Partikkeltetthet"
-
-#: hacks/config/pyro.xml.h:10
-msgid "Pyro"
-msgstr "Pyro"
-
-#: hacks/config/pyro.xml.h:11
-msgid ""
-"Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/qix.xml.h:1
-msgid "Additive Colors"
-msgstr "Additive farger"
-
-#: hacks/config/qix.xml.h:3
-msgid "Corners"
-msgstr "Hjørner"
-
-#: hacks/config/qix.xml.h:11
-msgid "Line Segments"
-msgstr "Linjesegmenter"
-
-#: hacks/config/qix.xml.h:12
-msgid "Linear Motion"
-msgstr "Lineær bevegelse"
-
-#: hacks/config/qix.xml.h:15
-msgid "Max Size"
-msgstr "Maks størrelse"
-
-#: hacks/config/qix.xml.h:16
-msgid "Qix"
-msgstr "Qix"
-
-#: hacks/config/qix.xml.h:17
-msgid "Random Motion"
-msgstr "Tilfeldig bevegelse"
-
-#: hacks/config/qix.xml.h:23
-msgid "Subtractive Colors"
-msgstr ""
-
-#: hacks/config/qix.xml.h:24
-msgid ""
-"This is the swiss army chainsaw of qix programs. It bounces a series of line "
-"segments around the screen, and uses variations on this basic motion pattern "
-"to produce all sorts of different presentations: line segments, filled "
-"polygons, overlapping translucent areas... Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/qix.xml.h:25
-msgid "Transparent"
-msgstr "Gjennomsiktig"
-
-#: hacks/config/queens.xml.h:2
-msgid "Queens"
-msgstr "Dronninger"
-
-#: hacks/config/queens.xml.h:5
-msgid ""
-"Solves the N-Queens problem (where, in this program, N is between 5 and 10 "
-"queens.) The problem is: how may one place N queens on an NxN chessboard "
-"such that no queen can attack a sister? Written by Blair Tennessy."
-msgstr ""
-
-#: hacks/config/rd-bomb.xml.h:1
-msgid "/"
-msgstr "/"
-
-#: hacks/config/rd-bomb.xml.h:3
-#, no-c-format
-msgid "1%"
-msgstr "1%"
-
-#: hacks/config/rd-bomb.xml.h:7
-msgid ""
-"Another variation of the `Bomb' program by Scott Draves. This draws a grid "
-"of growing square-like shapes that, once they overtake each other, react in "
-"unpredictable ways. ``RD'' stands for reaction-diffusion."
-msgstr ""
-
-#: hacks/config/rd-bomb.xml.h:8
-msgid "Epoch"
-msgstr "Epoke"
-
-#: hacks/config/rd-bomb.xml.h:10
-msgid "Fill Screen"
-msgstr "Fyll skjermen"
-
-#: hacks/config/rd-bomb.xml.h:14
-msgid "RD-Bomb"
-msgstr "RD-bombe"
-
-#: hacks/config/rd-bomb.xml.h:15
-msgid "Reaction/Diffusion"
-msgstr ""
-
-#: hacks/config/rd-bomb.xml.h:16
-#, fuzzy
-msgid "Seed Radius"
-msgstr "Utgangsverdier"
-
-#: hacks/config/rd-bomb.xml.h:19 hacks/config/twang.xml.h:12
-msgid "Tile Size"
-msgstr "Flisstørrelse"
-
-#: hacks/config/rd-bomb.xml.h:22
-msgid "Wander Speed"
-msgstr "Vandrehastighet"
-
-#: hacks/config/ripples.xml.h:1
-msgid "Big Drops"
-msgstr "Store dråper"
-
-#: hacks/config/ripples.xml.h:2
-msgid "Colors    Two"
-msgstr "Farger    To"
-
-#: hacks/config/ripples.xml.h:3
-msgid "Drizzle"
-msgstr ""
-
-#: hacks/config/ripples.xml.h:5
-msgid "Grab Screen Image"
-msgstr ""
-
-#: hacks/config/ripples.xml.h:6
-#, fuzzy
-msgid "Grayscale"
-msgstr "GreyScale"
-
-#: hacks/config/ripples.xml.h:7
-msgid "Lighting Effect"
-msgstr "Lyneffekt"
-
-#: hacks/config/ripples.xml.h:9
-msgid "Moving Splashes"
-msgstr ""
-
-#: hacks/config/ripples.xml.h:10
-msgid "Psychedelic Colors"
-msgstr "Psykedeliske farger"
-
-#: hacks/config/ripples.xml.h:11
-msgid "Ripples"
-msgstr "Bølger"
-
-#: hacks/config/ripples.xml.h:13
-msgid "Small Drops"
-msgstr "Små dråper"
-
-#: hacks/config/ripples.xml.h:14
-msgid "Storm"
-msgstr "Storm"
-
-#: hacks/config/ripples.xml.h:15
-msgid ""
-"This draws rippling interference patterns like splashing water. With the -"
-"water option, it manipulates your desktop image to look like something is "
-"dripping into it. Written by Tom Hammersley."
-msgstr ""
-
-#: hacks/config/rocks.xml.h:7
-msgid "Rocks"
-msgstr "Steiner"
-
-#: hacks/config/rocks.xml.h:10
-msgid "Steering"
-msgstr "Styring"
-
-#: hacks/config/rocks.xml.h:11
-msgid ""
-"This draws an animation of flight through an asteroid field, with changes in "
-"rotation and direction. It can also display 3D separations for red/blue "
-"glasses! Mostly written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/rocks.xml.h:13
-msgid "Velocity"
-msgstr ""
-
-#: hacks/config/rorschach.xml.h:7
-msgid "Rorschach"
-msgstr "Rorschach"
-
-#: hacks/config/rorschach.xml.h:9
-msgid ""
-"This generates random inkblot patterns. The algorithm is deceptively simple "
-"for how well it works; it merely walks a dot around the screen randomly, and "
-"then reflects the image horizontally, vertically, or both. Any deep-seated "
-"neurotic tendencies which this program reveals are your own problem. Written "
-"by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/rorschach.xml.h:10
-msgid "With X Symmetry"
-msgstr "Med symmetri om X-aksen"
-
-#: hacks/config/rorschach.xml.h:11
-msgid "With Y Symmetry"
-msgstr "Med symmetri om Y-aksen"
-
-#: hacks/config/rotor.xml.h:1
-msgid ""
-"Another ancient xlock demo, this one by Tom Lawrence. It draws a line "
-"segment moving along a complex spiraling curve."
-msgstr ""
-
-#: hacks/config/rotor.xml.h:4 hacks/config/wander.xml.h:9
-msgid "Length"
-msgstr "Lengde"
-
-#: hacks/config/rotor.xml.h:8
-msgid "Rotor"
-msgstr "Rotor"
-
-#: hacks/config/rotzoomer.xml.h:2
-msgid "60"
-msgstr ""
-
-#: hacks/config/rotzoomer.xml.h:3
-msgid "Animate"
-msgstr "Animer"
-
-#: hacks/config/rotzoomer.xml.h:4
-msgid ""
-"Creates a collage of rotated and scaled portions of the screen. Written by "
-"Claudio Matsuoka."
-msgstr ""
-
-#: hacks/config/rotzoomer.xml.h:6
-msgid "Rectangle Count"
-msgstr "Antall rektangler"
-
-#: hacks/config/rotzoomer.xml.h:7
-msgid "RotZoomer"
-msgstr "RotZoomer"
-
-#: hacks/config/rotzoomer.xml.h:8
-msgid "Stationary Rectangles"
-msgstr ""
-
-#: hacks/config/rotzoomer.xml.h:9
-msgid "Sweeping Arcs"
-msgstr ""
-
-#: hacks/config/rotzoomer.xml.h:11
-msgid "Wandering Rectangles"
-msgstr "Vandrende rektangler"
-
-#: hacks/config/rubik.xml.h:2
-msgid ""
-"Draws a Rubik's Cube that rotates in three dimensions and repeatedly "
-"shuffles and solves itself. Another fine GL hack by Marcelo Vianna."
-msgstr ""
-
-#: hacks/config/rubik.xml.h:5
-msgid "Rubik"
-msgstr "Rubik"
-
-#: hacks/config/rubik.xml.h:7
-msgid "Show Shuffling"
-msgstr "Vis stokking"
-
-#: hacks/config/sballs.xml.h:3
-msgid ""
-"Draws an animation of textured balls spinning like crazy in GL. Requires "
-"OpenGL, and a machine with fast hardware support for texture maps. Written "
-"by Eric Lassauge &lt;lassauge@users.sourceforge.net&gt;."
-msgstr ""
-
-#: hacks/config/sballs.xml.h:8
-msgid "Plane"
-msgstr "Plan"
-
-#: hacks/config/sballs.xml.h:9
-msgid "Pyramid"
-msgstr "Pyramide"
-
-#: hacks/config/sballs.xml.h:11
-msgid "Sballs"
-msgstr "Sballer"
-
-#: hacks/config/sballs.xml.h:15
-msgid "Star"
-msgstr "Stjerne"
-
-#: hacks/config/shadebobs.xml.h:7
-msgid "ShadeBobs"
-msgstr ""
-
-#: hacks/config/shadebobs.xml.h:11
-msgid ""
-"This draws smoothly-shaded oscillating oval patterns, that look something "
-"like vapor trails or neon tubes. Written by Shane Smit."
-msgstr ""
-
-#: hacks/config/sierpinski.xml.h:6
-msgid "Sierpinski"
-msgstr "Sierpinski"
-
-#: hacks/config/sierpinski.xml.h:10
-msgid ""
-"This draws the two-dimensional variant of the recursive Sierpinski triangle "
-"fractal. Written by Desmond Daignault."
-msgstr ""
-
-#: hacks/config/sierpinski3d.xml.h:7
-msgid "Sierpinski3D"
-msgstr "Sierpinski3D"
-
-#: hacks/config/sierpinski3d.xml.h:11
-msgid ""
-"This draws the three-dimensional variant of the recursive Sierpinski "
-"triangle fractal, using GL. Written by Tim Robinson and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/slidescreen.xml.h:1 hacks/config/twang.xml.h:1
-#: hacks/config/zoom.xml.h:1
-msgid "Border Width"
-msgstr "Kantbredde"
-
-#: hacks/config/slidescreen.xml.h:4
-msgid "Slide Speed"
-msgstr "Lysbildehastighet"
-
-#: hacks/config/slidescreen.xml.h:5
-msgid "SlideScreen"
-msgstr "Lysbildeskjerm"
-
-#: hacks/config/slidescreen.xml.h:8
-msgid ""
-"This takes an image, divides it into a grid, and then randomly shuffles the "
-"squares around as if it was one of those annoying ``16-puzzle'' games, where "
-"there is a grid of squares, one of which is missing. I hate trying to solve "
-"those puzzles, but watching one permute itself is more amusing. Written by "
-"Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/slip.xml.h:6
-msgid "Slip"
-msgstr "Skli"
-
-#: hacks/config/slip.xml.h:10
-msgid ""
-"This program throws some random bits on the screen, then sucks them through "
-"a jet engine and spews them out the other side. To avoid turning the image "
-"completely to mush, every now and then it will and then it interjects some "
-"splashes of color into the scene, or go into a spin cycle, or stretch the "
-"image like taffy, or (this is my addition) grab an image of your current "
-"desktop to chew on. Originally written by Scott Draves; whacked on by Jamie "
-"Zawinski."
-msgstr ""
-
-#: hacks/config/sonar.xml.h:1
-msgid "Ping known hosts"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:2
-msgid "Ping mode..."
-msgstr ""
-
-#: hacks/config/sonar.xml.h:3
-msgid "Ping subnet/24 (254 hosts)"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:4
-msgid "Ping subnet/25 (126 hosts)"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:5
-msgid "Ping subnet/26 (62 hosts)"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:6
-msgid "Ping subnet/27 (31 hosts)"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:7
-msgid "Ping subnet/28 (14 hosts)"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:8
-msgid "Ping subnet/29 (6 hosts)"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:9
-msgid "Ping subnet/30 (2 hosts)"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:10
-msgid "Resolve Host Names"
-msgstr ""
-
-#: hacks/config/sonar.xml.h:11
-#, fuzzy
-msgid "Show Ping Times"
-msgstr "Vis etiketter"
-
-#: hacks/config/sonar.xml.h:12
-msgid "Simulation Team Members"
-msgstr "Lagmedlemmer i simulasjonen"
-
-#: hacks/config/sonar.xml.h:13
-msgid "Sonar"
-msgstr "Sonar"
-
-#: hacks/config/sonar.xml.h:14
-msgid "Team A Name"
-msgstr "Navn på lag A"
-
-#: hacks/config/sonar.xml.h:15
-msgid "Team B Name"
-msgstr "Navn på lag B"
-
-#: hacks/config/sonar.xml.h:16
-msgid ""
-"This program draws a simulation of a sonar screen. By default, it displays a "
-"random assortment of ``bogies'' on the screen, but if installed as \"setuid "
-"root\", it can ping (pun intended) your local network, and actually plot the "
-"proximity of the other hosts on your network to you. Written by Stephen "
-"Martin and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/sonar.xml.h:17
-msgid "vs."
-msgstr "mot"
-
-#: hacks/config/speedmine.xml.h:1
-msgid "Allow Wall Collisions"
-msgstr "Tillat kollisjoner med vegg"
-
-#: hacks/config/speedmine.xml.h:2
-msgid "Display Crosshair"
-msgstr ""
-
-#: hacks/config/speedmine.xml.h:7
-msgid "Max Velocity"
-msgstr "Maks fart"
-
-#: hacks/config/speedmine.xml.h:8
-msgid "Mine Shaft"
-msgstr ""
-
-#: hacks/config/speedmine.xml.h:9
-msgid "Present Bonuses"
-msgstr ""
-
-#: hacks/config/speedmine.xml.h:10
-msgid "Rocky Walls"
-msgstr "Steinete vegger"
-
-#: hacks/config/speedmine.xml.h:12
-msgid ""
-"Simulates speeding down a rocky mineshaft, or a funky dancing worm. Written "
-"by Conrad Parker."
-msgstr ""
-
-#: hacks/config/speedmine.xml.h:16
-msgid "SpeedMine"
-msgstr "HurtigMine"
-
-#: hacks/config/speedmine.xml.h:17
-msgid "Thrust"
-msgstr ""
-
-#: hacks/config/speedmine.xml.h:19 hacks/config/worm.xml.h:10
-msgid "Worm"
-msgstr "Orm"
-
-#: hacks/config/sphere.xml.h:1
-msgid ""
-"Another of the classic screenhacks of the distant past, this one draws "
-"shaded spheres in multiple colors. This hack traces its lineage back to Tom "
-"Duff in 1982."
-msgstr ""
-
-#: hacks/config/sphereeversion.xml.h:1
-msgid "SphereEversion"
-msgstr ""
-
-#: hacks/config/sphereeversion.xml.h:2
-msgid ""
-"SphereEversion draws an animation of a sphere being turned inside out. A "
-"sphere can be turned inside out, without any tears, sharp creases or "
-"discontinuities, if the surface of the sphere is allowed to intersect "
-"itself. This program animates what is known as the Thurston Eversion. "
-"Written by Nathaniel Thurston and Michael McGuffin. This program is not "
-"included with the XScreenSaver package, but if you don't have it already, "
-"you can find it at &lt;http://www.dgp.utoronto.ca/~mjmcguff/eversion/&gt;."
-msgstr ""
-
-#: hacks/config/spheremonics.xml.h:20
-msgid "Smoothed Lines"
-msgstr "Myke linjer"
-
-#: hacks/config/spheremonics.xml.h:23
-msgid "Spheremonics"
-msgstr ""
-
-#: hacks/config/spheremonics.xml.h:24
-msgid ""
-"These closed objects are commonly called spherical harmonics, although they "
-"are only remotely related to the mathematical definition found in the "
-"solution to certain wave functions, most notable the eigenfunctions of "
-"angular momentum operators. Written by Paul Bourke and Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/spiral.xml.h:2 hacks/config/superquadrics.xml.h:2
-msgid "Cycles"
-msgstr "Omganger"
-
-#: hacks/config/spiral.xml.h:7
-msgid ""
-"Moving circular patterns, by Peter Schmitzberger. Moving circular patterns "
-"means moire; interference patterns, of course."
-msgstr ""
-
-#: hacks/config/spiral.xml.h:11
-msgid "Spiral"
-msgstr "Spiral"
-
-#: hacks/config/spotlight.xml.h:1
-msgid ""
-"Draws a spotlight scanning across a black screen, illuminating the "
-"underlying desktop when it passes. Written by Rick Schultz."
-msgstr ""
-
-#: hacks/config/spotlight.xml.h:6
-msgid "Spotlight"
-msgstr "Følgelys"
-
-#: hacks/config/sproingies.xml.h:3
-msgid "Q-Bert meets Marble Madness! Written by Ed Mackey."
-msgstr ""
-
-#: hacks/config/sproingies.xml.h:9
-msgid "Sproingies"
-msgstr "Sproingies"
-
-#: hacks/config/squiral.xml.h:3
-msgid ""
-"Draws a set of interacting, square-spiral-producing automata. The spirals "
-"grow outward until they hit something, then they go around it. Written by "
-"Jeff Epler."
-msgstr ""
-
-#: hacks/config/squiral.xml.h:5
-msgid "Handedness"
-msgstr ""
-
-#: hacks/config/squiral.xml.h:7
-msgid "Left"
-msgstr "Venstre"
-
-#: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:8
-msgid "Randomness"
-msgstr "Tilfeldighet"
-
-#: hacks/config/squiral.xml.h:12
-msgid "Right"
-msgstr "Høyre"
-
-#: hacks/config/squiral.xml.h:17
-msgid "Squiral"
-msgstr "Squiral"
-
-#: hacks/config/ssystem.xml.h:1
-msgid "SSystem"
-msgstr "SSystem"
-
-#: hacks/config/ssystem.xml.h:2
-msgid ""
-"SSystem is a GL Solar System simulator. It simulates flybys of Sun, the nine "
-"planets and a few major satellites, with four camera modes. Written by Raul "
-"Alonso. This is not included with the XScreenSaver package, but is packaged "
-"separately. Note: SSystem does not work as a screen saver on all systems, "
-"because it doesn't communicate with xscreensaver properly. It happens to "
-"work with some window managers, but not with others, so your mileage may "
-"vary. SSystem was once available at &lt;http://www1.las.es/~amil/ssystem/"
-"&gt;, but is now gone. You may still be able to find copies elsewhere. "
-"SSystem has since evolved into Celestia, found at &lt;http://www.shatters."
-"net/celestia/&gt;. Sadly, Celestia does not work with xscreensaver at all. "
-"You are encouraged to nag the authors into adding xscreensaver support!"
-msgstr ""
-
-#: hacks/config/stairs.xml.h:6
-msgid "Stairs"
-msgstr "Trapper"
-
-#: hacks/config/stairs.xml.h:8
-msgid ""
-"by Marcelo Vianna's third Escher GL hack, this one draws an ``infinite'' "
-"staircase."
-msgstr ""
-
-#: hacks/config/starfish.xml.h:1
-msgid "Color Gradients"
-msgstr "Fargegradienter"
-
-#: hacks/config/starfish.xml.h:7
-msgid "Pulsating Blob"
-msgstr "Pulserende blubbe"
-
-#: hacks/config/starfish.xml.h:10
-msgid "Starfish"
-msgstr "Stjernefisk"
-
-#: hacks/config/starfish.xml.h:13
-msgid ""
-"This generates a sequence of undulating, throbbing, star-like patterns which "
-"pulsate, rotate, and turn inside out. Another display mode uses these shapes "
-"to lay down a field of colors, which are then cycled. The motion is very "
-"organic. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/starwars.xml.h:2
-msgid "Anti-aliased Lines"
-msgstr "Linjer med antialiasing"
-
-#: hacks/config/starwars.xml.h:4
-msgid ""
-"Draws a stream of text slowly scrolling into the distance at an angle, over "
-"a star field, like at the beginning of the movie of the same name. The text "
-"can be the output of a program or the contents of a file or URL, as "
-"configured on the \"Advanced\" tab of the main Screensaver Preferences "
-"window. Written by Jamie Zawinski and Claudio Matauoka."
-msgstr ""
-
-#: hacks/config/starwars.xml.h:5
-#, fuzzy
-msgid "Fade Out"
-msgstr "FadePlot"
-
-#: hacks/config/starwars.xml.h:10
-msgid "Scroll Speed"
-msgstr "Rullehastighet"
-
-#: hacks/config/starwars.xml.h:13
-msgid "Star Rotation Speed"
-msgstr ""
-
-#: hacks/config/starwars.xml.h:14
-msgid "StarWars"
-msgstr "Stjernekrig"
-
-#: hacks/config/starwars.xml.h:18
-#, fuzzy
-msgid "Texture-Mapped Font"
-msgstr "Tetrahedron"
-
-#: hacks/config/starwars.xml.h:19
-msgid "Thick Lines"
-msgstr "Tykke linjer"
-
-#: hacks/config/starwars.xml.h:20
-msgid "Wrap Long Lines"
-msgstr "Bryt lange linjer"
-
-#: hacks/config/stonerview.xml.h:1
-msgid ""
-"Chains of colorful squares dance around each other in complex spiral "
-"patterns. Written by Andrew Plotkin, based on SGI's `electropaint' "
-"screensaver."
-msgstr ""
-
-#: hacks/config/stonerview.xml.h:3
-msgid "StonerView"
-msgstr "Steinvisning"
-
-#: hacks/config/strange.xml.h:6
-msgid "Strange"
-msgstr "Rar"
-
-#: hacks/config/strange.xml.h:7
-msgid ""
-"This draws strange attractors: it's a colorful, unpredictably-animating "
-"field of dots that swoops and twists around. The motion is very nice. "
-"Written by Massimino Pascal."
-msgstr ""
-
-#: hacks/config/substrate.xml.h:2 hacks/config/xplanet.xml.h:2
-#, fuzzy, no-c-format
-msgid "0%"
-msgstr "100%"
-
-#: hacks/config/substrate.xml.h:5
-msgid "Circle Percentage"
-msgstr ""
-
-#: hacks/config/substrate.xml.h:9
-#, fuzzy
-msgid "Initial Cracks"
-msgstr "Partikkeltetthet"
-
-#: hacks/config/substrate.xml.h:10
-msgid ""
-"Lines like crystals grow on a computational substrate. A simple "
-"perpendicular growth rule creates intricate city-like structures. By J. "
-"Tarbell and Mike Kershaw."
-msgstr ""
-
-#: hacks/config/substrate.xml.h:13
-#, fuzzy
-msgid "Sandgrains"
-msgstr "Forvalg"
-
-#: hacks/config/substrate.xml.h:17
-#, fuzzy
-msgid "Substrate"
-msgstr "Stater"
-
-#: hacks/config/substrate.xml.h:18
-msgid "Wireframe only"
-msgstr ""
-
-#: hacks/config/superquadrics.xml.h:3
-msgid ""
-"Ed Mackey reports that he wrote the first version of this program in BASIC "
-"on a Commodore 64 in 1987, as a 320x200 black and white wireframe. Now it is "
-"GL and has specular reflections."
-msgstr ""
-
-#: hacks/config/superquadrics.xml.h:11
-msgid "Superquadrics"
-msgstr "Superkvadratisk"
-
-#: hacks/config/swirl.xml.h:4
-msgid ""
-"More flowing, swirly patterns. This version is by M. Dobie and R. Taylor, "
-"but you might have seen a Mac program similar to this called FlowFazer. "
-"There is also a cool Java applet of a similar concept."
-msgstr ""
-
-#: hacks/config/swirl.xml.h:8
-msgid "Swirl"
-msgstr "Swirl"
-
-#: hacks/config/t3d.xml.h:1
-msgid "0 deg"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:2
-msgid "5 Minute Tick Marks"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:3
-msgid "90 deg"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:4
-msgid "Bigger"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:5
-#, fuzzy
-msgid "Cycle Seconds"
-msgstr "Sekunder"
-
-#: hacks/config/t3d.xml.h:10
-msgid "Minute Tick Marks"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:12
-msgid "Smaller"
-msgstr "Mindre"
-
-#: hacks/config/t3d.xml.h:14
-msgid "T3D"
-msgstr "T3D"
-
-#: hacks/config/t3d.xml.h:15
-msgid ""
-"This draws a working analog clock composed of floating, throbbing bubbles. "
-"Written by Bernd Paysan."
-msgstr ""
-
-#: hacks/config/t3d.xml.h:16
-msgid "Turn Side-to-Side"
-msgstr ""
-
-#: hacks/config/t3d.xml.h:17
-msgid "Wobbliness"
-msgstr "Skjelvenhet"
-
-#: hacks/config/tangram.xml.h:3
-msgid ""
-"Lets you watch the computer solve Tangram puzzles Written by Jeremy English."
-msgstr ""
-
-#: hacks/config/tangram.xml.h:6
-#, fuzzy
-msgid "Tangram"
-msgstr "Spjoing"
-
-#: hacks/config/tangram.xml.h:7
-#, fuzzy
-msgid "Viewing Time"
-msgstr "Vis etiketter"
-
-#: hacks/config/tangram.xml.h:9
-msgid "X Camera Rotate"
-msgstr ""
-
-#: hacks/config/tangram.xml.h:10
-msgid "Y Camera Rotate"
-msgstr ""
-
-#: hacks/config/tangram.xml.h:11
-msgid "Z Camera Rotate"
-msgstr ""
-
-#: hacks/config/thornbird.xml.h:1
-msgid ""
-"Displays a view of the ``Bird in a Thornbush'' fractal. Written by Tim "
-"Auckland."
-msgstr ""
-
-#: hacks/config/thornbird.xml.h:6
-msgid "Points"
-msgstr "Punkter"
-
-#: hacks/config/thornbird.xml.h:12
-msgid "Thornbird"
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:1
-#, fuzzy
-msgid "0 sec"
-msgstr "0 sekunder"
-
-#: hacks/config/timetunnel.xml.h:2
-#, fuzzy
-msgid "30 sec"
-msgstr "0 sekunder"
-
-#: hacks/config/timetunnel.xml.h:4
-#, fuzzy
-msgid "Draw Logo"
-msgstr "Tegn flekker"
-
-#: hacks/config/timetunnel.xml.h:5
-msgid ""
-"Draws an animation similar to the opening and closing effects on the Dr. Who "
-"television show. Written by Sean P. Brennan."
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:7
-msgid "Run Backward"
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:10
-msgid "Start sequence time"
-msgstr ""
-
-#: hacks/config/timetunnel.xml.h:11
-msgid "Timetunnel"
-msgstr ""
-
-#: 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:7
-msgid "Triangle"
-msgstr "Triangel"
-
-#: hacks/config/truchet.xml.h:4
-msgid ""
-"This draws line- and arc-based Truchet patterns that tile the screen. "
-"Written by Adrian Likins."
-msgstr ""
-
-#: hacks/config/truchet.xml.h:5
-msgid "Truchet"
-msgstr "Truchet"
-
-#: hacks/config/twang.xml.h:2
-msgid ""
-"Divides the screen into a grid, and plucks them. Written by Dan Bornstein."
-msgstr ""
-
-#: hacks/config/twang.xml.h:6
-msgid "Jumpy"
-msgstr "Spretten"
-
-#: hacks/config/twang.xml.h:11
-msgid "Springiness"
-msgstr "Fjærethet"
-
-#: hacks/config/twang.xml.h:13
-msgid "Transference"
-msgstr ""
-
-#: hacks/config/twang.xml.h:14
-msgid "Twang"
-msgstr "Spjoing"
-
-#: hacks/config/vermiculate.xml.h:1
-msgid "Draws squiggly worm-like paths. Written by Tyler Pierce."
-msgstr ""
-
-#: hacks/config/vermiculate.xml.h:2
-msgid "Vermiculate"
-msgstr ""
-
-#: hacks/config/vidwhacker.xml.h:2
-msgid "2 seconds"
-msgstr "2 sekunder"
-
-#: hacks/config/vidwhacker.xml.h:4
-msgid "Image Directory"
-msgstr "Bildekatalog"
-
-#: hacks/config/vidwhacker.xml.h:5
-msgid ""
-"This is actually just a shell script that grabs a frame of video from the "
-"system's video input, and then uses some PBM filters (chosen at random) to "
-"manipulate and recombine the video frame in various ways (edge detection, "
-"subtracting the image from a rotated version of itself, etc.) Then it "
-"displays that image for a few seconds, and does it again. This works really "
-"well if you just feed broadcast television into it."
-msgstr ""
-
-#: hacks/config/vidwhacker.xml.h:6
-msgid "VidWhacker"
-msgstr ""
-
-#: hacks/config/vines.xml.h:6
-msgid ""
-"This one generates a continuous sequence of small, curvy geometric patterns. "
-"It scatters them around your screen until it fills up, then it clears the "
-"screen and starts over. Written by Tracy Camp and David Hansen."
-msgstr ""
-
-#: hacks/config/vines.xml.h:8
-msgid "Vines"
-msgstr "Lianer"
-
-#: hacks/config/wander.xml.h:5
-msgid "Draw Spots"
-msgstr "Tegn flekker"
-
-#: hacks/config/wander.xml.h:6
-msgid ""
-"Draws a colorful random-walk, in various forms. Written by Rick Campbell."
-msgstr ""
-
-#: hacks/config/wander.xml.h:14
-msgid "Sustain"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:1
-#, fuzzy
-msgid "2 min"
-msgstr "2 minutter"
-
-#: hacks/config/webcollage.xml.h:2
-#, fuzzy
-msgid "30 secs"
-msgstr "0 sekunder"
-
-#: hacks/config/webcollage.xml.h:3
-msgid "Delay:                    None"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:4
-msgid "Dictionary File"
-msgstr "Ordbokfil"
-
-#: hacks/config/webcollage.xml.h:5
-#, fuzzy
-msgid "Opacity:      Transparent"
-msgstr "Gjennomsiktig"
-
-#: hacks/config/webcollage.xml.h:6
-msgid "Overall Filter Program"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:7
-msgid "Per-Image Filter Program"
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:9
-msgid ""
-"This program makes collages out of random images pulled off of the World "
-"Wide Web. It finds these images by doing random web searches, and then "
-"extracting images from the returned pages. It can also be set up to filter "
-"the images through the `VidWhacker' program. WARNING: THE INTERNET SOMETIMES "
-"CONTAINS PORNOGRAPHY. The Internet being what it is, absolutely anything "
-"might show up in the collage including -- quite possibly -- pornography, or "
-"even nudity. Please act accordingly. Written by Jamie Zawinski."
-msgstr ""
-
-#: hacks/config/webcollage.xml.h:10
-#, fuzzy
-msgid "URL Timeout:     2 secs"
-msgstr "Tidsavbrudd for URL"
-
-#: hacks/config/webcollage.xml.h:11
-msgid "WebCollage"
-msgstr "WebCollage"
-
-#: hacks/config/whirlwindwarp.xml.h:2
-msgid ""
-"Floating stars are acted upon by a mixture of simple 2D forcefields. The "
-"strength of each forcefield changes continuously, and it is also switched on "
-"and off at random. By Paul 'Joey' Clark."
-msgstr ""
-
-#: hacks/config/whirlwindwarp.xml.h:7
-msgid "Trail Size"
-msgstr "Størrelse på spor"
-
-#: hacks/config/whirlwindwarp.xml.h:8
-msgid "WhirlwindWarp"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:1
-msgid "Amplitude"
-msgstr "Amplityde"
-
-#: hacks/config/whirlygig.xml.h:2
-#, fuzzy
-msgid "Circle"
-msgstr "Omganger"
-
-#: hacks/config/whirlygig.xml.h:3
-msgid "Draws zooming chains of sinusoidal spots. Written by Ashton Trey Belew."
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:4
-#, fuzzy
-msgid "Explain modes"
-msgstr "Visningsmodi"
-
-#: hacks/config/whirlygig.xml.h:5
-msgid "Fun"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:6
-msgid "Funky"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:7
-msgid "Innie"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:8
-#, fuzzy
-msgid "Leave a trail"
-msgstr "Etterlat spor"
-
-#: hacks/config/whirlygig.xml.h:9
-#, fuzzy
-msgid "Linear"
-msgstr "Linjer"
-
-#: hacks/config/whirlygig.xml.h:11
-#, fuzzy
-msgid "Lissajous"
-msgstr "Lisa"
-
-#: hacks/config/whirlygig.xml.h:15
-#, fuzzy
-msgid "Test"
-msgstr "Best"
-
-#: hacks/config/whirlygig.xml.h:16
-#, fuzzy
-msgid "Use Double Buffering"
-msgstr "Double buffer"
-
-#: hacks/config/whirlygig.xml.h:17
-msgid "Whirlies"
-msgstr ""
-
-#: hacks/config/whirlygig.xml.h:18
-msgid "WhirlyGig"
-msgstr "WhirlyGig"
-
-#: hacks/config/whirlygig.xml.h:19
-#, fuzzy
-msgid "Wrap the screen"
-msgstr "Hent skjerm"
-
-#: hacks/config/worm.xml.h:1
-msgid ""
-"An ancient xlock hack that draws multicolored worms that crawl around the "
-"screen. Written by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik "
-"Theiling."
-msgstr ""
-
-#: hacks/config/wormhole.xml.h:6
-#, fuzzy
-msgid "Star speed"
-msgstr "Haiens hastighet"
-
-#: hacks/config/wormhole.xml.h:7
-msgid "Stars Created"
-msgstr ""
-
-#: hacks/config/wormhole.xml.h:8
-#, fuzzy
-msgid "Wormhole"
-msgstr "Orm"
-
-#: hacks/config/wormhole.xml.h:9
-msgid ""
-"Wormhole simulates flying through a colored wormhole in space. Written by "
-"Jon Rafkind."
-msgstr ""
-
-#: hacks/config/xanalogtv.xml.h:1
-msgid "XAnalogTV"
-msgstr ""
-
-#: hacks/config/xanalogtv.xml.h:2
-msgid ""
-"XAnalogTV shows a detailed simulation of an old TV set showing various test "
-"patterns, with various picture artifacts like snow, bloom, distortion, "
-"ghosting, and hash noise. It also simulates the TV warming up. It will cycle "
-"through 12 channels, some with images you give it, and some with color bars "
-"or nothing but static. By Trevor Blackwell."
-msgstr ""
-
-#: hacks/config/xaos.xml.h:1
-msgid "XaoS"
-msgstr "XaoS"
-
-#: hacks/config/xaos.xml.h:2
-msgid ""
-"XaoS generates fast fly-through animations of the Mandelbrot and other "
-"fractal sets. Written by Thomas Marsh and Jan Hubicka. This is not included "
-"with the XScreenSaver package, but if you don't have it already, you can "
-"find it at &lt;http://xaos.theory.org/&gt;."
-msgstr ""
-
-#: hacks/config/xdaliclock.xml.h:1
-msgid "12-Hour Time"
-msgstr "12-timers klokke"
-
-#: hacks/config/xdaliclock.xml.h:2
-msgid "24-Hour Time"
-msgstr "24-timers klokke"
-
-#: hacks/config/xdaliclock.xml.h:3
-#, fuzzy
-msgid "Cycle Colors"
-msgstr "Veksle mellom farger."
-
-#: hacks/config/xdaliclock.xml.h:4
-#, fuzzy
-msgid "Display Seconds"
-msgstr "Stil"
-
-#: hacks/config/xdaliclock.xml.h:5
-msgid "Huge Font"
-msgstr "Enorm skrift"
-
-#: hacks/config/xdaliclock.xml.h:6 hacks/config/xmatrix.xml.h:10
-msgid "Large Font"
-msgstr "Stor skrift"
-
-#: hacks/config/xdaliclock.xml.h:7
-msgid "Medium Font"
-msgstr "Middels skrift"
-
-#: hacks/config/xdaliclock.xml.h:8 hacks/config/xmatrix.xml.h:16
-msgid "Small Font"
-msgstr "Liten skrift"
-
-#: hacks/config/xdaliclock.xml.h:9
-msgid "XDaliClock"
-msgstr "XDaliKlokke"
-
-#: hacks/config/xdaliclock.xml.h:10
-msgid ""
-"XDaliClock draws a large digital clock, the numbers of which change by "
-"``melting'' into their new shapes. Written by Jamie Zawinski. This is not "
-"included with the XScreenSaver package, but if you don't have it already, "
-"you can find it at &lt;http://www.jwz.org/xdaliclock/&gt;."
-msgstr ""
-
-#: hacks/config/xearth.xml.h:1
-msgid "Bright"
-msgstr "Lys"
-
-#: hacks/config/xearth.xml.h:2 hacks/config/xplanet.xml.h:7
-msgid "Date/Time Stamp"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:3
-msgid "Day  Dim"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:5
-msgid "Display Stars"
-msgstr "Vis stjerner"
-
-#: hacks/config/xearth.xml.h:8
-msgid "Label Cities"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:9 hacks/config/xplanet.xml.h:49
-msgid "Lower Left"
-msgstr "Nedre venstre"
-
-#: hacks/config/xearth.xml.h:10 hacks/config/xplanet.xml.h:50
-msgid "Lower Right"
-msgstr "Nedre høyre"
-
-#: hacks/config/xearth.xml.h:13 hacks/config/xplanet.xml.h:51
-msgid "Mercator Projection"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:14
-msgid "Night   Dim"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:15
-msgid "No Stars"
-msgstr "Ingen stjerner"
-
-#: hacks/config/xearth.xml.h:16
-msgid "North/South Rotation"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:18 hacks/config/xplanet.xml.h:53
-msgid "Orthographic Projection"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:19 hacks/config/xplanet.xml.h:56
-msgid "Real Time"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:20
-msgid "Shaded Image"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:21
-msgid "Sharp"
-msgstr "Skarp"
-
-#: hacks/config/xearth.xml.h:26
-msgid "Terminator   Blurry"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:27 hacks/config/xplanet.xml.h:61
-msgid "Time Warp"
-msgstr ""
-
-#: hacks/config/xearth.xml.h:29 hacks/config/xplanet.xml.h:62
-msgid "Upper Left"
-msgstr "Øvre venstre"
-
-#: hacks/config/xearth.xml.h:30 hacks/config/xplanet.xml.h:63
-msgid "Upper Right"
-msgstr "Øvre høyre"
-
-#: hacks/config/xearth.xml.h:31
-msgid ""
-"XEarth draws an image of the Earth, as seen from your favorite vantage point "
-"in space, correctly shaded for the current position of the Sun. Written by "
-"Kirk Johnson. This is not included with the XScreenSaver package, but if you "
-"don't have it already, you can find it at &lt;http://www.cs.colorado.edu/"
-"~tuna/xearth/&gt;. There is also a similar (but more recent) program called "
-"xplanet to be found at &lt;http://xplanet.sourceforge.net/&gt;."
-msgstr ""
-
-#: hacks/config/xearth.xml.h:32
-msgid "Xearth"
-msgstr "Xklode"
-
-#: hacks/config/xfishtank.xml.h:5
-msgid "Fish"
-msgstr "Fisk"
-
-#: hacks/config/xfishtank.xml.h:6
-msgid "Fish Speed"
-msgstr "Hastighet på fisk"
-
-#: hacks/config/xfishtank.xml.h:7
-msgid ""
-"Fish! This is not included with the XScreenSaver package, but if you don't "
-"have it already, you can find it at &lt;http://metalab.unc.edu/pub/Linux/X11/"
-"demos/&gt;."
-msgstr ""
-
-#: hacks/config/xfishtank.xml.h:12
-msgid "XFishTank"
-msgstr "Xakvarie"
-
-#: hacks/config/xflame.xml.h:1
-msgid "Bitmap File"
-msgstr "Bildefil"
-
-#: hacks/config/xflame.xml.h:2
-msgid ""
-"Draws a simulation of pulsing fire. It can also take an arbitrary image and "
-"set it on fire too. Written by Carsten Haitzler, hacked on by many others."
-msgstr ""
-
-#: hacks/config/xflame.xml.h:3
-msgid "Enable Blooming"
-msgstr ""
-
-#: hacks/config/xflame.xml.h:8
-msgid "Xflame"
-msgstr "Xflamme"
-
-#: hacks/config/xjack.xml.h:4
-msgid ""
-"This program behaves schizophrenically and makes a lot of typos. Written by "
-"Jamie Zawinski. If you haven't seen Stanley Kubrick's masterpiece, ``The "
-"Shining,'' you won't get it. Those who have describe this hack as "
-"``inspired.''"
-msgstr ""
-
-#: hacks/config/xjack.xml.h:5
-msgid "Xjack"
-msgstr "Xjack"
-
-#: hacks/config/xlyap.xml.h:1
-msgid ""
-"This generates pretty fractal pictures by doing funky math involving the "
-"``Lyapunov exponent.'' It has a cool interactive mode, too. Written by Ron "
-"Record."
-msgstr ""
-
-#: hacks/config/xlyap.xml.h:2
-msgid "Xlyap"
-msgstr "Xlyap"
-
-#: hacks/config/xmatrix.xml.h:3
-msgid ""
-"Draws dropping characters similar to what is seen on the computer monitors "
-"in \"The Matrix\". See also \"glmatrix\" for a 3D rendering of the similar "
-"effect that appeared in the title sequence of the movie. Written by Jamie "
-"Zawinski."
-msgstr ""
-
-#: hacks/config/xmatrix.xml.h:4
-msgid "Expansion Algorithm"
-msgstr ""
-
-#: hacks/config/xmatrix.xml.h:6
-msgid "Full"
-msgstr ""
-
-#: hacks/config/xmatrix.xml.h:9
-msgid "Knock Knock"
-msgstr ""
-
-#: hacks/config/xmatrix.xml.h:12
-msgid "Phone Number"
-msgstr "Telefonnummer"
-
-#: hacks/config/xmatrix.xml.h:13
-msgid "Run Trace Program"
-msgstr ""
-
-#: hacks/config/xmatrix.xml.h:14
-msgid "Slider Algorithm"
-msgstr ""
-
-#: hacks/config/xmatrix.xml.h:19
-msgid "Synergistic Algorithm"
-msgstr ""
-
-#: hacks/config/xmatrix.xml.h:20
-msgid "Xmatrix"
-msgstr "Xmatrise"
-
-#: hacks/config/xmountains.xml.h:1
-msgid "1.0"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:3
-#, fuzzy
-msgid "14"
-msgstr "1"
-
-#: hacks/config/xmountains.xml.h:4
-msgid "7"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:5
-#, fuzzy
-msgid "Altitude  Low"
-msgstr "Amplityde"
-
-#: hacks/config/xmountains.xml.h:6
-msgid "Ambient  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:7
-#, fuzzy
-msgid "Angle of Light"
-msgstr "Aktiver lyn"
-
-#: hacks/config/xmountains.xml.h:8
-msgid "Contour  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:9
-msgid "Contrast  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:10
-#, fuzzy
-msgid "Craggy"
-msgstr "Pause"
-
-#: hacks/config/xmountains.xml.h:11
-msgid "Cross Update"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:12
-msgid "Distance  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:14
-msgid "Foreground"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:15
-#, fuzzy
-msgid "Fractal Options"
-msgstr "Fraktal vekst"
-
-#: hacks/config/xmountains.xml.h:16
-msgid "Height  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:18
-#, fuzzy
-msgid "Horizontal  Low"
-msgstr "Horisontal symmetri"
-
-#: hacks/config/xmountains.xml.h:19
-#, fuzzy
-msgid "Iteration  0"
-msgstr "Gjennomganger"
-
-#: hacks/config/xmountains.xml.h:20
-msgid "Light Level"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:21
-msgid "Recursion  0"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:22
-msgid "Reflections"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:23
-msgid "Sea Level  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:24
-msgid "Side View"
-msgstr "Sidevisning"
-
-#: hacks/config/xmountains.xml.h:26
-#, fuzzy
-msgid "Smoothing  0"
-msgstr "Myk"
-
-#: hacks/config/xmountains.xml.h:27
-#, fuzzy
-msgid "Speed  Slow"
-msgstr "Hastighet"
-
-#: hacks/config/xmountains.xml.h:28
-#, fuzzy
-msgid "Terrain"
-msgstr "Spor"
-
-#: hacks/config/xmountains.xml.h:29
-msgid "Top View"
-msgstr "Toppvisning"
-
-#: hacks/config/xmountains.xml.h:30
-msgid "V. Shift  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:31
-msgid "V. Stretch  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:32
-msgid "Variance  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:33
-msgid "Vertical  Low"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:34
-#, fuzzy
-msgid "Viewpoint"
-msgstr "Lineær bevegelse"
-
-#: hacks/config/xmountains.xml.h:35
-msgid ""
-"XMountains generates realistic-looking fractal terrains of snow-capped "
-"mountains near water, with either a top view or a side view. Written by "
-"Stephen Booth. This is not included with the XScreenSaver package, but if "
-"you don't have it already, you can find it at &lt;http://www.epcc.ed.ac.uk/"
-"~spb/xmountains/&gt;. (Make sure you have version 2.7 or newer!)"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:36
-msgid "Xf  0.0"
-msgstr ""
-
-#: hacks/config/xmountains.xml.h:37
-msgid "Xmountains"
-msgstr "Xfjell"
-
-#: hacks/config/xmountains.xml.h:38
-msgid "Yf  0.0"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:5
-msgid "Ancient Projection"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:6
-msgid "Azimuthal Projection"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:9
-msgid "From Ariel"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:10
-msgid "From Callisto"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:11
-msgid "From Charon"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:12
-msgid "From Deimos"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:13
-msgid "From Dione"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:14
-msgid "From Earth"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:15
-msgid "From Enceladus"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:16
-msgid "From Europa"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:17
-msgid "From Ganymede"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:18
-msgid "From Hyperion"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:19
-msgid "From Iapetus"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:20
-msgid "From Io"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:21
-#, fuzzy
-msgid "From Jupiter"
-msgstr "Jupiter"
-
-#: hacks/config/xplanet.xml.h:22
-msgid "From Major"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:23
-msgid "From Mars"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:24
-msgid "From Mercury"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:25
-msgid "From Mimas"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:26
-msgid "From Miranda"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:27
-#, fuzzy
-msgid "From Moon"
-msgstr "Tilfeldig bevegelse"
-
-#: hacks/config/xplanet.xml.h:28
-msgid "From Neptune"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:29
-msgid "From Nereid"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:30
-msgid "From Oberon"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:31
-msgid "From Phobos"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:32
-msgid "From Phoebe"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:33
-msgid "From Pluto"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:34
-#, fuzzy
-msgid "From Random"
-msgstr "Tilfeldig"
-
-#: hacks/config/xplanet.xml.h:35
-msgid "From Rhea"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:36
-msgid "From Saturn"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:37
-msgid "From Sun"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:38
-msgid "From Tethys"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:39
-msgid "From Titan"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:40
-msgid "From Titania"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:41
-#, fuzzy
-msgid "From Triton"
-msgstr "Friksjon"
-
-#: hacks/config/xplanet.xml.h:42
-msgid "From Umbriel"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:43
-msgid "From Uranus"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:44
-msgid "From Venus"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:45
-msgid "Hemisphere Projection"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:46
-msgid "Lambert Projection"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:47
-msgid "Latitude"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:48
-#, fuzzy
-msgid "Longitude"
-msgstr "Langt"
-
-#: hacks/config/xplanet.xml.h:52
-msgid "Mollweide Projection"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:54
-msgid "Peters Projection"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:57
-msgid "Rectangular Projection"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:58
-msgid "Render as a Globe"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:64
-msgid "View Ariel"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:65
-msgid "View Callisto"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:66
-msgid "View Charon"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:67
-msgid "View Deimos"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:68
-msgid "View Dione"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:69
-#, fuzzy
-msgid "View Earth"
-msgstr "Xklode"
-
-#: hacks/config/xplanet.xml.h:70
-msgid "View Enceladus"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:71
-msgid "View Europa"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:72
-msgid "View Ganymede"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:73
-msgid "View Hyperion"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:74
-msgid "View Iapetus"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:75
-msgid "View Io"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:76
-#, fuzzy
-msgid "View Jupiter"
-msgstr "Jupiter"
-
-#: hacks/config/xplanet.xml.h:77
-msgid "View Major"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:78
-msgid "View Mars"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:79
-msgid "View Mercury"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:80
-msgid "View Mimas"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:81
-msgid "View Miranda"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:82
-#, fuzzy
-msgid "View Moon"
-msgstr "Lineær bevegelse"
-
-#: hacks/config/xplanet.xml.h:83
-msgid "View Neptune"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:84
-msgid "View Nereid"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:85
-msgid "View Oberon"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:86
-msgid "View Phobos"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:87
-msgid "View Phoebe"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:88
-msgid "View Pluto"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:89
-#, fuzzy
-msgid "View Random"
-msgstr "Tilfeldig"
-
-#: hacks/config/xplanet.xml.h:90
-msgid "View Rhea"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:91
-msgid "View Saturn"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:92
-msgid "View Sun"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:93
-msgid "View Tethys"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:94
-msgid "View Titan"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:95
-msgid "View Titania"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:96
-msgid "View Triton"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:97
-msgid "View Umbriel"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:98
-msgid "View Uranus"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:99
-msgid "View Venus"
-msgstr ""
-
-#: hacks/config/xplanet.xml.h:100
-#, fuzzy
-msgid "Xplanet"
-msgstr "Plan"
-
-#: hacks/config/xplanet.xml.h:101
-msgid ""
-"Xplanet draws an image of the Earth, as seen from your favorite vantage "
-"point in space, correctly shaded for the current position of the Sun. "
-"Written by Hari Nair. This is not included with the XScreenSaver package, "
-"but if you don't have it already, you can find it at &lt;http://xplanet."
-"sourceforge.net/&gt;."
-msgstr ""
-
-#: hacks/config/xrayswarm.xml.h:1
-msgid ""
-"Draws a few swarms of critters flying around the screen, with nicely faded "
-"color trails behind them. Written by Chris Leger."
-msgstr ""
-
-#: hacks/config/xrayswarm.xml.h:5
-msgid "XRaySwarm"
-msgstr "XStråleSverm"
-
-#: hacks/config/xsnow.xml.h:1
-msgid ""
-"Draws falling snow and the occasional tiny Santa. By Rick Jansen. You can "
-"find it at &lt;http://www.euronet.nl/~rja/Xsnow/&gt;."
-msgstr ""
-
-#: hacks/config/xsnow.xml.h:2
-msgid "Xsnow"
-msgstr "Xsnø"
-
-#: hacks/config/xspirograph.xml.h:5
-msgid ""
-"Simulates that pen-in-nested-plastic-gears toy from your childhood. By Rohit "
-"Singh."
-msgstr ""
-
-#: hacks/config/xspirograph.xml.h:6
-msgid "XSpiroGraph"
-msgstr ""
-
-#: hacks/config/xteevee.xml.h:1
-msgid "Color Bars Enabled"
-msgstr ""
-
-#: hacks/config/xteevee.xml.h:2
-#, fuzzy
-msgid "Cycle Through Modes"
-msgstr "Veksle mellom farger."
-
-#: hacks/config/xteevee.xml.h:3
-msgid "Rolling Enabled"
-msgstr "Rulling aktivert"
-
-#: hacks/config/xteevee.xml.h:4
-msgid "Static Enabled"
-msgstr ""
-
-#: hacks/config/xteevee.xml.h:5
-msgid "XTeeVee"
-msgstr "XTeeVee"
-
-#: hacks/config/xteevee.xml.h:6
-msgid ""
-"XTeeVee simulates various television problems, including static, loss of "
-"vertical hold, and a test pattern. By Greg Knauss."
-msgstr ""
-
-#: hacks/config/zoom.xml.h:3
-msgid "Lens Offset"
-msgstr "Linseavstand"
-
-#: hacks/config/zoom.xml.h:4
-msgid "Lenses"
-msgstr "Linser"
-
-#: hacks/config/zoom.xml.h:9
-msgid ""
-"Zooms in on a part of the screen and then moves around. With the -lenses "
-"option the result is like looking through many overlapping lenses rather "
-"than just a simple zoom. Written by James Macnicol."
-msgstr ""
-
-#~ msgid "/\");"
-#~ msgstr "/\");"
-
-#~ msgid "Display Subprocess _Errors"
-#~ msgstr "Vis f_eil i underprosesser"
-
-#~ msgid "Display _Splash Screen at Startup"
-#~ msgstr "Vis opp_startsskjerm"
-
-#, fuzzy
-#~ msgid "_Verbose Diagnostics"
-#~ msgstr "Utfyllende diagnostikk"
-
-#, fuzzy
-#~ msgid "Hide Sheep"
-#~ msgstr "Lysbildehastighet"
-
-#, fuzzy
-#~ msgid "Standalone"
-#~ msgstr "Forvalg"
-
-#, fuzzy
-#~ msgid "Light effect"
-#~ msgstr "Lyneffekt"
-
-#, fuzzy
-#~ msgid "Shoot"
-#~ msgstr "Kort"
-
-#, fuzzy
-#~ msgid "Enable Background Image"
-#~ msgstr "Flat bakgrunn"
-
-#, fuzzy
-#~ msgid "Linux"
-#~ msgstr "Sparc Linux"
-
-#~ msgid "Sparc Linux"
-#~ msgstr "Sparc Linux"
-
-#~ msgid "Checkered Balls"
-#~ msgstr "Rutete baller"
-
-#~ msgid "Ping Subnet"
-#~ msgstr "Ping subnett"
-
-#~ msgid "Scary Colors"
-#~ msgstr "Skremmende farger"
-
-#~ msgid "Y Rotation"
-#~ msgstr "Y-rotasjon"
-
-#~ msgid "Z Rotation"
-#~ msgstr "Z-rotasjon"
-
-#~ msgid "Curviness"
-#~ msgstr "Kurvethet"
index cacc1d9bf95225aa681b3cd8d890f7117ecf8852..8399f997bac7d7626236b97752a1f461d8f013ae 100644 (file)
--- a/setup.com
+++ b/setup.com
@@ -16,14 +16,12 @@ $ bouboule  :== $'mydir'bouboule
 $ boxfit       :== $'mydir'boxfit
 $ braid                :== $'mydir'braid
 $ bsod         :== $'mydir'bsod
-$ bubbles      :== $'mydir'bubbles
 $ bumps                :== $'mydir'bumps
 $ ccurve       :== $'mydir'ccurve
 $ celtic       :== $'mydir'celtic
 $ cloudlife    :== $'mydir'cloudlife
 $ compass      :== $'mydir'compass
 $ coral                :== $'mydir'coral
-$ critical     :== $'mydir'critical
 $ crystal      :== $'mydir'crystal
 $ cwaves       :== $'mydir'cwaves
 $ cynosure     :== $'mydir'cynosure
@@ -40,12 +38,10 @@ $ euler2d   :== $'mydir'euler2d
 $ fadeplot     :== $'mydir'fadeplot
 $ fiberlamp    :== $'mydir'fiberlamp
 $ fireworkx    :== $'mydir'fireworkx
-$ flag         :== $'mydir'flag
 $ flame                :== $'mydir'flame
 $ flow         :== $'mydir'flow
 $ fluidballs   :== $'mydir'fluidballs
 $ fontglide    :== $'mydir'fontglide
-$ forest       :== $'mydir'forest
 $ fuzzyflakes  :== $'mydir'fuzzyflakes
 $ galaxy       :== $'mydir'galaxy
 $ goop         :== $'mydir'goop
@@ -62,23 +58,16 @@ $ imsmap    :== $'mydir'imsmap
 $ interaggregate       :== $'mydir'interaggregate
 $ interference :== $'mydir'interference
 $ intermomentary       :== $'mydir'intermomentary
-$ jigsaw       :== $'mydir'jigsaw
 $ juggle       :== $'mydir'juggle
 $ julia                :== $'mydir'julia
 $ kaleidescope :== $'mydir'kaleidescope
 $ kumppa       :== $'mydir'kumppa
-$ laser                :== $'mydir'laser
 $ lcdscrub     :== $'mydir'lcdscrub
-$ lightning    :== $'mydir'lightning
-$ lisa         :== $'mydir'lisa
-$ lissie       :== $'mydir'lissie
-$ lmorph       :== $'mydir'lmorph
 $ loop         :== $'mydir'loop
 $ m6502                :== $'mydir'm6502
 $ maze         :== $'mydir'maze
 $ memscroller  :== $'mydir'memscroller
 $ metaballs    :== $'mydir'metaballs
-$ mismunch     :== $'mydir'mismunch
 $ moire                :== $'mydir'moire
 $ moire2       :== $'mydir'moire2
 $ mountain     :== $'mydir'mountain
@@ -101,34 +90,26 @@ $ rd-bomb  :== $'mydir'rd-bomb
 $ ripples      :== $'mydir'ripples
 $ rocks                :== $'mydir'rocks
 $ rorschach    :== $'mydir'rorschach
-$ rotor                :== $'mydir'rotor
 $ rotzoomer    :== $'mydir'rotzoomer
 $ shadebobs    :== $'mydir'shadebobs
 $ sierpinski   :== $'mydir'sierpinski
 $ slidescreen  :== $'mydir'slidescreen
 $ slip         :== $'mydir'slip
-$ sonar                :== $'mydir'sonar
 $ speedmine    :== $'mydir'speedmine
-$ sphere       :== $'mydir'sphere
-$ spiral       :== $'mydir'spiral
 $ spotlight    :== $'mydir'spotlight
 $ squiral      :== $'mydir'squiral
 $ starfish     :== $'mydir'starfish
 $ strange      :== $'mydir'strange
 $ substrate    :== $'mydir'substrate
 $ swirl                :== $'mydir'swirl
-$ t3d          :== $'mydir't3d
 $ thornbird    :== $'mydir'thornbird
 $ triangle     :== $'mydir'triangle
 $ truchet      :== $'mydir'truchet
 $ twang                :== $'mydir'twang
 $ vermiculate  :== $'mydir'vermiculate
-$ vines                :== $'mydir'vines
 $ wander       :== $'mydir'wander
 $ webcollage-helper    :== $'mydir'webcollage-helper
 $ whirlwindwarp        :== $'mydir'whirlwindwarp
-$ whirlygig    :== $'mydir'whirlygig
-$ worm         :== $'mydir'worm
 $ wormhole     :== $'mydir'wormhole
 $ xanalogtv    :== $'mydir'xanalogtv
 $ xflame       :== $'mydir'xflame
index e3d636f2417b32297ca51fa7b75d8213969ed285..16dbc452145bd396023921b73934e173a2e17470 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
-       "@(#)xscreensaver 5.07 (10-Aug-2008), by Jamie Zawinski (jwz@jwz.org)";
+       "@(#)xscreensaver 5.08 (27-Dec-2008), by Jamie Zawinski (jwz@jwz.org)";
index 21d0c01e6bc5cda36280bb09dcf2790ff581b797..eaa97fc6fffebbbfd1674196844aa2c151507ab7 100644 (file)
@@ -1,5 +1,5 @@
 %define        name xscreensaver
-%define        version 5.07
+%define        version 5.08
 
 Summary:       X screen saver and locker
 Name:          %{name}
index c2971306f64144b5574438566dc598972ab696d2..7a050184f6f8b6781b2f6ee7607b0bdbe118fe56 100644 (file)
@@ -7,6 +7,33 @@
        objects = {
 
 /* Begin PBXAggregateTarget section */
+               AF137D410F075C9B004DE3B2 /* Obsolete */ = {
+                       isa = PBXAggregateTarget;
+                       buildConfigurationList = AF137D450F075CA4004DE3B2 /* Build configuration list for PBXAggregateTarget "Obsolete" */;
+                       buildPhases = (
+                       );
+                       dependencies = (
+                               AF137D690F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D670F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D650F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D630F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D610F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D5F0F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D5D0F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D5B0F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D590F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D570F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D550F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D530F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D510F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D4F0F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D4D0F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D4B0F075E5C004DE3B2 /* PBXTargetDependency */,
+                               AF137D490F075E5C004DE3B2 /* PBXTargetDependency */,
+                       );
+                       name = Obsolete;
+                       productName = Obsolete;
+               };
                AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */ = {
                        isa = PBXAggregateTarget;
                        buildConfigurationList = AF480ABA098C66E300FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XScreenSaver)" */;
                                AF77798309B6604B00EA3033 /* PBXTargetDependency */,
                                AF77798109B6604B00EA3033 /* PBXTargetDependency */,
                                AF77797F09B6604B00EA3033 /* PBXTargetDependency */,
-                               AF77797D09B6604B00EA3033 /* PBXTargetDependency */,
                                AF77797B09B6604B00EA3033 /* PBXTargetDependency */,
                                AF77797909B6604B00EA3033 /* PBXTargetDependency */,
                                AF77797709B6604B00EA3033 /* PBXTargetDependency */,
                                AF77797509B6604B00EA3033 /* PBXTargetDependency */,
                                AF77797309B6604B00EA3033 /* PBXTargetDependency */,
                                AF77797109B6604B00EA3033 /* PBXTargetDependency */,
-                               AF77796F09B6604A00EA3033 /* PBXTargetDependency */,
                                AFF463530C44062500EE6509 /* PBXTargetDependency */,
                                AF77796D09B6604A00EA3033 /* PBXTargetDependency */,
                                AF77796B09B6604A00EA3033 /* PBXTargetDependency */,
                                AF77794309B6604900EA3033 /* PBXTargetDependency */,
                                AF77794109B6604900EA3033 /* PBXTargetDependency */,
                                AF77793F09B6604900EA3033 /* PBXTargetDependency */,
-                               AF77793D09B6604900EA3033 /* PBXTargetDependency */,
                                AF77793B09B6604900EA3033 /* PBXTargetDependency */,
                                AF77793909B6604800EA3033 /* PBXTargetDependency */,
                                AF1A17840D6D6FA7008AF328 /* PBXTargetDependency */,
-                               AF77793709B6604800EA3033 /* PBXTargetDependency */,
                                AF0DCA310C4C744D00D76972 /* PBXTargetDependency */,
                                AF77793509B6604800EA3033 /* PBXTargetDependency */,
                                AF77793309B6604800EA3033 /* PBXTargetDependency */,
                                AF77793109B6604800EA3033 /* PBXTargetDependency */,
-                               AF77792F09B6604800EA3033 /* PBXTargetDependency */,
                                AF77792D09B6604800EA3033 /* PBXTargetDependency */,
                                AF77792B09B6604800EA3033 /* PBXTargetDependency */,
                                AF77792909B6604800EA3033 /* PBXTargetDependency */,
                                AF77790709B6604700EA3033 /* PBXTargetDependency */,
                                AF77790509B6604700EA3033 /* PBXTargetDependency */,
                                AF77790309B6604700EA3033 /* PBXTargetDependency */,
-                               AF77790109B6604700EA3033 /* PBXTargetDependency */,
                                AF7778FF09B6604700EA3033 /* PBXTargetDependency */,
                                AF7778FD09B6604600EA3033 /* PBXTargetDependency */,
                                AF7778FB09B6604600EA3033 /* PBXTargetDependency */,
                                AF7778F909B6604600EA3033 /* PBXTargetDependency */,
                                AF7778F709B6604600EA3033 /* PBXTargetDependency */,
-                               AF7778F509B6604600EA3033 /* PBXTargetDependency */,
                                AF7778F309B6604600EA3033 /* PBXTargetDependency */,
                                AF7778F109B6604600EA3033 /* PBXTargetDependency */,
                                AF7778EF09B6604600EA3033 /* PBXTargetDependency */,
                                AFA33B8F0B0585A4002B0E7D /* PBXTargetDependency */,
                                AFA33BCF0B0587B2002B0E7D /* PBXTargetDependency */,
                                AF7778EB09B6604600EA3033 /* PBXTargetDependency */,
-                               AF7778E909B6604600EA3033 /* PBXTargetDependency */,
                                AF7778E709B6604600EA3033 /* PBXTargetDependency */,
                                AF7778E509B6604600EA3033 /* PBXTargetDependency */,
                                AF7778E309B6604600EA3033 /* PBXTargetDependency */,
                                AF7779CB09B6608200EA3033 /* PBXTargetDependency */,
                                AF7779C909B6608200EA3033 /* PBXTargetDependency */,
                                AF7779C709B6608200EA3033 /* PBXTargetDependency */,
-                               AF7779C509B6608100EA3033 /* PBXTargetDependency */,
                                AF7779C309B6608100EA3033 /* PBXTargetDependency */,
-                               AF7779C109B6608100EA3033 /* PBXTargetDependency */,
                                AF7779BF09B6608100EA3033 /* PBXTargetDependency */,
                                AF7779BD09B6608100EA3033 /* PBXTargetDependency */,
                                AF7779BB09B6608100EA3033 /* PBXTargetDependency */,
                                AF7779B909B6608100EA3033 /* PBXTargetDependency */,
                                AF7779B709B6608100EA3033 /* PBXTargetDependency */,
-                               AF7779B509B6608100EA3033 /* PBXTargetDependency */,
-                               AF7779B309B6608100EA3033 /* PBXTargetDependency */,
-                               AF7779B109B6608100EA3033 /* PBXTargetDependency */,
-                               AF7779AF09B6608100EA3033 /* PBXTargetDependency */,
                                AF7779AD09B6608100EA3033 /* PBXTargetDependency */,
                                AF7779AB09B6608100EA3033 /* PBXTargetDependency */,
                                AF7779A909B6608100EA3033 /* PBXTargetDependency */,
                                AF7779A709B6608100EA3033 /* PBXTargetDependency */,
                                AF7779A509B6608100EA3033 /* PBXTargetDependency */,
-                               AF7779A309B6608100EA3033 /* PBXTargetDependency */,
                                AF7779A109B6608100EA3033 /* PBXTargetDependency */,
-                               AF77799F09B6608100EA3033 /* PBXTargetDependency */,
-                               AF77799D09B6608100EA3033 /* PBXTargetDependency */,
                                AF77799B09B6608100EA3033 /* PBXTargetDependency */,
                                AF77799909B6608100EA3033 /* PBXTargetDependency */,
                                AF77799709B6608100EA3033 /* PBXTargetDependency */,
                                AF77799509B6608000EA3033 /* PBXTargetDependency */,
-                               AF77799309B6608000EA3033 /* PBXTargetDependency */,
-                               AF77799109B6608000EA3033 /* PBXTargetDependency */,
                        );
                        name = "All Savers (XLockmore)";
                        productName = "All Savers (XLockmore)";
                                AF777A2B09B660B400EA3033 /* PBXTargetDependency */,
                                AF777A2909B660B400EA3033 /* PBXTargetDependency */,
                                AFF4636F0C440B3B00EE6509 /* PBXTargetDependency */,
-                               AF777A2709B660B400EA3033 /* PBXTargetDependency */,
                                AF777A2509B660B400EA3033 /* PBXTargetDependency */,
                                AF777A2309B660B400EA3033 /* PBXTargetDependency */,
                                AF777A2109B660B300EA3033 /* PBXTargetDependency */,
                                AF777A1709B660B300EA3033 /* PBXTargetDependency */,
                                AF42C5160D624E9200B27FF6 /* PBXTargetDependency */,
                                AF777A1509B660B300EA3033 /* PBXTargetDependency */,
+                               AF35E8A30E63825600691F2F /* PBXTargetDependency */,
                                AF777A1309B660B300EA3033 /* PBXTargetDependency */,
                                AF777A1109B660B300EA3033 /* PBXTargetDependency */,
                                AF777A0F09B660B200EA3033 /* PBXTargetDependency */,
                                AF777A0509B660B200EA3033 /* PBXTargetDependency */,
                                AF777A0309B660B200EA3033 /* PBXTargetDependency */,
                                AF777A0109B660B200EA3033 /* PBXTargetDependency */,
+                               AFD51B350F063B7800471C02 /* PBXTargetDependency */,
                                AF7779FF09B660B200EA3033 /* PBXTargetDependency */,
                                AF7779FD09B660B100EA3033 /* PBXTargetDependency */,
                                AF7779FB09B660B100EA3033 /* PBXTargetDependency */,
                                AF7779F509B660B100EA3033 /* PBXTargetDependency */,
                                AF7779F309B660B000EA3033 /* PBXTargetDependency */,
                                AF7779F109B660B000EA3033 /* PBXTargetDependency */,
+                               AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */,
                                AF7779EF09B660B000EA3033 /* PBXTargetDependency */,
                                AF7779ED09B660B000EA3033 /* PBXTargetDependency */,
                                AFE2A46F0E2E908E00ADB298 /* PBXTargetDependency */,
                                AF480D60098EED6900FB32B8 /* PBXTargetDependency */,
                                AF480D5E098EED6900FB32B8 /* PBXTargetDependency */,
                                AF480D5C098EED6900FB32B8 /* PBXTargetDependency */,
+                               AF137D470F075CC8004DE3B2 /* PBXTargetDependency */,
                        );
                        name = "All Savers";
                        productName = "All Savers";
                AF0FAF1D09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
                AF0FAF1E09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
                AF0FAF1F09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
-               AF0FAF2009CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
                AF0FAF2109CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
                AF0FAF2209CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
                AF0FAF2309CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
                AF1A177F0D6D6F3E008AF328 /* lcdscrub.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */; };
                AF1A17810D6D6F62008AF328 /* lcdscrub.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1A17800D6D6F62008AF328 /* lcdscrub.xml */; };
                AF1A26760990E77C00147B80 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AF35E8900E63823600691F2F /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
+               AF35E8910E63823600691F2F /* sonar-icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */; };
+               AF35E8920E63823600691F2F /* sonar-sim.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */; };
+               AF35E8930E63823600691F2F /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C010E52B1DC00CCF4A5 /* sonar.c */; };
+               AF35E8950E63823600691F2F /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
+               AF35E8960E63823600691F2F /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AF35E8970E63823600691F2F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AF35E8980E63823600691F2F /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF480FE70990375900FB32B8 /* AGL.framework */; };
+               AF35E8990E63823600691F2F /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF480DF1098F528500FB32B8 /* OpenGL.framework */; };
+               AF35E89A0E63823600691F2F /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AF35EB240E63829600691F2F /* jigsaw.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CF0988A468000655EE /* jigsaw.xml */; };
+               AF35EB260E6382BA00691F2F /* jigsaw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35EB250E6382BA00691F2F /* jigsaw.c */; };
                AF3C714B0D624BF50030CC0D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF3C714E0D624BF50030CC0D /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF3C714F0D624BF50030CC0D /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AF64265A09A19229000F4CD4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF64266109A1929A000F4CD4 /* munch.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EA0988A469000655EE /* munch.xml */; };
                AF64266309A192C5000F4CD4 /* munch.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64266209A192C5000F4CD4 /* munch.c */; };
-               AF64266B09A192FB000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
-               AF64266E09A192FB000F4CD4 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
-               AF64266F09A192FB000F4CD4 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
-               AF64267009A192FB000F4CD4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
-               AF64267709A1938D000F4CD4 /* mismunch.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E30988A469000655EE /* mismunch.xml */; };
-               AF64267909A193A4000F4CD4 /* mismunch.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64267809A193A4000F4CD4 /* mismunch.c */; };
                AF64268109A194B0000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF64268409A194B0000F4CD4 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF64268509A194B0000F4CD4 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AF64268609A194B0000F4CD4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF64268D09A19525000F4CD4 /* goop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BF0988A468000655EE /* goop.xml */; };
                AF64268F09A19542000F4CD4 /* goop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64268E09A19542000F4CD4 /* goop.c */; };
-               AF6426FA09A1C952000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
-               AF6426FD09A1C952000F4CD4 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
-               AF6426FE09A1C952000F4CD4 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
-               AF6426FF09A1C952000F4CD4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
-               AF64270609A1C9D6000F4CD4 /* sonar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590F0988A469000655EE /* sonar.xml */; };
-               AF64270809A1C9EF000F4CD4 /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64270709A1C9EF000F4CD4 /* sonar.c */; };
                AF64277709A1D37A000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF64277A09A1D37A000F4CD4 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF64277B09A1D37A000F4CD4 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AF9D49A209B544C2006E59CF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF9D49A909B5457B006E59CF /* spotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259150988A469000655EE /* spotlight.xml */; };
                AF9D49AB09B54596006E59CF /* spotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D49AA09B54596006E59CF /* spotlight.c */; };
-               AF9D4C3109B59A49006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
-               AF9D4C3409B59A49006E59CF /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
-               AF9D4C3509B59A49006E59CF /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
-               AF9D4C3609B59A49006E59CF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
-               AF9D4C3F09B59B56006E59CF /* jigsaw.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CF0988A468000655EE /* jigsaw.xml */; };
-               AF9D4C4109B59B6F006E59CF /* jigsaw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4C4009B59B6F006E59CF /* jigsaw.c */; };
                AF9D4C6F09B59F27006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF9D4C7209B59F27006E59CF /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF9D4C7309B59F27006E59CF /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AFCFF1D90CE4517C00C7D111 /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; };
                AFCFF1DA0CE4518B00C7D111 /* tube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480ED2098F652A00FB32B8 /* tube.c */; };
                AFCFF1DB0CE451A300C7D111 /* normals.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A93099336D800F3E977 /* normals.c */; };
+               AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
+               AFD51B220F063B4A00471C02 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
+               AFD51B250F063B4A00471C02 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
+               AFD51B260F063B4A00471C02 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AFD51B270F063B4A00471C02 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AFD51B280F063B4A00471C02 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF480FE70990375900FB32B8 /* AGL.framework */; };
+               AFD51B290F063B4A00471C02 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF480DF1098F528500FB32B8 /* OpenGL.framework */; };
+               AFD51B2A0F063B4A00471C02 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AFD51DB70F063BCE00471C02 /* photopile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD51DB60F063BCE00471C02 /* photopile.c */; };
+               AFD51DB90F063BE700471C02 /* photopile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFD51DB80F063BE700471C02 /* photopile.xml */; };
                AFD56DF80996A03800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFD56DFA0996A03800BA26F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AFD56DFB0996A03800BA26F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AFE2A4640E2E904600ADB298 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
                AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; };
                AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; };
+               AFE30BEE0E52B14700CCF4A5 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
+               AFE30BF10E52B14700CCF4A5 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
+               AFE30BF20E52B14700CCF4A5 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AFE30BF30E52B14700CCF4A5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AFE30BF40E52B14700CCF4A5 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF480FE70990375900FB32B8 /* AGL.framework */; };
+               AFE30BF50E52B14700CCF4A5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF480DF1098F528500FB32B8 /* OpenGL.framework */; };
+               AFE30BF60E52B14700CCF4A5 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AFE30BFE0E52B18300CCF4A5 /* sonar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590F0988A469000655EE /* sonar.xml */; };
+               AFE30C020E52B1DC00CCF4A5 /* sonar-icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */; };
+               AFE30C030E52B1DC00CCF4A5 /* sonar-sim.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */; };
+               AFE30C040E52B1DC00CCF4A5 /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C010E52B1DC00CCF4A5 /* sonar.c */; };
                AFE6A16C0CDD78EA002805BF /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; };
                AFE6A1890CDD7B2E002805BF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFE6A18A0CDD7B2E002805BF /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; };
                        remoteGlobalIDString = AF0DCA420C4CBB0D00D76972;
                        remoteInfo = Voronoi;
                };
+               AF137D460F075CC8004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF137D410F075C9B004DE3B2 /* Obsolete */;
+                       remoteInfo = Obsolete;
+               };
+               AF137D480F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD5709B0996B88E00BA26F7 /* Worm */;
+                       remoteInfo = Worm;
+               };
+               AF137D4A0F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF477208099D4EE8001F091E /* Whirlygig */;
+                       remoteInfo = Whirlygig;
+               };
+               AF137D4C0F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD56F0B0996AAFA00BA26F7 /* Vines */;
+                       remoteInfo = Vines;
+               };
+               AF137D4E0F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4771A7099D4949001F091E /* T3D */;
+                       remoteInfo = T3D;
+               };
+               AF137D500F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD570430996B61600BA26F7 /* Spiral */;
+                       remoteInfo = Spiral;
+               };
+               AF137D520F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD570260996B56D00BA26F7 /* Sphere */;
+                       remoteInfo = Sphere;
+               };
+               AF137D540F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD570B10996B93000BA26F7 /* Rotor */;
+                       remoteInfo = Rotor;
+               };
+               AF137D560F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD56FCF0996B20900BA26F7 /* Lissie */;
+                       remoteInfo = Lissie;
+               };
+               AF137D580F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD56FB90996B18F00BA26F7 /* Lisa */;
+                       remoteInfo = Lisa;
+               };
+               AF137D5A0F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD56FA30996B10F00BA26F7 /* Lightning */;
+                       remoteInfo = Lightning;
+               };
+               AF137D5C0F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD56F8C0996B09400BA26F7 /* Laser */;
+                       remoteInfo = Laser;
+               };
+               AF137D5E0F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4774B4099D8B5F001F091E /* LMorph */;
+                       remoteInfo = LMorph;
+               };
+               AF137D600F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFA55CCC09934CE400F3E977 /* GLForestFire */;
+                       remoteInfo = GLForestFire;
+               };
+               AF137D620F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD56EDA0996A95700BA26F7 /* Forest */;
+                       remoteInfo = Forest;
+               };
+               AF137D640F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF477909099DE379001F091E /* Flag */;
+                       remoteInfo = Flag;
+               };
+               AF137D660F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF47765A099DA78E001F091E /* Critical */;
+                       remoteInfo = Critical;
+               };
+               AF137D680F075E5C004DE3B2 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF6427A809A2DE36000F4CD4 /* Bubbles */;
+                       remoteInfo = Bubbles;
+               };
                AF1A17630D6D6EE3008AF328 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF1A17610D6D6EE3008AF328;
                        remoteInfo = LCDscrub;
                };
+               AF35E88C0E63823600691F2F /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
+               AF35E8A20E63825600691F2F /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF35E88A0E63823600691F2F;
+                       remoteInfo = Jigsaw;
+               };
                AF3C71470D624BF50030CC0D /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF3C71450D624BF50030CC0D;
                        remoteInfo = Hypnowheel;
                };
+               AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFE30BE80E52B14700CCF4A5;
+                       remoteInfo = Sonar;
+               };
                AF476FB7099D154F001F091E /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
                        remoteInfo = jwxyz;
                };
-               AF64266709A192FB000F4CD4 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
-                       remoteInfo = jwxyz;
-               };
                AF64267D09A194B0000F4CD4 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
                        remoteInfo = jwxyz;
                };
-               AF6426F609A1C952000F4CD4 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
-                       remoteInfo = jwxyz;
-               };
                AF64277309A1D37A000F4CD4 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF477382099D65A1001F091E;
                        remoteInfo = Wormhole;
                };
-               AF7778E809B6604600EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF477208099D4EE8001F091E;
-                       remoteInfo = Whirlygig;
-               };
                AF7778EA09B6604600EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF476FDA099D1686001F091E;
                        remoteInfo = Truchet;
                };
-               AF7778F409B6604600EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF4771A7099D4949001F091E;
-                       remoteInfo = T3D;
-               };
                AF7778F609B6604600EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF64277109A1D37A000F4CD4;
                        remoteInfo = SpeedMine;
                };
-               AF77790009B6604700EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF6426F409A1C952000F4CD4;
-                       remoteInfo = Sonar;
-               };
                AF77790209B6604700EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF975775099C374A00B05160;
                        remoteInfo = Moire;
                };
-               AF77792E09B6604800EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF64266509A192FB000F4CD4;
-                       remoteInfo = Mismunch;
-               };
                AF77793009B6604800EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF4774CE099D8BFF001F091E;
                        remoteInfo = Maze;
                };
-               AF77793609B6604800EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF4774B4099D8B5F001F091E;
-                       remoteInfo = LMorph;
-               };
                AF77793809B6604800EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF477499099D8A74001F091E;
                        remoteInfo = Kaleidescope;
                };
-               AF77793C09B6604900EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF9D4C2B09B59A49006E59CF;
-                       remoteInfo = Jigsaw;
-               };
                AF77793E09B6604900EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF4778E8099DDDC8001F091E;
                        remoteInfo = Cynosure;
                };
-               AF77796E09B6604A00EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF47765A099DA78E001F091E;
-                       remoteInfo = Critical;
-               };
                AF77797009B6604B00EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF9D48DB09B53322006E59CF;
                        remoteInfo = Bumps;
                };
-               AF77797C09B6604B00EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF6427A809A2DE36000F4CD4;
-                       remoteInfo = Bubbles;
-               };
                AF77797E09B6604B00EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF47721E099D4F67001F091E;
                        remoteInfo = Anemone;
                };
-               AF77799009B6608000EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD5709B0996B88E00BA26F7;
-                       remoteInfo = Worm;
-               };
-               AF77799209B6608000EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD56F0B0996AAFA00BA26F7;
-                       remoteInfo = Vines;
-               };
                AF77799409B6608000EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFD5735D0997411200BA26F7;
                        remoteInfo = Strange;
                };
-               AF77799C09B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD570430996B61600BA26F7;
-                       remoteInfo = Spiral;
-               };
-               AF77799E09B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD570260996B56D00BA26F7;
-                       remoteInfo = Sphere;
-               };
                AF7779A009B6608100EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFD5700F0996B4CC00BA26F7;
                        remoteInfo = Sierpinski;
                };
-               AF7779A209B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD570B10996B93000BA26F7;
-                       remoteInfo = Rotor;
-               };
                AF7779A409B6608100EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF794FCD09974FA60059A8B0;
                        remoteInfo = Loop;
                };
-               AF7779AE09B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD56FCF0996B20900BA26F7;
-                       remoteInfo = Lissie;
-               };
-               AF7779B009B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD56FB90996B18F00BA26F7;
-                       remoteInfo = Lisa;
-               };
-               AF7779B209B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD56FA30996B10F00BA26F7;
-                       remoteInfo = Lightning;
-               };
-               AF7779B409B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD56F8C0996B09400BA26F7;
-                       remoteInfo = Laser;
-               };
                AF7779B609B6608100EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFD56F230996AB8A00BA26F7;
                        remoteInfo = Galaxy;
                };
-               AF7779C009B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFD56EDA0996A95700BA26F7;
-                       remoteInfo = Forest;
-               };
                AF7779C209B6608100EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFD570EA0996BBBF00BA26F7;
                        remoteInfo = Flow;
                };
-               AF7779C409B6608100EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF477909099DE379001F091E;
-                       remoteInfo = Flag;
-               };
                AF7779C609B6608200EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFA56331099395ED00F3E977;
                        remoteInfo = GLHanoi;
                };
-               AF777A2609B660B400EA3033 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AFA55CCC09934CE400F3E977;
-                       remoteInfo = GLForestFire;
-               };
                AF777A2809B660B400EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
                        remoteInfo = jwxyz;
                };
-               AF9D4C2D09B59A49006E59CF /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
-                       remoteInfo = jwxyz;
-               };
                AF9D4C6B09B59F27006E59CF /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF9771D60989DC4A001F8B92;
                        remoteInfo = SaverTester;
                };
+               AFD51B1D0F063B4A00471C02 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
+               AFD51B340F063B7800471C02 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFD51B1B0F063B4A00471C02;
+                       remoteInfo = Photopile;
+               };
                AFD56DF30996A03800BA26F7 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFE2A4560E2E904600ADB298;
                        remoteInfo = SkyTentacles;
                };
+               AFE30BEA0E52B14700CCF4A5 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
                AFE6A1840CDD7B2E002805BF /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                AF34085509B80AB000F2CEC1 /* StonerView.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StonerView.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF34085609B80AB000F2CEC1 /* Gleidescope.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gleidescope.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF34085709B80AB000F2CEC1 /* FontGlide.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FontGlide.saver; sourceTree = BUILT_PRODUCTS_DIR; };
+               AF35E8A00E63823600691F2F /* Jigsaw.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Jigsaw.saver; sourceTree = BUILT_PRODUCTS_DIR; };
+               AF35EB250E6382BA00691F2F /* jigsaw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = jigsaw.c; path = hacks/glx/jigsaw.c; sourceTree = "<group>"; };
                AF3C71590D624BF50030CC0D /* Hypnowheel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hypnowheel.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF3C715D0D624C600030CC0D /* hypnowheel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypnowheel.c; path = hacks/glx/hypnowheel.c; sourceTree = "<group>"; };
                AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypnowheel.xml; sourceTree = "<group>"; };
                AF64263F09A18FEB000F4CD4 /* moire2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moire2.c; path = hacks/moire2.c; sourceTree = "<group>"; };
                AF64265F09A19229000F4CD4 /* Munch.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Munch.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF64266209A192C5000F4CD4 /* munch.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = munch.c; path = hacks/munch.c; sourceTree = "<group>"; };
-               AF64267509A192FB000F4CD4 /* Mismunch.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Mismunch.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF64267809A193A4000F4CD4 /* mismunch.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = mismunch.c; path = hacks/mismunch.c; sourceTree = "<group>"; };
                AF64268B09A194B0000F4CD4 /* Goop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Goop.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF64268E09A19542000F4CD4 /* goop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = goop.c; path = hacks/goop.c; sourceTree = "<group>"; };
-               AF64270409A1C952000F4CD4 /* Sonar.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sonar.saver; sourceTree = BUILT_PRODUCTS_DIR; };
-               AF64270709A1C9EF000F4CD4 /* sonar.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sonar.c; path = hacks/sonar.c; sourceTree = "<group>"; };
                AF64278109A1D37A000F4CD4 /* SpeedMine.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SpeedMine.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF64278709A1D433000F4CD4 /* speedmine.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = speedmine.c; path = hacks/speedmine.c; sourceTree = "<group>"; };
                AF6427B809A2DE36000F4CD4 /* Bubbles.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bubbles.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF9D48D409B53229006E59CF /* zoom.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = zoom.c; path = hacks/zoom.c; sourceTree = "<group>"; };
                AF9D48EB09B53322006E59CF /* Bumps.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bumps.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF9D48EE09B533AE006E59CF /* bumps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bumps.c; path = hacks/bumps.c; sourceTree = "<group>"; };
-               AF9D48EF09B533AE006E59CF /* bumps.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bumps.h; path = hacks/bumps.h; sourceTree = "<group>"; };
                AF9D490409B535DA006E59CF /* Distort.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Distort.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF9D490709B536F7006E59CF /* distort.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = distort.c; path = hacks/distort.c; sourceTree = "<group>"; };
                AF9D493B09B53CBA006E59CF /* Ripples.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ripples.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF9D497F09B541E5006E59CF /* twang.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = twang.c; path = hacks/twang.c; sourceTree = "<group>"; };
                AF9D49A709B544C3006E59CF /* Spotlight.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spotlight.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF9D49AA09B54596006E59CF /* spotlight.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spotlight.c; path = hacks/spotlight.c; sourceTree = "<group>"; };
-               AF9D4C3B09B59A49006E59CF /* Jigsaw.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Jigsaw.saver; sourceTree = BUILT_PRODUCTS_DIR; };
-               AF9D4C4009B59B6F006E59CF /* jigsaw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = jigsaw.c; path = hacks/jigsaw.c; sourceTree = "<group>"; };
                AF9D4C7909B59F27006E59CF /* XLyap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XLyap.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF9D4C7C09B5A044006E59CF /* xlyap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xlyap.c; path = hacks/xlyap.c; sourceTree = "<group>"; };
                AF9D4CF709B5AA8E006E59CF /* Pong.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pong.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFC258870988A468000655EE /* cloudlife.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cloudlife.xml; sourceTree = "<group>"; };
                AFC258880988A468000655EE /* compass.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = compass.xml; sourceTree = "<group>"; };
                AFC258890988A468000655EE /* coral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = coral.xml; sourceTree = "<group>"; };
-               AFC2588A0988A468000655EE /* cosmos.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cosmos.xml; sourceTree = "<group>"; };
                AFC2588B0988A468000655EE /* crackberg.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = crackberg.xml; sourceTree = "<group>"; };
                AFC2588C0988A468000655EE /* critical.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = critical.xml; sourceTree = "<group>"; };
                AFC2588D0988A468000655EE /* crystal.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = crystal.xml; sourceTree = "<group>"; };
                AFC258970988A468000655EE /* discrete.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = discrete.xml; sourceTree = "<group>"; };
                AFC258980988A468000655EE /* distort.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = distort.xml; sourceTree = "<group>"; };
                AFC258990988A468000655EE /* drift.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = drift.xml; sourceTree = "<group>"; };
-               AFC2589A0988A468000655EE /* electricsheep.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = electricsheep.xml; sourceTree = "<group>"; };
                AFC2589B0988A468000655EE /* endgame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = endgame.xml; sourceTree = "<group>"; };
                AFC2589C0988A468000655EE /* engine.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = engine.xml; sourceTree = "<group>"; };
                AFC2589D0988A468000655EE /* epicycle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = epicycle.xml; sourceTree = "<group>"; };
                AFC258A00988A468000655EE /* extrusion.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = extrusion.xml; sourceTree = "<group>"; };
                AFC258A10988A468000655EE /* fadeplot.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fadeplot.xml; sourceTree = "<group>"; };
                AFC258A20988A468000655EE /* fiberlamp.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fiberlamp.xml; sourceTree = "<group>"; };
-               AFC258A30988A468000655EE /* fireflies.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fireflies.xml; sourceTree = "<group>"; };
                AFC258A40988A468000655EE /* fireworkx.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fireworkx.xml; sourceTree = "<group>"; };
                AFC258A50988A468000655EE /* flag.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flag.xml; sourceTree = "<group>"; };
                AFC258A60988A468000655EE /* flame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flame.xml; sourceTree = "<group>"; };
                AFC258BB0988A468000655EE /* glslideshow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glslideshow.xml; sourceTree = "<group>"; };
                AFC258BC0988A468000655EE /* glsnake.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glsnake.xml; sourceTree = "<group>"; };
                AFC258BD0988A468000655EE /* gltext.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gltext.xml; sourceTree = "<group>"; };
-               AFC258BE0988A468000655EE /* goban.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = goban.xml; sourceTree = "<group>"; };
                AFC258BF0988A468000655EE /* goop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = goop.xml; sourceTree = "<group>"; };
                AFC258C00988A468000655EE /* grav.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = grav.xml; sourceTree = "<group>"; };
                AFC258C10988A468000655EE /* greynetic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = greynetic.xml; sourceTree = "<group>"; };
                AFC2590F0988A469000655EE /* sonar.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sonar.xml; sourceTree = "<group>"; };
                AFC259100988A469000655EE /* speedmine.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = speedmine.xml; sourceTree = "<group>"; };
                AFC259110988A469000655EE /* sphere.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sphere.xml; sourceTree = "<group>"; };
-               AFC259120988A469000655EE /* sphereeversion.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sphereeversion.xml; sourceTree = "<group>"; };
                AFC259130988A469000655EE /* spheremonics.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spheremonics.xml; sourceTree = "<group>"; };
                AFC259140988A469000655EE /* spiral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spiral.xml; sourceTree = "<group>"; };
                AFC259150988A469000655EE /* spotlight.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spotlight.xml; sourceTree = "<group>"; };
                AFC259300988A469000655EE /* worm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = worm.xml; sourceTree = "<group>"; };
                AFC259310988A469000655EE /* wormhole.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = wormhole.xml; sourceTree = "<group>"; };
                AFC259320988A469000655EE /* xanalogtv.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xanalogtv.xml; sourceTree = "<group>"; };
-               AFC259330988A469000655EE /* xaos.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xaos.xml; sourceTree = "<group>"; };
-               AFC259340988A469000655EE /* xdaliclock.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xdaliclock.xml; sourceTree = "<group>"; };
                AFC259370988A469000655EE /* xflame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xflame.xml; sourceTree = "<group>"; };
                AFC259380988A469000655EE /* xjack.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xjack.xml; sourceTree = "<group>"; };
                AFC259390988A469000655EE /* xlyap.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xlyap.xml; sourceTree = "<group>"; };
                AFC2593A0988A469000655EE /* xmatrix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xmatrix.xml; sourceTree = "<group>"; };
-               AFC2593B0988A469000655EE /* xmountains.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xmountains.xml; sourceTree = "<group>"; };
-               AFC2593C0988A469000655EE /* xplanet.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xplanet.xml; sourceTree = "<group>"; };
                AFC2593D0988A469000655EE /* xrayswarm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xrayswarm.xml; sourceTree = "<group>"; };
-               AFC2593E0988A469000655EE /* xsnow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xsnow.xml; sourceTree = "<group>"; };
                AFC2593F0988A469000655EE /* xspirograph.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xspirograph.xml; sourceTree = "<group>"; };
                AFC259400988A469000655EE /* xss.dtd */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xss.dtd; sourceTree = "<group>"; };
                AFC259410988A469000655EE /* xss.xsd */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xss.xsd; sourceTree = "<group>"; };
-               AFC259420988A469000655EE /* xteevee.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xteevee.xml; sourceTree = "<group>"; };
                AFC259430988A469000655EE /* zoom.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = zoom.xml; sourceTree = "<group>"; };
                AFC25B5E0988BA63000655EE /* deco.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = deco.c; path = hacks/deco.c; sourceTree = "<group>"; };
                AFC25B990988BC08000655EE /* colors.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colors.c; path = utils/colors.c; sourceTree = "<group>"; };
                AFC25B9A0988BC08000655EE /* colors.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colors.h; path = utils/colors.h; sourceTree = "<group>"; };
                AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rdbomb.xml; sourceTree = "<group>"; };
+               AFD51B300F063B4A00471C02 /* Photopile.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Photopile.saver; sourceTree = BUILT_PRODUCTS_DIR; };
+               AFD51B330F063B4B00471C02 /* XScreenSaver copy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "XScreenSaver copy.plist"; path = "OSX/XScreenSaver copy.plist"; sourceTree = "<group>"; };
+               AFD51DB60F063BCE00471C02 /* photopile.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = photopile.c; path = hacks/glx/photopile.c; sourceTree = "<group>"; };
+               AFD51DB80F063BE700471C02 /* photopile.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = photopile.xml; sourceTree = "<group>"; };
                AFD56E040996A03800BA26F7 /* GLText.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLText.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFD56E080996A07A00BA26F7 /* gltext.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = gltext.c; path = hacks/glx/gltext.c; sourceTree = "<group>"; };
                AFD56E0A0996A0ED00BA26F7 /* glut_roman.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = glut_roman.h; path = hacks/glx/glut_roman.h; sourceTree = "<group>"; };
                AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SkyTentacles.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFE2A4720E2E90E300ADB298 /* skytentacles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = skytentacles.c; path = hacks/glx/skytentacles.c; sourceTree = "<group>"; };
                AFE2A4740E2E911200ADB298 /* skytentacles.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = skytentacles.xml; sourceTree = "<group>"; };
+               AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sonar.saver; sourceTree = BUILT_PRODUCTS_DIR; };
+               AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "sonar-icmp.c"; path = "hacks/glx/sonar-icmp.c"; sourceTree = "<group>"; };
+               AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "sonar-sim.c"; path = "hacks/glx/sonar-sim.c"; sourceTree = "<group>"; };
+               AFE30C010E52B1DC00CCF4A5 /* sonar.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sonar.c; path = hacks/glx/sonar.c; sourceTree = "<group>"; };
                AFE6A16A0CDD78EA002805BF /* involute.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = involute.c; path = hacks/glx/involute.c; sourceTree = "<group>"; };
                AFE6A16B0CDD78EA002805BF /* involute.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = involute.h; path = hacks/glx/involute.h; sourceTree = "<group>"; };
                AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoebiusGears.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AF35E8940E63823600691F2F /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AF35E8950E63823600691F2F /* libjwxyz.a in Frameworks */,
+                               AF35E8960E63823600691F2F /* ScreenSaver.framework in Frameworks */,
+                               AF35E8970E63823600691F2F /* Cocoa.framework in Frameworks */,
+                               AF35E8980E63823600691F2F /* AGL.framework in Frameworks */,
+                               AF35E8990E63823600691F2F /* OpenGL.framework in Frameworks */,
+                               AF35E89A0E63823600691F2F /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AF3C714D0D624BF50030CC0D /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF64266D09A192FB000F4CD4 /* Frameworks */ = {
-                       isa = PBXFrameworksBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF64266E09A192FB000F4CD4 /* libjwxyz.a in Frameworks */,
-                               AF64266F09A192FB000F4CD4 /* ScreenSaver.framework in Frameworks */,
-                               AF64267009A192FB000F4CD4 /* Cocoa.framework in Frameworks */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF64268309A194B0000F4CD4 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF6426FC09A1C952000F4CD4 /* Frameworks */ = {
-                       isa = PBXFrameworksBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF6426FD09A1C952000F4CD4 /* libjwxyz.a in Frameworks */,
-                               AF6426FE09A1C952000F4CD4 /* ScreenSaver.framework in Frameworks */,
-                               AF6426FF09A1C952000F4CD4 /* Cocoa.framework in Frameworks */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF64277909A1D37A000F4CD4 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF9D4C3309B59A49006E59CF /* Frameworks */ = {
-                       isa = PBXFrameworksBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF9D4C3409B59A49006E59CF /* libjwxyz.a in Frameworks */,
-                               AF9D4C3509B59A49006E59CF /* ScreenSaver.framework in Frameworks */,
-                               AF9D4C3609B59A49006E59CF /* Cocoa.framework in Frameworks */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF9D4C7109B59F27006E59CF /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFD51B240F063B4A00471C02 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFD51B250F063B4A00471C02 /* libjwxyz.a in Frameworks */,
+                               AFD51B260F063B4A00471C02 /* ScreenSaver.framework in Frameworks */,
+                               AFD51B270F063B4A00471C02 /* Cocoa.framework in Frameworks */,
+                               AFD51B280F063B4A00471C02 /* AGL.framework in Frameworks */,
+                               AFD51B290F063B4A00471C02 /* OpenGL.framework in Frameworks */,
+                               AFD51B2A0F063B4A00471C02 /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFD56DF90996A03800BA26F7 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFE30BF00E52B14700CCF4A5 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFE30BF10E52B14700CCF4A5 /* libjwxyz.a in Frameworks */,
+                               AFE30BF20E52B14700CCF4A5 /* ScreenSaver.framework in Frameworks */,
+                               AFE30BF30E52B14700CCF4A5 /* Cocoa.framework in Frameworks */,
+                               AFE30BF40E52B14700CCF4A5 /* AGL.framework in Frameworks */,
+                               AFE30BF50E52B14700CCF4A5 /* OpenGL.framework in Frameworks */,
+                               AFE30BF60E52B14700CCF4A5 /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFE6A18B0CDD7B2E002805BF /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                                AF64261F09A18D6C000F4CD4 /* HyperBall.saver */,
                                AF64263C09A18F54000F4CD4 /* Moire2.saver */,
                                AF64265F09A19229000F4CD4 /* Munch.saver */,
-                               AF64267509A192FB000F4CD4 /* Mismunch.saver */,
                                AF64268B09A194B0000F4CD4 /* Goop.saver */,
-                               AF64270409A1C952000F4CD4 /* Sonar.saver */,
                                AF64278109A1D37A000F4CD4 /* SpeedMine.saver */,
                                AF6427B809A2DE36000F4CD4 /* Bubbles.saver */,
                                AF9D467609B5109C006E59CF /* DecayScreen.saver */,
                                AF9D496409B53FC9006E59CF /* RotZoomer.saver */,
                                AF9D497C09B5411D006E59CF /* Twang.saver */,
                                AF9D49A709B544C3006E59CF /* Spotlight.saver */,
-                               AF9D4C3B09B59A49006E59CF /* Jigsaw.saver */,
                                AF9D4C7909B59F27006E59CF /* XLyap.saver */,
                                AF9D4CF709B5AA8E006E59CF /* Pong.saver */,
                                AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */,
                                AF3C71590D624BF50030CC0D /* Hypnowheel.saver */,
                                AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */,
                                AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */,
+                               AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */,
+                               AF35E8A00E63823600691F2F /* Jigsaw.saver */,
+                               AFD51B300F063B4A00471C02 /* Photopile.saver */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                                8D1107310486CEB800E47090 /* XScreenSaver.plist */,
                                AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */,
                                AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */,
+                               AFD51B330F063B4B00471C02 /* XScreenSaver copy.plist */,
                        );
                        name = Resources;
                        sourceTree = "<group>";
                                AF477395099D65FE001F091E /* wormhole.c */,
                                AF477297099D5980001F091E /* piecewise.c */,
                                AF9D4D9209B5B444006E59CF /* xanalogtv.c */,
-                               AF9D4C4009B59B6F006E59CF /* jigsaw.c */,
                                AF47727E099D5808001F091E /* popsquares.c */,
                                AF477266099D5768001F091E /* halftone.c */,
                                AF477231099D4FD5001F091E /* anemone.c */,
                                AF477205099D4EB6001F091E /* nerverot.c */,
                                AF4771EF099D4DFE001F091E /* ccurve.c */,
                                AFF463490C44044E00EE6509 /* cwaves.c */,
-                               AF64270709A1C9EF000F4CD4 /* sonar.c */,
                                AF4771BA099D4997001F091E /* t3d.c */,
                                AF477192099D4864001F091E /* wander.c */,
                                AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */,
                                AF476FD0099D15AA001F091E /* interference.c */,
                                AF975D66099CA16A00B05160 /* rocks.c */,
                                AF9D48EE09B533AE006E59CF /* bumps.c */,
-                               AF9D48EF09B533AE006E59CF /* bumps.h */,
                                AF975C76099C8FC700B05160 /* noseguy.c */,
                                AF975B14099C709E00B05160 /* memscroller.c */,
                                AF64278709A1D433000F4CD4 /* speedmine.c */,
                                AFD5700C0996B49D00BA26F7 /* penrose.c */,
                                AFD56FE20996B26200BA26F7 /* lissie.c */,
                                AFD56FCC0996B1D600BA26F7 /* lisa.c */,
+                               AF35EB250E6382BA00691F2F /* jigsaw.c */,
                                AFD56FB60996B16300BA26F7 /* lightning.c */,
                                AFD56FA00996B0E500BA26F7 /* laser.c */,
                                AFD56F880996B06600BA26F7 /* hopalong.c */,
                                AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */,
                                AF642410099FFAF1000F4CD4 /* extrusion.c */,
                                AF642411099FFAF1000F4CD4 /* extrusion.h */,
+                               AFD51DB60F063BCE00471C02 /* photopile.c */,
                                AFD56E080996A07A00BA26F7 /* gltext.c */,
                                AFA563B90993991300F3E977 /* juggler3d.c */,
                                AFA5638E0993980D00F3E977 /* timetunnel.c */,
                                AF7778BE09B65BA300EA3033 /* molecules.sh */,
                                AFA55AF609933DBF00F3E977 /* b_sphere.c */,
                                AF7778C009B65C0F00EA3033 /* sproingies.h */,
+                               AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */,
+                               AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */,
+                               AFE30C010E52B1DC00CCF4A5 /* sonar.c */,
                                AFA55AE809933D5900F3E977 /* bubble3d.h */,
                                AFA55AE409933D3800F3E977 /* bubble3d.c */,
                                AFA55A8E0993369100F3E977 /* lament.c */,
                                AFC258800988A468000655EE /* bubbles.xml */,
                                AFC258810988A468000655EE /* bumps.xml */,
                                AFC258820988A468000655EE /* cage.xml */,
+                               AFD51DB80F063BE700471C02 /* photopile.xml */,
                                AFC258830988A468000655EE /* carousel.xml */,
                                AFC258840988A468000655EE /* ccurve.xml */,
                                AFF4634B0C44046500EE6509 /* cwaves.xml */,
                                AFC258870988A468000655EE /* cloudlife.xml */,
                                AFC258880988A468000655EE /* compass.xml */,
                                AFC258890988A468000655EE /* coral.xml */,
-                               AFC2588A0988A468000655EE /* cosmos.xml */,
                                AFC2588B0988A468000655EE /* crackberg.xml */,
                                AFC2588C0988A468000655EE /* critical.xml */,
                                AFC2588D0988A468000655EE /* crystal.xml */,
                                AFC258980988A468000655EE /* distort.xml */,
                                AFC258990988A468000655EE /* drift.xml */,
                                AF77787909B6545E00EA3033 /* dnalogo.xml */,
-                               AFC2589A0988A468000655EE /* electricsheep.xml */,
                                AFC2589B0988A468000655EE /* endgame.xml */,
                                AFC2589C0988A468000655EE /* engine.xml */,
                                AFC2589D0988A468000655EE /* epicycle.xml */,
                                AFC258A00988A468000655EE /* extrusion.xml */,
                                AFC258A10988A468000655EE /* fadeplot.xml */,
                                AFC258A20988A468000655EE /* fiberlamp.xml */,
-                               AFC258A30988A468000655EE /* fireflies.xml */,
                                AFC258A40988A468000655EE /* fireworkx.xml */,
                                AFC258A50988A468000655EE /* flag.xml */,
                                AFC258A60988A468000655EE /* flame.xml */,
                                AFC258BB0988A468000655EE /* glslideshow.xml */,
                                AFC258BC0988A468000655EE /* glsnake.xml */,
                                AFC258BD0988A468000655EE /* gltext.xml */,
-                               AFC258BE0988A468000655EE /* goban.xml */,
                                AFC258BF0988A468000655EE /* goop.xml */,
                                AFC258C00988A468000655EE /* grav.xml */,
                                AFC258C10988A468000655EE /* greynetic.xml */,
                                AFC2590F0988A469000655EE /* sonar.xml */,
                                AFC259100988A469000655EE /* speedmine.xml */,
                                AFC259110988A469000655EE /* sphere.xml */,
-                               AFC259120988A469000655EE /* sphereeversion.xml */,
                                AFC259130988A469000655EE /* spheremonics.xml */,
                                AFC259140988A469000655EE /* spiral.xml */,
                                AFC259150988A469000655EE /* spotlight.xml */,
                                AFC259300988A469000655EE /* worm.xml */,
                                AFC259310988A469000655EE /* wormhole.xml */,
                                AFC259320988A469000655EE /* xanalogtv.xml */,
-                               AFC259330988A469000655EE /* xaos.xml */,
-                               AFC259340988A469000655EE /* xdaliclock.xml */,
                                AFC259370988A469000655EE /* xflame.xml */,
                                AFC259380988A469000655EE /* xjack.xml */,
                                AFC259390988A469000655EE /* xlyap.xml */,
                                AFC2593A0988A469000655EE /* xmatrix.xml */,
-                               AFC2593B0988A469000655EE /* xmountains.xml */,
-                               AFC2593C0988A469000655EE /* xplanet.xml */,
                                AFC2593D0988A469000655EE /* xrayswarm.xml */,
-                               AFC2593E0988A469000655EE /* xsnow.xml */,
                                AFC2593F0988A469000655EE /* xspirograph.xml */,
                                AFC259400988A469000655EE /* xss.dtd */,
                                AFC259410988A469000655EE /* xss.xsd */,
-                               AFC259420988A469000655EE /* xteevee.xml */,
                                AFC259430988A469000655EE /* zoom.xml */,
                        );
                        name = config;
                        productReference = AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */;
                        productType = "com.apple.product-type.bundle";
                };
+               AF35E88A0E63823600691F2F /* Jigsaw */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AF35E89D0E63823600691F2F /* Build configuration list for PBXNativeTarget "Jigsaw" */;
+                       buildPhases = (
+                               AF35E88D0E63823600691F2F /* Resources */,
+                               AF35E88F0E63823600691F2F /* Sources */,
+                               AF35E8940E63823600691F2F /* Frameworks */,
+                               AF35E89B0E63823600691F2F /* Rez */,
+                               AF35E89C0E63823600691F2F /* ShellScript */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AF35E88B0E63823600691F2F /* PBXTargetDependency */,
+                       );
+                       name = Jigsaw;
+                       productName = TopBlock;
+                       productReference = AF35E8A00E63823600691F2F /* Jigsaw.saver */;
+                       productType = "com.apple.product-type.bundle";
+               };
                AF3C71450D624BF50030CC0D /* Hypnowheel */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AF3C71560D624BF50030CC0D /* Build configuration list for PBXNativeTarget "Hypnowheel" */;
                        productReference = AF64265F09A19229000F4CD4 /* Munch.saver */;
                        productType = "com.apple.product-type.bundle";
                };
-               AF64266509A192FB000F4CD4 /* Mismunch */ = {
-                       isa = PBXNativeTarget;
-                       buildConfigurationList = AF64267209A192FB000F4CD4 /* Build configuration list for PBXNativeTarget "Mismunch" */;
-                       buildPhases = (
-                               AF64266809A192FB000F4CD4 /* Resources */,
-                               AF64266A09A192FB000F4CD4 /* Sources */,
-                               AF64266D09A192FB000F4CD4 /* Frameworks */,
-                               AF64267109A192FB000F4CD4 /* Rez */,
-                               AFA3D8A709C03C6500E4CFCA /* ShellScript */,
-                       );
-                       buildRules = (
-                       );
-                       dependencies = (
-                               AF64266609A192FB000F4CD4 /* PBXTargetDependency */,
-                       );
-                       name = Mismunch;
-                       productName = Mismunch;
-                       productReference = AF64267509A192FB000F4CD4 /* Mismunch.saver */;
-                       productType = "com.apple.product-type.bundle";
-               };
                AF64267B09A194B0000F4CD4 /* Goop */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AF64268809A194B0000F4CD4 /* Build configuration list for PBXNativeTarget "Goop" */;
                        productReference = AF64268B09A194B0000F4CD4 /* Goop.saver */;
                        productType = "com.apple.product-type.bundle";
                };
-               AF6426F409A1C952000F4CD4 /* Sonar */ = {
-                       isa = PBXNativeTarget;
-                       buildConfigurationList = AF64270109A1C952000F4CD4 /* Build configuration list for PBXNativeTarget "Sonar" */;
-                       buildPhases = (
-                               AF6426F709A1C952000F4CD4 /* Resources */,
-                               AF6426F909A1C952000F4CD4 /* Sources */,
-                               AF6426FC09A1C952000F4CD4 /* Frameworks */,
-                               AF64270009A1C952000F4CD4 /* Rez */,
-                               AFA3D8D509C03CB100E4CFCA /* ShellScript */,
-                       );
-                       buildRules = (
-                       );
-                       dependencies = (
-                               AF6426F509A1C952000F4CD4 /* PBXTargetDependency */,
-                       );
-                       name = Sonar;
-                       productName = Sonar;
-                       productReference = AF64270409A1C952000F4CD4 /* Sonar.saver */;
-                       productType = "com.apple.product-type.bundle";
-               };
                AF64277109A1D37A000F4CD4 /* SpeedMine */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AF64277E09A1D37A000F4CD4 /* Build configuration list for PBXNativeTarget "SpeedMine" */;
                        productReference = AF9D49A709B544C3006E59CF /* Spotlight.saver */;
                        productType = "com.apple.product-type.bundle";
                };
-               AF9D4C2B09B59A49006E59CF /* Jigsaw */ = {
-                       isa = PBXNativeTarget;
-                       buildConfigurationList = AF9D4C3809B59A49006E59CF /* Build configuration list for PBXNativeTarget "Jigsaw" */;
-                       buildPhases = (
-                               AF9D4C2E09B59A49006E59CF /* Resources */,
-                               AF9D4C3009B59A49006E59CF /* Sources */,
-                               AF9D4C3309B59A49006E59CF /* Frameworks */,
-                               AF9D4C3709B59A49006E59CF /* Rez */,
-                               AFA3D89909C03C4A00E4CFCA /* ShellScript */,
-                       );
-                       buildRules = (
-                       );
-                       dependencies = (
-                               AF9D4C2C09B59A49006E59CF /* PBXTargetDependency */,
-                       );
-                       name = Jigsaw;
-                       productName = Jigsaw;
-                       productReference = AF9D4C3B09B59A49006E59CF /* Jigsaw.saver */;
-                       productType = "com.apple.product-type.bundle";
-               };
                AF9D4C6909B59F27006E59CF /* XLyap */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AF9D4C7609B59F27006E59CF /* Build configuration list for PBXNativeTarget "XLyap" */;
                        productReference = AFA563B6099398BB00F3E977 /* Juggler3D.saver */;
                        productType = "com.apple.product-type.bundle";
                };
+               AFD51B1B0F063B4A00471C02 /* Photopile */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */;
+                       buildPhases = (
+                               AFD51B1E0F063B4A00471C02 /* Resources */,
+                               AFD51B210F063B4A00471C02 /* Sources */,
+                               AFD51B240F063B4A00471C02 /* Frameworks */,
+                               AFD51B2B0F063B4A00471C02 /* Rez */,
+                               AFD51B2C0F063B4A00471C02 /* ShellScript */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AFD51B1C0F063B4A00471C02 /* PBXTargetDependency */,
+                       );
+                       name = Photopile;
+                       productName = Carousel;
+                       productReference = AFD51B300F063B4A00471C02 /* Photopile.saver */;
+                       productType = "com.apple.product-type.bundle";
+               };
                AFD56DF10996A03800BA26F7 /* GLText */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AFD56E010996A03800BA26F7 /* Build configuration list for PBXNativeTarget "GLText" */;
                        productReference = AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */;
                        productType = "com.apple.product-type.bundle";
                };
+               AFE30BE80E52B14700CCF4A5 /* Sonar */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AFE30BF90E52B14700CCF4A5 /* Build configuration list for PBXNativeTarget "Sonar" */;
+                       buildPhases = (
+                               AFE30BEB0E52B14700CCF4A5 /* Resources */,
+                               AFE30BED0E52B14700CCF4A5 /* Sources */,
+                               AFE30BF00E52B14700CCF4A5 /* Frameworks */,
+                               AFE30BF70E52B14700CCF4A5 /* Rez */,
+                               AFE30BF80E52B14700CCF4A5 /* ShellScript */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AFE30BE90E52B14700CCF4A5 /* PBXTargetDependency */,
+                       );
+                       name = Sonar;
+                       productName = TopBlock;
+                       productReference = AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */;
+                       productType = "com.apple.product-type.bundle";
+               };
                AFE6A1820CDD7B2E002805BF /* MoebiusGears */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AFE6A1940CDD7B2E002805BF /* Build configuration list for PBXNativeTarget "MoebiusGears" */;
                                AF7778A509B659C800EA3033 /* BlitSpin */,
                                AF4777D1099DC183001F091E /* BoxFit */,
                                AF9D4DAF09B5B71E006E59CF /* BSOD */,
-                               AF6427A809A2DE36000F4CD4 /* Bubbles */,
                                AF9D48DB09B53322006E59CF /* Bumps */,
                                AF4771DB099D4D9A001F091E /* CCurve */,
                                AF477774099DB965001F091E /* Celtic */,
                                AF47770D099DAF9F001F091E /* CloudLife */,
                                AF477169099D4786001F091E /* Compass */,
                                AF4775D8099D9F69001F091E /* Coral */,
-                               AF47765A099DA78E001F091E /* Critical */,
                                AFF463360C4403E400EE6509 /* CWaves */,
                                AF4778E8099DDDC8001F091E /* Cynosure */,
                                AF9D466609B5109C006E59CF /* DecayScreen */,
                                AF477752099DB61E001F091E /* Interaggregate */,
                                AF476FB5099D154F001F091E /* Interference */,
                                AF477401099D69E7001F091E /* Intermomentary */,
-                               AF9D4C2B09B59A49006E59CF /* Jigsaw */,
                                AF477499099D8A74001F091E /* Kaleidescope */,
                                AF477613099DA26C001F091E /* Kumppa */,
                                AF1A17610D6D6EE3008AF328 /* LCDscrub */,
-                               AF4774B4099D8B5F001F091E /* LMorph */,
                                AF4FF4930D52CA0800666F98 /* m6502.h */,
                                AF0DC7AB0C4C73F600D76972 /* m6502 */,
                                AF4774CE099D8BFF001F091E /* Maze */,
                                AF975AFC099C6FE400B05160 /* MemScroller */,
                                AF975A36099C681F00B05160 /* MetaBalls */,
-                               AF64266509A192FB000F4CD4 /* Mismunch */,
                                AF975775099C374A00B05160 /* Moire */,
                                AF64262C09A18F54000F4CD4 /* Moire2 */,
                                AF64264F09A19229000F4CD4 /* Munch */,
                                AF975865099C475900B05160 /* ShadeBobs */,
                                AF9D474409B5300A006E59CF /* SlideScreen */,
                                AF47792A099DE4C7001F091E /* Slip */,
-                               AF6426F409A1C952000F4CD4 /* Sonar */,
                                AF64277109A1D37A000F4CD4 /* SpeedMine */,
                                AF9D499709B544C2006E59CF /* Spotlight */,
                                AF477644099DA6D0001F091E /* Squiral */,
                                AF47759F099D9CF7001F091E /* Starfish */,
                                AF477723099DB044001F091E /* Substrate */,
-                               AF4771A7099D4949001F091E /* T3D */,
                                AF476FDA099D1686001F091E /* Truchet */,
                                AF9D496C09B5411D006E59CF /* Twang */,
                                AF4776F1099DAE7A001F091E /* Vermiculate */,
                                AFA33C020B058E17002B0E7D /* webcollage */,
                                AFA33BC60B058740002B0E7D /* webcollage-helper */,
                                AF4776DB099DADDF001F091E /* WhirlWindWarp */,
-                               AF477208099D4EE8001F091E /* Whirlygig */,
                                AF477382099D65A1001F091E /* Wormhole */,
                                AF975808099C41D500B05160 /* XFlame */,
                                AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */,
                                AFD571430996C01700BA26F7 /* Euler2D */,
                                AFD570590996B6A300BA26F7 /* FadePlot */,
                                AF794F8E09974A320059A8B0 /* Fiberlamp */,
-                               AF477909099DE379001F091E /* Flag */,
                                AFD570EA0996BBBF00BA26F7 /* Flow */,
-                               AFD56EDA0996A95700BA26F7 /* Forest */,
                                AFD56F230996AB8A00BA26F7 /* Galaxy */,
                                AFD56F4F0996AEEE00BA26F7 /* Grav */,
                                AFD56F6B0996B01600BA26F7 /* Hopalong */,
                                AFD571B50996D9DC00BA26F7 /* Juggle */,
                                AFD572F9099701C000BA26F7 /* Julia */,
-                               AFD56F8C0996B09400BA26F7 /* Laser */,
-                               AFD56FA30996B10F00BA26F7 /* Lightning */,
-                               AFD56FB90996B18F00BA26F7 /* Lisa */,
-                               AFD56FCF0996B20900BA26F7 /* Lissie */,
                                AF794FCD09974FA60059A8B0 /* Loop */,
                                AFD5706F0996B72700BA26F7 /* Mountain */,
                                AF77771A09B6416100EA3033 /* Pacman */,
                                AFD56FF80996B43800BA26F7 /* Penrose */,
                                AFD5726D0996EE8500BA26F7 /* Polyominoes */,
-                               AFD570B10996B93000BA26F7 /* Rotor */,
                                AFD5700F0996B4CC00BA26F7 /* Sierpinski */,
-                               AFD570260996B56D00BA26F7 /* Sphere */,
-                               AFD570430996B61600BA26F7 /* Spiral */,
                                AFD5735D0997411200BA26F7 /* Strange */,
                                AFD572220996E4A300BA26F7 /* Swirl */,
                                AFD571590996C0CE00BA26F7 /* Thornbird */,
                                AFD570850996B80300BA26F7 /* Triangle */,
-                               AFD56F0B0996AAFA00BA26F7 /* Vines */,
-                               AFD5709B0996B88E00BA26F7 /* Worm */,
                                AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */,
                                AFA5604A09936E2100F3E977 /* AntInspect */,
                                AFA562DA099393C900F3E977 /* AntMaze */,
                                AFA55E2F09935F8E00F3E977 /* GLBlur */,
                                AFF463580C440AEF00EE6509 /* GLCells */,
                                AF77777409B6497800EA3033 /* Gleidescope */,
-                               AFA55CCC09934CE400F3E977 /* GLForestFire */,
                                AFA56331099395ED00F3E977 /* GLHanoi */,
                                AFA55FF909936C6D00F3E977 /* GLKnots */,
                                AFA55F720993643600F3E977 /* GLMatrix */,
                                AFA55F420993629000F3E977 /* HyperTorus */,
                                AF3C71450D624BF50030CC0D /* Hypnowheel */,
                                AFA55F06099361B700F3E977 /* JigglyPuff */,
+                               AF35E88A0E63823600691F2F /* Jigsaw */,
                                AFA563A4099398BB00F3E977 /* Juggler3D */,
                                AFA55F2A0993622F00F3E977 /* Klein */,
                                AFA55A790993364300F3E977 /* Lament */,
                                AFA560FD0993781600F3E977 /* Molecule */,
                                AFA559B50993328000F3E977 /* Morph3D */,
                                AFA5617B09937CF100F3E977 /* Noof */,
+                               AFD51B1B0F063B4A00471C02 /* Photopile */,
                                AFA5621F0993852500F3E977 /* Pinion */,
                                AF4812B30990D3D900FB32B8 /* Pipes */,
                                AFA5619D09937D7E00F3E977 /* Polyhedra */,
                                AFA55D3C0993565300F3E977 /* SBalls */,
                                AFA55B7909933F7200F3E977 /* Sierpinski3D */,
                                AFE2A4560E2E904600ADB298 /* SkyTentacles */,
+                               AFE30BE80E52B14700CCF4A5 /* Sonar */,
                                AFA55D7F099358C400F3E977 /* Spheremonics */,
                                AFA55A20099334A000F3E977 /* Sproingies */,
                                AFA55A030993340300F3E977 /* Stairs */,
                                AF998EDA0A083DB30051049D /* TopBlock */,
                                AF0DCA420C4CBB0D00D76972 /* Voronoi */,
                                AF9771D60989DC4A001F8B92 /* SaverTester */,
+                               AF137D410F075C9B004DE3B2 /* Obsolete */,
+                               AF6427A809A2DE36000F4CD4 /* Bubbles */,
+                               AF47765A099DA78E001F091E /* Critical */,
+                               AF477909099DE379001F091E /* Flag */,
+                               AFD56EDA0996A95700BA26F7 /* Forest */,
+                               AFA55CCC09934CE400F3E977 /* GLForestFire */,
+                               AF4774B4099D8B5F001F091E /* LMorph */,
+                               AFD56F8C0996B09400BA26F7 /* Laser */,
+                               AFD56FA30996B10F00BA26F7 /* Lightning */,
+                               AFD56FB90996B18F00BA26F7 /* Lisa */,
+                               AFD56FCF0996B20900BA26F7 /* Lissie */,
+                               AFD570B10996B93000BA26F7 /* Rotor */,
+                               AFD570260996B56D00BA26F7 /* Sphere */,
+                               AFD570430996B61600BA26F7 /* Spiral */,
+                               AF4771A7099D4949001F091E /* T3D */,
+                               AFD56F0B0996AAFA00BA26F7 /* Vines */,
+                               AF477208099D4EE8001F091E /* Whirlygig */,
+                               AFD5709B0996B88E00BA26F7 /* Worm */,
                        );
                };
 /* End PBXProject section */
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AF35E88D0E63823600691F2F /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AF35EB240E63829600691F2F /* jigsaw.xml in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AF3C71480D624BF50030CC0D /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF64266809A192FB000F4CD4 /* Resources */ = {
-                       isa = PBXResourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF64267709A1938D000F4CD4 /* mismunch.xml in Resources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF64267E09A194B0000F4CD4 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF6426F709A1C952000F4CD4 /* Resources */ = {
-                       isa = PBXResourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF64270609A1C9D6000F4CD4 /* sonar.xml in Resources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF64277409A1D37A000F4CD4 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF9D4C2E09B59A49006E59CF /* Resources */ = {
-                       isa = PBXResourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF9D4C3F09B59B56006E59CF /* jigsaw.xml in Resources */,
-                               AF0FAF2009CA712600EE1051 /* xscreensaver-getimage-file in Resources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF9D4C6C09B59F27006E59CF /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFD51B1E0F063B4A00471C02 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */,
+                               AFD51DB90F063BE700471C02 /* photopile.xml in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFD56DF40996A03800BA26F7 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFE30BEB0E52B14700CCF4A5 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFE30BFE0E52B18300CCF4A5 /* sonar.xml in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFE6A1850CDD7B2E002805BF /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AF35E89B0E63823600691F2F /* Rez */ = {
+                       isa = PBXRezBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AF3C71540D624BF50030CC0D /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF64267109A192FB000F4CD4 /* Rez */ = {
-                       isa = PBXRezBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF64268709A194B0000F4CD4 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF64270009A1C952000F4CD4 /* Rez */ = {
-                       isa = PBXRezBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF64277D09A1D37A000F4CD4 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF9D4C3709B59A49006E59CF /* Rez */ = {
-                       isa = PBXRezBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF9D4C7509B59F27006E59CF /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFD51B2B0F063B4A00471C02 /* Rez */ = {
+                       isa = PBXRezBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFD56E000996A03800BA26F7 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFE30BF70E52B14700CCF4A5 /* Rez */ = {
+                       isa = PBXRezBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFE6A1920CDD7B2E002805BF /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
+               AF35E89C0E63823600691F2F /* ShellScript */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
                AF3C71550D624BF50030CC0D /* ShellScript */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
-               AFA3D89909C03C4A00E4CFCA /* ShellScript */ = {
-                       isa = PBXShellScriptBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       inputPaths = (
-                       );
-                       outputPaths = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-                       shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
-                       showEnvVarsInLog = 0;
-               };
                AFA3D89B09C03C4D00E4CFCA /* ShellScript */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
-               AFA3D8A709C03C6500E4CFCA /* ShellScript */ = {
-                       isa = PBXShellScriptBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       inputPaths = (
-                       );
-                       outputPaths = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-                       shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
-                       showEnvVarsInLog = 0;
-               };
                AFA3D8A909C03C6900E4CFCA /* ShellScript */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
-               AFA3D8D509C03CB100E4CFCA /* ShellScript */ = {
-                       isa = PBXShellScriptBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       inputPaths = (
-                       );
-                       outputPaths = (
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-                       shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
-                       showEnvVarsInLog = 0;
-               };
                AFA3D8D709C03CB400E4CFCA /* ShellScript */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
+               AFD51B2C0F063B4A00471C02 /* ShellScript */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
                AFE2A4660E2E904600ADB298 /* ShellScript */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
+               AFE30BF80E52B14700CCF4A5 /* ShellScript */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
                AFE6A1930CDD7B2E002805BF /* ShellScript */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AF35E88F0E63823600691F2F /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AF35E8900E63823600691F2F /* XScreenSaverSubclass.m in Sources */,
+                               AF35E8910E63823600691F2F /* sonar-icmp.c in Sources */,
+                               AF35E8920E63823600691F2F /* sonar-sim.c in Sources */,
+                               AF35E8930E63823600691F2F /* sonar.c in Sources */,
+                               AF35EB260E6382BA00691F2F /* jigsaw.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AF3C714A0D624BF50030CC0D /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF64266A09A192FB000F4CD4 /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF64266B09A192FB000F4CD4 /* XScreenSaverSubclass.m in Sources */,
-                               AF64267909A193A4000F4CD4 /* mismunch.c in Sources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF64268009A194B0000F4CD4 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF6426F909A1C952000F4CD4 /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF6426FA09A1C952000F4CD4 /* XScreenSaverSubclass.m in Sources */,
-                               AF64270809A1C9EF000F4CD4 /* sonar.c in Sources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF64277609A1D37A000F4CD4 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-               AF9D4C3009B59A49006E59CF /* Sources */ = {
-                       isa = PBXSourcesBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                               AF9D4C3109B59A49006E59CF /* XScreenSaverSubclass.m in Sources */,
-                               AF9D4C4109B59B6F006E59CF /* jigsaw.c in Sources */,
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
                AF9D4C6E09B59F27006E59CF /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFD51B210F063B4A00471C02 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFD51B220F063B4A00471C02 /* XScreenSaverSubclass.m in Sources */,
+                               AFD51DB70F063BCE00471C02 /* photopile.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFD56DF60996A03800BA26F7 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFE30BED0E52B14700CCF4A5 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFE30BEE0E52B14700CCF4A5 /* XScreenSaverSubclass.m in Sources */,
+                               AFE30C020E52B1DC00CCF4A5 /* sonar-icmp.c in Sources */,
+                               AFE30C030E52B1DC00CCF4A5 /* sonar-sim.c in Sources */,
+                               AFE30C040E52B1DC00CCF4A5 /* sonar.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFE6A1870CDD7B2E002805BF /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-               AF08399009930B6B00277BE9 /* PBXTargetDependency */ = {
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+               AF08399009930B6B00277BE9 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AF08399109930B6B00277BE9 /* PBXContainerItemProxy */;
+               };
+               AF083A33099311D700277BE9 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AF083A34099311D700277BE9 /* PBXContainerItemProxy */;
+               };
+               AF0DC7AC0C4C73F600D76972 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AF0DC7AD0C4C73F600D76972 /* PBXContainerItemProxy */;
+               };
+               AF0DCA310C4C744D00D76972 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF0DC7AB0C4C73F600D76972 /* m6502 */;
+                       targetProxy = AF0DCA300C4C744D00D76972 /* PBXContainerItemProxy */;
+               };
+               AF0DCA430C4CBB0D00D76972 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AF0DCA440C4CBB0D00D76972 /* PBXContainerItemProxy */;
+               };
+               AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF0DCA420C4CBB0D00D76972 /* Voronoi */;
+                       targetProxy = AF0DCA5B0C4CBB4300D76972 /* PBXContainerItemProxy */;
+               };
+               AF137D470F075CC8004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF137D410F075C9B004DE3B2 /* Obsolete */;
+                       targetProxy = AF137D460F075CC8004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D490F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFD5709B0996B88E00BA26F7 /* Worm */;
+                       targetProxy = AF137D480F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D4B0F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF477208099D4EE8001F091E /* Whirlygig */;
+                       targetProxy = AF137D4A0F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D4D0F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFD56F0B0996AAFA00BA26F7 /* Vines */;
+                       targetProxy = AF137D4C0F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D4F0F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4771A7099D4949001F091E /* T3D */;
+                       targetProxy = AF137D4E0F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D510F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFD570430996B61600BA26F7 /* Spiral */;
+                       targetProxy = AF137D500F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D530F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFD570260996B56D00BA26F7 /* Sphere */;
+                       targetProxy = AF137D520F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D550F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFD570B10996B93000BA26F7 /* Rotor */;
+                       targetProxy = AF137D540F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D570F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFD56FCF0996B20900BA26F7 /* Lissie */;
+                       targetProxy = AF137D560F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D590F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFD56FB90996B18F00BA26F7 /* Lisa */;
+                       targetProxy = AF137D580F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D5B0F075E5C004DE3B2 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
-                       targetProxy = AF08399109930B6B00277BE9 /* PBXContainerItemProxy */;
+                       target = AFD56FA30996B10F00BA26F7 /* Lightning */;
+                       targetProxy = AF137D5A0F075E5C004DE3B2 /* PBXContainerItemProxy */;
                };
-               AF083A33099311D700277BE9 /* PBXTargetDependency */ = {
+               AF137D5D0F075E5C004DE3B2 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
-                       targetProxy = AF083A34099311D700277BE9 /* PBXContainerItemProxy */;
+                       target = AFD56F8C0996B09400BA26F7 /* Laser */;
+                       targetProxy = AF137D5C0F075E5C004DE3B2 /* PBXContainerItemProxy */;
                };
-               AF0DC7AC0C4C73F600D76972 /* PBXTargetDependency */ = {
+               AF137D5F0F075E5C004DE3B2 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
-                       targetProxy = AF0DC7AD0C4C73F600D76972 /* PBXContainerItemProxy */;
+                       target = AF4774B4099D8B5F001F091E /* LMorph */;
+                       targetProxy = AF137D5E0F075E5C004DE3B2 /* PBXContainerItemProxy */;
                };
-               AF0DCA310C4C744D00D76972 /* PBXTargetDependency */ = {
+               AF137D610F075E5C004DE3B2 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       target = AF0DC7AB0C4C73F600D76972 /* m6502 */;
-                       targetProxy = AF0DCA300C4C744D00D76972 /* PBXContainerItemProxy */;
+                       target = AFA55CCC09934CE400F3E977 /* GLForestFire */;
+                       targetProxy = AF137D600F075E5C004DE3B2 /* PBXContainerItemProxy */;
                };
-               AF0DCA430C4CBB0D00D76972 /* PBXTargetDependency */ = {
+               AF137D630F075E5C004DE3B2 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
-                       targetProxy = AF0DCA440C4CBB0D00D76972 /* PBXContainerItemProxy */;
+                       target = AFD56EDA0996A95700BA26F7 /* Forest */;
+                       targetProxy = AF137D620F075E5C004DE3B2 /* PBXContainerItemProxy */;
                };
-               AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */ = {
+               AF137D650F075E5C004DE3B2 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       target = AF0DCA420C4CBB0D00D76972 /* Voronoi */;
-                       targetProxy = AF0DCA5B0C4CBB4300D76972 /* PBXContainerItemProxy */;
+                       target = AF477909099DE379001F091E /* Flag */;
+                       targetProxy = AF137D640F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D670F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF47765A099DA78E001F091E /* Critical */;
+                       targetProxy = AF137D660F075E5C004DE3B2 /* PBXContainerItemProxy */;
+               };
+               AF137D690F075E5C004DE3B2 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF6427A809A2DE36000F4CD4 /* Bubbles */;
+                       targetProxy = AF137D680F075E5C004DE3B2 /* PBXContainerItemProxy */;
                };
                AF1A17620D6D6EE3008AF328 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF1A17610D6D6EE3008AF328 /* LCDscrub */;
                        targetProxy = AF1A17830D6D6FA7008AF328 /* PBXContainerItemProxy */;
                };
+               AF35E88B0E63823600691F2F /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AF35E88C0E63823600691F2F /* PBXContainerItemProxy */;
+               };
+               AF35E8A30E63825600691F2F /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF35E88A0E63823600691F2F /* Jigsaw */;
+                       targetProxy = AF35E8A20E63825600691F2F /* PBXContainerItemProxy */;
+               };
                AF3C71460D624BF50030CC0D /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        target = AF3C71450D624BF50030CC0D /* Hypnowheel */;
                        targetProxy = AF42C5150D624E9200B27FF6 /* PBXContainerItemProxy */;
                };
+               AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFE30BE80E52B14700CCF4A5 /* Sonar */;
+                       targetProxy = AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */;
+               };
                AF476FB6099D154F001F091E /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        targetProxy = AF64265109A19229000F4CD4 /* PBXContainerItemProxy */;
                };
-               AF64266609A192FB000F4CD4 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
-                       targetProxy = AF64266709A192FB000F4CD4 /* PBXContainerItemProxy */;
-               };
                AF64267C09A194B0000F4CD4 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        targetProxy = AF64267D09A194B0000F4CD4 /* PBXContainerItemProxy */;
                };
-               AF6426F509A1C952000F4CD4 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
-                       targetProxy = AF6426F609A1C952000F4CD4 /* PBXContainerItemProxy */;
-               };
                AF64277209A1D37A000F4CD4 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        target = AF477382099D65A1001F091E /* Wormhole */;
                        targetProxy = AF7778E609B6604600EA3033 /* PBXContainerItemProxy */;
                };
-               AF7778E909B6604600EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF477208099D4EE8001F091E /* Whirlygig */;
-                       targetProxy = AF7778E809B6604600EA3033 /* PBXContainerItemProxy */;
-               };
                AF7778EB09B6604600EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4776DB099DADDF001F091E /* WhirlWindWarp */;
                        target = AF476FDA099D1686001F091E /* Truchet */;
                        targetProxy = AF7778F209B6604600EA3033 /* PBXContainerItemProxy */;
                };
-               AF7778F509B6604600EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF4771A7099D4949001F091E /* T3D */;
-                       targetProxy = AF7778F409B6604600EA3033 /* PBXContainerItemProxy */;
-               };
                AF7778F709B6604600EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF477723099DB044001F091E /* Substrate */;
                        target = AF64277109A1D37A000F4CD4 /* SpeedMine */;
                        targetProxy = AF7778FE09B6604700EA3033 /* PBXContainerItemProxy */;
                };
-               AF77790109B6604700EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF6426F409A1C952000F4CD4 /* Sonar */;
-                       targetProxy = AF77790009B6604700EA3033 /* PBXContainerItemProxy */;
-               };
                AF77790309B6604700EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF47792A099DE4C7001F091E /* Slip */;
                        target = AF975775099C374A00B05160 /* Moire */;
                        targetProxy = AF77792C09B6604800EA3033 /* PBXContainerItemProxy */;
                };
-               AF77792F09B6604800EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF64266509A192FB000F4CD4 /* Mismunch */;
-                       targetProxy = AF77792E09B6604800EA3033 /* PBXContainerItemProxy */;
-               };
                AF77793109B6604800EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF975A36099C681F00B05160 /* MetaBalls */;
                        target = AF4774CE099D8BFF001F091E /* Maze */;
                        targetProxy = AF77793409B6604800EA3033 /* PBXContainerItemProxy */;
                };
-               AF77793709B6604800EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF4774B4099D8B5F001F091E /* LMorph */;
-                       targetProxy = AF77793609B6604800EA3033 /* PBXContainerItemProxy */;
-               };
                AF77793909B6604800EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF477613099DA26C001F091E /* Kumppa */;
                        target = AF477499099D8A74001F091E /* Kaleidescope */;
                        targetProxy = AF77793A09B6604900EA3033 /* PBXContainerItemProxy */;
                };
-               AF77793D09B6604900EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF9D4C2B09B59A49006E59CF /* Jigsaw */;
-                       targetProxy = AF77793C09B6604900EA3033 /* PBXContainerItemProxy */;
-               };
                AF77793F09B6604900EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF477401099D69E7001F091E /* Intermomentary */;
                        target = AF4778E8099DDDC8001F091E /* Cynosure */;
                        targetProxy = AF77796C09B6604A00EA3033 /* PBXContainerItemProxy */;
                };
-               AF77796F09B6604A00EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF47765A099DA78E001F091E /* Critical */;
-                       targetProxy = AF77796E09B6604A00EA3033 /* PBXContainerItemProxy */;
-               };
                AF77797109B6604B00EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4775D8099D9F69001F091E /* Coral */;
                        target = AF9D48DB09B53322006E59CF /* Bumps */;
                        targetProxy = AF77797A09B6604B00EA3033 /* PBXContainerItemProxy */;
                };
-               AF77797D09B6604B00EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF6427A809A2DE36000F4CD4 /* Bubbles */;
-                       targetProxy = AF77797C09B6604B00EA3033 /* PBXContainerItemProxy */;
-               };
                AF77797F09B6604B00EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF9D4DAF09B5B71E006E59CF /* BSOD */;
                        target = AF47721E099D4F67001F091E /* Anemone */;
                        targetProxy = AF77798E09B6604C00EA3033 /* PBXContainerItemProxy */;
                };
-               AF77799109B6608000EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD5709B0996B88E00BA26F7 /* Worm */;
-                       targetProxy = AF77799009B6608000EA3033 /* PBXContainerItemProxy */;
-               };
-               AF77799309B6608000EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD56F0B0996AAFA00BA26F7 /* Vines */;
-                       targetProxy = AF77799209B6608000EA3033 /* PBXContainerItemProxy */;
-               };
                AF77799509B6608000EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AFD570850996B80300BA26F7 /* Triangle */;
                        target = AFD5735D0997411200BA26F7 /* Strange */;
                        targetProxy = AF77799A09B6608100EA3033 /* PBXContainerItemProxy */;
                };
-               AF77799D09B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD570430996B61600BA26F7 /* Spiral */;
-                       targetProxy = AF77799C09B6608100EA3033 /* PBXContainerItemProxy */;
-               };
-               AF77799F09B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD570260996B56D00BA26F7 /* Sphere */;
-                       targetProxy = AF77799E09B6608100EA3033 /* PBXContainerItemProxy */;
-               };
                AF7779A109B6608100EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AFD5700F0996B4CC00BA26F7 /* Sierpinski */;
                        targetProxy = AF7779A009B6608100EA3033 /* PBXContainerItemProxy */;
                };
-               AF7779A309B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD570B10996B93000BA26F7 /* Rotor */;
-                       targetProxy = AF7779A209B6608100EA3033 /* PBXContainerItemProxy */;
-               };
                AF7779A509B6608100EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AFD5726D0996EE8500BA26F7 /* Polyominoes */;
                        target = AF794FCD09974FA60059A8B0 /* Loop */;
                        targetProxy = AF7779AC09B6608100EA3033 /* PBXContainerItemProxy */;
                };
-               AF7779AF09B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD56FCF0996B20900BA26F7 /* Lissie */;
-                       targetProxy = AF7779AE09B6608100EA3033 /* PBXContainerItemProxy */;
-               };
-               AF7779B109B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD56FB90996B18F00BA26F7 /* Lisa */;
-                       targetProxy = AF7779B009B6608100EA3033 /* PBXContainerItemProxy */;
-               };
-               AF7779B309B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD56FA30996B10F00BA26F7 /* Lightning */;
-                       targetProxy = AF7779B209B6608100EA3033 /* PBXContainerItemProxy */;
-               };
-               AF7779B509B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD56F8C0996B09400BA26F7 /* Laser */;
-                       targetProxy = AF7779B409B6608100EA3033 /* PBXContainerItemProxy */;
-               };
                AF7779B709B6608100EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AFD572F9099701C000BA26F7 /* Julia */;
                        target = AFD56F230996AB8A00BA26F7 /* Galaxy */;
                        targetProxy = AF7779BE09B6608100EA3033 /* PBXContainerItemProxy */;
                };
-               AF7779C109B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFD56EDA0996A95700BA26F7 /* Forest */;
-                       targetProxy = AF7779C009B6608100EA3033 /* PBXContainerItemProxy */;
-               };
                AF7779C309B6608100EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AFD570EA0996BBBF00BA26F7 /* Flow */;
                        targetProxy = AF7779C209B6608100EA3033 /* PBXContainerItemProxy */;
                };
-               AF7779C509B6608100EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF477909099DE379001F091E /* Flag */;
-                       targetProxy = AF7779C409B6608100EA3033 /* PBXContainerItemProxy */;
-               };
                AF7779C709B6608200EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF794F8E09974A320059A8B0 /* Fiberlamp */;
                        target = AFA56331099395ED00F3E977 /* GLHanoi */;
                        targetProxy = AF777A2409B660B400EA3033 /* PBXContainerItemProxy */;
                };
-               AF777A2709B660B400EA3033 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AFA55CCC09934CE400F3E977 /* GLForestFire */;
-                       targetProxy = AF777A2609B660B400EA3033 /* PBXContainerItemProxy */;
-               };
                AF777A2909B660B400EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AFA55E2F09935F8E00F3E977 /* GLBlur */;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        targetProxy = AF9D499909B544C2006E59CF /* PBXContainerItemProxy */;
                };
-               AF9D4C2C09B59A49006E59CF /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
-                       targetProxy = AF9D4C2D09B59A49006E59CF /* PBXContainerItemProxy */;
-               };
                AF9D4C6A09B59F27006E59CF /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        target = AF9771D60989DC4A001F8B92 /* SaverTester */;
                        targetProxy = AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */;
                };
+               AFD51B1C0F063B4A00471C02 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AFD51B1D0F063B4A00471C02 /* PBXContainerItemProxy */;
+               };
+               AFD51B350F063B7800471C02 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFD51B1B0F063B4A00471C02 /* Photopile */;
+                       targetProxy = AFD51B340F063B7800471C02 /* PBXContainerItemProxy */;
+               };
                AFD56DF20996A03800BA26F7 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        target = AFE2A4560E2E904600ADB298 /* SkyTentacles */;
                        targetProxy = AFE2A46E0E2E908E00ADB298 /* PBXContainerItemProxy */;
                };
+               AFE30BE90E52B14700CCF4A5 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AFE30BEA0E52B14700CCF4A5 /* PBXContainerItemProxy */;
+               };
                AFE6A1830CDD7B2E002805BF /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        };
                        name = Release;
                };
+               AF137D420F075C9C004DE3B2 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               PRODUCT_NAME = Obsolete;
+                       };
+                       name = Debug;
+               };
+               AF137D430F075C9C004DE3B2 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = YES;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;
+                               PRODUCT_NAME = Obsolete;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
                AF1A17710D6D6EE3008AF328 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
+               AF35E89E0E63823600691F2F /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                       };
+                       name = Debug;
+               };
+               AF35E89F0E63823600691F2F /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                       };
+                       name = Release;
+               };
                AF3C71570D624BF50030CC0D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
-               AF64267309A192FB000F4CD4 /* Debug */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                       };
-                       name = Debug;
-               };
-               AF64267409A192FB000F4CD4 /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                       };
-                       name = Release;
-               };
                AF64268909A194B0000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
-               AF64270209A1C952000F4CD4 /* Debug */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                       };
-                       name = Debug;
-               };
-               AF64270309A1C952000F4CD4 /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                       };
-                       name = Release;
-               };
                AF64277F09A1D37A000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
-               AF9D4C3909B59A49006E59CF /* Debug */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                       };
-                       name = Debug;
-               };
-               AF9D4C3A09B59A49006E59CF /* Release */ = {
-                       isa = XCBuildConfiguration;
-                       buildSettings = {
-                       };
-                       name = Release;
-               };
                AF9D4C7709B59F27006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
+               AFD51B2E0F063B4A00471C02 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                       };
+                       name = Debug;
+               };
+               AFD51B2F0F063B4A00471C02 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                       };
+                       name = Release;
+               };
                AFD56E020996A03800BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
+               AFE30BFA0E52B14700CCF4A5 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                       };
+                       name = Debug;
+               };
+               AFE30BFB0E52B14700CCF4A5 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                       };
+                       name = Release;
+               };
                AFE6A1950CDD7B2E002805BF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               AF137D450F075CA4004DE3B2 /* Build configuration list for PBXAggregateTarget "Obsolete" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AF137D420F075C9C004DE3B2 /* Debug */,
+                               AF137D430F075C9C004DE3B2 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                AF1A17700D6D6EE3008AF328 /* Build configuration list for PBXNativeTarget "LCDscrub" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               AF35E89D0E63823600691F2F /* Build configuration list for PBXNativeTarget "Jigsaw" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AF35E89E0E63823600691F2F /* Debug */,
+                               AF35E89F0E63823600691F2F /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                AF3C71560D624BF50030CC0D /* Build configuration list for PBXNativeTarget "Hypnowheel" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               AF64267209A192FB000F4CD4 /* Build configuration list for PBXNativeTarget "Mismunch" */ = {
-                       isa = XCConfigurationList;
-                       buildConfigurations = (
-                               AF64267309A192FB000F4CD4 /* Debug */,
-                               AF64267409A192FB000F4CD4 /* Release */,
-                       );
-                       defaultConfigurationIsVisible = 0;
-                       defaultConfigurationName = Release;
-               };
                AF64268809A194B0000F4CD4 /* Build configuration list for PBXNativeTarget "Goop" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               AF64270109A1C952000F4CD4 /* Build configuration list for PBXNativeTarget "Sonar" */ = {
-                       isa = XCConfigurationList;
-                       buildConfigurations = (
-                               AF64270209A1C952000F4CD4 /* Debug */,
-                               AF64270309A1C952000F4CD4 /* Release */,
-                       );
-                       defaultConfigurationIsVisible = 0;
-                       defaultConfigurationName = Release;
-               };
                AF64277E09A1D37A000F4CD4 /* Build configuration list for PBXNativeTarget "SpeedMine" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               AF9D4C3809B59A49006E59CF /* Build configuration list for PBXNativeTarget "Jigsaw" */ = {
-                       isa = XCConfigurationList;
-                       buildConfigurations = (
-                               AF9D4C3909B59A49006E59CF /* Debug */,
-                               AF9D4C3A09B59A49006E59CF /* Release */,
-                       );
-                       defaultConfigurationIsVisible = 0;
-                       defaultConfigurationName = Release;
-               };
                AF9D4C7609B59F27006E59CF /* Build configuration list for PBXNativeTarget "XLyap" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AFD51B2E0F063B4A00471C02 /* Debug */,
+                               AFD51B2F0F063B4A00471C02 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                AFD56E010996A03800BA26F7 /* Build configuration list for PBXNativeTarget "GLText" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               AFE30BF90E52B14700CCF4A5 /* Build configuration list for PBXNativeTarget "Sonar" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AFE30BFA0E52B14700CCF4A5 /* Debug */,
+                               AFE30BFB0E52B14700CCF4A5 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                AFE6A1940CDD7B2E002805BF /* Build configuration list for PBXNativeTarget "MoebiusGears" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (