http://www.jwz.org/xscreensaver/xscreensaver-5.12.tar.gz
authorZygo Blaxell <zblaxell@faye.furryterror.org>
Tue, 19 Apr 2011 00:54:43 +0000 (20:54 -0400)
committerZygo Blaxell <zblaxell@faye.furryterror.org>
Fri, 8 Feb 2013 17:55:01 +0000 (12:55 -0500)
-rw-r--r-- 1 zblaxell zblaxell 5606851 Sep 15  2010 xscreensaver-5.12.tar.gz
7252540b1b1853459a56453714c0974de26fa4c5  xscreensaver-5.12.tar.gz

180 files changed:
OSX/._InvertedSlider.m [deleted file]
OSX/InvertedSlider.m
OSX/Makefile
OSX/PrefsReader.m
OSX/SaverTester.plist
OSX/XScreenSaver.plist
OSX/XScreenSaverConfigSheet.m
OSX/XScreenSaverGLView.m
OSX/XScreenSaverView.m
OSX/bindist.rtf
OSX/jwxyz.m
OSX/update-info-plist.pl
README
config.h.in
configure
configure.in
driver/Makefile.in
driver/XScreenSaver.ad.in
driver/XScreenSaver_ad.h
driver/demo-Gtk-conf.c
driver/demo-Gtk.c
driver/lock.c
driver/prefs.c
driver/remote.c
driver/subprocs.c
driver/test-passwd.c
driver/timers.c
driver/types.h
driver/xscreensaver-demo.glade2
driver/xscreensaver-text
driver/xscreensaver.c
driver/xscreensaver.h
driver/xset.c
hacks/._barcode.c [new file with mode: 0644]
hacks/._celtic.c [new file with mode: 0644]
hacks/._demon.c [new file with mode: 0644]
hacks/._eruption.c [new file with mode: 0644]
hacks/._flow.c [new file with mode: 0644]
hacks/._interaggregate.c [new file with mode: 0644]
hacks/._noseguy.c [new file with mode: 0644]
hacks/._petri.c [new file with mode: 0644]
hacks/._shadebobs.c [new file with mode: 0644]
hacks/._slidescreen.c [new file with mode: 0644]
hacks/._webcollage-helper-cocoa.m [new file with mode: 0644]
hacks/._zoom.c [new file with mode: 0644]
hacks/analogtv.c
hacks/anemone.c
hacks/apple2-main.c
hacks/asm6502.c
hacks/barcode.c
hacks/celtic.c
hacks/config/README
hacks/config/glhanoi.xml
hacks/config/rubik.xml
hacks/demon.c
hacks/epicycle.c
hacks/eruption.c
hacks/fadeplot.c
hacks/flame.c
hacks/flow.c
hacks/fontglide.c
hacks/fps.c
hacks/fuzzyflakes.c
hacks/glx/._blinkbox.c [new file with mode: 0644]
hacks/glx/._blocktube.c [new file with mode: 0644]
hacks/glx/._boing.c [new file with mode: 0644]
hacks/glx/._bouncingcow.c [new file with mode: 0644]
hacks/glx/._buildlwo.c [new file with mode: 0644]
hacks/glx/._carousel.c [new file with mode: 0644]
hacks/glx/._circuit.c [new file with mode: 0644]
hacks/glx/._cubestorm.c [new file with mode: 0644]
hacks/glx/._flipflop.c [new file with mode: 0644]
hacks/glx/._flyingtoasters.c [new file with mode: 0644]
hacks/glx/._gears.c [new file with mode: 0644]
hacks/glx/._glknots.c [new file with mode: 0644]
hacks/glx/._gltext.c [new file with mode: 0644]
hacks/glx/._jigglypuff.c [new file with mode: 0644]
hacks/glx/._klein.c [new file with mode: 0644]
hacks/glx/._lavalite.c [new file with mode: 0644]
hacks/glx/._menger.c [new file with mode: 0644]
hacks/glx/._moebiusgears.c [new file with mode: 0644]
hacks/glx/._pinion.c [new file with mode: 0644]
hacks/glx/._polyhedra-gl.c [new file with mode: 0644]
hacks/glx/._skytentacles.c [new file with mode: 0644]
hacks/glx/._sonar-icmp.c [new file with mode: 0644]
hacks/glx/._sonar.c [new file with mode: 0644]
hacks/glx/._spheremonics.c [new file with mode: 0644]
hacks/glx/._stonerview.c [new file with mode: 0644]
hacks/glx/._tangram.c [new file with mode: 0644]
hacks/glx/._timetunnel.c [new file with mode: 0644]
hacks/glx/._tunnel_draw.c [new file with mode: 0644]
hacks/glx/._voronoi.c [new file with mode: 0644]
hacks/glx/Makefile.in
hacks/glx/blinkbox.c
hacks/glx/blocktube.c
hacks/glx/boing.c
hacks/glx/bouncingcow.c
hacks/glx/buildlwo.c
hacks/glx/carousel.c
hacks/glx/circuit.c
hacks/glx/cubestorm.c
hacks/glx/dangerball.c
hacks/glx/dnalogo.c
hacks/glx/dolphin.c
hacks/glx/engine.c
hacks/glx/flipflop.c
hacks/glx/flyingtoasters.c
hacks/glx/font-ximage.c
hacks/glx/gears.c
hacks/glx/glblur.c
hacks/glx/glhanoi.c
hacks/glx/glhanoi.man
hacks/glx/glknots.c
hacks/glx/glmatrix.man
hacks/glx/glplanet.c
hacks/glx/glslideshow.c
hacks/glx/gltext.c
hacks/glx/involute.c
hacks/glx/jigglypuff.c
hacks/glx/klein.c
hacks/glx/lavalite.c
hacks/glx/lockward.c
hacks/glx/menger.c
hacks/glx/moebiusgears.c
hacks/glx/molecule.c
hacks/glx/pinion.c
hacks/glx/polyhedra-gl.c
hacks/glx/polyhedra.c
hacks/glx/rubik.c
hacks/glx/skytentacles.c
hacks/glx/sonar-icmp.c
hacks/glx/sonar.c
hacks/glx/sphere.c
hacks/glx/spheremonics.c
hacks/glx/stairs.c
hacks/glx/stonerview.c
hacks/glx/tangram.c
hacks/glx/timetunnel.c
hacks/glx/topblock.c
hacks/glx/tube.c
hacks/glx/tunnel_draw.c
hacks/glx/voronoi.c
hacks/images/molecules/salvinorin.pdb [new file with mode: 0644]
hacks/interaggregate.c
hacks/kaleidescope.c
hacks/metaballs.c
hacks/noseguy.c
hacks/pacman.c
hacks/pacman_ai.c
hacks/petri.c
hacks/ripples.c
hacks/screenhack.c
hacks/shadebobs.c
hacks/slidescreen.c
hacks/slip.c
hacks/speedmine.c
hacks/spotlight.c
hacks/strange.c
hacks/substrate.c
hacks/triangle.c
hacks/vermiculate.c
hacks/webcollage-cocoa.m
hacks/webcollage-helper-cocoa.m
hacks/wormhole.c
hacks/xjack.c
hacks/xlockmore.c
hacks/xmatrix.c
hacks/xrayswarm.c
hacks/zoom.c
po/._pt_BR.po [new file with mode: 0644]
po/POTFILES.in
po/pt_BR.po
utils/._colors.c [deleted file]
utils/colors.c
utils/erase.c
utils/grabclient.c
utils/spline.c
utils/version.h
xscreensaver.spec
xscreensaver.xcodeproj/project.pbxproj

diff --git a/OSX/._InvertedSlider.m b/OSX/._InvertedSlider.m
deleted file mode 100644 (file)
index 4b2da8e..0000000
Binary files a/OSX/._InvertedSlider.m and /dev/null differ
index d2060d950abf0128f937db282434e97c810edf4a..327162a355b2ea62a4fdffc51b0d96df252e920d 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2010 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
@@ -63,6 +63,7 @@
 
 - (NSAttributedString *)attributedStringValue;
 {
+  // #### "Build and Analyze" says this leaks. Unsure whether this is true.
   return [[NSAttributedString alloc] initWithString:[self stringValue]];
 }
 
index 03fc9899a522387620ec083c5f09087f6c5589d7..2353dc160094a7d347f8a5ffadb4dc6b40e2615c 100644 (file)
@@ -90,6 +90,7 @@ dmg:: distdepend check_versions
   V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ;                \
   TMPDIR="build" ;                                                           \
   SRC="build/Release" ;                                                              \
+  EXTRAS=../../xdaliclock/OSX/build/Release/*.saver ;                        \
   BASE="xscreensaver-$$V" ;                                                  \
   OUTDIR="../archive" ;                                                              \
   DMG="$$OUTDIR/$$BASE.dmg" ;                                                \
@@ -108,7 +109,7 @@ dmg:: distdepend check_versions
      's/\\\\\\n//g; m/^RETIRED_GL_EXES\s*=\s*(.*)$$/m && print "$$1\n"'              \
       ../hacks/glx/Makefile.in` ;                                            \
                                                                              \
-  for f in $$SRC/*.saver ; do                                                \
+  for f in $$SRC/*.saver $$EXTRAS ; do                                       \
    ok=yes ;                                                                  \
    ff=`echo $$f | perl -e '$$_=<>; s@^.*/(.*)\..*$$@\L$$1@; print'`;         \
    for r in $$retired ; do                                                   \
@@ -127,6 +128,7 @@ dmg:: distdepend check_versions
   cp -p XScreenSaverDMG.icns "$$STAGE/.VolumeIcon.icns" ;                    \
   /Developer/Tools/SetFile -a C "$$STAGE" ;                                  \
   /Developer/Tools/SetFile -a E "$$STAGE/ READ ME.rtf" ;                     \
+  seticon -d ../../xdaliclock/OSX/daliclockSaver.icns $$STAGE/DaliClock.saver;\
   hdiutil makehybrid -quiet -ov -hfs -hfs-volume-name "$$VOLNAME"            \
     -hfs-openfolder "$$STAGE" "$$STAGE" -o "$$TMPDMG" ;                              \
   rm -rf "$$STAGE" ;                                                         \
index 507a557b09b5cbdc498d77f2c6b48f4a370ed923..dcbd34984fe79203692f363d382c0b1502c62172 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2009 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2010 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
     opts++;
   }
 
+#if 0
   // make sure there's no resource mentioned in defaults and not options.
   NSEnumerator *enumerator = [defsdict keyEnumerator];
   NSString *key;
   while ((key = [enumerator nextObject])) {
-#if 0
     if (! [optsdict objectForKey:key])
       if (! ([key isEqualToString:@"foreground"] || // don't warn about these
              [key isEqualToString:@"background"] ||
              [key isEqualToString:@"TVTint"]
              ))
       NSLog (@"warning: \"%@\" is in defaults but not options", key);
-#endif /* 0 */
   }
+#endif /* 0 */
 
 }
 
index 760d10688a21edaf3bb2e6b65b5a0e344ca7568a..d3b021f18d74c2c15d23cbe150b8383dd68809dd 100644 (file)
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>5.11</string>
+       <string>5.12</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5.11</string>
+       <string>5.12</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.4</string>
        <key>NSMainNibFile</key>
index 737647c7e593f202d28c8ae22903064cc52b416d..299defeadf462ea1b76773f3c7d51dab38091a58 100644 (file)
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>5.11</string>
+       <string>5.12</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5.11</string>
+       <string>5.12</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.4</string>
        <key>NSMainNibFile</key>
index 40b638c8e4f90156ebf54135acc0529fdfc101b0..b529daddcaa31e2cdd4523039785441883f5a687 100644 (file)
@@ -837,6 +837,11 @@ make_option_menu (NSUserDefaultsController *prefs,
   rect.origin.x = rect.origin.y = 0;
   rect.size.width = 10;
   rect.size.height = 10;
+
+  // #### "Build and Analyze" says that all of our widgets leak, because it
+  //      seems to not realize that place_child -> addSubview retains them.
+  //      Not sure what to do to make these warnings go away.
+
   NSPopUpButton *popup = [[NSPopUpButton alloc] initWithFrame:rect
                                                      pullsDown:NO];
 
@@ -1326,7 +1331,7 @@ make_text_controls (NSUserDefaultsController *prefs,
   make_text_field (prefs, opts, rgroup, node2, YES);
   [node2 release];
 
-  rect = [last_child(rgroup) frame];
+//  rect = [last_child(rgroup) frame];
 
 /* // trying to make the text fields be enabled only when the checkbox is on..
   control = last_child (rgroup);
@@ -1347,7 +1352,7 @@ make_text_controls (NSUserDefaultsController *prefs,
   make_file_selector (prefs, opts, rgroup, node2, NO, YES);
   [node2 release];
 
-  rect = [last_child(rgroup) frame];
+//  rect = [last_child(rgroup) frame];
 
   //  <string id="textURL" _label="" arg-set="text-url %"/>
   node2 = [[NSXMLElement alloc] initWithName:@"string"];
@@ -1359,7 +1364,7 @@ make_text_controls (NSUserDefaultsController *prefs,
   make_text_field (prefs, opts, rgroup, node2, YES);
   [node2 release];
 
-  rect = [last_child(rgroup) frame];
+//  rect = [last_child(rgroup) frame];
 
   layout_group (rgroup, NO);
 
@@ -1569,8 +1574,7 @@ fix_contentview_size (NSView *parent)
   NSRect f;
   NSArray *kids = [parent subviews];
   int nkids = [kids count];
-  NSView *text;  // the NSText at the bottom of the window
-  NSView *last;  // the last child before the NSText
+  NSView *text = 0;  // the NSText at the bottom of the window
   double maxx = 0, miny = 0;
   int i;
 
@@ -1586,7 +1590,6 @@ fix_contentview_size (NSView *parent)
     f = [kid frame];
     if (f.origin.x + f.size.width > maxx)  maxx = f.origin.x + f.size.width;
     if (f.origin.y - f.size.height < miny) miny = f.origin.y;
-    last = kid;
 //    NSLog(@"start: %3.0f x %3.0f @ %3.0f %3.0f  %3.0f  %@",
 //          f.size.width, f.size.height, f.origin.x, f.origin.y,
 //          f.origin.y + f.size.height, [kid class]);
@@ -1597,6 +1600,7 @@ fix_contentview_size (NSView *parent)
   /* Now that we know the width of the window, set the width of the NSText to
      that, so that it can decide what its height needs to be.
    */
+  if (! text) abort();
   f = [text frame];
 //  NSLog(@"text old: %3.0f x %3.0f @ %3.0f %3.0f  %3.0f  %@",
 //        f.size.width, f.size.height, f.origin.x, f.origin.y,
@@ -1647,10 +1651,10 @@ fix_contentview_size (NSView *parent)
   /* Set the contentView to the size of the children.
    */
   f = [parent frame];
-  float yoff = f.size.height;
+//  float yoff = f.size.height;
   f.size.width = maxx + LEFT_MARGIN;
   f.size.height = -(miny - LEFT_MARGIN*2);
-  yoff = f.size.height - yoff;
+//  yoff = f.size.height - yoff;
   [parent setFrame:f];
 
 //  NSLog(@"max: %3.0f x %3.0f @ %3.0f %3.0f", 
@@ -1897,13 +1901,6 @@ traverse_tree (NSUserDefaultsController *prefs,
                             options:(NSXMLNodePreserveWhitespace |
                                      NSXMLNodePreserveCDATA)
                             error:&err];
-/* clean up?
-    if (!xmlDoc) {
-      xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:furl
-                                      options:NSXMLDocumentTidyXML
-                                      error:&err];
-    }
-*/
   if (!xmlDoc || err) {
     if (err)
       NSAssert2 (0, @"XML Error: %@: %@",
@@ -1912,6 +1909,7 @@ traverse_tree (NSUserDefaultsController *prefs,
   }
 
   traverse_tree (prefs, self, opts, [xmlDoc rootElement]);
+  [xmlDoc release];
 
   return self;
 }
index 1ce659903e2b3ca4ab6fd8fa5337ed2f0740d6b2..feccea6320be23b8161946ec0606e33706f03657 100644 (file)
@@ -125,6 +125,7 @@ init_GL (ModeInfo *mi)
     ctx = [[NSOpenGLContext alloc] 
             initWithFormat:pixfmt
               shareContext:nil];
+//    [pixfmt release]; // #### ???
   }
 
   // Sync refreshes to the vertical blanking interval
@@ -132,6 +133,10 @@ init_GL (ModeInfo *mi)
   [ctx setValues:&r forParameter:NSOpenGLCPSwapInterval];
   check_gl_error ("NSOpenGLCPSwapInterval");
 
+  // #### "Build and Analyze" says that ctx leaks, because it doesn't
+  //      seem to realize that makeCurrentContext retains it (right?)
+  //      Not sure what to do to make this warning go away.
+
   [ctx makeCurrentContext];
   check_gl_error ("makeCurrentContext");
 
index 65cb72e3c19ac6bad30dca6413694b1b746cc640..7173d86d21700531e430bf370448cf25cf8ee017 100644 (file)
@@ -64,6 +64,7 @@ int mono_p = 0;
   
   void *addr = CFBundleGetDataPointerForName (cfb, (CFStringRef) table_name);
   NSAssert2 (addr, @"no symbol \"%@\" in bundle %@", table_name, path);
+  CFRelease (cfb);
 
 //  NSLog (@"%@ = 0x%08X", table_name, (unsigned long) addr);
   return (struct xscreensaver_function_table *) addr;
index a494188e44d5f4fb4a84cbfb6f11707c2c613e8f..4e829f847f76c321c2be7cdb7086243df1c1b182 100644 (file)
@@ -3,49 +3,60 @@
 {\colortbl;\red255\green255\blue255;\red0\green0\blue240;}
 {\info
 {\title XScreenSaver Installation Instructions}}\vieww10380\viewh13000\viewkind0
-\deftab720
-\pard\pardeftab720\qc
-
-\f0\b\fs36 \cf0 \
-XScreenSaver
-\f1\b0\fs28 \
-
-\f0\b A collection of free screen savers for MacOS X\
+\deftab360
+\pard\pardeftab360\qc
+\
+\b\fs36
+XScreenSaver\
+\b0\fs28
 
-\f1\b0 \
-by Jamie Zawinski \uc0\u8232 and many others\
+\b A collection of free screen savers for MacOS X\
 \
-version 5.11 \uc0\u8232 13-Apr-2010\
+\b0
+by Jamie Zawinski\
+and many others\
+\
+version 5.12\
+15-Sep-2010\
+\
+{\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}}
+\
+\pard
+\b To Install:\
+\b0\li360
 \
-{\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}}\
-\pard\pardeftab720\li720
-
-\f0\b \cf0 \
-\pard\pardeftab720
-\cf0 To Install:\
-\pard\pardeftab720\li720
-
-\f1\b0 \cf0 \
 Simply double-click each of the savers you want to install.\
 \
-If you want to install all of them, then drag all of the .saver files to the "Screen Savers" folder in your "Library" folder. (You may need to create the "Screen Savers" folder first.)\
-
-\f0\b \
-\pard\pardeftab720
-\cf0 To Uninstall:
-\f1\b0 \
-\pard\pardeftab720\li720
-\cf0 \
-Open the "Screen Savers" folder in your "Library" folder, and drag any unwanted savers into the trash.\
+To install \i all \i0 of them, drag all of the .saver 
+files to the "Screen Savers" folder in your "Library" folder.  
+You may need to create the "Screen Savers" folder first.\
 \
-If you've previously installed screen savers for "all users" instead of "current user", they might be in "/Library/Screen Savers/" or "/System/Library/Screen Savers/" instead.\
+\pard
+\b When upgrading:\
+\b0\li360
 \
-\pard\pardeftab720
-
-\f0\b \cf0 For More Information:\
-\pard\pardeftab720\li720
-
-\f1\b0 \cf0 \
-Please visit the {\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 XScreenSaver web site}}.\
+If you selected \i "Install for all users" \i0 last time, make sure 
+you do that again this time, or you will have both the new and old 
+versions of the screen savers installed.  That can be confusing!\
+\
+That is, be careful not to end up with copies in "/Library/Screen Savers/"\
+ as well as in 
+"/Users/
+\i \ul YourName\ulnone\i0
+/Library/Screen Savers/".\
+\
+\pard
+\b To Uninstall:\
+\b0\li360
+\
+Open the "Screen Savers" folder and drag any unwanted savers to Trash.\
+\
+\pard
+\b For More Information:\
+\b0\li360
 \
-The XScreenSaver collection is free software, and all source code is available there.}
+Please visit the 
+{\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}
+{\fldrslt \cf2 \ul \ulc2 XScreenSaver web site}}.  
+The XScreenSaver collection is free software, and all source code is 
+available there.}
index c33b4302cff87b3b7b3cece4938dbd32265c1b14..604caf50dafb066ea1689f4172250918790aed2d 100644 (file)
@@ -38,6 +38,7 @@
 struct jwxyz_Drawable {
   enum { WINDOW, PIXMAP } type;
   CGContextRef cgc;
+  CGImageRef cgi;
   CGRect frame;
   union {
     struct {
@@ -46,6 +47,7 @@ struct jwxyz_Drawable {
     } window;
     struct {
       int depth;
+      void *cgc_buffer;                // the bits to which CGContextRef renders
     } pixmap;
   };
 };
@@ -147,6 +149,21 @@ jwxyz_window_view (Window w)
   return w->window.view;
 }
 
+
+/* Call this after any modification to the bits on a Pixmap or Window.
+   Most Pixmaps are used frequently as sources and infrequently as
+   destinations, so it pays to cache the data as a CGImage as needed.
+ */
+static void
+invalidate_drawable_cache (Drawable d)
+{
+  if (d && d->cgi) {
+    CGImageRelease (d->cgi);
+    d->cgi = 0;
+  }
+}
+
+
 /* Call this when the View changes size or position.
  */
 void
@@ -188,6 +205,8 @@ jwxyz_window_resized (Display *dpy, Window w)
   //
   dpy->colorspace = CGColorSpaceCreateDeviceRGB();
 # endif
+
+  invalidate_drawable_cache (w);
 }
 
 
@@ -246,7 +265,6 @@ XDisplayHeight (Display *dpy, int screen)
   return (int) dpy->main_window->frame.size.height;
 }
 
-
 static void
 validate_pixel (unsigned long pixel, unsigned int depth, BOOL alpha_allowed_p)
 {
@@ -384,7 +402,7 @@ push_bg_gc (Drawable d, GC gc, Bool fill_p)
 
    It is *way* faster to draw points by creating and drawing a 1x1 CGImage
    with repeated calls to CGContextDrawImage than it is to make a single
-   call to CGContextFillRects()!
+   call to CGContextFillRects() with a list of 1x1 rectangles!
 
    I still wouldn't call it *fast*, however...
  */
@@ -463,6 +481,7 @@ XDrawPoints (Display *dpy, Drawable d, GC gc,
 # endif /* ! XDRAWPOINTS_IMAGES */
 
   pop_gc (d, gc);
+  invalidate_drawable_cache (d);
 
   return 0;
 }
@@ -565,29 +584,33 @@ XCopyArea (Display *dpy, Drawable src, Drawable dst, GC gc,
   CLIP (src, dst, y, height);
 # undef CLIP
 
-#if 0
-  Assert (src_rect.size.width  == dst_rect.size.width, "width out of sync");
-  Assert (src_rect.size.height == dst_rect.size.height, "height out of sync");
-  Assert (src_rect.origin.x >= 0 && src_rect.origin.y >= 0, "clip failed src_x");
-  Assert (dst_rect.origin.x >= 0 && dst_rect.origin.y >= 0, "clip failed dst_x");
-  Assert (src_rect.origin.y >= 0 && src_rect.origin.y >= 0, "clip failed src_y");
-  Assert (dst_rect.origin.y >= 0 && dst_rect.origin.y >= 0, "clip failed dst_y");
-  Assert (src_rect.origin.x  + src_rect.size.width <=
-          src_frame.origin.x + src_frame.size.width, "clip failed src_width");
-#endif
-  
   if (src_rect.size.width <= 0 || src_rect.size.height <= 0)
     return 0;
   
   NSObject *releaseme = 0;
   CGImageRef cgi;
   BOOL mask_p = NO;
+  BOOL free_cgi_p = NO;
 
   if (src->type == PIXMAP) {
 
-    // get a CGImage out of the pixmap CGContext -- it's the whole pixmap,
-    // but it presumably shares the data pointer instead of copying it.
-    cgi = CGBitmapContextCreateImage (src->cgc);
+    // If we are copying from a Pixmap to a Pixmap or Window, we must first
+    // copy the bits to an intermediary CGImage object, then copy that to the
+    // destination drawable's CGContext.
+    //
+    // (It doesn't seem to be possible to use NSCopyBits() to optimize the
+    // case of copying from a Pixmap back to itself, but I don't think that
+    // happens very often anyway.)
+    //
+    // First we get a CGImage out of the pixmap CGContext -- it's the whole
+    // pixmap, but it presumably shares the data pointer instead of copying
+    // it.  We then cache that CGImage it inside the Pixmap object.  Note:
+    // invalidate_drawable_cache() must be called to discard this any time a
+    // modification is made to the pixmap, or we'll end up re-using old bits.
+    //
+    if (!src->cgi)
+      src->cgi = CGBitmapContextCreateImage (src->cgc);
+    cgi = src->cgi;
 
     // if doing a sub-rect, trim it down.
     if (src_rect.origin.x    != src_frame.origin.x   ||
@@ -598,8 +621,8 @@ XCopyArea (Display *dpy, Drawable src, Drawable dst, GC gc,
       src_rect.origin.y = (src_frame.size.height -
                            src_rect.size.height - src_rect.origin.y);
       // This does not copy image data, so it should be fast.
-      CGImageRef cgi2 = CGImageCreateWithImageInRect (cgi, src_rect);
-      cgi = cgi2;
+      cgi = CGImageCreateWithImageInRect (cgi, src_rect);
+      free_cgi_p = YES;
     }
 
     if (src->pixmap.depth == 1)
@@ -607,72 +630,60 @@ XCopyArea (Display *dpy, Drawable src, Drawable dst, GC gc,
 
   } else { /* (src->type == WINDOW) */
     
-    NSRect nsfrom;
+    NSRect nsfrom;    // NSRect != CGRect on 10.4
     nsfrom.origin.x    = src_rect.origin.x;
     nsfrom.origin.y    = src_rect.origin.y;
     nsfrom.size.width  = src_rect.size.width;
     nsfrom.size.height = src_rect.size.height;
 
-#if 1
-    // get the bits (desired sub-rectangle) out of the NSView via Cocoa.
-    //
-    NSBitmapImageRep *bm = [[NSBitmapImageRep alloc]
-                             initWithFocusedViewRect:nsfrom];
-    unsigned char *data = [bm bitmapData];
-    int bps = [bm bitsPerSample];
-    int bpp = [bm bitsPerPixel];
-    int bpl = [bm bytesPerRow];
-    releaseme = bm;
-#endif
-
-#if 0
-    // QuickDraw way (doesn't work, need NSQuickDrawView)
-    PixMapHandle pix = GetPortPixMap([src->window.view qdPort]);
-    char **data = GetPortPixMap (pix);
-    int bps = 8;
-    int bpp = 32;
-    int bpl = GetPixRowBytes (pix) & 0x3FFF;
-#endif
+    if (src == dst) {
 
-#if 0
-    // get the bits (desired sub-rectangle) out of the raw frame buffer.
-    // (This renders wrong, and appears to be even slower anyway.)
-    //
-    int window_x, window_y;
-    XTranslateCoordinates (dpy, src, NULL, 0, 0, &window_x, &window_y, NULL);
-    window_x += nsfrom.origin.x;
-    window_y += (dst->frame.size.height
-                 - (nsfrom.origin.y + nsfrom.size.height));
-
-    unsigned char *data = (unsigned char *) 
-      CGDisplayAddressForPosition (dpy->cgdpy, window_x, window_y);
-    int bps = CGDisplayBitsPerSample (dpy->cgdpy);
-    int bpp = CGDisplayBitsPerPixel (dpy->cgdpy);
-    int bpl = CGDisplayBytesPerRow (dpy->cgdpy);
+      // If we are copying from a window to itself, we can use NSCopyBits()
+      // without first copying the rectangle to an intermediary CGImage.
+      // This is ~28% faster (but I *expected* it to be twice as fast...)
+      // (kumppa, bsod, decayscreen, memscroller, slidescreen, slip, xjack)
+      //
+      cgi = 0;
 
-#endif
+    } else {
 
-    // create a CGImage from those bits
-
-    CGDataProviderRef prov =
-      CGDataProviderCreateWithData (NULL, data, bpl * nsfrom.size.height,
-                                    NULL);
-    cgi = CGImageCreate (src_rect.size.width, src_rect.size.height,
-                         bps, bpp, bpl,
-                         dpy->colorspace, 
-                         /* Use whatever default bit ordering we got from
-                            initWithFocusedViewRect.  I would have assumed
-                            that it was (kCGImageAlphaNoneSkipFirst |
-                            kCGBitmapByteOrder32Host), but on Intel,
-                            it's not!
-                          */
-                         0,
-                         prov, 
-                         NULL,  /* decode[] */
-                         NO, /* interpolate */
-                         kCGRenderingIntentDefault);
-    //Assert (CGImageGetColorSpace (cgi) == dpy->colorspace, "bad colorspace");
-    CGDataProviderRelease (prov);
+      // If we are copying from a Window to a Pixmap, we must first copy
+      // the bits to an intermediary CGImage object, then copy that to the
+      // Pixmap's CGContext.
+      //
+      NSBitmapImageRep *bm = [[NSBitmapImageRep alloc]
+                               initWithFocusedViewRect:nsfrom];
+      unsigned char *data = [bm bitmapData];
+      int bps = [bm bitsPerSample];
+      int bpp = [bm bitsPerPixel];
+      int bpl = [bm bytesPerRow];
+      releaseme = bm;
+
+      // create a CGImage from those bits.
+      // (As of 10.5, we could just do cgi = [bm CGImage] (it is autoreleased)
+      // but that method didn't exist in 10.4.)
+
+      CGDataProviderRef prov =
+        CGDataProviderCreateWithData (NULL, data, bpl * nsfrom.size.height,
+                                      NULL);
+      cgi = CGImageCreate (src_rect.size.width, src_rect.size.height,
+                           bps, bpp, bpl,
+                           dpy->colorspace, 
+                           /* Use whatever default bit ordering we got from
+                              initWithFocusedViewRect.  I would have assumed
+                              that it was (kCGImageAlphaNoneSkipFirst |
+                              kCGBitmapByteOrder32Host), but on Intel,
+                              it's not!
+                           */
+                           0,
+                           prov, 
+                           NULL,  /* decode[] */
+                           NO, /* interpolate */
+                           kCGRenderingIntentDefault);
+      free_cgi_p = YES;
+      //Assert(CGImageGetColorSpace(cgi) == dpy->colorspace,"bad colorspace");
+      CGDataProviderRelease (prov);
+    }
   }
 
   if (mask_p) {                // src depth == 1
@@ -707,15 +718,29 @@ XCopyArea (Display *dpy, Drawable src, Drawable dst, GC gc,
       CGContextFillRect (dst->cgc, orig_dst_rect);
     }
 
-    // copy the CGImage onto the destination CGContext
-    //Assert (CGImageGetColorSpace (cgi) == dpy->colorspace, "bad colorspace");
-    CGContextDrawImage (dst->cgc, dst_rect, cgi);
+    if (cgi) {
+      // copy the CGImage onto the destination CGContext
+      //Assert(CGImageGetColorSpace(cgi) == dpy->colorspace, "bad colorspace");
+      CGContextDrawImage (dst->cgc, dst_rect, cgi);
+    } else {
+      // No cgi means src == dst, and both are Windows.
+      NSRect nsfrom;
+      nsfrom.origin.x    = src_rect.origin.x;    // NSRect != CGRect on 10.4
+      nsfrom.origin.y    = src_rect.origin.y;
+      nsfrom.size.width  = src_rect.size.width;
+      nsfrom.size.height = src_rect.size.height;
+      NSPoint nsto;
+      nsto.x             = dst_rect.origin.x;
+      nsto.y             = dst_rect.origin.y;
+      NSCopyBits (0, nsfrom, nsto);
+    }
 
     pop_gc (dst, gc);
   }
-  
-  CGImageRelease (cgi);
+
+  if (free_cgi_p) CGImageRelease (cgi);
   if (releaseme) [releaseme release];
+  invalidate_drawable_cache (dst);
   return 0;
 }
 
@@ -764,6 +789,7 @@ XDrawLine (Display *dpy, Drawable d, GC gc, int x1, int y1, int x2, int y2)
   CGContextAddLineToPoint (d->cgc, p.x, p.y);
   CGContextStrokePath (d->cgc);
   pop_gc (d, gc);
+  invalidate_drawable_cache (d);
   return 0;
 }
 
@@ -802,6 +828,7 @@ XDrawLines (Display *dpy, Drawable d, GC gc, XPoint *points, int count,
   if (closed_p) CGContextClosePath (d->cgc);
   CGContextStrokePath (d->cgc);
   pop_gc (d, gc);
+  invalidate_drawable_cache (d);
   return 0;
 }
 
@@ -826,6 +853,7 @@ XDrawSegments (Display *dpy, Drawable d, GC gc, XSegment *segments, int count)
   }
   CGContextStrokePath (d->cgc);
   pop_gc (d, gc);
+  invalidate_drawable_cache (d);
   return 0;
 }
 
@@ -876,6 +904,7 @@ draw_rect (Display *dpy, Drawable d, GC gc,
 
   if (gc)
     pop_gc (d, gc);
+  invalidate_drawable_cache (d);
 }
 
 
@@ -911,6 +940,7 @@ XFillRectangles (Display *dpy, Drawable d, GC gc, XRectangle *rects, int n)
     rects++;
   }
   pop_gc (d, gc);
+  invalidate_drawable_cache (d);
   return 0;
 }
 
@@ -954,6 +984,7 @@ XFillPolygon (Display *dpy, Drawable d, GC gc,
   else
     CGContextFillPath (d->cgc);
   pop_gc (d, gc);
+  invalidate_drawable_cache (d);
   return 0;
 }
 
@@ -1005,6 +1036,7 @@ draw_arc (Display *dpy, Drawable d, GC gc, int x, int y,
   }
 
   pop_gc (d, gc);
+  invalidate_drawable_cache (d);
   return 0;
 }
 
@@ -1611,6 +1643,8 @@ XPutImage (Display *dpy, Drawable d, GC gc, XImage *ximage,
     CGImageRelease (mask);
   }
 
+  invalidate_drawable_cache (d);
+
   return 0;
 }
 
@@ -1872,6 +1906,8 @@ jwxyz_draw_NSImage_or_CGImage (Display *dpy, Drawable d,
     geom_ret->width  = dst.size.width;
     geom_ret->height = dst.size.height;
   }
+
+  invalidate_drawable_cache (d);
 }
 
 
@@ -1908,9 +1944,10 @@ XCreatePixmap (Display *dpy, Drawable d,
   p->frame.size.width  = width;
   p->frame.size.height = height;
   p->pixmap.depth      = depth;
+  p->pixmap.cgc_buffer = data;
   
   /* Quartz doesn't have a 1bpp image type.
-     We used to use 8bpp gray images instead of 1bpp, but some Mac video
+     Used to use 8bpp gray images instead of 1bpp, but some Mac video cards
      don't support that!  So we always use 32bpp, regardless of depth. */
 
   p->cgc = CGBitmapContextCreate (data, width, height,
@@ -1929,20 +1966,41 @@ int
 XFreePixmap (Display *d, Pixmap p)
 {
   Assert (p->type == PIXMAP, "not a pixmap");
+  invalidate_drawable_cache (p);
   CGContextRelease (p->cgc);
+  if (p->pixmap.cgc_buffer)
+    free (p->pixmap.cgc_buffer);
   free (p);
   return 0;
 }
 
 
 static Pixmap
-copy_pixmap (Pixmap p)
+copy_pixmap (Display *dpy, Pixmap p)
 {
   if (!p) return 0;
   Assert (p->type == PIXMAP, "not a pixmap");
+
+  int width  = p->frame.size.width;
+  int height = p->frame.size.height;
+  char *data = (char *) malloc (width * height * 4);
+  if (! data) return 0;
+
+  memcpy (data, p->pixmap.cgc_buffer, width * height * 4);
+
   Pixmap p2 = (Pixmap) malloc (sizeof (*p2));
   *p2 = *p;
-  CGContextRetain (p2->cgc);   // #### is this ok? need to copy it instead?
+  p2->cgi = 0;
+  p2->pixmap.cgc_buffer = data;
+  p2->cgc = CGBitmapContextCreate (data, width, height,
+                                   8, /* bits per component */
+                                   width * 4, /* bpl */
+                                   dpy->colorspace,
+                                   // Without this, it returns 0...
+                                   kCGImageAlphaNoneSkipFirst
+                                   );
+  Assert (p2->cgc, "could not create CGBitmapContext");
+
   return p2;
 }
 
@@ -2531,7 +2589,7 @@ draw_string (Display *dpy, Drawable d, GC gc, int x, int y,
                             str, len);
   pop_gc (d, gc);
 
-#else /* !0 */
+# else /* !0 */
 
   /* The Cocoa way...
    */
@@ -2559,8 +2617,9 @@ draw_string (Display *dpy, Drawable d, GC gc, int x, int y,
   pos.y = wr.origin.y + wr.size.height - y - gc->gcv.font->metrics.descent;
   [nsstr drawAtPoint:pos withAttributes:attr];
 
-#endif  /* 0 */
+# endif  /* 0 */
 
+  invalidate_drawable_cache (d);
   return 0;
 }
 
@@ -2654,7 +2713,7 @@ XSetClipMask (Display *dpy, GC gc, Pixmap m)
     CGImageRelease (gc->clip_mask);
   }
 
-  gc->gcv.clip_mask = copy_pixmap (m);
+  gc->gcv.clip_mask = copy_pixmap (dpy, m);
   if (gc->gcv.clip_mask)
     gc->clip_mask = CGBitmapContextCreateImage (gc->gcv.clip_mask->cgc);
   else
index 3f39bd09df1aeeea554d9f3c5865cf0d3515a2e1..18f52a59ee865a8069eb971560172e93b18fd7bf 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
-# Copyright © 2006-2009 Jamie Zawinski <jwz@jwz.org>
+# Copyright © 2006-2010 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
@@ -23,7 +23,7 @@ require 5;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.13 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.14 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 1;
 
@@ -261,12 +261,12 @@ sub usage() {
 
 sub main() {
   my @files = ();
-  while ($#ARGV >= 0) {
-    $_ = shift @ARGV;
-    if ($_ eq "--verbose") { $verbose++; }
-    elsif (m/^-v+$/) { $verbose += length($_)-1; }
-    elsif (m/^-./) { usage; }
-    else { push @files, $_; }
+  while ($_ = $ARGV[0]) {
+    shift @ARGV;
+    if    (m/^--?verbose$/s)  { $verbose++; }
+    elsif (m/^-v+$/)          { $verbose += length($_)-1; }
+    elsif (m/^--?q(uiet)?$/s) { $verbose = 0; }
+    else                      { push @files, $_; }
   }
   usage() unless ($#files >= 0);
   foreach (@files) {
diff --git a/README b/README
index e2ce1692403031dc103894ec3b649de73eb8280c..fdb0e5acc96a41c454a413461e7788e37696eca6 100644 (file)
--- a/README
+++ b/README
@@ -38,6 +38,15 @@ XScreenSaver has an extensive manual -- please read it!
 
 ===============================================================================
 
+Changes since 5.11:   * Big speed improvement on OSX for heavy XCopyArea
+                        users (`xmatrix', `moire2', `phosphor', etc.)
+                      * Plugged a bad OSX-only Pixmap leak.
+                      * Kludged around the OSX pty bug that caused text to
+                        be truncated in phosphor, starwars, apple2, etc.
+                      * New molecule in `molecule'.
+                      * `glhanoi' now supports an arbitrary number of poles.
+                      * Turned on "New Login" button by default.
+                      * Added support for XInput-style alternate input devices.
 Changes since 5.10:   * New versions of `photopile', `strange'.
                       * Worked around MacOS 10.6 garbage collector bug that
                         caused the screen saver process to become enormous.
index 4ea77aa305d4fb14fa58b296a336743e547754a8..941853240b3f03e56799326c34e1e60ae0d96764 100644 (file)
    available if the file /usr/include/X11/extensions/Xinerama.h exists.) */
 #undef HAVE_XINERAMA
 
+/* Define this if you have the Xinput extension. This is standard since X11R5,
+   and is thus almost everywhere. (It's available if the file
+   /usr/include/X11/extensions/XInput.h exists.) */
+#undef HAVE_XINPUT
+
 /* Define this if you have the XmComboBox Motif widget (Motif 2.0.) */
 #undef HAVE_XMCOMBOBOX
 
index e1e0f546711d712d94fbc3a2de5e969fe9311eae..5da5195e5afd8d0a820f78fcabdfec21297dd06d 100755 (executable)
--- a/configure
+++ b/configure
@@ -816,6 +816,7 @@ with_xidle_ext
 with_sgivc_ext
 with_dpms_ext
 with_xinerama_ext
+with_xinput_ext
 with_xf86vmode_ext
 with_xf86gamma_ext
 with_randr_ext
@@ -1518,6 +1519,7 @@ Screen blanking and idle-detection options:
   --with-sgivc-ext        Include support for the SGI-VIDEO-CONTROL extension.
   --with-dpms-ext         Include support for the DPMS extension.
   --with-xinerama-ext     Include support for the XINERAMA extension.
+  --with-xinput-ext     Include support for the XInput extension.
   --with-xf86vmode-ext    Include support for XFree86 virtual screens.
   --with-xf86gamma-ext    Include support for XFree86 gamma fading.
   --with-randr-ext        Include support for the X Resize+Rotate extension.
@@ -1532,7 +1534,7 @@ Screen blanking and idle-detection options:
   --with-passwd-helper    Include support for an external password
                           verification helper program.
   --with-login-manager    Put a "New Login" button on the unlock dialog that
-                          runs a login manager such as gdmflexiserver.
+                          runs a login manager like gdmflexiserver or kdmctl.
 
 User interface options:
 
@@ -2193,6 +2195,9 @@ echo "command line was: $0 $@"
 
 
 
+
+
+
 
 
 
@@ -12041,6 +12046,243 @@ elif test "$with_xinerama" != no; then
 fi
 
 
+###############################################################################
+#
+#       Check for the XINPUT server extension.
+#
+###############################################################################
+
+have_xinput=no
+with_xinput_req=unspecified
+
+# Check whether --with-xinput-ext was given.
+if test "${with_xinput_ext+set}" = set; then
+  withval=$with_xinput_ext; with_xinput="$withval"; with_xinput_req="$withval"
+else
+  with_xinput=yes
+fi
+
+
+
+   case "$with_xinput" in
+    yes) ;;
+    no)  ;;
+
+    /*)
+     { $as_echo "$as_me:$LINENO: checking for XINPUT headers" >&5
+$as_echo_n "checking for XINPUT headers... " >&6; }
+     d=$with_xinput/include
+     if test -d $d; then
+       X_CFLAGS="-I$d $X_CFLAGS"
+       { $as_echo "$as_me:$LINENO: result: $d" >&5
+$as_echo "$d" >&6; }
+     else
+       { $as_echo "$as_me:$LINENO: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+     fi
+
+     { $as_echo "$as_me:$LINENO: checking for XINPUT libs" >&5
+$as_echo_n "checking for XINPUT libs... " >&6; }
+     d=$with_xinput/lib
+     if test -d $d; then
+       X_LIBS="-L$d $X_LIBS"
+       { $as_echo "$as_me:$LINENO: result: $d" >&5
+$as_echo "$d" >&6; }
+     else
+       { $as_echo "$as_me:$LINENO: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+     fi
+
+     # replace the directory string with "yes".
+     with_xinput_req="yes"
+     with_xinput=$with_xinput_req
+     ;;
+
+    *)
+     echo ""
+     echo "error: argument to --with-xinput-ext must be \"yes\", \"no\", or a directory."
+     echo "       If it is a directory, then \`DIR/include' will be added to"
+     echo "       the -I list, and \`DIR/lib' will be added to the -L list."
+     exit 1
+     ;;
+   esac
+
+
+if test "$with_xinput" = yes; then
+
+  # first check for Xinput.h
+
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  if test \! -z "$includedir" ; then
+    CPPFLAGS="$CPPFLAGS -I$includedir"
+  fi
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+  CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+  { $as_echo "$as_me:$LINENO: checking for X11/extensions/XInput.h" >&5
+$as_echo_n "checking for X11/extensions/XInput.h... " >&6; }
+if test "${ac_cv_header_X11_extensions_XInput_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+
+#include <X11/extensions/XInput.h>
+_ACEOF
+rm -rf conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -rf conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_X11_extensions_XInput_h=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_X11_extensions_XInput_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_X11_extensions_XInput_h" >&5
+$as_echo "$ac_cv_header_X11_extensions_XInput_h" >&6; }
+if test "x$ac_cv_header_X11_extensions_XInput_h" = x""yes; then
+  have_xinput=yes
+fi
+
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+
+  # if that succeeded, then check for libXi
+  if test "$have_xinput" = yes; then
+    have_xinput=no
+
+  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`
+  { $as_echo "$as_me:$LINENO: checking for XListInputDevices in -lXi" >&5
+$as_echo_n "checking for XListInputDevices in -lXi... " >&6; }
+if test "${ac_cv_lib_Xi_XListInputDevices+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXi -lXext -lX11 $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 XListInputDevices ();
+int
+main ()
+{
+return XListInputDevices ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_Xi_XListInputDevices=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_Xi_XListInputDevices=no
+fi
+
+rm -rf conftest.dSYM
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xi_XListInputDevices" >&5
+$as_echo "$ac_cv_lib_Xi_XListInputDevices" >&6; }
+if test "x$ac_cv_lib_Xi_XListInputDevices" = x""yes; then
+  have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"
+else
+  true
+fi
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+  LDFLAGS="$ac_save_LDFLAGS"
+#  LIBS="$ac_save_LIBS"
+
+  fi
+
+  # if that succeeded, then we've really got it.
+  if test "$have_xinput" = yes; then
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_XINPUT 1
+_ACEOF
+
+  fi
+
+elif test "$with_xinput" != no; then
+  echo "error: must be yes or no: --with-xinput-ext=$with_xinput"
+  exit 1
+fi
+
+
 ###############################################################################
 #
 #       Check for the XF86VMODE server extension (for virtual screens.)
@@ -15606,16 +15848,16 @@ esac
 #
 ###############################################################################
 
-have_login_manager=no
 with_login_manager_req=unspecified
-default_login_manager='gdmflexiserver -ls'
+default_login_manager_1='gdmflexiserver -ls'
+default_login_manager_2='kdmctl reserve'
 
 
 # Check whether --with-login-manager was given.
 if test "${with_login_manager+set}" = set; then
   withval=$with_login_manager; with_login_manager="$withval"; with_login_manager_req="$withval"
 else
-  with_login_manager=no
+  with_login_manager=yes
 fi
 
 # no HANDLE_X_PATH_ARG for this one
@@ -15625,36 +15867,61 @@ if test "$enable_locking" = no ; then
   with_login_manager=no
 fi
 
-if test -n "$with_login_manager_req" ; then
-  ac_cv_login_manager_program=""
+case "$with_login_manager_req" in
+  no)
+    with_login_manager=""
+  ;;
+
+  yes|unspecified)
+    # Try both defaults, use the one that exists.
 
- if test "$with_login_manager_req" = "yes" ; then
-   with_login_manager_req=$default_login_manager
- fi
+    set dummy $default_login_manager_1 ; login_manager_tmp=$2
+    unset ac_cv_path_login_manager_tmp  # don't cache
+    # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
+set dummy $login_manager_tmp; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_login_manager_tmp+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $login_manager_tmp in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
 
-  case "$with_login_manager_req" in
-    no)
-      with_login_manager=""
-    ;;
-    /*)
-      # absolute path
-      set dummy $with_login_manager_req ; login_manager_tmp=$2
-      { $as_echo "$as_me:$LINENO: checking for $login_manager_tmp" >&5
-$as_echo_n "checking for $login_manager_tmp... " >&6; }
-      if test -x "$login_manager_tmp" ; then
-        { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-      else
-        { $as_echo "$as_me:$LINENO: result: no" >&5
+  ;;
+esac
+fi
+login_manager_tmp=$ac_cv_path_login_manager_tmp
+if test -n "$login_manager_tmp"; then
+  { $as_echo "$as_me:$LINENO: result: $login_manager_tmp" >&5
+$as_echo "$login_manager_tmp" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
 $as_echo "no" >&6; }
-        with_login_manager=""
-      fi
-    ;;
-    *)
-      # relative path
-      set dummy $with_login_manager_req ; login_manager_tmp=$2
-      # don't cache
-      unset ac_cv_path_login_manager_tmp
+fi
+
+
+    if test ! -z "$login_manager_tmp" ; then
+      with_login_manager="$default_login_manager_1"
+    else
+      set dummy $default_login_manager_2 ; login_manager_tmp=$2
+      unset ac_cv_path_login_manager_tmp  # don't cache
       # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
 set dummy $login_manager_tmp; ac_word=$2
 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
@@ -15695,30 +15962,98 @@ $as_echo "no" >&6; }
 fi
 
 
-      if test -z "$login_manager_tmp" ; then
-        with_login_manager=""
+      if test -z "$login_manager_tmp" ; then
+        with_login_manager="$default_login_manager_2"
       else
-        with_login_manager="$login_manager_tmp"
+        with_login_manager=""
       fi
-    ;;
-  esac
-  ac_cv_login_manager_program="$with_login_manager"
+    fi
+  ;;
 
-elif test -n "$ac_cv_login_manager_program"; then
-  { $as_echo "$as_me:$LINENO: result: checking for login_manager... (cached) $ac_cv_login_manager_program" >&5
-$as_echo "checking for login_manager... (cached) $ac_cv_login_manager_program" >&6; }
+  /*)
+    # absolute path specified on cmd line
+    set dummy $with_login_manager_req ; login_manager_tmp=$2
+    { $as_echo "$as_me:$LINENO: checking for $login_manager_tmp" >&5
+$as_echo_n "checking for $login_manager_tmp... " >&6; }
+    if test -x "$login_manager_tmp" ; then
+      { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+      with_login_manager=""
+    fi
+  ;;
+
+  *)
+    # relative path specified on cmd line
+    set dummy $with_login_manager_req ; login_manager_tmp=$2
+    unset ac_cv_path_login_manager_tmp    # don't cache
+    # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
+set dummy $login_manager_tmp; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_login_manager_tmp+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $login_manager_tmp in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+login_manager_tmp=$ac_cv_path_login_manager_tmp
+if test -n "$login_manager_tmp"; then
+  { $as_echo "$as_me:$LINENO: result: $login_manager_tmp" >&5
+$as_echo "$login_manager_tmp" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+
+    if test -z "$login_manager_tmp" ; then
+      with_login_manager=""
+    else
+      with_login_manager="$login_manager_tmp"
+    fi
+  ;;
+esac
+ac_cv_login_manager_program="$with_login_manager"
+
 NEW_LOGIN_COMMAND_P=''
 NEW_LOGIN_COMMAND="$ac_cv_login_manager_program"
 
+{ $as_echo "$as_me:$LINENO: checking for login manager" >&5
+$as_echo_n "checking for login manager... " >&6; }
 if test -z "$NEW_LOGIN_COMMAND" ; then
-  NEW_LOGIN_COMMAND="$default_login_manager"
+  NEW_LOGIN_COMMAND="$default_login_manager_1"
   NEW_LOGIN_COMMAND_P='! '
+  { $as_echo "$as_me:$LINENO: result: $NEW_LOGIN_COMMAND (disabled)" >&5
+$as_echo "$NEW_LOGIN_COMMAND (disabled)" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: $NEW_LOGIN_COMMAND" >&5
+$as_echo "$NEW_LOGIN_COMMAND" >&6; }
 fi
 
 
-
 ###############################################################################
 #
 #       Check for -lgtk (and Gnome stuff)
@@ -17428,7 +17763,7 @@ if test "${ac_cv_mesagl_version_string+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17435 "configure"
+#line 17770 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 #ifndef MESA_MAJOR_VERSION
index 46ca9d401fcdbf9a5690e616761a3d3a01497f86..457af807905c463e89ee362fb467f2a3796b669e 100644 (file)
@@ -94,6 +94,12 @@ AH_TEMPLATE([HAVE_XINERAMA],
            elsewhere.  (It's available if the file
            /usr/include/X11/extensions/Xinerama.h exists.)])
 
+AH_TEMPLATE([HAVE_XINPUT],
+           [Define this if you have the Xinput extension.  This is
+           standard since X11R5, and is thus almost everywhere.
+           (It's available if the file /usr/include/X11/extensions/XInput.h
+           exists.)])
+
 AH_TEMPLATE([HAVE_XF86MISCSETGRABKEYSSTATE],
            [Define this if you have the XF86MiscSetGrabKeysState function
            (which allows the Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash key
@@ -1543,6 +1549,45 @@ elif test "$with_xinerama" != no; then
 fi
 
 
+###############################################################################
+#
+#       Check for the XINPUT server extension.
+#
+###############################################################################
+
+have_xinput=no
+with_xinput_req=unspecified
+AC_ARG_WITH(xinput-ext,
+[  --with-xinput-ext     Include support for the XInput extension.],
+  [with_xinput="$withval"; with_xinput_req="$withval"], [with_xinput=yes])
+
+HANDLE_X_PATH_ARG(with_xinput, --with-xinput-ext, XINPUT)
+
+if test "$with_xinput" = yes; then
+
+  # first check for Xinput.h
+  AC_CHECK_X_HEADER(X11/extensions/XInput.h, [have_xinput=yes],,
+                    [#include <X11/Xlib.h>])
+
+  # if that succeeded, then check for libXi
+  if test "$have_xinput" = yes; then
+    have_xinput=no
+    AC_CHECK_X_LIB(Xi, XListInputDevices,
+                   [have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"],
+                   [true], -lXext -lX11)
+  fi
+
+  # if that succeeded, then we've really got it.
+  if test "$have_xinput" = yes; then
+    AC_DEFINE(HAVE_XINPUT)
+  fi
+
+elif test "$with_xinput" != no; then
+  echo "error: must be yes or no: --with-xinput-ext=$with_xinput"
+  exit 1
+fi
+
+
 ###############################################################################
 #
 #       Check for the XF86VMODE server extension (for virtual screens.)
@@ -2297,15 +2342,15 @@ esac
 #
 ###############################################################################
 
-have_login_manager=no
 with_login_manager_req=unspecified
-default_login_manager='gdmflexiserver -ls'
+default_login_manager_1='gdmflexiserver -ls'
+default_login_manager_2='kdmctl reserve'
 
 AC_ARG_WITH(login-manager,
 [  --with-login-manager    Put a "New Login" button on the unlock dialog that
-                          runs a login manager such as gdmflexiserver.],
+                          runs a login manager like gdmflexiserver or kdmctl.],
   [with_login_manager="$withval"; with_login_manager_req="$withval"],
-  [with_login_manager=no])
+  [with_login_manager=yes])
 # no HANDLE_X_PATH_ARG for this one
 
 if test "$enable_locking" = no ; then
@@ -2313,57 +2358,70 @@ if test "$enable_locking" = no ; then
   with_login_manager=no
 fi
 
-if test -n "$with_login_manager_req" ; then
-  ac_cv_login_manager_program=""
+case "$with_login_manager_req" in
+  no)
+    with_login_manager=""
+  ;;
 
- if test "$with_login_manager_req" = "yes" ; then
-   with_login_manager_req=$default_login_manager
- fi
+  yes|unspecified)
+    # Try both defaults, use the one that exists.
 
-  case "$with_login_manager_req" in
-    no)
-      with_login_manager=""
-    ;;
-    /*)
-      # absolute path
-      set dummy $with_login_manager_req ; login_manager_tmp=$2
-      AC_MSG_CHECKING([for $login_manager_tmp])
-      if test -x "$login_manager_tmp" ; then
-        AC_MSG_RESULT(yes)
-      else
-        AC_MSG_RESULT(no)
-        with_login_manager=""
-      fi
-    ;;
-    *)
-      # relative path
-      set dummy $with_login_manager_req ; login_manager_tmp=$2
-      # don't cache
-      unset ac_cv_path_login_manager_tmp
+    set dummy $default_login_manager_1 ; login_manager_tmp=$2
+    unset ac_cv_path_login_manager_tmp  # don't cache
+    AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+    if test ! -z "$login_manager_tmp" ; then
+      with_login_manager="$default_login_manager_1"
+    else
+      set dummy $default_login_manager_2 ; login_manager_tmp=$2
+      unset ac_cv_path_login_manager_tmp  # don't cache
       AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
-      if test -z "$login_manager_tmp" ; then
-        with_login_manager=""
+      if test -z "$login_manager_tmp" ; then
+        with_login_manager="$default_login_manager_2"
       else
-        with_login_manager="$login_manager_tmp"
+        with_login_manager=""
       fi
-    ;;
-  esac
-  ac_cv_login_manager_program="$with_login_manager"
+    fi
+  ;;
 
-elif test -n "$ac_cv_login_manager_program"; then
-  AC_MSG_RESULT([checking for login_manager... (cached) $ac_cv_login_manager_program])
-fi
+  /*)
+    # absolute path specified on cmd line
+    set dummy $with_login_manager_req ; login_manager_tmp=$2
+    AC_MSG_CHECKING([for $login_manager_tmp])
+    if test -x "$login_manager_tmp" ; then
+      AC_MSG_RESULT(yes)
+    else
+      AC_MSG_RESULT(no)
+      with_login_manager=""
+    fi
+  ;;
+
+  *)
+    # relative path specified on cmd line
+    set dummy $with_login_manager_req ; login_manager_tmp=$2
+    unset ac_cv_path_login_manager_tmp    # don't cache
+    AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+    if test -z "$login_manager_tmp" ; then
+      with_login_manager=""
+    else
+      with_login_manager="$login_manager_tmp"
+    fi
+  ;;
+esac
+ac_cv_login_manager_program="$with_login_manager"
 
 NEW_LOGIN_COMMAND_P=''
 NEW_LOGIN_COMMAND="$ac_cv_login_manager_program"
 
+AC_MSG_CHECKING(for login manager)
 if test -z "$NEW_LOGIN_COMMAND" ; then
-  NEW_LOGIN_COMMAND="$default_login_manager"
+  NEW_LOGIN_COMMAND="$default_login_manager_1"
   NEW_LOGIN_COMMAND_P='! '
+  AC_MSG_RESULT($NEW_LOGIN_COMMAND (disabled))
+else
+  AC_MSG_RESULT($NEW_LOGIN_COMMAND)
 fi
 
 
-
 ###############################################################################
 #
 #       Check for -lgtk (and Gnome stuff)
index b97be451e14f92df8930b7d671bd29066993bec4..225d1c021496ab86b96657a56ecdf61ffd6818ba 100644 (file)
@@ -128,6 +128,7 @@ XML_LIBS    = @XML_LIBS@
 
 XDPMS_LIBS     = @XDPMS_LIBS@
 XINERAMA_LIBS  = @XINERAMA_LIBS@
+XINPUT_LIBS    = @XINPUT_LIBS@
 
 PASSWD_SRCS    = @PASSWD_SRCS@
 PASSWD_OBJS    = @PASSWD_OBJS@
@@ -744,6 +745,11 @@ subprocs.o: subprocs.c
        $(CC) -c $(INCLUDES) $(SUBP_DEFS) $(CFLAGS) $(X_CFLAGS) \
          $(srcdir)/subprocs.c
 
+# xscreensaver takes an extra -D option.
+xscreensaver.o: xscreensaver.c
+       $(CC) -c $(INCLUDES) $(DEFS) $(INTL_DEFS) $(CFLAGS) $(X_CFLAGS) \
+         $(srcdir)/xscreensaver.c
+
 # demo-Gtk takes extra -D options, and an extra -I option.
 demo-Gtk.o: demo-Gtk.c
        $(CC) -c $(INCLUDES) $(SUBP_DEFS) -I$(ICON_SRC) \
index 814829638cfb98944ca8b115896b52ef993f4b16..c12c3cf75915cd0131ee40469a7c45d31a3031a8 100644 (file)
@@ -4,8 +4,8 @@
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
-!                              version 5.11
-!                              13-Apr-2010
+!                              version 5.12
+!                              15-Sep-2010
 !
 ! See "man xscreensaver" for more info.  The latest version is always
 ! available at http://www.jwz.org/xscreensaver/
@@ -72,6 +72,7 @@
 *sgiSaverExtension:    True
 *xidleExtension:       True
 *procInterrupts:       True
+*xinputExtensionDev:   True
 
 ! Set this to True if you are experiencing longstanding XFree86 bug #421
 ! (xscreensaver not covering the whole screen)
index 105d93211332f6b9e85efde4e55bcacdc41df344..236b90a0de2eac5d54b0e243a4c661126c6ad71c 100644 (file)
@@ -40,6 +40,7 @@
 "*sgiSaverExtension:   True",
 "*xidleExtension:      True",
 "*procInterrupts:      True",
+"*xinputExtensionDev:  True",
 "GetViewPortIsFullOfLies: False",
 "*demoCommand: xscreensaver-demo",
 "*prefsCommand: xscreensaver-demo -prefs",
index 787e15b8f4abb1d0598f8cfdb6c3a853974f11c3..b9c9479ceecd9eaa984ca292fc1d7bd340a13765 100644 (file)
 
 #include "demo-Gtk-conf.h"
 
+/* Deal with deprecation of direct access to struct fields on the way to GTK3
+   See http://live.gnome.org/GnomeGoals/UseGseal
+ */
+#if GTK_CHECK_VERSION(2,14,0)
+# define GET_PARENT(w)          gtk_widget_get_parent (w)
+# define GET_ADJ_VALUE(a)       gtk_adjustment_get_value (a)
+# define GET_ADJ_UPPER(a)       gtk_adjustment_get_upper (a)
+# define GET_ADJ_LOWER(a)       gtk_adjustment_get_lower (a)
+#else
+# define GET_PARENT(w)          ((w)->parent)
+# define GET_ADJ_VALUE(a)       ((a)->value)
+# define GET_ADJ_UPPER(a)       ((a)->upper)
+# define GET_ADJ_LOWER(a)       ((a)->lower)
+#endif
+
+
 extern const char *blurb (void);
 
 
@@ -815,6 +830,18 @@ insert_fake_hbox (GtkWidget *parent)
 }
 
 
+static void
+link_atk_label_to_widget(GtkWidget *label, GtkWidget *widget)
+{
+    AtkObject *atk_label = gtk_widget_get_accessible (label);
+    AtkObject *atk_widget = gtk_widget_get_accessible (widget);
+
+    atk_object_add_relationship (atk_label, ATK_RELATION_LABEL_FOR,
+                                atk_widget);
+    atk_object_add_relationship (atk_widget, ATK_RELATION_LABELLED_BY,
+                                atk_label);
+}
+
 /* Given a `parameter' struct, allocates an appropriate GtkWidget for it,
    and stores it in `p->widget'.
    `parent' must be a GtkBox.
@@ -829,10 +856,12 @@ make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent)
     {
     case STRING:
       {
+        GtkWidget *entry = gtk_entry_new ();
         parent = insert_fake_hbox (parent);
         if (label)
           {
             GtkWidget *w = gtk_label_new (_(label));
+            link_atk_label_to_widget (w, entry);
             gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT);
             gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5);
             set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH);
@@ -840,7 +869,7 @@ make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent)
             gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4);
           }
 
-        p->widget = gtk_entry_new ();
+        p->widget = entry;
         if (p->string)
           gtk_entry_set_text (GTK_ENTRY (p->widget), (char *) p->string);
         gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4);
@@ -851,6 +880,7 @@ make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent)
         GtkWidget *L = gtk_label_new (label ? _(label) : "");
         GtkWidget *entry = gtk_entry_new ();
         GtkWidget *button = gtk_button_new_with_label (_("Browse..."));
+        link_atk_label_to_widget (L, entry);
         gtk_widget_show (entry);
         gtk_widget_show (button);
         p->widget = entry;
@@ -882,6 +912,7 @@ make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent)
         if (label)
           {
             labelw = gtk_label_new (_(label));
+            link_atk_label_to_widget (labelw, scale);
             gtk_label_set_justify (GTK_LABEL (labelw), GTK_JUSTIFY_LEFT);
             gtk_misc_set_alignment (GTK_MISC (labelw), 0.0, 0.5);
             set_widget_min_width (GTK_WIDGET (labelw), MIN_LABEL_WIDTH);
@@ -895,6 +926,7 @@ make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent)
         if (p->low_label)
           {
             GtkWidget *w = gtk_label_new (_((char *) p->low_label));
+            link_atk_label_to_widget (w, scale);
             gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT);
             gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5);
             set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH);
@@ -914,6 +946,7 @@ make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent)
         if (p->high_label)
           {
             GtkWidget *w = gtk_label_new (_((char *) p->high_label));
+            link_atk_label_to_widget (w, scale);
             gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
             gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
             set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH);
@@ -930,12 +963,13 @@ make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent)
         GtkWidget *spin = gtk_spin_button_new (adj, 15, 0);
         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin), TRUE);
         gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (spin), TRUE);
-        gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), adj->value);
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), GET_ADJ_VALUE(adj));
         set_widget_min_width (GTK_WIDGET (spin), MIN_SPINBUTTON_WIDTH);
 
         if (label)
           {
             GtkWidget *w = gtk_label_new (_(label));
+            link_atk_label_to_widget (w, spin);
             gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT);
             gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5);
             set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH);
@@ -1008,8 +1042,8 @@ static void
 file_sel_cancel (GtkWidget *button, gpointer user_data)
 {
   GtkWidget *dialog = button;
-  while (dialog->parent)
-    dialog = dialog->parent;
+  while (GET_PARENT (dialog))
+    dialog = GET_PARENT (dialog);
   gtk_widget_destroy (dialog);
 }
 
@@ -1020,8 +1054,9 @@ file_sel_ok (GtkWidget *button, gpointer user_data)
   GtkWidget *entry = GTK_WIDGET (user_data);
   GtkWidget *dialog = button;
   const char *path;
-  while (dialog->parent)
-    dialog = dialog->parent;
+
+  while (GET_PARENT (dialog))
+    dialog = GET_PARENT (dialog);
   gtk_widget_hide (dialog);
 
   path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog));
@@ -1213,8 +1248,9 @@ parameter_to_switch (parameter *p)
         char buf[255];
         char *s1;
         float value = (p->invert_p
-                       ? invert_range (adj->lower, adj->upper, adj->value) - 1
-                       : adj->value);
+                       ? invert_range (GET_ADJ_LOWER(adj), GET_ADJ_UPPER(adj),
+                                       GET_ADJ_VALUE(adj)) - 1
+                       : GET_ADJ_VALUE(adj));
 
         if (value == p->value)  /* same as default */
           return 0;
@@ -1575,7 +1611,7 @@ parameter_set_switch (parameter *p, gpointer value)
         if (1 == sscanf ((char *) value, "%f %c", &f, &c))
           {
             if (p->invert_p)
-              f = invert_range (adj->lower, adj->upper, f) - 1;
+              f = invert_range (GET_ADJ_LOWER(adj), GET_ADJ_UPPER(adj), f) - 1;
             gtk_adjustment_set_value (adj, f);
           }
         break;
index a62d0b77b79c86729757353cf4b617329e94b867..28d2925bc7c69ec4e1b062591f5b928f303811a3 100644 (file)
@@ -142,6 +142,41 @@ enum {
 };
 #endif /* HAVE_GTK2 */
 
+/* Deal with deprecation of direct access to struct fields on the way to GTK3
+   See http://live.gnome.org/GnomeGoals/UseGseal
+ */
+#if GTK_CHECK_VERSION(2,14,0)
+# define GET_PARENT(w)          gtk_widget_get_parent (w)
+# define GET_WINDOW(w)          gtk_widget_get_window (w)
+# define GET_ACTION_AREA(d)     gtk_dialog_get_action_area (d)
+# define GET_CONTENT_AREA(d)    gtk_dialog_get_content_area (d)
+# define GET_ADJ_VALUE(a)       gtk_adjustment_get_value (a)
+# define SET_ADJ_VALUE(a,v)     gtk_adjustment_set_value (a, v)
+# define SET_ADJ_UPPER(a,v)     gtk_adjustment_set_upper (a, v)
+#else
+# define GET_PARENT(w)          ((w)->parent)
+# define GET_WINDOW(w)          ((w)->window)
+# define GET_ACTION_AREA(d)     ((d)->action_area)
+# define GET_CONTENT_AREA(d)    ((d)->vbox)
+# define GET_ADJ_VALUE(a)       ((a)->value)
+# define SET_ADJ_VALUE(a,v)     (a)->value = v
+# define SET_ADJ_UPPER(a,v)     (a)->upper = v
+#endif
+
+#if GTK_CHECK_VERSION(2,18,0)
+# define SET_CAN_DEFAULT(w)     gtk_widget_set_can_default ((w), TRUE)
+# define GET_SENSITIVE(w)       gtk_widget_get_sensitive (w)
+#else
+# define SET_CAN_DEFAULT(w)     GTK_WIDGET_SET_FLAGS ((w), GTK_CAN_DEFAULT)
+# define GET_SENSITIVE(w)       GTK_WIDGET_IS_SENSITIVE (w)
+#endif
+
+#if GTK_CHECK_VERSION(2,20,0)
+# define GET_REALIZED(w)        gtk_widget_get_realized (w)
+#else
+# define GET_REALIZED(w)        GTK_WIDGET_REALIZED (w)
+#endif
+
 /* from exec.c */
 extern void exec_command (const char *shell, const char *command, int nice);
 extern int on_path_p (const char *program);
@@ -427,9 +462,9 @@ ensure_selected_item_visible (GtkWidget *widget)
 
   adj = gtk_scrolled_window_get_vadjustment (scroller);
 
-  gdk_window_get_geometry (GTK_WIDGET(vp)->window,
+  gdk_window_get_geometry (GET_WINDOW (GTK_WIDGET (vp)),
                            &ignore, &ignore, &ignore, &parent_h, &ignore);
-  gdk_window_get_geometry (GTK_WIDGET(selected)->window,
+  gdk_window_get_geometry (GET_WINDOW (GTK_WIDGET (selected)),
                            &ignore, &child_y, &ignore, &child_h, &ignore);
   children_h = nkids * child_h;
 
@@ -472,8 +507,8 @@ static void
 warning_dialog_dismiss_cb (GtkWidget *widget, gpointer user_data)
 {
   GtkWidget *shell = GTK_WIDGET (user_data);
-  while (shell->parent)
-    shell = shell->parent;
+  while (GET_PARENT (shell))
+    shell = GET_PARENT (shell);
   gtk_widget_destroy (GTK_WIDGET (shell));
 }
 
@@ -513,11 +548,11 @@ warning_dialog (GtkWidget *parent, const char *message,
   GtkWidget *cancel = 0;
   int i = 0;
 
-  while (parent && !parent->window)
-    parent = parent->parent;
+  while (parent && !GET_WINDOW (parent))
+    parent = GET_PARENT (parent);
 
   if (!parent ||
-      !GTK_WIDGET (parent)->window) /* too early to pop up transient dialogs */
+      !GET_WINDOW (parent)) /* too early to pop up transient dialogs */
     {
       fprintf (stderr, "%s: too early for dialog?\n", progname);
       return;
@@ -552,7 +587,7 @@ warning_dialog (GtkWidget *parent, const char *message,
 #endif /* !HAVE_GTK2 */
         if (center <= 0)
           gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-        gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+        gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))),
                             label, TRUE, TRUE, 0);
         gtk_widget_show (label);
       }
@@ -566,12 +601,12 @@ warning_dialog (GtkWidget *parent, const char *message,
     }
 
   label = gtk_label_new ("");
-  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+  gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))),
                       label, TRUE, TRUE, 0);
   gtk_widget_show (label);
 
   label = gtk_hbutton_box_new ();
-  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+  gtk_box_pack_start (GTK_BOX (GET_ACTION_AREA (GTK_DIALOG (dialog))),
                       label, TRUE, TRUE, 0);
 
 #ifdef HAVE_GTK2
@@ -600,13 +635,13 @@ warning_dialog (GtkWidget *parent, const char *message,
   gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
   gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
   gtk_window_set_title (GTK_WINDOW (dialog), progclass);
-  GTK_WIDGET_SET_FLAGS (ok, GTK_CAN_DEFAULT);
+  SET_CAN_DEFAULT (ok);
   gtk_widget_show (ok);
   gtk_widget_grab_focus (ok);
 
   if (cancel)
     {
-      GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT); 
+      SET_CAN_DEFAULT (cancel);
       gtk_widget_show (cancel);
     }
   gtk_widget_show (label);
@@ -634,8 +669,8 @@ warning_dialog (GtkWidget *parent, const char *message,
                                  (gpointer) dialog);
     }
 
-  gdk_window_set_transient_for (GTK_WIDGET (dialog)->window,
-                                GTK_WIDGET (parent)->window);
+  gdk_window_set_transient_for (GET_WINDOW (GTK_WIDGET (dialog)),
+                                GET_WINDOW (GTK_WIDGET (parent)));
 
 #ifdef HAVE_GTK2
   gtk_window_present (GTK_WINDOW (dialog));
@@ -809,11 +844,11 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
     GtkWidget *dialog = gtk_dialog_new ();
     GtkWidget *hbox, *icon, *vbox, *label1, *label2, *hb, *ok;
     GtkWidget *parent = GTK_WIDGET (menuitem);
-    while (parent->parent)
-      parent = parent->parent;
+    while (GET_PARENT (parent))
+      parent = GET_PARENT (parent);
 
     hbox = gtk_hbox_new (FALSE, 20);
-    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+    gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))),
                         hbox, TRUE, TRUE, 0);
 
     colormap = gtk_widget_get_colormap (parent);
@@ -854,7 +889,7 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
 
     hb = gtk_hbutton_box_new ();
 
-    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+    gtk_box_pack_start (GTK_BOX (GET_ACTION_AREA (GTK_DIALOG (dialog))),
                         hb, TRUE, TRUE, 0);
 
 #ifdef HAVE_GTK2
@@ -880,10 +915,10 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
     gtk_signal_connect_object (GTK_OBJECT (ok), "clicked",
                                GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb),
                                (gpointer) dialog);
-    gdk_window_set_transient_for (GTK_WIDGET (dialog)->window,
-                                  GTK_WIDGET (parent)->window);
-    gdk_window_show (GTK_WIDGET (dialog)->window);
-    gdk_window_raise (GTK_WIDGET (dialog)->window);
+    gdk_window_set_transient_for (GET_WINDOW (GTK_WIDGET (dialog)),
+                                  GET_WINDOW (GTK_WIDGET (parent)));
+    gdk_window_show (GET_WINDOW (GTK_WIDGET (dialog)));
+    gdk_window_raise (GET_WINDOW (GTK_WIDGET (dialog)));
   }
 }
 
@@ -1141,7 +1176,7 @@ static void
 force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p)
 {
   GtkWidget *parent = name_to_widget (s, "scroller");
-  Bool was = GTK_WIDGET_IS_SENSITIVE (parent);
+  gboolean was = GET_SENSITIVE (parent);
 #ifdef HAVE_GTK2
   GtkTreeIter iter;
   GtkTreeModel *model;
@@ -1771,7 +1806,8 @@ mode_menu_item_cb (GtkWidget *widget, gpointer user_data)
   GtkWidget *list = name_to_widget (s, "list");
   int list_elt;
 
-  GList *menu_items = gtk_container_children (GTK_CONTAINER (widget->parent));
+  GList *menu_items =
+    gtk_container_children (GTK_CONTAINER (GET_PARENT (widget)));
   int menu_index = 0;
   saver_mode new_mode;
 
@@ -1984,7 +2020,7 @@ list_checkbox_cb (
 
   /* remember previous scroll position of the top of the list */
   adj = gtk_scrolled_window_get_vadjustment (scroller);
-  scroll_top = adj->value;
+  scroll_top = GET_ADJ_VALUE (adj);
 
   flush_dialog_changes_and_save (s);
   force_list_select_item (s, GTK_WIDGET (list), list_elt, False);
@@ -2509,7 +2545,7 @@ populate_hack_list (state *s)
              (but don't actually make it be insensitive, since we still
              want to be able to click on it.)
            */
-          GtkStyle *style = GTK_WIDGET (list)->style;
+          GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (list));
           GdkColor *fg = &style->fg[GTK_STATE_INSENSITIVE];
        /* GdkColor *bg = &style->bg[GTK_STATE_INSENSITIVE]; */
           char *buf = (char *) malloc (strlen (pretty_name) + 100);
@@ -2977,7 +3013,7 @@ force_dialog_repaint (state *s)
 #if 1
   /* Tell GDK to invalidate and repaint the whole window.
    */
-  GdkWindow *w = s->toplevel_widget->window;
+  GdkWindow *w = GET_WINDOW (s->toplevel_widget);
   GdkRegion *region = gdk_region_new ();
   GdkRectangle rect;
   rect.x = rect.y = 0;
@@ -3065,7 +3101,7 @@ fix_text_entry_sizes (state *s)
 #ifdef HAVE_GTK2
     PangoFontMetrics *pain =
       pango_context_get_metrics (gtk_widget_get_pango_context (w),
-                                 w->style->font_desc,
+                                 gtk_widget_get_style (w)->font_desc,
                                  gtk_get_default_language ());
     height = PANGO_PIXELS (pango_font_metrics_get_ascent (pain) +
                            pango_font_metrics_get_descent (pain));
@@ -3502,16 +3538,18 @@ clear_preview_window (state *s)
 {
   GtkWidget *p;
   GdkWindow *window;
+  GtkStyle  *style;
 
   if (!s->toplevel_widget) return;  /* very early */
   p = name_to_widget (s, "preview");
-  window = p->window;
+  window = GET_WINDOW (p);
 
   if (!window) return;
 
   /* Flush the widget background down into the window, in case a subproc
      has changed it. */
-  gdk_window_set_background (window, &p->style->bg[GTK_STATE_NORMAL]);
+  style = gtk_widget_get_style (p);
+  gdk_window_set_background (window, &style->bg[GTK_STATE_NORMAL]);
   gdk_window_clear (window);
 
   {
@@ -3572,15 +3610,16 @@ reset_preview_window (state *s)
      when changing hacks, instead of always trying to reuse the same one?
    */
   GtkWidget *pr = name_to_widget (s, "preview");
-  if (GTK_WIDGET_REALIZED (pr))
+  if (GET_REALIZED (pr))
     {
-      Window oid = (pr->window ? GDK_WINDOW_XWINDOW (pr->window) : 0);
+      GdkWindow *window = GET_WINDOW (pr);
+      Window oid = (window ? GDK_WINDOW_XWINDOW (window) : 0);
       Window id;
       gtk_widget_hide (pr);
       gtk_widget_unrealize (pr);
       gtk_widget_realize (pr);
       gtk_widget_show (pr);
-      id = (pr->window ? GDK_WINDOW_XWINDOW (pr->window) : 0);
+      id = (window ? GDK_WINDOW_XWINDOW (window) : 0);
       if (s->debug_p)
         fprintf (stderr, "%s: window id 0x%X -> 0x%X\n", blurb(),
                  (unsigned int) oid,
@@ -3605,7 +3644,7 @@ fix_preview_visual (state *s)
              (visual == dvisual ? "default" : "non-default"),
              (xvisual ? (unsigned long) xvisual->visualid : 0L));
 
-  if (!GTK_WIDGET_REALIZED (widget) ||
+  if (!GET_REALIZED (widget) ||
       gtk_widget_get_visual (widget) != visual)
     {
       gtk_widget_unrealize (widget);
@@ -3616,8 +3655,8 @@ fix_preview_visual (state *s)
 
   /* Set the Widget colors to be white-on-black. */
   {
-    GdkWindow *window = widget->window;
-    GtkStyle *style = gtk_style_copy (widget->style);
+    GdkWindow *window = GET_WINDOW (widget);
+    GtkStyle *style = gtk_style_copy (gtk_widget_get_style (widget));
     GdkColormap *cmap = gtk_widget_get_colormap (widget);
     GdkColor *fg = &style->fg[GTK_STATE_NORMAL];
     GdkColor *bg = &style->bg[GTK_STATE_NORMAL];
@@ -3880,7 +3919,7 @@ launch_preview_subproc (state *s)
 
   reset_preview_window (s);
 
-  window = pr->window;
+  window = GET_WINDOW (pr);
 
   s->running_preview_error_p = False;
 
@@ -5155,7 +5194,7 @@ main (int argc, char **argv)
       {
         GtkWidget *window = capplet;
         while (window && !GTK_IS_WINDOW (window))
-          window = window->parent;
+          window = GET_PARENT (window);
         if (window)
           {
             gtk_window_set_title (GTK_WINDOW (window), window_title);
@@ -5190,7 +5229,7 @@ main (int argc, char **argv)
 #endif
 
   gtk_widget_show (s->toplevel_widget);
-  init_icon (GTK_WIDGET (s->toplevel_widget)->window);  /* after `show' */
+  init_icon (GET_WINDOW (GTK_WIDGET (s->toplevel_widget)));  /* after `show' */
   fix_preview_visual (s);
 
   /* Realize page zero, so that we can diddle the scrollbar when the
index 2f3108c19cf147b632ef51afe8e55956bf39ba69..2886115d193e856a9c0ee346f54aaacfedeaa05d 100644 (file)
@@ -45,6 +45,9 @@
   static void xfree_lock_grab_smasher (saver_info *si, Bool lock_p);
 #endif /* HAVE_XF86MISCSETGRABKEYSSTATE */
 
+#ifdef HAVE_RANDR
+# include <X11/extensions/Xrandr.h>
+#endif /* HAVE_RANDR */
 
 #ifdef _VROOT_H_
 ERROR!  You must not include vroot.h in this file.
@@ -1285,11 +1288,20 @@ destroy_passwd_window (saver_info *si)
   XWarpPointer (si->dpy, None, RootWindowOfScreen (ssi->screen),
                 0, 0, 0, 0,
                 pw->previous_mouse_x, pw->previous_mouse_y);
+  XSync (si->dpy, False);
 
   while (XCheckMaskEvent (si->dpy, PointerMotionMask, &event))
     if (p->verbose_p)
       fprintf (stderr, "%s: discarding MotionNotify event.\n", blurb());
 
+#ifdef HAVE_XINPUT
+  if (si->using_xinput_extension && si->xinput_DeviceMotionNotify)
+    while (XCheckTypedEvent (si->dpy, si->xinput_DeviceMotionNotify, &event))
+      if (p->verbose_p)
+       fprintf (stderr, "%s: discarding DeviceMotionNotify event.\n",
+                 blurb());
+#endif
+
   if (si->passwd_dialog)
     {
       if (si->prefs.verbose_p)
@@ -1775,30 +1787,77 @@ passwd_event_loop (saver_info *si)
 {
   saver_preferences *p = &si->prefs;
   char *msg = 0;
-  XEvent event;
+
+  /* We have to go through this union bullshit because gcc-4.4.0 has
+     stricter struct-aliasing rules.  Without this, the optimizer
+     can fuck things up.
+   */
+  union {
+    XEvent x_event;
+# ifdef HAVE_RANDR
+    XRRScreenChangeNotifyEvent xrr_event;
+# endif /* HAVE_RANDR */
+  } event;
 
   passwd_animate_timer ((XtPointer) si, 0);
 
   while (si->unlock_state == ul_read)
     {
-      XtAppNextEvent (si->app, &event);
-      if (event.xany.window == si->passwd_dialog && event.xany.type == Expose)
+      XtAppNextEvent (si->app, &event.x_event);
+
+#ifdef HAVE_RANDR
+      if (si->using_randr_extension &&
+          (event.x_event.type == 
+           (si->randr_event_number + RRScreenChangeNotify)))
+        {
+          /* The Resize and Rotate extension sends an event when the
+             size, rotation, or refresh rate of any screen has changed. */
+
+          if (p->verbose_p)
+            {
+              /* XRRRootToScreen is in Xrandr.h 1.4, 2001/06/07 */
+              int screen = XRRRootToScreen(si->dpy, event.xrr_event.window);
+                fprintf (stderr, "%s: %d: screen change event received\n",
+                         blurb(), screen);
+            }
+
+#ifdef RRScreenChangeNotifyMask
+          /* Inform Xlib that it's ok to update its data structures. */
+          XRRUpdateConfiguration(&event.x_event); /* Xrandr.h 1.9, 2002/09/29 */
+#endif /* RRScreenChangeNotifyMask */
+
+          /* Resize the existing xscreensaver windows and cached ssi data. */
+          if (update_screen_layout (si))
+            {
+              if (p->verbose_p)
+                {
+                  fprintf (stderr, "%s: new layout:\n", blurb());
+                  describe_monitor_layout (si);
+                }
+              resize_screensaver_window (si);
+            }
+        }
+      else
+#endif /* HAVE_RANDR */
+
+      if (event.x_event.xany.window == si->passwd_dialog && 
+          event.x_event.xany.type == Expose)
        draw_passwd_window (si);
-      else if (event.xany.type == KeyPress)
+      else if (event.x_event.xany.type == KeyPress)
         {
-          handle_passwd_key (si, &event.xkey);
-          si->pw_data->caps_p = (event.xkey.state & LockMask);
+          handle_passwd_key (si, &event.x_event.xkey);
+          si->pw_data->caps_p = (event.x_event.xkey.state & LockMask);
         }
-      else if (event.xany.type == ButtonPress || 
-               event.xany.type == ButtonRelease)
+      else if (event.x_event.xany.type == ButtonPress || 
+               event.x_event.xany.type == ButtonRelease)
        {
          si->pw_data->button_state_changed_p = True;
-         handle_unlock_button (si, &event);
+         handle_unlock_button (si, &event.x_event);
          if (si->pw_data->login_button_p)
-           handle_login_button (si, &event);
+           handle_login_button (si, &event.x_event);
        }
       else
-       XtDispatchEvent (&event);
+       XtDispatchEvent (&event.x_event);
     }
 
   switch (si->unlock_state)
@@ -1880,11 +1939,10 @@ remove_trailing_whitespace(const char *str)
   len = strlen(str);
 
   newstr = malloc(len + 1);
-  (void) strcpy(newstr, str);
-
   if (!newstr)
     return NULL;
 
+  (void) strcpy(newstr, str);
   chr = newstr + len;
   while (isspace(*--chr) && chr >= newstr)
     *chr = '\0';
index 1b093148098516b01378ccc57aa8e8f3434122d2..1df877287d621930caa45930428a48f05825dae8 100644 (file)
@@ -302,6 +302,7 @@ static const char * const prefs[] = {
   "xidleExtension",
   "GetViewPortIsFullOfLies",
   "procInterrupts",
+  "xinputExtensionDev",
   "overlayStderr",
   "overlayTextBackground",     /* not saved -- X resources only */
   "overlayTextForeground",     /* not saved -- X resources only */
@@ -854,6 +855,7 @@ write_init_file (Display *dpy,
       CHECK("mitSaverExtension") continue;  /* don't save */
       CHECK("xidleExtension")  type = pref_bool, b = p->use_xidle_extension;
       CHECK("procInterrupts")  type = pref_bool, b = p->use_proc_interrupts;
+      CHECK("xinputExtensionDev") type = pref_bool, b = p->use_xinput_extension;
       CHECK("GetViewPortIsFullOfLies")  type = pref_bool,
                                        b = p->getviewport_full_of_lies_p;
       CHECK("overlayStderr")   type = pref_bool, b = overlay_stderr_p;
@@ -1124,6 +1126,10 @@ load_init_file (Display *dpy, saver_preferences *p)
   p->use_sgi_saver_extension = get_boolean_resource (dpy,
                                                      "sgiSaverExtension",
                                                     "Boolean");
+
+  p->use_xinput_extension = get_boolean_resource (dpy, "xinputExtensionDev",
+                                                  "Boolean");
+
   p->use_proc_interrupts = get_boolean_resource (dpy,
                                                  "procInterrupts", "Boolean");
 
index 1e67c973f730ee39fe17fedf0d61e51a17ece6da..775036ac3032899596282b3ba4321fd1ed5050da 100644 (file)
@@ -380,7 +380,22 @@ xscreensaver_command_response (Display *dpy, Window window,
                                     &xscreensaver_command_event_p, 0)) &&
         sleep_count++ < 10)
     {
+# if defined(HAVE_SELECT)
+      /* Wait for an event, but don't wait longer than 1 sec.  Note that we
+         might do this multiple times if an event comes in, but it wasn't
+         the event we're waiting for.
+       */
+      int fd = XConnectionNumber(dpy);
+      fd_set rset;
+      struct timeval tv;
+      tv.tv_sec  = 1;
+      tv.tv_usec = 0;
+      FD_ZERO (&rset);
+      FD_SET (fd, &rset);
+      select (fd+1, &rset, 0, 0, &tv);
+# else  /* !HAVE_SELECT */
       sleep(1);
+# endif /* !HAVE_SELECT */
     }
 
   if (!got_event)
index 405a382b8bb6e70c94bd0de2aaee76e009bc1033..fb621cdef69fd39b243a27f02a4276a3eb4b3e8c 100644 (file)
@@ -1179,6 +1179,8 @@ get_best_gl_visual (saver_info *si, Screen *screen)
   pid_t forked;
   int fds [2];
   int in, out;
+  int errfds[2];
+  int errin = -1, errout = -1;
   char buf[1024];
 
   char *av[10];
@@ -1196,6 +1198,18 @@ get_best_gl_visual (saver_info *si, Screen *screen)
   in = fds [0];
   out = fds [1];
 
+  if (!si->prefs.verbose_p)
+    {
+      if (pipe (errfds))
+        {
+          perror ("error creating pipe:");
+          return 0;
+        }
+
+      errin = errfds [0];
+      errout = errfds [1];
+    }
+
   block_sigchld();   /* This blocks it in the parent and child, to avoid
                         racing.  It is never unblocked in the child before
                         the child exits, but that doesn't matter.
@@ -1211,16 +1225,25 @@ get_best_gl_visual (saver_info *si, Screen *screen)
       }
     case 0:
       {
-        int stdout_fd = 1;
-
         close (in);  /* don't need this one */
         close (ConnectionNumber (si->dpy));    /* close display fd */
 
-        if (dup2 (out, stdout_fd) < 0)         /* pipe stdout */
+        if (dup2 (out, STDOUT_FILENO) < 0)     /* pipe stdout */
           {
             perror ("could not dup() a new stdout:");
             return 0;
           }
+
+        if (! si->prefs.verbose_p)
+          {
+            close(errin);
+            if (dup2 (errout, STDERR_FILENO) < 0)
+              {
+                perror ("could not dup() a new stderr:");
+                return 0;
+              }
+          }
+
         hack_subproc_environment (screen, 0);  /* set $DISPLAY */
 
         execvp (av[0], av);                    /* shouldn't return. */
@@ -1251,6 +1274,12 @@ get_best_gl_visual (saver_info *si, Screen *screen)
           *buf = 0;
         fclose (f);
 
+        if (! si->prefs.verbose_p)
+          {
+            close (errout);
+            close (errin);
+          }
+
         /* Wait for the child to die. */
         waitpid (-1, &wait_status, 0);
 
index 42e2e280fb83e9a43c5541cc0dac225def5f6ced..fe0dedb3b52013628f027809cafd0414f9022e2c 100644 (file)
@@ -60,6 +60,9 @@ int move_mouse_grab (saver_info *si, Window to, Cursor c, int ts) { return 0; }
 int mouse_screen (saver_info *si) { return 0; }
 void check_for_leaks (const char *where) { }
 void shutdown_stderr (saver_info *si) { }
+void resize_screensaver_window (saver_info *si) { }
+void describe_monitor_layout (saver_info *si) { }
+Bool update_screen_layout (saver_info *si) { return 0; }
 
 const char *blurb(void) { return progname; }
 Atom XA_SCREENSAVER, XA_DEMO, XA_PREFS;
index 97a26c02a39c5f4060135b51bda27fb217602d15..b079492c9d5aaede661b97498bbc0df5613e0997 100644 (file)
@@ -709,7 +709,8 @@ sleep_until_idle (saver_info *si, Bool until_idle_p)
   Bool polling_mouse_position = (si->using_proc_interrupts ||
                                  !(si->using_xidle_extension ||
                                    si->using_mit_saver_extension ||
-                                   si->using_sgi_saver_extension));
+                                   si->using_sgi_saver_extension) ||
+                                  si->using_xinput_extension);
 
   if (until_idle_p)
     {
@@ -1025,8 +1026,32 @@ sleep_until_idle (saver_info *si, Bool until_idle_p)
        else
 #endif /* HAVE_SGI_SAVER_EXTENSION */
 
+#ifdef HAVE_XINPUT
+        if ((!until_idle_p) && (si->num_xinput_devices > 0) &&
+           (event.x_event.type == si->xinput_DeviceMotionNotify ||
+            event.x_event.type == si->xinput_DeviceButtonPress ||
+            event.x_event.type == si->xinput_DeviceButtonRelease ))
+         {
+
+           dispatch_event (si, &event.x_event);
+           if (si->demoing_p &&
+               (event.x_event.type == si->xinput_DeviceMotionNotify ||
+                event.x_event.type == si->xinput_DeviceButtonRelease) )
+              /* When we're demoing a single hack, mouse motion doesn't
+                 cause deactivation.  Only clicks and keypresses do. */
+             ;
+           else
+              /* If we're not demoing, then any activity causes deactivation.
+               */
+             goto DONE;
+         }
+       else
+#endif /* HAVE_XINPUT */
+
 #ifdef HAVE_RANDR
-        if (event.x_event.type == (si->randr_event_number + RRScreenChangeNotify))
+        if (si->using_randr_extension &&
+            (event.x_event.type == 
+             (si->randr_event_number + RRScreenChangeNotify)))
           {
             /* The Resize and Rotate extension sends an event when the
                size, rotation, or refresh rate of any screen has changed.
index 63ac39ec89148552bb4304c7f0981b12072a6a49..63bec2583f5dd43ef52c8c1d51ef94977281239b 100644 (file)
@@ -131,6 +131,7 @@ struct saver_preferences {
   Bool use_mit_saver_extension;
   Bool use_sgi_saver_extension;
   Bool use_proc_interrupts;
+  Bool use_xinput_extension;
 
   Bool getviewport_full_of_lies_p; /* XFree86 bug #421 */
 
@@ -188,8 +189,20 @@ struct saver_info {
 # ifdef HAVE_RANDR
   int randr_event_number;
   int randr_error_number;
+  Bool using_randr_extension;
 # endif
 
+  Bool using_xinput_extension;     /* Note that `p->use_*' is the *request*, */
+                                   /* and `si->using_*' is the *reality*.    */
+#ifdef HAVE_XINPUT
+  int xinput_ext_event_number;     /* may not be used */
+  int xinput_ext_error_number;
+  int xinput_DeviceButtonPress;    /* Extension device event codes.          */
+  int xinput_DeviceButtonRelease;  /* Assigned by server at runtime          */
+  int xinput_DeviceMotionNotify;
+  struct xinput_dev_info *xinput_devices;
+  int num_xinput_devices;
+# endif
 
   /* =======================================================================
      blanking
index d1c782a00b4cded84e4cfc60727f946f6e82fcb7..66de564da8283505e5b3421257049fc8e239fa33 100644 (file)
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="cycle_spinbutton" type="label-for"/>
+                           <atkrelation target="cycle_spinbutton" type="flows-to"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="left_attach">1</property>
                              <property name="active">False</property>
                              <property name="inconsistent">False</property>
                              <property name="draw_indicator">True</property>
+                             <accessibility>
+                               <atkproperty name="AtkObject::accessible_name" translatable="yes">Lock Screen</atkproperty>
+                               <atkrelation target="lock_spinbutton" type="controller-for"/>
+                               <atkrelation target="lock_spinbutton" type="label-for"/>
+                               <atkrelation target="lock_spinbutton" type="flows-to"/>
+                             </accessibility>
                              <signal name="toggled" handler="pref_changed_cb"/>
                            </widget>
                          </child>
                          <property name="snap_to_ticks">True</property>
                          <property name="wrap">False</property>
                          <property name="adjustment">1 1 720 1 15 15</property>
+                         <accessibility>
+                           <atkrelation target="timeout_label" type="labelled-by"/>
+                           <atkrelation target="timeout_mlabel" type="labelled-by"/>
+                           <atkrelation target="timeout_label" type="flows-from"/>
+                           <atkrelation target="timeout_mlabel" type="flows-to"/>
+                         </accessibility>
                          <signal name="activate" handler="pref_changed_cb"/>
                          <signal name="focus_out_event" handler="pref_changed_event_cb"/>
                          <signal name="value_changed" handler="pref_changed_cb"/>
                          <property name="snap_to_ticks">True</property>
                          <property name="wrap">False</property>
                          <property name="adjustment">0 0 720 1 15 15</property>
+                         <accessibility>
+                           <atkproperty name="AtkObject::accessible_name" translatable="yes">Lock Screen After</atkproperty>
+                           <atkrelation target="lock_button" type="controlled-by"/>
+                           <atkrelation target="lock_button" type="labelled-by"/>
+                           <atkrelation target="lock_mlabel" type="labelled-by"/>
+                           <atkrelation target="lock_button" type="flows-from"/>
+                           <atkrelation target="lock_mlabel" type="flows-to"/>
+                         </accessibility>
                          <signal name="activate" handler="pref_changed_cb"/>
                          <signal name="focus_out_event" handler="pref_changed_event_cb"/>
                          <signal name="value_changed" handler="pref_changed_cb"/>
                          <property name="snap_to_ticks">True</property>
                          <property name="wrap">False</property>
                          <property name="adjustment">0 0 720 1 15 15</property>
+                         <accessibility>
+                           <atkrelation target="cycle_label" type="labelled-by"/>
+                           <atkrelation target="cycle_mlabel" type="labelled-by"/>
+                           <atkrelation target="cycle_label" type="flows-from"/>
+                           <atkrelation target="cycle_mlabel" type="flows-to"/>
+                         </accessibility>
                          <signal name="activate" handler="pref_changed_cb"/>
                          <signal name="focus_out_event" handler="pref_changed_event_cb"/>
                          <signal name="value_changed" handler="pref_changed_cb"/>
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="lock_spinbutton" type="label-for"/>
+                           <atkrelation target="lock_spinbutton" type="flows-to"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="left_attach">3</property>
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="cycle_spinbutton" type="label-for"/>
+                           <atkrelation target="cycle_spinbutton" type="flows-from"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="left_attach">3</property>
                      </child>
 
                      <child>
-                       <widget class="GtkLabel" id="timeout_mlabel">
+                       <widget class="GtkLabel" id="timeout_label">
                          <property name="visible">True</property>
-                         <property name="label" translatable="yes">minutes</property>
-                         <property name="use_underline">False</property>
+                         <property name="label" translatable="yes">_Blank After</property>
+                         <property name="use_underline">True</property>
                          <property name="use_markup">False</property>
-                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="justify">GTK_JUSTIFY_RIGHT</property>
                          <property name="wrap">False</property>
                          <property name="selectable">False</property>
-                         <property name="xalign">0</property>
+                         <property name="xalign">1</property>
                          <property name="yalign">0.5</property>
                          <property name="xpad">8</property>
                          <property name="ypad">0</property>
+                         <property name="mnemonic_widget">timeout_spinbutton</property>
                          <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="timeout_spinbutton" type="label-for"/>
+                           <atkrelation target="timeout_spinbutton" type="flows-to"/>
+                         </accessibility>
                        </widget>
                        <packing>
-                         <property name="left_attach">3</property>
-                         <property name="right_attach">4</property>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
                          <property name="top_attach">0</property>
                          <property name="bottom_attach">1</property>
+                         <property name="x_options">fill</property>
                          <property name="y_options"></property>
                        </packing>
                      </child>
 
                      <child>
-                       <widget class="GtkLabel" id="timeout_label">
+                       <widget class="GtkLabel" id="timeout_mlabel">
                          <property name="visible">True</property>
-                         <property name="label" translatable="yes">_Blank After</property>
-                         <property name="use_underline">True</property>
+                         <property name="label" translatable="yes">minutes</property>
+                         <property name="use_underline">False</property>
                          <property name="use_markup">False</property>
-                         <property name="justify">GTK_JUSTIFY_RIGHT</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
                          <property name="wrap">False</property>
                          <property name="selectable">False</property>
-                         <property name="xalign">1</property>
+                         <property name="xalign">0</property>
                          <property name="yalign">0.5</property>
                          <property name="xpad">8</property>
                          <property name="ypad">0</property>
-                         <property name="mnemonic_widget">timeout_spinbutton</property>
                          <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="timeout_spinbutton" type="label-for"/>
+                           <atkrelation target="timeout_spinbutton" type="flows-from"/>
+                         </accessibility>
                        </widget>
                        <packing>
-                         <property name="left_attach">1</property>
-                         <property name="right_attach">2</property>
+                         <property name="left_attach">3</property>
+                         <property name="right_attach">4</property>
                          <property name="top_attach">0</property>
                          <property name="bottom_attach">1</property>
-                         <property name="x_options">fill</property>
                          <property name="y_options"></property>
                        </packing>
                      </child>
                              <property name="width_chars">-1</property>
                              <property name="single_line_mode">False</property>
                              <property name="angle">0</property>
+                             <accessibility>
+                               <atkrelation target="mode_menu_popup" type="label-for"/>
+                             </accessibility>
                            </widget>
                            <packing>
                              <property name="padding">0</property>
                              <property name="visible">True</property>
                              <property name="can_focus">True</property>
                              <property name="history">0</property>
+                             <accessibility>
+                               <atkrelation target="mode_label" type="labelled-by"/>
+                             </accessibility>
 
                              <child internal-child="menu">
                                <widget class="GtkMenu" id="mode_menu_popup">
                      <property name="label_xalign">0</property>
                      <property name="label_yalign">0.5</property>
                      <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+                     <accessibility>
+                       <atkrelation target="label1" type="labelled-by"/>
+                     </accessibility>
 
                      <child>
                        <widget class="GtkNotebook" id="preview_notebook">
@@ -936,6 +991,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="preview_frame" type="label-for"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="type">label_item</property>
@@ -999,6 +1057,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                      <property name="label_xalign">0</property>
                      <property name="label_yalign">0.5</property>
                      <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+                     <accessibility>
+                       <atkrelation target="label2" type="labelled-by"/>
+                     </accessibility>
 
                      <child>
                        <widget class="GtkHBox" id="grab_hbox">
@@ -1083,6 +1144,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="active">False</property>
                                  <property name="inconsistent">False</property>
                                  <property name="draw_indicator">True</property>
+                                 <accessibility>
+                                   <atkrelation target="image_text" type="controller-for"/>
+                                   <atkrelation target="image_browse_button" type="controller-for"/>
+                                 </accessibility>
                                  <signal name="toggled" handler="pref_changed_cb"/>
                                </widget>
                                <packing>
@@ -1135,6 +1200,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="has_frame">True</property>
                                      <property name="invisible_char">*</property>
                                      <property name="activates_default">False</property>
+                                     <accessibility>
+                                       <atkrelation target="grab_image_button" type="labelled-by"/>
+                                       <atkrelation target="grab_image_button" type="controlled-by"/>
+                                     </accessibility>
                                      <signal name="activate" handler="pref_changed_cb"/>
                                      <signal name="focus_out_event" handler="pref_changed_event_cb"/>
                                    </widget>
@@ -1195,6 +1264,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="grab_frame" type="label-for"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="type">label_item</property>
@@ -1216,6 +1288,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                      <property name="label_xalign">0</property>
                      <property name="label_yalign">0.5</property>
                      <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+                     <accessibility>
+                       <atkrelation target="label3" type="labelled-by"/>
+                     </accessibility>
 
                      <child>
                        <widget class="GtkHBox" id="diag_hbox">
@@ -1261,6 +1336,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="active">False</property>
                                  <property name="inconsistent">False</property>
                                  <property name="draw_indicator">True</property>
+                                 <accessibility>
+                                   <atkrelation target="text_entry" type="controller-for"/>
+                                   <atkrelation target="text_entry" type="label-for"/>
+                                 </accessibility>
                                  <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:31:44 GMT"/>
                                </widget>
                                <packing>
@@ -1286,6 +1365,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="inconsistent">False</property>
                                  <property name="draw_indicator">True</property>
                                  <property name="group">text_radio</property>
+                                 <accessibility>
+                                   <atkrelation target="text_file_entry" type="label-for"/>
+                                   <atkrelation target="text_file_entry" type="controller-for"/>
+                                 </accessibility>
                                  <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:31:55 GMT"/>
                                </widget>
                                <packing>
@@ -1311,6 +1394,11 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="inconsistent">False</property>
                                  <property name="draw_indicator">True</property>
                                  <property name="group">text_radio</property>
+                                 <accessibility>
+                                   <atkrelation target="text_program_entry" type="label-for"/>
+                                   <atkrelation target="text_program_entry" type="controller-for"/>
+                                   <atkrelation target="text_program_browse" type="controller-for"/>
+                                 </accessibility>
                                  <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:07 GMT"/>
                                </widget>
                                <packing>
@@ -1336,6 +1424,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="inconsistent">False</property>
                                  <property name="draw_indicator">True</property>
                                  <property name="group">text_radio</property>
+                                 <accessibility>
+                                   <atkrelation target="text_url_entry" type="label-for"/>
+                                   <atkrelation target="text_url_entry" type="controller-for"/>
+                                 </accessibility>
                                  <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:17 GMT"/>
                                </widget>
                                <packing>
@@ -1385,6 +1477,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="has_frame">True</property>
                                  <property name="invisible_char">*</property>
                                  <property name="activates_default">False</property>
+                                 <accessibility>
+                                   <atkrelation target="text_url_radio" type="controlled-by"/>
+                                 </accessibility>
                                  <signal name="activate" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:33:10 GMT"/>
                                  <signal name="focus_out_event" handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:34:26 GMT"/>
                                </widget>
@@ -1405,6 +1500,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="use_underline">True</property>
                                  <property name="relief">GTK_RELIEF_NORMAL</property>
                                  <property name="focus_on_click">True</property>
+                                 <accessibility>
+                                   <atkrelation target="text_file_radio" type="controlled-by"/>
+                                 </accessibility>
                                  <signal name="clicked" handler="browse_text_file_cb" last_modification_time="Sun, 20 Mar 2005 01:24:38 GMT"/>
                                </widget>
                                <packing>
@@ -1429,6 +1527,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="has_frame">True</property>
                                  <property name="invisible_char">*</property>
                                  <property name="activates_default">False</property>
+                                 <accessibility>
+                                   <atkrelation target="text_program_radio" type="labelled-by"/>
+                                   <atkrelation target="text_program_radio" type="controlled-by"/>
+                                 </accessibility>
                                  <signal name="activate" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:42 GMT"/>
                                  <signal name="focus_out_event" handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:33:43 GMT"/>
                                </widget>
@@ -1453,6 +1555,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="has_frame">True</property>
                                  <property name="invisible_char">*</property>
                                  <property name="activates_default">False</property>
+                                 <accessibility>
+                                   <atkrelation target="text_program_radio" type="labelled-by"/>
+                                   <atkrelation target="text_program_radio" type="controlled-by"/>
+                                 </accessibility>
                                  <signal name="activate" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:33:02 GMT"/>
                                  <signal name="focus_out_event" handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:34:15 GMT"/>
                                </widget>
@@ -1473,6 +1579,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="use_underline">True</property>
                                  <property name="relief">GTK_RELIEF_NORMAL</property>
                                  <property name="focus_on_click">True</property>
+                                 <accessibility>
+                                   <atkrelation target="text_program_radio" type="controller-for"/>
+                                 </accessibility>
                                  <signal name="clicked" handler="browse_text_program_cb" last_modification_time="Sun, 20 Mar 2005 01:24:51 GMT"/>
                                </widget>
                                <packing>
@@ -1497,6 +1606,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="has_frame">True</property>
                                  <property name="invisible_char">*</property>
                                  <property name="activates_default">False</property>
+                                 <accessibility>
+                                   <atkrelation target="text_file_radio" type="labelled-by"/>
+                                   <atkrelation target="text_file_radio" type="controlled-by"/>
+                                 </accessibility>
                                  <signal name="activate" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:53 GMT"/>
                                  <signal name="focus_out_event" handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:33:55 GMT"/>
                                </widget>
@@ -1535,6 +1648,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="diag_frame" type="label-for"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="type">label_item</property>
@@ -1599,6 +1715,11 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="active">True</property>
                                  <property name="inconsistent">False</property>
                                  <property name="draw_indicator">True</property>
+                                 <accessibility>
+                                   <atkrelation target="dpms_suspend_spinbutton" type="controller-for"/>
+                                   <atkrelation target="dpms_standby_spinbutton" type="controller-for"/>
+                                   <atkrelation target="dpms_off_spinbutton" type="controller-for"/>
+                                 </accessibility>
                                  <signal name="toggled" handler="pref_changed_cb"/>
                                </widget>
                                <packing>
@@ -1635,6 +1756,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="width_chars">-1</property>
                                      <property name="single_line_mode">False</property>
                                      <property name="angle">0</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_standby_spinbutton" type="label-for"/>
+                                       <atkrelation target="dpms_standby_spinbutton" type="flows-to"/>
+                                     </accessibility>
                                    </widget>
                                    <packing>
                                      <property name="left_attach">0</property>
@@ -1664,6 +1789,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="width_chars">-1</property>
                                      <property name="single_line_mode">False</property>
                                      <property name="angle">0</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_suspend_spinbutton" type="label-for"/>
+                                       <atkrelation target="dpms_suspend_spinbutton" type="flows-to"/>
+                                     </accessibility>
                                    </widget>
                                    <packing>
                                      <property name="left_attach">0</property>
@@ -1693,6 +1822,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="width_chars">-1</property>
                                      <property name="single_line_mode">False</property>
                                      <property name="angle">0</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_off_spinbutton" type="label-for"/>
+                                       <atkrelation target="dpms_off_spinbutton" type="flows-to"/>
+                                     </accessibility>
                                    </widget>
                                    <packing>
                                      <property name="left_attach">0</property>
@@ -1721,6 +1854,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="width_chars">-1</property>
                                      <property name="single_line_mode">False</property>
                                      <property name="angle">0</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_standby_spinbutton" type="label-for"/>
+                                       <atkrelation target="dpms_standby_spinbutton" type="flows-from"/>
+                                     </accessibility>
                                    </widget>
                                    <packing>
                                      <property name="left_attach">2</property>
@@ -1749,6 +1886,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="width_chars">-1</property>
                                      <property name="single_line_mode">False</property>
                                      <property name="angle">0</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_suspend_spinbutton" type="label-for"/>
+                                       <atkrelation target="dpms_suspend_spinbutton" type="flows-from"/>
+                                     </accessibility>
                                    </widget>
                                    <packing>
                                      <property name="left_attach">2</property>
@@ -1777,6 +1918,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="width_chars">-1</property>
                                      <property name="single_line_mode">False</property>
                                      <property name="angle">0</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_off_spinbutton" type="label-for"/>
+                                       <atkrelation target="dpms_off_spinbutton" type="flows-from"/>
+                                     </accessibility>
                                    </widget>
                                    <packing>
                                      <property name="left_attach">2</property>
@@ -1800,6 +1945,13 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="snap_to_ticks">True</property>
                                      <property name="wrap">False</property>
                                      <property name="adjustment">0 0 1440 1 15 15</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_button" type="controlled-by"/>
+                                       <atkrelation target="dpms_off_label" type="labelled-by"/>
+                                       <atkrelation target="dpms_off_mlabel" type="labelled-by"/>
+                                       <atkrelation target="dpms_off_label" type="flows-from"/>
+                                       <atkrelation target="dpms_off_mlabel" type="flows-to"/>
+                                     </accessibility>
                                      <signal name="activate" handler="pref_changed_cb"/>
                                      <signal name="focus_out_event" handler="pref_changed_event_cb"/>
                                      <signal name="value_changed" handler="pref_changed_cb"/>
@@ -1826,6 +1978,13 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="snap_to_ticks">True</property>
                                      <property name="wrap">False</property>
                                      <property name="adjustment">0 0 1440 1 15 15</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_button" type="controlled-by"/>
+                                       <atkrelation target="dpms_suspend_label" type="labelled-by"/>
+                                       <atkrelation target="dpms_suspend_mlabel" type="labelled-by"/>
+                                       <atkrelation target="dpms_suspend_label" type="flows-from"/>
+                                       <atkrelation target="dpms_suspend_mlabel" type="flows-to"/>
+                                     </accessibility>
                                      <signal name="activate" handler="pref_changed_cb"/>
                                      <signal name="focus_out_event" handler="pref_changed_event_cb"/>
                                      <signal name="value_changed" handler="pref_changed_cb"/>
@@ -1852,6 +2011,13 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="snap_to_ticks">True</property>
                                      <property name="wrap">False</property>
                                      <property name="adjustment">0 0 1440 1 15 15</property>
+                                     <accessibility>
+                                       <atkrelation target="dpms_button" type="controlled-by"/>
+                                       <atkrelation target="dpms_standby_label" type="labelled-by"/>
+                                       <atkrelation target="dpms_standby_mlabel" type="labelled-by"/>
+                                       <atkrelation target="dpms_standby_label" type="flows-from"/>
+                                       <atkrelation target="dpms_standby_mlabel" type="flows-to"/>
+                                     </accessibility>
                                      <signal name="activate" handler="pref_changed_cb"/>
                                      <signal name="focus_out_event" handler="pref_changed_event_cb"/>
                                      <signal name="value_changed" handler="pref_changed_cb"/>
@@ -1899,6 +2065,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="dpms_frame" type="label-for"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="type">label_item</property>
@@ -1921,6 +2090,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                      <property name="label_xalign">0</property>
                      <property name="label_yalign">0.5</property>
                      <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+                     <accessibility>
+                       <atkrelation target="label5" type="labelled-by"/>
+                     </accessibility>
 
                      <child>
                        <widget class="GtkHBox" id="cmap_hbox">
@@ -1963,6 +2135,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="active">False</property>
                                  <property name="inconsistent">False</property>
                                  <property name="draw_indicator">True</property>
+                                 <accessibility>
+                                   <atkrelation target="fade_spinbutton" type="controller-for"/>
+                                 </accessibility>
                                  <signal name="toggled" handler="pref_changed_cb"/>
                                </widget>
                                <packing>
@@ -1984,6 +2159,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                  <property name="active">False</property>
                                  <property name="inconsistent">False</property>
                                  <property name="draw_indicator">True</property>
+                                 <accessibility>
+                                   <atkrelation target="fade_spinbutton" type="controller-for"/>
+                                 </accessibility>
                                  <signal name="toggled" handler="pref_changed_cb"/>
                                </widget>
                                <packing>
@@ -2042,6 +2220,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="width_chars">-1</property>
                                      <property name="single_line_mode">False</property>
                                      <property name="angle">0</property>
+                                     <accessibility>
+                                       <atkrelation target="fade_spinbutton" type="label-for"/>
+                                       <atkrelation target="fade_spinbutton" type="flows-to"/>
+                                     </accessibility>
                                    </widget>
                                    <packing>
                                      <property name="padding">14</property>
@@ -2062,6 +2244,14 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="snap_to_ticks">True</property>
                                      <property name="wrap">False</property>
                                      <property name="adjustment">0 0 10 1 1 1</property>
+                                     <accessibility>
+                                       <atkrelation target="unfade_button" type="controlled-by"/>
+                                       <atkrelation target="fade_button" type="controlled-by"/>
+                                       <atkrelation target="fade_label" type="labelled-by"/>
+                                       <atkrelation target="fade_sec_label" type="labelled-by"/>
+                                       <atkrelation target="fade_label" type="flows-from"/>
+                                       <atkrelation target="fade_sec_label" type="flows-to"/>
+                                     </accessibility>
                                      <signal name="activate" handler="pref_changed_cb"/>
                                      <signal name="focus_out_event" handler="pref_changed_event_cb"/>
                                      <signal name="value_changed" handler="pref_changed_cb"/>
@@ -2090,6 +2280,10 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                                      <property name="width_chars">-1</property>
                                      <property name="single_line_mode">False</property>
                                      <property name="angle">0</property>
+                                     <accessibility>
+                                       <atkrelation target="fade_spinbutton" type="label-for"/>
+                                       <atkrelation target="fade_spinbutton" type="flows-from"/>
+                                     </accessibility>
                                    </widget>
                                    <packing>
                                      <property name="padding">2</property>
@@ -2163,6 +2357,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="cmap_frame" type="label-for"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="type">label_item</property>
@@ -2383,6 +2580,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
              <property name="label_xalign">0</property>
              <property name="label_yalign">0</property>
              <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+             <accessibility>
+               <atkrelation target="label6" type="labelled-by"/>
+             </accessibility>
 
              <child>
                <widget class="GtkNotebook" id="opt_notebook">
@@ -2482,6 +2682,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                          <property name="width_chars">-1</property>
                          <property name="single_line_mode">False</property>
                          <property name="angle">0</property>
+                         <accessibility>
+                           <atkrelation target="cmd_text" type="label-for"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="left_attach">1</property>
@@ -2504,6 +2707,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                          <property name="has_frame">True</property>
                          <property name="invisible_char">*</property>
                          <property name="activates_default">False</property>
+                         <accessibility>
+                           <atkrelation target="cmd_label" type="labelled-by"/>
+                         </accessibility>
                        </widget>
                        <packing>
                          <property name="left_attach">1</property>
@@ -2538,6 +2744,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                              <property name="width_chars">-1</property>
                              <property name="single_line_mode">False</property>
                              <property name="angle">0</property>
+                             <accessibility>
+                               <atkrelation target="visual_combo" type="label-for"/>
+                             </accessibility>
                            </widget>
                            <packing>
                              <property name="padding">0</property>
@@ -2554,6 +2763,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                              <property name="case_sensitive">False</property>
                              <property name="enable_arrow_keys">True</property>
                              <property name="enable_arrows_always">False</property>
+                             <accessibility>
+                               <atkrelation target="visual" type="labelled-by"/>
+                             </accessibility>
 
                              <child internal-child="entry">
                                <widget class="GtkEntry" id="visual_entry">
@@ -2745,6 +2957,9 @@ This probably means that the &quot;xscreensaver-extras&quot; and
                  <property name="width_chars">-1</property>
                  <property name="single_line_mode">False</property>
                  <property name="angle">0</property>
+                 <accessibility>
+                   <atkrelation target="opt_frame" type="label-for"/>
+                 </accessibility>
                </widget>
                <packing>
                  <property name="type">label_item</property>
index 6c0b63d48d23a749923e0fa937328c5300201d48..24149408bb05b4faa9e7ae385d2fc2e210f2f6a5 100755 (executable)
@@ -30,7 +30,7 @@ use Text::Wrap qw(wrap);
 use bytes;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.21 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.22 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 my $http_proxy = undef;
@@ -900,6 +900,42 @@ sub main() {
   }
 
   output();
+
+
+  if (defined ($cocoa_id)) {
+    #
+    # On MacOS, sleep for 10 seconds between when the last output is
+    # printed, and when this process exits.  This is because MacOS
+    # 10.5.0 and later broke ptys in a new and exciting way: basically,
+    # once the process at the end of the pty exits, you have exactly
+    # 1 second to read all the queued data off the pipe before it is
+    # summarily flushed.
+    #
+    # Many of the screen savers were written to depend on being able
+    # to read a small number of bytes, and continue reading until they
+    # reached EOF.  This is no longer possible.
+    #
+    # Note that the current MacOS behavior has all three of these
+    # awesome properties: 1) Inconvenient; 2) Has no sane workaround;
+    # 3) Different behavior than MacOS 10.1 through 10.4; and 4)
+    # Different behavior than every other Unix in the world.
+    #
+    # See http://jwz.livejournal.com/817438.html, and for those of
+    # you inside Apple, "Problem ID 5606018".
+    #
+    # One workaround would be to rewrite the savers to have an
+    # internal buffer, and always read as much data as possible as
+    # soon as a pipe has input available.  However, that's a lot more
+    # work, so instead, let's just not exit right away, and hope that
+    # 10 seconds is enough.
+    #
+    # This will solve the problem for invocations of xscreensaver-text
+    # that produce little output (e.g., date-mode); and won't solve it
+    # in cases where a large amount of text is generated in a short
+    # amount of time (e.g., url-mode.)
+    #
+    sleep (10);
+  }
 }
 
 main();
index c092777c58796c193463c85ee6c8a3d870cdf5e6..70bb95424ef88dcb0fc798afc7fd689bad33a14f 100644 (file)
 #include <ctype.h>
 #include <X11/Xlib.h>
 
+#ifdef ENABLE_NLS
+# include <locale.h>
+# include <libintl.h>
+#endif /* ENABLE_NLS */
+
 #include <X11/Xlibint.h>
 
 #include <X11/Xatom.h>
@@ -860,12 +865,14 @@ initialize_server_extensions (saver_info *si)
   Bool server_has_sgi_saver_extension_p = False;
   Bool server_has_mit_saver_extension_p = False;
   Bool system_has_proc_interrupts_p = False;
+  Bool server_has_xinput_extension_p = False;
   const char *piwhy = 0;
 
   si->using_xidle_extension = p->use_xidle_extension;
   si->using_sgi_saver_extension = p->use_sgi_saver_extension;
   si->using_mit_saver_extension = p->use_mit_saver_extension;
   si->using_proc_interrupts = p->use_proc_interrupts;
+  si->using_xinput_extension = p->use_xinput_extension;
 
 #ifdef HAVE_XIDLE_EXTENSION
   {
@@ -889,6 +896,10 @@ initialize_server_extensions (saver_info *si)
   system_has_proc_interrupts_p = query_proc_interrupts_available (si, &piwhy);
 #endif
 
+#ifdef HAVE_XINPUT
+  server_has_xinput_extension_p = query_xinput_extension (si);
+#endif
+
   if (!server_has_xidle_extension_p)
     si->using_xidle_extension = False;
   else if (p->verbose_p)
@@ -931,6 +942,8 @@ initialize_server_extensions (saver_info *si)
       int nscreens = ScreenCount (si->dpy);  /* number of *real* screens */
       int i;
 
+      si->using_randr_extension = TRUE;
+
       if (p->verbose_p)
        fprintf (stderr, "%s: selecting RANDR events\n", blurb());
       for (i = 0; i < nscreens; i++)
@@ -943,6 +956,28 @@ initialize_server_extensions (saver_info *si)
     }
 # endif /* HAVE_RANDR */
 
+#ifdef HAVE_XINPUT
+  if (!server_has_xinput_extension_p)
+    si->using_xinput_extension = False;
+  else
+    {
+      if (si->using_xinput_extension)
+        init_xinput_extension(si);
+
+      if (p->verbose_p)
+        {
+          if (si->using_xinput_extension)
+            fprintf (stderr,
+                     "%s: selecting events from %d XInputExtension devices.\n",
+                     blurb(), si->num_xinput_devices);
+          else
+            fprintf (stderr,
+                     "%s: not using XInputExtension.\n",
+                     blurb());
+        }
+    }
+#endif
+
   if (!system_has_proc_interrupts_p)
     {
       si->using_proc_interrupts = False;
@@ -1347,6 +1382,14 @@ main (int argc, char **argv)
   struct passwd *spasswd;
   int i;
 
+#ifdef ENABLE_NLS
+  if (!setlocale (LC_ALL, ""))
+    fprintf (stderr, "locale not supported by C library\n");
+
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  textdomain (GETTEXT_PACKAGE);
+#endif /* ENABLE_NLS */
+
   memset(si, 0, sizeof(*si));
   global_si_kludge = si;       /* I hate C so much... */
 
@@ -2133,6 +2176,8 @@ analyze_display (saver_info *si)
         True,  0
    }, { "Apple-DRI",                            "Apple-DRI (XDarwin)",
         True,  0
+   }, { "XInputExtension",                      "XInput",
+        True,  0
    },
   };
 
index 09f5ea9488fa701c5dd020cf2f30cb585389b12c..29b9ebd1130e2ff8bfb89b4f04d7cee76e97933e 100644 (file)
@@ -46,6 +46,11 @@ extern Bool ensure_no_screensaver_running (Display *, Screen *);
 extern Bool query_proc_interrupts_available (saver_info *, const char **why);
 #endif
 
+#ifdef HAVE_XINPUT
+extern Bool query_xinput_extension (saver_info *);
+extern void init_xinput_extension (saver_info *si);
+#endif
+
 /* Display Power Management System (DPMS) interface. */
 extern Bool monitor_powered_on_p (saver_info *si);
 extern void monitor_power_on (saver_info *si);
index 8378e1cf8b0073b3ff172b62fddfb22f47aa8807..46607977ada484781ecd9b82b74bb471bb309fd1 100644 (file)
@@ -85,6 +85,180 @@ init_mit_saver_extension (saver_info *si)
 }
 #endif /* HAVE_MIT_SAVER_EXTENSION */
 
+\f
+#ifdef HAVE_XINPUT
+/* XInputExtension device support */
+#include <X11/extensions/XInput.h>
+
+struct xinput_dev_info {
+  XDevice      *device;
+  XEventClass  press, release, valuator;
+};
+
+Bool
+query_xinput_extension (saver_info *si)
+{
+  XExtCodes codes;
+
+  if (!XQueryExtension (si->dpy, INAME, &codes.major_opcode,
+                       &codes.first_event, &codes.first_error))
+    {
+      if (si->prefs.verbose_p)
+       fprintf (stderr, "\t XInputExtension is not present!\n");
+      return False;
+    }
+  else
+    {
+      if (si->prefs.verbose_p)
+       fprintf (stderr, "\t XInputExtension is present!\n");
+      return True;
+    }
+}
+
+void
+init_xinput_extension (saver_info *si)
+{
+  int i, ndevices;
+  int class;
+  XDeviceInfo *list;
+  XDevice *dev;
+  XAnyClassPtr pClass;
+  XEventClass *event_list;
+  int nevents = 0;
+
+  /* skip if already initialized */
+  if (si->num_xinput_devices && si->xinput_devices)
+    return;
+
+  si->num_xinput_devices = 0;
+
+  list = XListInputDevices (si->dpy, &ndevices);
+  if (list == NULL)
+    {
+      si->xinput_devices = NULL;
+      return;
+    }
+
+  /* We only care about 3 event types per device (DeviceButtonPress,
+     DeviceButtonRelease, and DeviceMotionNotify), hence the "* 3"
+     for the event count. */
+  event_list = calloc(ndevices * 3, sizeof(XEventClass));
+  if (event_list == NULL)
+    return;
+
+  si->xinput_devices = calloc(ndevices, sizeof(struct xinput_dev_info));
+  if (si->xinput_devices == NULL)
+    {
+      free(event_list);
+      return;
+    }
+
+  for (i = 0; i < ndevices; i++)
+    {
+      if ((list[i].use == IsXExtensionDevice)
+#ifdef IsXExtensionPointer
+          || (list[i].use == IsXExtensionPointer)
+#endif
+         )
+        {
+          struct xinput_dev_info *dev_info =
+            &si->xinput_devices[si->num_xinput_devices];
+          Bool device_we_want = False;
+
+          if (si->prefs.debug_p)
+            fprintf(stderr,
+                    "Extension device #%2d: XID=%2d  type=%3d  name=\"%s\"\n",
+                    i, (int) list[i].id, (int) list[i].type, list[i].name);
+
+          dev = XOpenDevice (si->dpy, list[i].id);
+          if (!dev)
+            continue;
+          dev_info->device = dev;
+
+          pClass = list[i].inputclassinfo;
+          for (class = 0; class < list[i].num_classes; class++)
+            {
+              switch (pClass->class)
+                {
+                case ButtonClass:
+                  if (((XButtonInfo *) pClass)->num_buttons > 0)
+                    {
+                      /* Macros set values in the second & third arguments */
+                      DeviceButtonPress (dev, si->xinput_DeviceButtonPress,
+                                         dev_info->press);
+                      event_list[nevents++] = dev_info->press;
+
+                      DeviceButtonRelease (dev, si->xinput_DeviceButtonRelease,
+                                           dev_info->release);
+                      event_list[nevents++] = dev_info->release;
+                      device_we_want = True;
+                    }
+                  break;
+
+                case ValuatorClass:
+                  if (((XValuatorInfo *) pClass)->num_axes > 0)
+                    {
+                      DeviceMotionNotify (dev, si->xinput_DeviceMotionNotify,
+                                          dev_info->valuator);
+                      event_list[nevents++] = dev_info->valuator;
+                      device_we_want = True;
+                    }
+                  break;
+
+                default:
+                  /* ignore other classes of devices/events */
+                  break;
+                }
+
+              pClass = (XAnyClassPtr) & ((char *) pClass)[pClass->length];
+            }
+
+          if (device_we_want)
+            si->num_xinput_devices++;
+          else
+            XCloseDevice (si->dpy, dev);
+        }
+    }
+
+  if (list)
+    XFreeDeviceList (list);
+
+  if ((nevents == 0) || (si->num_xinput_devices == 0))
+    {
+      free(event_list);
+      free(si->xinput_devices);
+      si->xinput_devices = NULL;
+      si->num_xinput_devices = 0;
+      return;
+    }
+
+  for (i = 0; i < si->nscreens; i++)
+    {
+      saver_screen_info *ssi = &si->screens[i];
+      Window root = RootWindowOfScreen (ssi->screen);
+      XSelectExtensionEvent (si->dpy, root, event_list, nevents);
+    }
+
+  free(event_list);
+}
+
+#if 0
+/* not used */
+static void
+close_xinput_extension (saver_info *si)
+{
+  int i;
+
+  for (i = 0; i < si->num_xinput_devices; i++)
+    XCloseDevice (si->dpy, si->xinput_devices[i].device);
+
+  free(si->xinput_devices);
+  si->xinput_devices = NULL;
+  si->num_xinput_devices = 0;
+}
+#endif
+#endif /* HAVE_XINPUT */
+
 \f
 /* SGI SCREEN_SAVER server extension hackery.
  */
diff --git a/hacks/._barcode.c b/hacks/._barcode.c
new file mode 100644 (file)
index 0000000..8d48447
Binary files /dev/null and b/hacks/._barcode.c differ
diff --git a/hacks/._celtic.c b/hacks/._celtic.c
new file mode 100644 (file)
index 0000000..797e674
Binary files /dev/null and b/hacks/._celtic.c differ
diff --git a/hacks/._demon.c b/hacks/._demon.c
new file mode 100644 (file)
index 0000000..1433347
Binary files /dev/null and b/hacks/._demon.c differ
diff --git a/hacks/._eruption.c b/hacks/._eruption.c
new file mode 100644 (file)
index 0000000..dfdbea5
Binary files /dev/null and b/hacks/._eruption.c differ
diff --git a/hacks/._flow.c b/hacks/._flow.c
new file mode 100644 (file)
index 0000000..3081c8e
Binary files /dev/null and b/hacks/._flow.c differ
diff --git a/hacks/._interaggregate.c b/hacks/._interaggregate.c
new file mode 100644 (file)
index 0000000..51c19b8
Binary files /dev/null and b/hacks/._interaggregate.c differ
diff --git a/hacks/._noseguy.c b/hacks/._noseguy.c
new file mode 100644 (file)
index 0000000..82a3390
Binary files /dev/null and b/hacks/._noseguy.c differ
diff --git a/hacks/._petri.c b/hacks/._petri.c
new file mode 100644 (file)
index 0000000..22a5a2f
Binary files /dev/null and b/hacks/._petri.c differ
diff --git a/hacks/._shadebobs.c b/hacks/._shadebobs.c
new file mode 100644 (file)
index 0000000..e0d09f8
Binary files /dev/null and b/hacks/._shadebobs.c differ
diff --git a/hacks/._slidescreen.c b/hacks/._slidescreen.c
new file mode 100644 (file)
index 0000000..3d50a09
Binary files /dev/null and b/hacks/._slidescreen.c differ
diff --git a/hacks/._webcollage-helper-cocoa.m b/hacks/._webcollage-helper-cocoa.m
new file mode 100644 (file)
index 0000000..8b7e2fa
Binary files /dev/null and b/hacks/._webcollage-helper-cocoa.m differ
diff --git a/hacks/._zoom.c b/hacks/._zoom.c
new file mode 100644 (file)
index 0000000..8998fef
Binary files /dev/null and b/hacks/._zoom.c differ
index bb334650f9675b3bca2bec6da2a7b6f86c96e0e2..63368f5f73f5509ed31a8f26ca0c649c78b5d63f 100644 (file)
@@ -839,7 +839,7 @@ analogtv_setup_frame(analogtv *it)
       }
       hnc += hni + (int)(random()%65536)-32768;
     }
-    hnc -= (ANALOGTV_V * ANALOGTV_H)<<8;
+/*    hnc -= (ANALOGTV_V * ANALOGTV_H)<<8;*/
   }
 
   if (it->rx_signal_level != 0.0)
@@ -900,7 +900,7 @@ analogtv_sync(analogtv *it)
   double *sp;
   double cbfc=1.0/128.0;
 
-  sp = it->rx_signal + lineno*ANALOGTV_H + cur_hsync;
+/*  sp = it->rx_signal + lineno*ANALOGTV_H + cur_hsync;*/
   for (i=-32; i<32; i++) {
     lineno = (cur_vsync + i + ANALOGTV_V) % ANALOGTV_V;
     sp = it->rx_signal + lineno*ANALOGTV_H;
@@ -1182,7 +1182,7 @@ analogtv_draw(analogtv *it)
   float *rgb_start, *rgb_end;
   double pixbright;
   int pixmultinc;
-  int bigloadchange,drawcount;
+  int /*bigloadchange,*/drawcount;
   double baseload;
   double puheight;
   int overall_top, overall_bot;
@@ -1207,7 +1207,7 @@ analogtv_draw(analogtv *it)
   baseload=0.5;
   /* if (it->hashnoise_on) baseload=0.5; */
 
-  bigloadchange=1;
+  /*bigloadchange=1;*/
   drawcount=0;
   it->crtload[ANALOGTV_TOP-1]=baseload;
   puheight = puramp(it, 2.0, 1.0, 1.3) * it->height_control *
@@ -1244,7 +1244,7 @@ analogtv_draw(analogtv *it)
 
     if (lineno==it->shrinkpulse) {
       baseload += 0.4;
-      bigloadchange=1;
+      /*bigloadchange=1;*/
       it->shrinkpulse=-1;
     }
 
@@ -1297,7 +1297,7 @@ analogtv_draw(analogtv *it)
 
     {
       int totsignal=0;
-      double ncl,diff;
+      double ncl/*,diff*/;
 
       for (i=0; i<ANALOGTV_PIC_LEN; i++) {
         totsignal += signal[i];
@@ -1308,8 +1308,8 @@ analogtv_draw(analogtv *it)
               (totsignal-30000)/100000.0 +
               (slineno>184 ? (slineno-184)*(lineno-184)*0.001 * it->squeezebottom
                : 0.0));
-      diff=ncl - it->crtload[lineno];
-      bigloadchange = (diff>0.01 || diff<-0.01);
+      /*diff=ncl - it->crtload[lineno];*/
+      /*bigloadchange = (diff>0.01 || diff<-0.01);*/
       it->crtload[lineno]=ncl;
     }
 
index 652e4770659dd4fa780aa7dc65a0ddcdeece5deb..0cf342ea4c1d4f27c9c5712ef89c583f64673026 100644 (file)
@@ -152,8 +152,6 @@ initAppendages(struct state *st)
     st->aCurr->growth = st->finpoints / 2 + RND(st->finpoints / 2);
     st->aCurr->rate = RND(11) * RND(11);
 
-    dist = 1.;
-
     do {
       x = (1 - RND(1001) / 500);
       y = (1 - RND(1001) / 500);
index facaf7173f1526cf65e22a0086289168162df560..fcb7aee00f423afdfe79c9708ddbf25d34756b54 100644 (file)
@@ -279,7 +279,6 @@ a2_dither (unsigned int *in, unsigned char *out, int w, int h)
   long *temp_err;
   int fs_scale = 1024;
   int brightness = 75;
-  int fs_direction;
 
 #if 0
   {
@@ -320,7 +319,6 @@ a2_dither (unsigned int *in, unsigned char *out, int w, int h)
       this_berr[x] = random() % (fs_scale * 2) - fs_scale;
       /* (random errors in [-1 .. 1]) */
     }
-  fs_direction = 1;
 
   for (y = 0; y < h; y++)
     for (x = 0; x < w; x++)
@@ -708,7 +706,7 @@ static void slideshow_controller(apple2_sim_t *sim, int *stepno,
           basename = slash+1;
         }
       {
-        char *dot=strchr(basename,'.');
+        char *dot=strrchr(basename,'.');
         if (dot) *dot=0;
       }
       if (strlen(basename)>20) basename[20]=0;
index 90eed8d1d7ac3c762f3e8c75a15ccfc3233532f6..af0a9341b7b94e312032dde29217260414743e89 100644 (file)
@@ -94,45 +94,16 @@ typedef struct {
   Bit16 value;
 } Pointer;
 
-/* eprintf - Taken from "Practice of Programming" by Kernighan and Pike */
-static void eprintf(char *fmt, ...){
-  va_list args;
-  
-  char *progname = "Assembler";
-
-  fflush(stdout);
-  if (progname != NULL)
-    fprintf(stderr, "%s: ", progname);
-
-  va_start(args, fmt);
-  vfprintf(stderr, fmt, args);
-  va_end(args);
-  
-  if (fmt[0] != '\0' && fmt[strlen(fmt) -1] == ':')
-    fprintf(stderr, " %s", strerror(errno));
-  fprintf(stderr, "\n");
-  exit(2); /* conventional value for failed execution */
-}
 
-/* emalloc - Taken from "Practice of Programming" by Kernighan and
-   Pike.  If memory allocatiion fails the program will print a message
-   an exit. */
 static void *emalloc(size_t n) {
-  void *p;
-  
-  p = malloc(n);
-  if (p == NULL)
-    eprintf("malloc of %u bytes failed:", n);
+  void *p = malloc(n);
+  if (! p) abort();
   return p;
 }
 
-/* ecalloc - Dose the same thing as emalloc just calls calloc instead. */
 static void *ecalloc(uint32_t nelm, size_t nsize){
-  void *p;
-  p = calloc(nelm, nsize);
-  if (p == NULL)
-    eprintf("calloc of %u bytes failed:", nelm * nsize);
+  void *p = calloc(nelm, nsize);
+  if (!p) abort();
   return p;
 }
 
@@ -419,7 +390,7 @@ static void dismem(machine_6502 *machine, AddrMode adm, char *output){
   Bit16 n;
   switch(adm){
   case SINGLE:
-    output = "";
+    *output = 0;
     break;
   case IMMEDIATE_LESS:
   case IMMEDIATE_GREAT:
@@ -467,7 +438,7 @@ static void dismem(machine_6502 *machine, AddrMode adm, char *output){
     sprintf(output,"$%x,x",n);
     break;
   case DCB_PARAM:
-    output = "";
+    *output = 0;
     break;
   }
 }
@@ -919,13 +890,13 @@ static void jmpRTS(machine_6502 *machine, AddrMode adm){
 
 static void jmpSBC(machine_6502 *machine, AddrMode adm){
   Pointer ptr;
-  Bit8 vflag;
+  /*Bit8 vflag;*/
   Bit8 c = bitOn(machine->regP, CARRY_FL);
   Bit16 tmp, w;
   BOOL isValue = getValue(machine, adm, &ptr);
   warnValue(isValue);
-  vflag = (bitOn(machine->regA,NEGATIVE_FL) &&
-          bitOn(ptr.value, NEGATIVE_FL));
+  /*vflag = (bitOn(machine->regA,NEGATIVE_FL) &&
+          bitOn(ptr.value, NEGATIVE_FL));*/
 
   if (bitOn(machine->regP, DECIMAL_FL)) {
     Bit8 ar = nibble(machine->regA, RIGHT);
@@ -1700,12 +1671,10 @@ static char *fileToBuffer(const char *filename){
   int i = 0;
   char *buffer = ecalloc(defaultSize,sizeof(char));
 
-  if (buffer == NULL) 
-    eprintf("Could not allocate memory for buffer.");
+  if (!buffer) abort();
 
   ifp = fopen(filename, "rb");
-  if (ifp == NULL)
-    eprintf("Could not open file.");
+  if (!ifp) return 0;
 
   while((c = getc(ifp)) != EOF){
     buffer[i++] = c;
@@ -1713,15 +1682,13 @@ static char *fileToBuffer(const char *filename){
       size += defaultSize;
       buffer = realloc(buffer, size);
       if (buffer == NULL) {
-       fclose(ifp);
-       eprintf("Could not resize buffer.");
+        abort();
       }
     }
   }
   fclose(ifp);
   buffer = realloc(buffer, i+2);
-  if (buffer == NULL) 
-    eprintf("Could not resize buffer.");
+  if (!buffer) abort();
   /* Make sure we have a line feed at the end */
   buffer[i] = '\n';
   buffer[i+1] = '\0';
@@ -1776,8 +1743,7 @@ void hexDump(machine_6502 *machine, Bit16 start, Bit16 numbytes, FILE *output){
 /*   Bit16 end = pc + machine->codeLen; */
 /*   Bit16 n; */
 /*   ofp = fopen(filename, "w"); */
-/*   if (ofp == NULL) */
-/*     eprintf("Could not open file."); */
+/*   if (!ofp) abort(); */
   
 /*   fprintf(ofp,"Bit8 prog[%d] =\n{",machine->codeLen); */
 /*   n = 1; */
@@ -2011,7 +1977,7 @@ static BOOL indexLabels(AsmLine *asmline, void *arg){
   }
   else {
     machine->regPC = machine->defaultCodePC;
-    oldDefault = machine->defaultCodePC;
+    /*oldDefault = machine->defaultCodePC;*/
   }
 
   if (asmline->labelDecl) {
@@ -2204,9 +2170,7 @@ void eval_file(machine_6502 *machine, const char *filename, Plotter plot, void *
 
   code = fileToBuffer(filename);
   
-  if (! compileCode(machine, code) ){
-    eprintf("Could not compile code.\n");
-  }
+  if (! compileCode(machine, code) ) abort();
 
   free(code);
 
@@ -2230,9 +2194,7 @@ void start_eval_file(machine_6502 *machine, const char *filename, Plotter plot,
 
   code = fileToBuffer(filename);
   
-  if (! compileCode(machine, code) ){
-    eprintf("Could not compile code.\n");
-  }
+  if (! compileCode(machine, code) ) abort();
 
   free(code);
 
index 61b0c237b76ceecd38452d84eaa3949857ff2473..7e15d0d4b01622348a533abc5f70156a50068e47 100644 (file)
@@ -1728,7 +1728,7 @@ static void updateGrid (struct state *st)
                 s[j] = (random() % 10) + '0';
               s[j++] = '?';
               s[j++] = ':';
-              s[j++] = 0;
+              s[j] = 0;
             }
 
           /* change one digit in this barcode */
index a6094a42f55187639a0a185b9f57af6894333e78..e9cef13eb4ab77d8f9ef77c4c5b33312b05af796 100644 (file)
@@ -718,13 +718,11 @@ static int pattern_next_unfilled_couple(Pattern p, Edge *e, Direction *d)
 
 static void pattern_make_curves(Pattern p)
 {
-  int i;
   Edge current_edge, first_edge, next_edge;
   Node current_node, first_node;
   Direction current_direction, first_direction;
   Spline s;
 
-  i=0;
   while (pattern_next_unfilled_couple(p, &first_edge, &first_direction)) {
     /* start a new loop */
     s=spline_new(random()%(p->ncolors-2)+2);
index 5b51e8f9969ca507e93001ae24d53b0d892ba633..6f210938a5c35592ec8e0bca358d0bf5122358ec 100644 (file)
@@ -4,8 +4,8 @@
             a screen saver and locker for the X window system
                             by Jamie Zawinski
 
-                              version 5.11
-                               13-Apr-2010
+                              version 5.12
+                               15-Sep-2010
 
                      http://www.jwz.org/xscreensaver/
 
index c4405b7d2721b18409519e0218ccf58c54c1950b..983321f5bb7753f6de27e73d0f7531353af118d4 100644 (file)
        <number id="count" type="slider" arg="-count %"
          _label="Number of disks" _low-label="0" _high-label="31"
            default="0" low="0" high="31"/>
-       
+
+       <number id="poles" type="slider" arg="-poles %"
+         _label="Number of poles" _low-label="0" _high-label="31"
+           default="0" low="3" high="31"/>
+                  
+       <number id="speed" type="slider" arg="-speed %"
+         _label="Speed (of smallest disks)" _low-label="1" _high-label="20"
+           default="1" low="1" high="20"/>
+                  
        <boolean id="fog" _label="Enable fog" arg-set="-fog"/>
 
        <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
index 85b6c9b5d7406ebb02c4288b4b20da8a06922b1f..e056fd2ae4e613840e63ddc953756ca0db4a6f4d 100644 (file)
@@ -6,15 +6,16 @@
 
   <number id="delay" type="slider" arg="-delay %"
           _label="Frame rate" _low-label="Low" _high-label="High"
-          low="0" high="100000" default="40000"
+          low="0" high="100000" default="20000"
           convert="invert"/>
 
   <number id="count" type="spinbutton" arg="-count %"
           _label="Count" low="-100" high="100" default="-30"/>
 
   <number id="cycles" type="slider" arg="-cycles %"
-           _label="Timeout" _low-label="Small" _high-label="Large"
-          low="0" high="60" default="5"/>
+           _label="Rotation" _low-label="Slow" _high-label="Fast"
+          low="3" high="200" default="20"
+          convert="invert"/>
 
   <number id="size" type="spinbutton" arg="-size %"
            _label="Size" low="-20" high="20" default="-6"/>
index d48ce7274e06383a5ca3b1f95d2c5b5d6ccb5b0f..ab7a19b9fc79d77e0a6ebe682e0496406634e253 100644 (file)
@@ -695,7 +695,7 @@ draw_demon (ModeInfo * mi)
                                                dp->newcell[i + mj] = dp->oldcell[k + ml];
                                        /* W */
                                        k = (!i) ? dp->ncols - 1 : i - 1;
-                                       l = j;
+                                       /*l = j;*/
                                        ml = mj;
                                        if (dp->oldcell[k + ml] ==
                                            (int) (dp->oldcell[i + mj] + 1) % dp->states)
@@ -865,7 +865,7 @@ draw_demon (ModeInfo * mi)
                                                                        dp->newcell[i + mj] = dp->oldcell[k + ml];
                                                                /* EE */
                                                                k = (i + 1 == dp->ncols) ? 0 : i + 1;
-                                                               l = j;
+                                                               /*l = j;*/
                                                                ml = mj;
                                                                if (dp->oldcell[k + ml] ==
                                                                    (int) (dp->oldcell[i + mj] + 1) % dp->states)
@@ -897,7 +897,7 @@ draw_demon (ModeInfo * mi)
                                                                        dp->newcell[i + mj] = dp->oldcell[k + ml];
                                                                /* WW */
                                                                k = (!i) ? dp->ncols - 1 : i - 1;
-                                                               l = j;
+                                                               /*l = j;*/
                                                                ml = mj;
                                                                if (dp->oldcell[k + ml] ==
                                                                    (int) (dp->oldcell[i + mj] + 1) % dp->states)
index 4eae8c945d288618c45446b92b63d402e1c293ed..004c0ea56a1a9d123efc4a1ebc0b7dc52e81230e 100644 (file)
@@ -225,14 +225,6 @@ random_divisor(struct state *st)
 }
 
 
-static void
-oom(struct state *st)
-{
-  fprintf(stderr, "Failed to allocate memory!\n");
-  exit(-1);
-}
-
-
 /* Construct a circle or die.
  */
 static Circle *
@@ -311,8 +303,7 @@ static Body *
 new_body(struct state *st)
 {
   Body *p = malloc(sizeof(Body));
-  if (NULL == p)
-    oom(st);
+  if (!p) abort();
   p->epicycles = new_circle_chain(st);
   p->current_color = 0;                /* ?? start them all on different colors? */
   p->next = NULL;
@@ -428,8 +419,7 @@ colour_init(struct state *st, XWindowAttributes *pxgwa)
   if (!mono_p)
     {
       st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
-      if (!st->colors)
-       oom(st);
+      if (!st->colors) abort();
          
       make_smooth_colormap (st->dpy, pxgwa->visual, st->cmap, st->colors, &st->ncolors,
                            True, /* allocate */
index 1674fbfc0be65dd743b306361ee0306c2ebc55ff..03b9645ecf48b9153bf544fb363dcd07ecaf04ef 100644 (file)
@@ -298,7 +298,7 @@ static void Initialize( struct state *st )
 {
        XGCValues gcValues;
        XWindowAttributes XWinAttribs;
-       int iBitsPerPixel, i;
+       int /*iBitsPerPixel,*/ i;
 
        /* Create the Image for drawing */
        XGetWindowAttributes( st->dpy, st->window, &XWinAttribs );
@@ -310,7 +310,7 @@ static void Initialize( struct state *st )
                for( i=0; i<pfvc; i++ )
                        if( pfv[ i ].depth == XWinAttribs.depth )
                        {
-                               iBitsPerPixel = pfv[ i ].bits_per_pixel;
+                               /*iBitsPerPixel = pfv[ i ].bits_per_pixel;*/
                                break;
                        }
                if( pfv )
@@ -346,7 +346,6 @@ eruption_init (Display *dpy, Window window)
        time_t nTime = time( NULL );
        unsigned short iFrame = 0;
 #endif  /*  VERBOSE */
-        int i;
 
   st->dpy = dpy;
   st->window = window;
@@ -397,7 +396,6 @@ eruption_init (Display *dpy, Window window)
 
        st->delay = get_integer_resource(st->dpy,  "delay", "Integer" );
        st->cycles = get_integer_resource(st->dpy,  "cycles", "Integer" );
-       i = st->cycles;
 
        cache(st);
        
index a44bdb3b60d2fa320b334e30b07fccc514add44a..babec31c6efb7d72deedde20bd545e387f21cae8 100644 (file)
@@ -202,11 +202,11 @@ draw_fadeplot (ModeInfo * mi)
        if ((fp->temps % (fp->angles / 2)) == 0) {
                fp->temps = fp->temps % fp->angles * 5;
                if ((fp->temps % (fp->angles)) == 0)
-                       fp->speed.y = (fp->speed.y++) % 30 + 1;
+                       fp->speed.y = (fp->speed.y + 1) % 30 + 1;
                if ((fp->temps % (fp->angles * 2)) == 0)
                        fp->speed.x = (fp->speed.x) % 20;
                if ((fp->temps % (fp->angles * 3)) == 0)
-                       fp->step.y = (fp->step.y++) % 2 + 1;
+                       fp->step.y = (fp->step.y + 1) % 2 + 1;
 
                MI_CLEARWINDOW(mi);
        }
index 3b3293062c75bfc0d773d371dbc8b5e2631a0c3f..01f16ababa6c235a7e66b03c2781d0992570d9f6 100644 (file)
@@ -173,7 +173,7 @@ flame_init (Display *dpy, Window window)
 static int
 recurse (struct state *st, double x, double y, int l, Display *dpy, Window win)
 {
-  int xp, yp, i;
+  int /*xp, yp,*/ i;
   double nx, ny;
 
   if (l == st->max_levels)
@@ -184,8 +184,8 @@ recurse (struct state *st, double x, double y, int l, Display *dpy, Window win)
 
       if (x > -1.0 && x < 1.0 && y > -1.0 && y < 1.0)
        {
-         xp = st->points[st->num_points].x = (int) ((st->width / 2) * (x + 1.0));
-         yp = st->points[st->num_points].y = (int) ((st->height / 2) * (y + 1.0));
+/*       xp = st->points[st->num_points].x = (int) ((st->width / 2) * (x + 1.0));
+         yp = st->points[st->num_points].y = (int) ((st->height / 2) * (y + 1.0));*/
          st->num_points++;
          if (st->num_points >= POINT_BUFFER_SIZE)
            {
index 64347332f7b55d2a1df40ddb57b1180b94e8c93c..a2c819916bc98ec32b5b780022bb1e9d71484373 100644 (file)
@@ -1111,7 +1111,7 @@ draw_flow (ModeInfo * mi)
                                   are ok, they help to outline the Poincare'
                                   slice. */
                                for(j = i; j < end; j++) Y(j,b) = Y(i,b);
-                               begin = i + 1;
+                               /*begin = i + 1;*/
                                break;
                        }
                        
index 73e65d49b1b52f1fd31629d14beae94bfb75e12c..f1db02368a303cae53b62921c12431156e49ce20 100644 (file)
@@ -1100,7 +1100,7 @@ populate_sentence (state *s, sentence *se)
               y + se->font->ascent > s->xgwa.height)
             {
               unread_word (s, w);
-              done = True;
+              /* done = True; */
               break;
             }
         }
@@ -1500,8 +1500,13 @@ launch_text_generator (state *s)
     }
   else
     {
-      perror (program);
+      char buf[255];
+      sprintf (buf, "%.100s: %.100s", progname, program);
+      perror (buf);
     }
+
+  free(oprogram);
+  free(program);
 }
 
 
index 2aa0174377756afeaea6754ada674ff93a8b4a44..2164fcfe8d3705f8d78903429008d830bc164373 100644 (file)
@@ -23,7 +23,6 @@ fps_init (Display *dpy, Window window)
   fps_state *st;
   const char *font;
   XFontStruct *f;
-  int first, last;
 
   if (! get_boolean_resource (dpy, "doFPS", "DoFPS"))
     return 0;
@@ -40,9 +39,6 @@ fps_init (Display *dpy, Window window)
   f = XLoadQueryFont (dpy, font);
   if (!f) f = XLoadQueryFont (dpy, "fixed");
 
-  first = f->min_char_or_byte2;
-  last = f->max_char_or_byte2;
-
   {
     XWindowAttributes xgwa;
     XGCValues gcv;
index 1941d142b7f7ab3946f8bc10c124078ed1d41475..91762eac7ff55682a79c6d289251d7d77a600a88 100644 (file)
@@ -314,10 +314,8 @@ FuzzyFlakesInit(Flake *flake)
 {
    int                 i, j;
    XWindowAttributes   xgwa;
-   Colormap            cmap;
 
    XGetWindowAttributes(flake->dpy, flake->window, &xgwa);
-   cmap = xgwa.colormap;
    flake->XGWA = xgwa;
    flake->DB.b = flake->DB.ba = flake->DB.bb = 0;
    flake->DB.dbuf = get_boolean_resource(flake->dpy, "doubleBuffer", "Boolean");
diff --git a/hacks/glx/._blinkbox.c b/hacks/glx/._blinkbox.c
new file mode 100644 (file)
index 0000000..ccf882e
Binary files /dev/null and b/hacks/glx/._blinkbox.c differ
diff --git a/hacks/glx/._blocktube.c b/hacks/glx/._blocktube.c
new file mode 100644 (file)
index 0000000..69872d5
Binary files /dev/null and b/hacks/glx/._blocktube.c differ
diff --git a/hacks/glx/._boing.c b/hacks/glx/._boing.c
new file mode 100644 (file)
index 0000000..ffb4c77
Binary files /dev/null and b/hacks/glx/._boing.c differ
diff --git a/hacks/glx/._bouncingcow.c b/hacks/glx/._bouncingcow.c
new file mode 100644 (file)
index 0000000..72e80c4
Binary files /dev/null and b/hacks/glx/._bouncingcow.c differ
diff --git a/hacks/glx/._buildlwo.c b/hacks/glx/._buildlwo.c
new file mode 100644 (file)
index 0000000..6737db8
Binary files /dev/null and b/hacks/glx/._buildlwo.c differ
diff --git a/hacks/glx/._carousel.c b/hacks/glx/._carousel.c
new file mode 100644 (file)
index 0000000..13f0abd
Binary files /dev/null and b/hacks/glx/._carousel.c differ
diff --git a/hacks/glx/._circuit.c b/hacks/glx/._circuit.c
new file mode 100644 (file)
index 0000000..abe103d
Binary files /dev/null and b/hacks/glx/._circuit.c differ
diff --git a/hacks/glx/._cubestorm.c b/hacks/glx/._cubestorm.c
new file mode 100644 (file)
index 0000000..930f5a2
Binary files /dev/null and b/hacks/glx/._cubestorm.c differ
diff --git a/hacks/glx/._flipflop.c b/hacks/glx/._flipflop.c
new file mode 100644 (file)
index 0000000..8bea989
Binary files /dev/null and b/hacks/glx/._flipflop.c differ
diff --git a/hacks/glx/._flyingtoasters.c b/hacks/glx/._flyingtoasters.c
new file mode 100644 (file)
index 0000000..3a88522
Binary files /dev/null and b/hacks/glx/._flyingtoasters.c differ
diff --git a/hacks/glx/._gears.c b/hacks/glx/._gears.c
new file mode 100644 (file)
index 0000000..ba80fda
Binary files /dev/null and b/hacks/glx/._gears.c differ
diff --git a/hacks/glx/._glknots.c b/hacks/glx/._glknots.c
new file mode 100644 (file)
index 0000000..d0f2bdf
Binary files /dev/null and b/hacks/glx/._glknots.c differ
diff --git a/hacks/glx/._gltext.c b/hacks/glx/._gltext.c
new file mode 100644 (file)
index 0000000..3d33c64
Binary files /dev/null and b/hacks/glx/._gltext.c differ
diff --git a/hacks/glx/._jigglypuff.c b/hacks/glx/._jigglypuff.c
new file mode 100644 (file)
index 0000000..89fd80f
Binary files /dev/null and b/hacks/glx/._jigglypuff.c differ
diff --git a/hacks/glx/._klein.c b/hacks/glx/._klein.c
new file mode 100644 (file)
index 0000000..2c9d8e9
Binary files /dev/null and b/hacks/glx/._klein.c differ
diff --git a/hacks/glx/._lavalite.c b/hacks/glx/._lavalite.c
new file mode 100644 (file)
index 0000000..d1491cd
Binary files /dev/null and b/hacks/glx/._lavalite.c differ
diff --git a/hacks/glx/._menger.c b/hacks/glx/._menger.c
new file mode 100644 (file)
index 0000000..6d07ffa
Binary files /dev/null and b/hacks/glx/._menger.c differ
diff --git a/hacks/glx/._moebiusgears.c b/hacks/glx/._moebiusgears.c
new file mode 100644 (file)
index 0000000..5d22bc0
Binary files /dev/null and b/hacks/glx/._moebiusgears.c differ
diff --git a/hacks/glx/._pinion.c b/hacks/glx/._pinion.c
new file mode 100644 (file)
index 0000000..ed37f1f
Binary files /dev/null and b/hacks/glx/._pinion.c differ
diff --git a/hacks/glx/._polyhedra-gl.c b/hacks/glx/._polyhedra-gl.c
new file mode 100644 (file)
index 0000000..c31bebc
Binary files /dev/null and b/hacks/glx/._polyhedra-gl.c differ
diff --git a/hacks/glx/._skytentacles.c b/hacks/glx/._skytentacles.c
new file mode 100644 (file)
index 0000000..272dcd8
Binary files /dev/null and b/hacks/glx/._skytentacles.c differ
diff --git a/hacks/glx/._sonar-icmp.c b/hacks/glx/._sonar-icmp.c
new file mode 100644 (file)
index 0000000..c4a6068
Binary files /dev/null and b/hacks/glx/._sonar-icmp.c differ
diff --git a/hacks/glx/._sonar.c b/hacks/glx/._sonar.c
new file mode 100644 (file)
index 0000000..b4d1b03
Binary files /dev/null and b/hacks/glx/._sonar.c differ
diff --git a/hacks/glx/._spheremonics.c b/hacks/glx/._spheremonics.c
new file mode 100644 (file)
index 0000000..9c1fe79
Binary files /dev/null and b/hacks/glx/._spheremonics.c differ
diff --git a/hacks/glx/._stonerview.c b/hacks/glx/._stonerview.c
new file mode 100644 (file)
index 0000000..c21a671
Binary files /dev/null and b/hacks/glx/._stonerview.c differ
diff --git a/hacks/glx/._tangram.c b/hacks/glx/._tangram.c
new file mode 100644 (file)
index 0000000..e5b3d13
Binary files /dev/null and b/hacks/glx/._tangram.c differ
diff --git a/hacks/glx/._timetunnel.c b/hacks/glx/._timetunnel.c
new file mode 100644 (file)
index 0000000..e8808f5
Binary files /dev/null and b/hacks/glx/._timetunnel.c differ
diff --git a/hacks/glx/._tunnel_draw.c b/hacks/glx/._tunnel_draw.c
new file mode 100644 (file)
index 0000000..f546b96
Binary files /dev/null and b/hacks/glx/._tunnel_draw.c differ
diff --git a/hacks/glx/._voronoi.c b/hacks/glx/._voronoi.c
new file mode 100644 (file)
index 0000000..448e20e
Binary files /dev/null and b/hacks/glx/._voronoi.c differ
index 80153aa0d5eee8597e34169492a8b8b00315dc19..9c0e4bbe34548c3ced8e44bf25ebae34d92a1471 100644 (file)
@@ -742,7 +742,7 @@ dnalogo:    dnalogo.o      tube.o normals.o $(HACK_TRACK_OBJS)
 topblock:      topblock.o      sphere.o $(HACK_TRACK_OBJS)
        $(CC_HACK) -o $@ $@.o   sphere.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
 
-SCHOOL_OBJS=glschool.o glschool_alg.o glschool_gl.o sphere.o tube.o $(HACK_OBJS)
+SCHOOL_OBJS=glschool.o glschool_alg.o glschool_gl.o $(HACK_OBJS)
 glschool: $(SCHOOL_OBJS)
        $(CC_HACK) -o $@ $(SCHOOL_OBJS) $(HACK_LIBS)
 
index b2c6e4bc960f7910a8afd4f4a8f26bdc2a729b61..8721a81abe6506d0056bab8a7a2a1df0b4487966 100644 (file)
@@ -151,7 +151,7 @@ swap_mov(GLfloat *a, GLfloat *b)
   swap(a,b);
   j = get_rand();
   if (*a < 0)
-    *a = (j *= -1);
+    *a = j * -1;
   else
     *a = j;
 }
index f62f3413c8b1c7e17d0cb14f05cf57e5986eed03..f3e71c81b7b2dc952aeeaf93c5750f640727b90d 100644 (file)
@@ -216,7 +216,6 @@ ENTRYPOINT void init_blocktube (ModeInfo *mi)
         fprintf(stderr, "%s: out of memory\n", progname);
         exit(1);
       }
-      lp = &lps[MI_SCREEN(mi)];
     }
 
     lp = &lps[MI_SCREEN(mi)];
index 55a3fb5a0d41ea71185b79560c21bd0354367454..1c95d1ead8c269a244ca622049cabbe28ec0134a 100644 (file)
@@ -527,8 +527,6 @@ init_boing (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index 35b0142211fa563ee191105ce4d67670b13f12fa..ec2a4b77cf666289f8f65e7238d6da1163e43ac1 100644 (file)
@@ -284,8 +284,6 @@ init_cow (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index ea88f999e55ef50a4357ba17fd9662fe6565de55..c20c9e2d81a21ffff228f8666b5db46f57c1a7ee 100644 (file)
@@ -79,7 +79,7 @@ BuildLWO(int wireframe, const struct lwo *object)
                                grab = pnts + ((int) (*pols) * 3);
                                three[0] = *(grab++);
                                three[1] = *(grab++);
-                               three[2] = *(grab++);
+                               three[2] = *(grab);
                                glVertex3fv(three);
                        }
                        --num_pnts;
index 0c29253547ae9a6ece24e2cad223f69f52dbaebb..87de390515df7da312da9ed6726909e2543bc005 100644 (file)
@@ -496,7 +496,6 @@ loading_msg (ModeInfo *mi, int n)
   carousel_state *ss = &sss[MI_SCREEN(mi)];
   int wire = MI_IS_WIREFRAME(mi);
   char text[100];
-  GLfloat scale;
 
   if (wire) return;
 
@@ -509,8 +508,6 @@ loading_msg (ModeInfo *mi, int n)
   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);
index 1c2e1a7cc96b9c53d38f10273fe684265e9310b9..e4abb261e7e6f57d7e36c5b4c8aadd9a8ff4cba4 100644 (file)
@@ -423,7 +423,6 @@ static int createCylinder (Circuit *ci,
   int a; /* current angle around cylinder */
   int angle, norm;
   float z1, y1, z2, y2,ex;
-  int step;
   int nsegs;
 
   glPushMatrix();
@@ -432,7 +431,6 @@ static int createCylinder (Circuit *ci,
   if (nsegs % 2)
      nsegs += 1;
   angle = (half) ? (180 - 90/nsegs) : 374;
-  step = angle/nsegs;
   z1 = radius; y1 = 0;
   glBegin(GL_QUADS);
   for (a = 0 ; a <= angle ; a+= angle/nsegs) {
@@ -1880,7 +1878,6 @@ static int bandedCylinder(Circuit *ci,
 {
   int polys = 0;
   int n; /* band number */
-  int p = 0; /* prev number + 1; */
   GLfloat col[] = {0,0,0,0};
 
    col[0] = r; col[1] = g; col[2] = bl;
@@ -1893,7 +1890,6 @@ static int bandedCylinder(Circuit *ci,
      glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col);
      polys += createCylinder(ci, b[n]->len*l, radius*1.05, 0, 0); /* band */
      glPopMatrix();
-     p = n+1;
    }
    return polys;
 }
index 1eb3073aa70847d94ccffd161d99e293c96cbe37..f3a22e340f65020edc81366c52012d8797254777 100644 (file)
@@ -250,8 +250,6 @@ init_cube (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index b115d1895af670fd03a56e86669bcda50f333d1f..2fe0722398c15f25f8ddf664cefa2dfcfa77199f 100644 (file)
@@ -230,8 +230,6 @@ init_ball (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index a0d35948cea34feec3eced085e7fd5403588f15f..0051ca5f635b19df440756c1175f30b5bed689e4 100644 (file)
@@ -1,4 +1,4 @@
-/* DNA Logo, Copyright (c) 2001, 2002, 2003 Jamie Zawinski <jwz@jwz.org>
+/* DNA Logo, Copyright (c) 2001-2010 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
@@ -113,6 +113,206 @@ ENTRYPOINT ModeSpecOpt logo_opts = {countof(opts), opts, 0, NULL, NULL};
 #define PROBABILITY_SCALE 600
 
 
+#ifdef DXF_OUTPUT_HACK   /* When this is defined, instead of rendering
+                            to the screen, we write a DXF CAD file to stdout.
+                            This is a kludge of shocking magnitude...
+                            Maybe there's some other way to intercept all
+                            glVertex3f calls than with a #define?
+                          */
+
+# define glBegin    dxf_glBegin
+# define glVertex3f dxf_glVertex3f
+# define glEnd      dxf_glEnd
+
+static int dxf_type, dxf_point, dxf_point_total, dxf_layer, dxf_color;
+static GLfloat dxf_quads[4*4];
+
+static void
+dxf_glBegin (int type)
+{
+  dxf_type = type; 
+  dxf_point = 0;
+  dxf_point_total = 0;
+}
+
+static void
+dxf_glVertex3f (GLfloat ox, GLfloat oy, GLfloat oz)
+{
+  int i = 0;
+  GLfloat m[4*4];
+  GLfloat x, y, z;
+
+  /* Transform the point into modelview space. */
+  glGetFloatv (GL_MODELVIEW_MATRIX, m);
+  x = ox * m[0] + oy * m[4] + oz * m[8]  + m[12];
+  y = ox * m[1] + oy * m[5] + oz * m[9]  + m[13];
+  z = ox * m[2] + oy * m[6] + oz * m[10] + m[14];
+
+  dxf_quads[dxf_point*3+0] = x;
+  dxf_quads[dxf_point*3+1] = y;
+  dxf_quads[dxf_point*3+2] = z;
+  dxf_point++;
+  dxf_point_total++;
+
+  switch (dxf_type) {
+  case GL_QUADS:
+    if (dxf_point < 4) return;
+
+    fprintf (stdout, "0\n3DFACE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color);
+    fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]);
+
+    fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]);
+
+    fprintf (stdout, "12\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "22\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "32\n%.6f\n", dxf_quads[i++]);
+
+    fprintf (stdout, "13\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "23\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "33\n%.6f\n", dxf_quads[i++]);
+    dxf_point = 0;
+    break;
+
+  case GL_QUAD_STRIP:
+    if (dxf_point < 4) return;
+
+    fprintf (stdout, "0\n3DFACE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color);
+    fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]);
+
+    fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]);
+
+    fprintf (stdout, "12\n%.6f\n", dxf_quads[i+3]);  /* funky quad strip */
+    fprintf (stdout, "22\n%.6f\n", dxf_quads[i+4]);  /* vert order: 1243. */
+    fprintf (stdout, "32\n%.6f\n", dxf_quads[i+5]);
+
+    fprintf (stdout, "13\n%.6f\n", dxf_quads[i]);
+    fprintf (stdout, "23\n%.6f\n", dxf_quads[i+1]);
+    fprintf (stdout, "33\n%.6f\n", dxf_quads[i+2]);
+    i += 6;
+
+    dxf_quads[0] = dxf_quads[6];
+    dxf_quads[1] = dxf_quads[7];
+    dxf_quads[2] = dxf_quads[8];
+    dxf_quads[3] = dxf_quads[9];
+    dxf_quads[4] = dxf_quads[10];
+    dxf_quads[5] = dxf_quads[11];
+    dxf_point = 2;
+    break;
+
+  case GL_TRIANGLES:
+  case GL_TRIANGLE_FAN:
+    if (dxf_point < 3) return;
+
+    fprintf (stdout, "0\n3DFACE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color);
+    fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]);
+
+    fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]);
+
+    fprintf (stdout, "12\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "22\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "32\n%.6f\n", dxf_quads[i++]);
+
+    i -= 3;
+    fprintf (stdout, "13\n%.6f\n", dxf_quads[i++]);  /* dup pt 4 as pt 3. */
+    fprintf (stdout, "23\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "33\n%.6f\n", dxf_quads[i++]);
+
+    dxf_point = 0;
+    if (dxf_type == GL_TRIANGLE_FAN)
+      {
+        dxf_quads[3] = dxf_quads[6];
+        dxf_quads[4] = dxf_quads[7];
+        dxf_quads[5] = dxf_quads[8];
+        dxf_point = 2;
+      }
+    break;
+
+  case GL_LINES:
+  case GL_LINE_STRIP:
+  case GL_LINE_LOOP:
+
+    if (dxf_point_total == 1)
+      {
+        dxf_quads[6] = ox;
+        dxf_quads[7] = oy;
+        dxf_quads[8] = oz;
+      }
+
+    if (dxf_point < 2) return;
+
+    fprintf (stdout, "0\nLINE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color);
+
+    fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]);
+
+    fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]);
+    fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]);
+
+    dxf_point = 0;
+    if (dxf_type != GL_LINES)
+      {
+        dxf_quads[0] = dxf_quads[3];
+        dxf_quads[1] = dxf_quads[4];
+        dxf_quads[2] = dxf_quads[5];
+        dxf_point = 1;
+      }
+    break;
+
+  default:
+    abort();
+    break;
+  }
+}
+
+static void
+dxf_glEnd(void)
+{
+  if (dxf_type == GL_LINE_LOOP)  /* close loop */
+    glVertex3f (dxf_quads[6], dxf_quads[7], dxf_quads[8]);
+  dxf_type = -1;
+  dxf_point = 0;
+  dxf_point_total = 0;
+}
+
+
+static void
+dxf_start (void)
+{
+  fprintf (stdout, "0\nSECTION\n2\nHEADER\n0\nENDSEC\n");
+  fprintf (stdout, "0\nSECTION\n2\nENTITIES\n");
+}
+
+static void
+dxf_end (void)
+{
+  fprintf (stdout, "0\nENDSEC\n0\nEOF\n");
+  exit (0);
+}
+
+# define unit_tube dxf_unit_tube
+# define unit_cone dxf_unit_cone
+# define tube_1    dxf_tube_1
+# define tube      dxf_tube
+# define cone      dxf_cone
+# include "tube.c"
+
+#endif /* DXF_OUTPUT_HACK */
+
+
 \f
 /* Calculate the angle (in degrees) between two vectors.
  */
@@ -351,6 +551,7 @@ make_ladder (logo_configuration *dc, int facetted, int wire)
   if (!dc->clockwise)
     z = -z, z_inc = -z_inc;
 
+  glFrontFace(GL_CCW);
   for (i = 0; i < nbars; i++)
     {
       int facets = dc->bar_facets / (facetted ? 14 : 1);
@@ -402,6 +603,10 @@ make_gasket (logo_configuration *dc, int wire)
 
   glPushMatrix();
 
+# ifdef DXF_OUTPUT_HACK
+  if (! wire) res *= 8;
+# endif
+
 # define POINT(r,th) \
     ctrl_r [nctrls] = r, \
     ctrl_th[nctrls] = (th * d2r), \
@@ -449,13 +654,13 @@ make_gasket (logo_configuration *dc, int wire)
   POINT (0.880, 319.74);
   POINT (0.990, 320.08);
 
-  POINT (r4,  338.5);
+  POINT (r4,  338.0);
   if (! wire)
     {
-      POINT (r1a, 338.5);      /* cut-out disc */
-      POINT (r1a, 343.5);
+      POINT (r1a, 338.0);      /* cut-out disc */
+      POINT (r1a, 344.0);
     }
-  POINT (r4,  343.5);
+  POINT (r4,  344.0);
   POINT (r4,  356.0);
 
   POINT (0.872, 356.05);   /* top indentation, left half */
@@ -670,7 +875,7 @@ make_gasket (logo_configuration *dc, int wire)
     GLfloat th;
     npoints = 0;
 
-    th = 338.5 * d2r;
+    th = 338.0 * d2r;
     pointsx0[npoints] = r1c * cos(th) * dc->gasket_size;
     pointsy0[npoints] = r1c * sin(th) * dc->gasket_size;
     npoints++;
@@ -678,13 +883,12 @@ make_gasket (logo_configuration *dc, int wire)
     pointsy0[npoints] = r4 * sin(th) * dc->gasket_size;
     npoints++;
 
-    th = 343.5 * d2r;
+    th = 344.0 * d2r;
     pointsx0[npoints] = r1c * cos(th) * dc->gasket_size;
     pointsy0[npoints] = r1c * sin(th) * dc->gasket_size;
     npoints++;
     pointsx0[npoints] = r4 * cos(th) * dc->gasket_size;
     pointsy0[npoints] = r4 * sin(th) * dc->gasket_size;
-    npoints++;
 
     if (! wire)
       {
@@ -728,9 +932,9 @@ make_gasket (logo_configuration *dc, int wire)
     /* Now make a donut.
      */
     {
-      int nsteps = 12;
+      int nsteps = (wire ? 12 : 64);
       GLfloat r0 = 0.04;
-      GLfloat r1 = 0.060;
+      GLfloat r1 = 0.070;
       GLfloat th, cth, sth;
 
       glPushMatrix ();
@@ -863,7 +1067,9 @@ make_gasket (logo_configuration *dc, int wire)
       }
 
     npoints = 0;
-    for (th = 0; th < M_PI; th += (M_PI / 6))
+    for (th = (wire ? 0 : -0.1);
+         th <= M_PI + 0.1;
+         th += (M_PI / (wire ? 5 : 32)))
       {
         pointsx0[npoints] = w/2 * cos(th);
         pointsy0[npoints] = w/2 * sin(th);
@@ -1211,6 +1417,31 @@ init_logo (ModeInfo *mi)
                                    * dc->speed);
     }
 
+# ifdef DXF_OUTPUT_HACK
+  {
+    dc->frame_depth = dc->gasket_depth;
+    dxf_layer = 1;
+    dxf_color = 3;
+    dxf_start();
+    glPushMatrix();
+    glRotatef(90, 1, 0, 0);
+    glRotatef(90, 0, 0, 1);
+    glPushMatrix();
+    glRotatef(helix_rot, 0, 0, 1);
+    make_ladder (dc, 0, 0);
+    make_helix  (dc, 0, 0);
+    glRotatef (180, 0, 0, 1);
+    make_helix  (dc, 0, 0);
+    glPopMatrix();
+    dxf_layer++;
+    make_gasket (dc, 0);
+    dxf_layer++;
+    make_frame (dc, 0);
+    glPopMatrix();
+    dxf_end();
+  }
+# endif
+
   glPushMatrix();
   dc->helix_list = glGenLists (1);
   glNewList (dc->helix_list, GL_COMPILE);
index 1b01e77bb7dc0517046dfac7fb2794a54a91b60b..2ef4e338003f007c02511bb6e9fe9b80e401ed65 100644 (file)
@@ -1947,9 +1947,9 @@ DrawDolphin(fishRec * fish, int wire)
 
        pitch = fish->v * sin((fish->htail + 180) * RRAD);
 
-       if (fish->v > 2) {
+/*     if (fish->v > 2) {
                chomp = -(fish->v - 2) * 200;
-       }
+       }*/
        chomp = 100;
 
        P012[1] = iP012[1] + seg5;
index f8be3c493e5455f3bfb99e9096f3781ccfeb7112..c058bc50f415549b9b2d5a20b6c1337207057055 100644 (file)
@@ -303,10 +303,8 @@ static int cylinder (Engine *e, GLfloat x, GLfloat y, GLfloat z,
   int b = 0; /* previous */
   int angle, norm, step, sangle;
   float z1, y1, z2, y2, ex=0;
-  float y3, z3;
-  float Z1, Y1, Z2, Y2, xl, Y3, Z3;
+  float Z1, Y1, Z2, Y2, xl;
   GLfloat y2c[TWOREV], z2c[TWOREV];
-  GLfloat ony, onz; /* previous normals */
   int nsegs, tube = 0;
 
   glPushMatrix();
@@ -317,7 +315,6 @@ static int cylinder (Engine *e, GLfloat x, GLfloat y, GLfloat z,
      nsegs += 1;
   sangle = sang;
   angle = eang;
-  ony = onz = 0;
   z1 = e->cos_table[sangle]*outer+z; y1 = e->sin_table[sangle] * outer+y;
   Z1 = e->cos_table[sangle] * inner+z; Y1 = e->sin_table[sangle]*inner+y ; 
   Z2 = z;
@@ -330,15 +327,11 @@ static int cylinder (Engine *e, GLfloat x, GLfloat y, GLfloat z,
   for (a = sangle ; a <= angle || b <= angle ; a+= step) {
     y2=outer*(float)e->sin_table[a]+y;
     z2=outer*(float)e->cos_table[a]+z;
-    y3=outer*(float)e->sin_table[a+step]+y;
-    z3=outer*(float)e->cos_table[a+step]+z;
     if (endcaps)
        y2c[a] = y2; z2c[a] = z2; /* cache for later */
     if (tube) {
       Y2=inner*(float)e->sin_table[a]+y;
       Z2=inner*(float)e->cos_table[a]+z;
-      Y3=inner*(float)e->sin_table[a+step]+y;
-      Z3=inner*(float)e->cos_table[a+step]+z;
     }
     glNormal3f(0, y1, z1);
     glVertex3f(x,y1,z1);
index ace3b88b1a239a76863b5722a0df5deaeb0dda5e..ec20898f12af041705be1c5f0b86bc5b030ef484 100644 (file)
@@ -729,12 +729,10 @@ randsheet_new_move( randsheet* rs )
 static void
 randsheet_move( randsheet *rs, float rot )
 {
-    int i, j, index;
+    int index;
     float tmp;
     for( index = 0 ; index < numsquares; index++ )
         {
-            i = rs->xpos[ index ];
-            j = rs->ypos[ index ];
             switch( rs->direction[ index ] )
                 {
                 case 0:
index 52e59586db08d610b44b1ea06ea4b022111250f4..9e1a482d9157e1f2c8f60e6152be21933a86db41 100644 (file)
@@ -405,8 +405,6 @@ init_toasters (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index c8ddc4824088c3cd4f50b8dfcff489a6b45f1cdd..c7b0051d752664b6e0b1722c0a1392800acceb07 100644 (file)
@@ -158,15 +158,11 @@ text_to_ximage (Screen *screen, Visual *visual,
     while ((line = strtok(token, "\r\n")))
       {
         XCharStruct o2;
-        int ascent, descent, direction, xoff2;
+        int ascent, descent, direction;
         token = 0;
 
         XTextExtents(f, line, strlen(line),
                      &direction, &ascent, &descent, &o2);
-        xoff2 = (xoff +
-                 ((overall.lbearing + overall.rbearing) -
-                  (o2.lbearing + o2.rbearing)) / 2);
-
         XDrawString(dpy, bitmap, gc,
                     overall.lbearing + margin + xoff,
                     ((f->ascent * (lines + 1)) +
index 054bc1c0a7b972d224b02ea8dc4dda64de33e1ed..42a9e70b02fe5ae2a4a6ca04e34ba138cd8f7741 100644 (file)
@@ -739,8 +739,6 @@ init_gears (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index 08bd6911129a1f04d4d077868fc5b4b92ab489d3..f2edb3d9b858d38531876f3b7878fbe8dea606e8 100644 (file)
@@ -278,7 +278,7 @@ overlay_blur_texture (ModeInfo *mi)
   GLfloat inc = 0.02 * (25.0 / times);
 
   GLfloat spost = 0;               /* starting texture coordinate offset */
-  GLfloat alpha_inc = 0.9 / times;  /* transparency fade factor */
+  GLfloat alpha_inc;               /* transparency fade factor */
   GLfloat alpha = 0.2;             /* initial transparency */
 
   glDisable (GL_TEXTURE_GEN_S);
index 9f1df0ed2fae61a5940f1472fe88160fbde594b9..c86abadafb1f9dd903dc305e58b3b9fda3813e4f 100644 (file)
@@ -1,6 +1,7 @@
 /* -*- Mode: C; tab-width: 4 -*- */
 /* glhanoi, Copyright (c) 2005, 2009 Dave Atkinson <da@davea.org.uk>
  * except noise function code Copyright (c) 2002 Ken Perlin
+ * Modified by Lars Huttar (c) 2010, to generalize to 4 or more poles
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
 #define DEF_LIGHT     "True"
 #define DEF_FOG       "False"
 #define DEF_TEXTURE   "True"
+#define DEF_POLES     "0"   /* choose random value */
+#define DEF_SPEED        "1"
 
 #define DEFAULTS "*delay:     15000\n" \
                                 "*count:     0\n" \
                                 "*showFPS:   False\n" \
                                 "*wireframe: False\n"
-
+                                
 # define refresh_glhanoi 0
 
+/* polygon resolution of poles and disks */
 #define NSLICE 32
 #define NLOOPS 1
+
+/* How long to wait at start and finish. */
 #define START_DURATION 1.0
 #define FINISH_DURATION 1.0
 #define BASE_LENGTH 30.0
@@ -39,6 +45,7 @@
 #define MARBLE_SCALE 1.01
 
 #undef BELLRAND
+/* Return a double precision number in [0...n], with bell curve distribution. */
 #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3)
 
 enum {
@@ -92,6 +99,7 @@ typedef struct {
        GLfloat t1, t2;
        GLfloat ucostheta, usintheta;
        GLdouble rotAngle;
+       GLfloat speed;
     int polys;
 } Disk;
 
@@ -99,7 +107,15 @@ typedef struct {
        Disk **data;
        int count;
        int size;
-} Stack;
+} Pole;
+
+/* A SubProblem is a recursive subdivision of the problem, and means
+  "Move nDisks disks from src pole to dst pole, using the poles indicated in 'available'." */
+typedef struct {
+       int nDisks;
+       int src, dst;
+       unsigned long available; /* a bitmask of poles that have no smaller disks on them */
+} SubProblem;
 
 typedef struct {
        GLXContext *glx_context;
@@ -111,18 +127,23 @@ typedef struct {
        double lastTime;
        double duration;
        int numberOfDisks;
+       int numberOfPoles;
        int numberOfMoves;
        int maxDiskIdx;
        int magicNumber;
        Disk *currentDisk;
        int move;
+       /* src, tmp, dst: index of pole that is source / storage / destination for
+               current move */
        int src;
        int tmp;
        int dst;
        int oldsrc;
        int oldtmp;
        int olddst;
-       Stack pole[3];
+       SubProblem *solveStack;
+       int solveStackSize, solveStackIdx;
+       Pole *pole;
        float boardSize;
        float baseLength;
        float baseWidth;
@@ -147,13 +168,14 @@ typedef struct {
        int drag_y;
        int noise_initted;
        int p[512];
-
 } glhcfg;
 
 static glhcfg *glhanoi_cfg = NULL;
 static Bool fog;
 static Bool light;
 static Bool texture;
+static int poles;
+static double speed; /* coefficient for how fast the disks move */
 
 static XrmOptionDescRec opts[] = {
        {"-light", ".glhanoi.light", XrmoptionNoArg, "true"},
@@ -161,19 +183,25 @@ static XrmOptionDescRec opts[] = {
        {"-fog", ".glhanoi.fog", XrmoptionNoArg, "true"},
        {"+fog", ".glhanoi.fog", XrmoptionNoArg, "false"},
        {"-texture", ".glhanoi.texture", XrmoptionNoArg, "true"},
-       {"+texture", ".glhanoi.texture", XrmoptionNoArg, "false"}
+       {"+texture", ".glhanoi.texture", XrmoptionNoArg, "false"},
+       {"-poles", ".glhanoi.poles", XrmoptionSepArg, 0 },
+       {"-speed", ".glhanoi.speed", XrmoptionSepArg, 0 }
 };
 
 static argtype vars[] = {
        {&light, "light", "Light", DEF_LIGHT, t_Bool},
        {&fog, "fog", "Fog", DEF_FOG, t_Bool},
-       {&texture, "texture", "Texture", DEF_TEXTURE, t_Bool}
+       {&texture, "texture", "Texture", DEF_TEXTURE, t_Bool},
+       {&poles, "poles", "Poles", DEF_POLES, t_Int},
+       {&speed, "speed", "Speed", DEF_SPEED, t_Float}
 };
 
 static OptionStruct desc[] = {
        {"+/-light", "whether to light the scene"},
        {"+/-fog", "whether to apply fog to the scene"},
-       {"+/-texture", "whether to apply texture to the scene"}
+       {"+/-texture", "whether to apply texture to the scene"},
+       {"-poles r", "number of poles to move disks between"},
+       {"-speed s", "speed multiplier"}
 };
 
 ENTRYPOINT ModeSpecOpt glhanoi_opts = { countof(opts), opts, countof(vars), vars, desc };
@@ -214,14 +242,24 @@ static const GLfloat spc1[4] = { 1.0, 1.0, 1.0, 1.0 };
 
 static float g = 3.0 * 9.80665;                /* hmm, looks like we need more gravity, Scotty... */
 
+static void checkAllocAndExit(Bool item, char *descr) {
+       if (!item) {
+               fprintf(stderr, "%s: unable to allocate memory for %s\n",
+                               progname, descr);
+               exit(EXIT_FAILURE);
+       }
+}
+
 #define DOPUSH(X, Y)   (((X)->count) >= ((X)->size)) ? NULL : ((X)->data[(X)->count++] = (Y))
 #define DOPOP(X)       (X)->count <= 0 ? NULL : ((X)->data[--((X)->count)])
 
+/* push disk d onto pole idx */
 static Disk *push(glhcfg *glhanoi, int idx, Disk * d)
 {
        return DOPUSH(&glhanoi->pole[idx], d);
 }
 
+/* pop the top disk from pole idx */
 static Disk *pop(glhcfg *glhanoi, int idx)
 {
        return DOPOP(&glhanoi->pole[idx]);
@@ -236,6 +274,7 @@ static inline void swap(int *x, int *y)
 
 /*
  * magic - it's magic...
+ *  Return 1 if the number of trailing zeroes on i is even, unless i is 1 or 0.
  */
 static int magic(int i)
 {
@@ -286,6 +325,7 @@ static void moveSetup(glhcfg *glhanoi, Disk * disk)
                if(random() % 4 == 0) {
                        disk->rotAngle = -disk->rotAngle;
                }
+
        } else {
                disk->rotAngle = -180.0;
        }
@@ -296,8 +336,8 @@ static void moveSetup(glhcfg *glhanoi, Disk * disk)
                FINISHED ? disk->base0 : glhanoi->diskPos[glhanoi->pole[dst].
                                                                                                  count];
 
-       disk->xmin = glhanoi->poleOffset * (src - 1);
-       disk->xmax = glhanoi->poleOffset * (dst - 1);
+       disk->xmin = glhanoi->poleOffset * (src - (glhanoi->numberOfPoles - 1.0f) * 0.5);
+       disk->xmax = glhanoi->poleOffset * (dst - (glhanoi->numberOfPoles - 1.0f) * 0.5);
        disk->ymin = glhanoi->poleHeight;
 
        absx = fabs(disk->xmax - disk->xmin);
@@ -324,23 +364,160 @@ static void moveSetup(glhcfg *glhanoi, Disk * disk)
        disk->u2 = disk->usintheta - g * disk->t2;
 }
 
+/* For debugging: show a value as a string of ones and zeroes
+static const char *byteToBinary(int x) {
+    static char b[9];
+       int i, z;
+
+    for (z = 128, i = 0; z > 0; z >>= 1, i++) {
+               b[i] = ((x & z) == z) ? '1' : '0';
+    }
+       b[i] = '\0';
+
+    return b;
+}
+*/
+
+static void pushMove(glhcfg *glhanoi, int n, int src, int dst, int avail) {
+       SubProblem *sp = &(glhanoi->solveStack[glhanoi->solveStackIdx++]);
+       if (glhanoi->solveStackIdx > glhanoi->solveStackSize) {
+               fprintf(stderr, "solveStack overflow: pushed index %d: %d from %d to %d, using %d\n",
+               glhanoi->solveStackIdx, n, src, dst, avail);
+               exit(EXIT_FAILURE);
+       }
+
+       sp->nDisks = n;
+       sp->src = src;
+       sp->dst = dst;
+       sp->available = avail & ~((unsigned long)(1 << src))
+               & ~((unsigned long)(1 << dst));
+       /*
+       fprintf(stderr, "Debug: >  pushed solveStack %d: %d from %d to %d, using %s\n",
+               glhanoi->solveStackIdx - 1, n, src, dst, byteToBinary(sp->available));
+       */
+}
+
+
+static Bool solveStackEmpty(glhcfg *glhanoi) {
+       return (glhanoi->solveStackIdx < 1);
+}
+
+static SubProblem *popMove(glhcfg *glhanoi) {
+       SubProblem *sp;
+       if (solveStackEmpty(glhanoi)) return (SubProblem *)NULL;
+       sp = &(glhanoi->solveStack[--glhanoi->solveStackIdx]);
+       /* fprintf(stderr, "Debug:  < popped solveStack %d: %d from %d to %d, using %s\n",
+                       glhanoi->solveStackIdx, sp->nDisks, sp->src, sp->dst, byteToBinary(sp->available)); */
+       return sp;
+}
+
+/* Return number of bits set in b */
+static int numBits(unsigned long b) {
+   int count = 0;
+   while (b) {
+      count += b & 0x1u;
+      b >>= 1;
+   }
+   return count;
+}
+
+/* Return index (power of 2) of least significant 1 bit. */
+static int bitScan(unsigned long b) {
+       int count;
+       for (count = 0; b; count++, b >>= 1) {
+               if (b & 0x1u) return count;
+       }
+       return -1;
+}
+
+/* A bit pattern representing all poles */
+#define ALL_POLES ((1 << glhanoi->numberOfPoles) - 1)
+
+#define REMOVE_BIT(a, b)  ((a) & ~(1 << (b)))
+#define    ADD_BIT(a, b)  ((a) |  (1 << (b)))
+
 static void makeMove(glhcfg *glhanoi)
 {
-       int fudge = glhanoi->move + 2;
-       int magicNumber = magic(fudge);
+       if (glhanoi->numberOfPoles == 3) {
+               int fudge = glhanoi->move + 2;
+               int magicNumber = magic(fudge);
 
-       glhanoi->currentDisk = pop(glhanoi, glhanoi->src);
-       moveSetup(glhanoi, glhanoi->currentDisk);
-       push(glhanoi, glhanoi->dst, glhanoi->currentDisk);
-       fudge = fudge % 2;
 
-       if(fudge == 1 || magicNumber) {
-               swap(&glhanoi->src, &glhanoi->tmp);
-       }
-       if(fudge == 0 || glhanoi->magicNumber) {
-               swap(&glhanoi->dst, &glhanoi->tmp);
+               glhanoi->currentDisk = pop(glhanoi, glhanoi->src);
+               moveSetup(glhanoi, glhanoi->currentDisk);
+               push(glhanoi, glhanoi->dst, glhanoi->currentDisk);
+               
+               fudge = fudge % 2;
+
+               if(fudge == 1 || magicNumber) {
+                       swap(&glhanoi->src, &glhanoi->tmp);
+               }
+               if(fudge == 0 || glhanoi->magicNumber) {
+                       swap(&glhanoi->dst, &glhanoi->tmp);
+               }
+               glhanoi->magicNumber = magicNumber;
+       } else {
+               SubProblem sp;
+               int tmp = 0;
+               
+               if (glhanoi->move == 0) {
+                       /* Initialize the solution stack. Original problem:
+                               move all disks from pole 0 to furthest pole,
+                               using all other poles. */
+                       pushMove(glhanoi, glhanoi->numberOfDisks, 0,
+                               glhanoi->numberOfPoles - 1,
+                               REMOVE_BIT(REMOVE_BIT(ALL_POLES, 0), glhanoi->numberOfPoles - 1));
+               }
+               
+               while (!solveStackEmpty(glhanoi)) {
+                       int k, numAvail;
+                       sp = *popMove(glhanoi);
+
+                       if (sp.nDisks == 1) {
+                               /* We have a single, concrete move to do. */
+                               /* moveSetup uses glhanoi->src, dst. */
+                               glhanoi->src = sp.src;
+                               glhanoi->dst = sp.dst;
+                               glhanoi->tmp = tmp; /* Probably unnecessary */
+
+                               glhanoi->currentDisk = pop(glhanoi, sp.src);
+                               moveSetup(glhanoi, glhanoi->currentDisk);
+                               push(glhanoi, sp.dst, glhanoi->currentDisk);
+
+                               return;
+                       } else {
+                               /* Divide and conquer, using Frame-Stewart algorithm, until we get to base case */
+                               if (sp.nDisks == 1) break;
+                               
+                               numAvail = numBits(sp.available);
+                               if (numAvail < 2) k = sp.nDisks - 1;
+                               else if(numAvail >= sp.nDisks - 2) k = 1;
+                               /* heuristic for optimal k: sqrt(2n) (see http://www.cs.wm.edu/~pkstoc/boca.pdf) */
+                               else k = (int)(sqrt(2 * sp.nDisks));
+                               
+                               if (k >= sp.nDisks) k = sp.nDisks - 1;
+                               else if (k < 1) k = 1;
+                               
+                               tmp = bitScan(sp.available);
+                               /* fprintf(stderr, "Debug: k is %d, tmp is %d\n", k, tmp); */
+                               if (tmp == -1) {
+                                       fprintf(stderr, "Error: n > 1 (%d) and no poles available\n",
+                                               sp.nDisks);
+                               }
+                               
+                               /* Push on moves in reverse order, since this is a stack. */
+                               pushMove(glhanoi, k, tmp, sp.dst,
+                                       REMOVE_BIT(ADD_BIT(sp.available, sp.src), tmp));
+                               pushMove(glhanoi, sp.nDisks - k, sp.src, sp.dst,
+                                       REMOVE_BIT(sp.available, tmp));
+                               pushMove(glhanoi, k, sp.src, tmp,
+                                       REMOVE_BIT(ADD_BIT(sp.available, sp.dst), tmp));
+                               
+                               /* Repeat until we've found a move we can make. */
+                       }
+               }
        }
-       glhanoi->magicNumber = magicNumber;
 }
 
 static double lerp(double alpha, double start, double end)
@@ -373,6 +550,7 @@ static void downfunc(GLdouble t, Disk * d)
        d->rotation[1] = 0.0;
 }
 
+/* Return true iff move is finished. */
 static Bool computePosition(GLfloat t, Disk * d)
 {
        Bool finished = False;
@@ -435,6 +613,13 @@ static void changeState(glhcfg *glhanoi, State state)
        glhanoi->startTime = getTime();
 }
 
+static Bool finishedHanoi(glhcfg *glhanoi) {
+       /* use different criteria depending on algorithm */
+       return (glhanoi->numberOfPoles == 3 ?
+               glhanoi->move >= glhanoi->numberOfMoves :
+               solveStackEmpty(glhanoi));
+}
+
 static void update_glhanoi(glhcfg *glhanoi)
 {
        double t = getTime() - glhanoi->startTime;
@@ -456,13 +641,14 @@ static void update_glhanoi(glhcfg *glhanoi)
                break;
 
        case MOVE_DISK:
-               if(computePosition(t, glhanoi->currentDisk)) {
+               if(computePosition(t * glhanoi->currentDisk->speed, glhanoi->currentDisk)) {
                        changeState(glhanoi, MOVE_FINISHED);
                }
                break;
 
        case MOVE_FINISHED:
-               if(++glhanoi->move < glhanoi->numberOfMoves) {
+               ++glhanoi->move;
+               if(!finishedHanoi(glhanoi)) {
                        makeMove(glhanoi);
                        changeState(glhanoi, MOVE_DISK);
                } else {
@@ -608,7 +794,7 @@ static int drawTube(GLdouble bottomRadius, GLdouble topRadius,
        GLint lastSlice = nSlice - 1;
        GLfloat radius;
        GLfloat innerRadius;
-       GLfloat maxRadius;
+       /*GLfloat maxRadius;*/
 
        if(bottomThickness > bottomRadius) {
                bottomThickness = bottomRadius;
@@ -622,11 +808,11 @@ static int drawTube(GLdouble bottomRadius, GLdouble topRadius,
        if(topThickness < 0.0) {
                topThickness = 0.0;
        }
-       if(topRadius >= bottomRadius) {
+/*     if(topRadius >= bottomRadius) {
                maxRadius = topRadius;
        } else {
                maxRadius = bottomRadius;
-       }
+       }*/
 
        /* bottom */
        y = 0.0;
@@ -834,7 +1020,8 @@ static int drawDisks(glhcfg *glhanoi)
 
 static GLfloat getDiskRadius(glhcfg *glhanoi, int i)
 {
-       return ((GLfloat) i + 3.0) * glhanoi->poleRadius;
+       return ((GLfloat) i + 3.0) * glhanoi->baseLength /
+               (2 * 0.95 * glhanoi->numberOfPoles * (glhanoi->numberOfDisks + 3.0));
 }
 
 static void initData(glhcfg *glhanoi)
@@ -843,39 +1030,46 @@ static void initData(glhcfg *glhanoi)
        int i;
 
        glhanoi->baseLength = BASE_LENGTH;
-       glhanoi->poleRadius = glhanoi->baseLength /
-               (2.0 * (3 * glhanoi->numberOfDisks + 7.0));
        maxDiskRadius = getDiskRadius(glhanoi, glhanoi->numberOfDisks);
+       glhanoi->poleRadius = maxDiskRadius / (glhanoi->numberOfDisks + 3.0);
+       /* fprintf(stderr, "Debug: baseL = %f, maxDiskR = %f, poleR = %f\n",
+               glhanoi->baseLength, maxDiskRadius, glhanoi->poleRadius); */
        glhanoi->baseWidth = 2.0 * maxDiskRadius;
        glhanoi->poleOffset = 2.0 * getDiskRadius(glhanoi, glhanoi->maxDiskIdx);
        glhanoi->diskHeight = 2.0 * glhanoi->poleRadius;
        glhanoi->baseHeight = 2.0 * glhanoi->poleRadius;
        glhanoi->poleHeight = glhanoi->numberOfDisks *
                glhanoi->diskHeight + glhanoi->poleRadius;
+       /* numberOfMoves only applies if numberOfPoles = 3 */
        glhanoi->numberOfMoves = (1 << glhanoi->numberOfDisks) - 1;
        glhanoi->boardSize = glhanoi->baseLength * 0.5 * (1.0 + sqrt(5.0));
 
-       for(i = 0; i < 3; i++) {
-               if((glhanoi->pole[i].data =
-                       calloc(glhanoi->numberOfDisks, sizeof(Disk *))) == NULL) {
-                       fprintf(stderr, "%s: out of memory creating stack %d\n",
-                                       progname, i);
-                       exit(1);
-               }
+       glhanoi->pole = (Pole *)calloc(glhanoi->numberOfPoles, sizeof(Pole));
+       checkAllocAndExit(!!glhanoi->pole, "poles");
+
+       for(i = 0; i < glhanoi->numberOfPoles; i++) {
+               checkAllocAndExit(
+                       !!(glhanoi->pole[i].data = calloc(glhanoi->numberOfDisks, sizeof(Disk *))),
+                       "disk stack");
                glhanoi->pole[i].size = glhanoi->numberOfDisks;
        }
-       if((glhanoi->diskPos =
-               calloc(glhanoi->numberOfDisks, sizeof(double))) == NULL) {
-               fprintf(stderr, "%s: out of memory creating diskPos\n", progname);
-               exit(1);
-       }
+       checkAllocAndExit(
+                       !!(glhanoi->diskPos = calloc(glhanoi->numberOfDisks, sizeof(double))),
+                       "diskPos");
 
        glhanoi->the_rotator = make_rotator(0.1, 0.025, 0, 1, 0.005, False);
        glhanoi->button_down_p = False;
 
        glhanoi->src = glhanoi->oldsrc = 0;
        glhanoi->tmp = glhanoi->oldtmp = 1;
-       glhanoi->dst = glhanoi->olddst = 2;
+       glhanoi->dst = glhanoi->olddst = glhanoi->numberOfPoles - 1;
+       
+       if (glhanoi->numberOfPoles > 3) {
+               glhanoi->solveStackSize = glhanoi->numberOfDisks + 2;
+               glhanoi->solveStack = (SubProblem *)calloc(glhanoi->solveStackSize, sizeof(SubProblem));
+               checkAllocAndExit(!!glhanoi->solveStack, "solving stack");
+               glhanoi->solveStackIdx = 0;
+       }
 }
 
 static void initView(glhcfg *glhanoi)
@@ -1092,6 +1286,7 @@ static void setTexture(glhcfg *glhanoi, int n)
        glBindTexture(GL_TEXTURE_2D, glhanoi->textureNames[n]);
 }
 
+/* returns 1 on failure, 0 on success */
 static int makeTextures(glhcfg *glhanoi)
 {
        GLubyte *marbleTexture;
@@ -1132,10 +1327,7 @@ static void initFloor(glhcfg *glhanoi)
        float texIncr = 1.0 / BOARD_SQUARES;
 
     glhanoi->floorpolys = 0;
-       if((glhanoi->floorList = glGenLists(1)) == 0) {
-               fprintf(stderr, "can't allocate memory for floor display list\n");
-               exit(EXIT_FAILURE);
-       }
+       checkAllocAndExit(!!(glhanoi->floorList = glGenLists(1)), "floor display list");
        glNewList(glhanoi->floorList, GL_COMPILE);
        x0 = -glhanoi->boardSize / 2.0;
        tx0 = 0.0f;
@@ -1182,35 +1374,32 @@ static void initFloor(glhcfg *glhanoi)
 
 static void initTowers(glhcfg *glhanoi)
 {
-       if((glhanoi->baseList = glGenLists(1)) == 0) {
-               fprintf(stderr, "can't allocate memory for towers display list\n");
-               exit(EXIT_FAILURE);
-       }
+       int i;
+       
+       checkAllocAndExit(!!(glhanoi->baseList = glGenLists(1)), "tower bases display list");
+
        glNewList(glhanoi->baseList, GL_COMPILE);
        setMaterial(baseColor, cWhite, 50);
     glhanoi->basepolys = drawCuboid(glhanoi->baseLength, glhanoi->baseWidth,
                                     glhanoi->baseHeight);
        glEndList();
 
-       if((glhanoi->poleList = glGenLists(1)) == 0) {
-               fprintf(stderr, "can't allocate memory for towers display list\n");
-               exit(EXIT_FAILURE);
-       }
+       checkAllocAndExit(!!(glhanoi->poleList = glGenLists(1)), "poles display list\n");
+
        glNewList(glhanoi->poleList, GL_COMPILE);
        glPushMatrix();
-       glTranslatef(0.0f, glhanoi->baseHeight, 0.0f);
+       glTranslatef(-glhanoi->poleOffset * (glhanoi->numberOfPoles - 1.0f) * 0.5f, glhanoi->baseHeight, 0.0f);
        setMaterial(poleColor, cWhite, 50);
-    glhanoi->polepolys = drawPole(glhanoi->poleRadius, glhanoi->poleHeight);
-       glPushMatrix();
-       glTranslatef(-glhanoi->poleOffset, 0.0, 0.0);
-       glhanoi->polepolys += drawPole(glhanoi->poleRadius, glhanoi->poleHeight);
-       glPopMatrix();
-       glTranslatef(glhanoi->poleOffset, 0.0, 0.0);
-       glhanoi->polepolys += drawPole(glhanoi->poleRadius, glhanoi->poleHeight);
+       for (i = 0; i < glhanoi->numberOfPoles; i++) {          
+               glhanoi->polepolys = drawPole(glhanoi->poleRadius, glhanoi->poleHeight);
+               /* poleOffset is based on disk radius. */
+               glTranslatef(glhanoi->poleOffset, 0.0, 0.0);
+       }
        glPopMatrix();
        glEndList();
 }
 
+/* Parameterized hue based on input 0.0 - 1.0. */
 static double cfunc(double x)
 {
 #define COMP <
@@ -1218,6 +1407,7 @@ static double cfunc(double x)
                return (1.0 / 12.0) / (1.0 / 7.0) * x;
        }
        if(x < 3.0 / 7.0) {
+               /* (7x - 1) / 6 */
                return (1.0 + 1.0 / 6.0) * x - 1.0 / 6.0;
        }
        if(x < 4.0 / 7.0) {
@@ -1232,11 +1422,8 @@ static double cfunc(double x)
 static void initDisks(glhcfg *glhanoi)
 {
        int i;
-       if((glhanoi->disk =
-               (Disk *) calloc(glhanoi->numberOfDisks, sizeof(Disk))) == NULL) {
-               perror("initDisks");
-               exit(EXIT_FAILURE);
-       }
+       glhanoi->disk = (Disk *) calloc(glhanoi->numberOfDisks, sizeof(Disk));
+       checkAllocAndExit(!!glhanoi->disk, "disks");
 
        for(i = glhanoi->maxDiskIdx; i >= 0; i--) {
                GLfloat height = (GLfloat) (glhanoi->maxDiskIdx - i);
@@ -1246,7 +1433,7 @@ static void initDisks(glhcfg *glhanoi)
                Disk *disk = &glhanoi->disk[i];
 
                disk->id = i;
-               disk->position[0] = -glhanoi->poleOffset;
+               disk->position[0] = -glhanoi->poleOffset * (glhanoi->numberOfPoles - 1.0f) * 0.5;
                disk->position[1] = glhanoi->diskHeight * height;
                disk->position[2] = 0.0;
                disk->rotation[0] = 0.0;
@@ -1254,21 +1441,24 @@ static void initDisks(glhcfg *glhanoi)
                disk->rotation[2] = 0.0;
                disk->polys = 0;
 
+               /* make smaller disks move faster */
+               disk->speed = lerp(((double)glhanoi->numberOfDisks - i) / glhanoi->numberOfDisks, 1.0, speed);
+               /* fprintf(stderr, "disk id: %d, alpha: %0.2f, speed: %0.2f\n", disk->id,
+                       ((double)(glhanoi->maxDiskIdx - i)) / glhanoi->numberOfDisks, disk->speed); */
+
                color[0] = diskColor;
                color[1] = 1.0f;
                color[2] = 1.0f;
                HSVtoRGBv(color, color);
 
-               if((disk->displayList = glGenLists(1)) == 0) {
-                       fprintf(stderr,
-                                       "can't allocate memory for disk %d display list\n", i);
-                       exit(EXIT_FAILURE);
-               }
+               checkAllocAndExit(!!(disk->displayList = glGenLists(1)), "disk display list");
                glNewList(disk->displayList, GL_COMPILE);
                setMaterial(color, cWhite, 100.0);
                disk->polys += drawDisk3D(glhanoi->poleRadius, 
                                   getDiskRadius(glhanoi, i),
                                   glhanoi->diskHeight);
+               /*fprintf(stderr, "Debug: disk %d has radius %f\n", i,
+                       getDiskRadius(glhanoi, i)); */
                glEndList();
        }
        for(i = glhanoi->maxDiskIdx; i >= 0; --i) {
@@ -1336,17 +1526,13 @@ ENTRYPOINT void init_glhanoi(ModeInfo * mi)
        if(!glhanoi_cfg) {
                glhanoi_cfg =
                        (glhcfg *) calloc(MI_NUM_SCREENS(mi), sizeof(glhcfg));
-               if(!glhanoi_cfg) {
-                       fprintf(stderr, "%s: out of memory creating configs\n",
-                                       progname);
-                       exit(1);
-               }
+               checkAllocAndExit(!!glhanoi_cfg, "configuration");
        }
 
        glhanoi = &glhanoi_cfg[MI_SCREEN(mi)];
        glhanoi->glx_context = init_GL(mi);
        glhanoi->numberOfDisks = MI_BATCHCOUNT(mi);
-
+       
     if (glhanoi->numberOfDisks <= 1)
       glhanoi->numberOfDisks = 3 + (int) BELLRAND(9);
 
@@ -1356,6 +1542,18 @@ ENTRYPOINT void init_glhanoi(ModeInfo * mi)
                glhanoi->numberOfDisks = (8 * sizeof(int)) - 1;
 
        glhanoi->maxDiskIdx = glhanoi->numberOfDisks - 1;
+
+       speed = get_float_resource(MI_DISPLAY(mi), "speed", "float");
+       /* fprintf(stderr, "speed: %0.2f\n", speed); */
+       
+       glhanoi->numberOfPoles = get_integer_resource(MI_DISPLAY(mi), "poles", "Integer");
+       /* Set a number of poles from 3 to numberOfDisks + 1, biased toward lower values,
+               with probability decreasing linearly. */
+    if (glhanoi->numberOfPoles <= 2)
+      glhanoi->numberOfPoles = 3 +
+               (int)((1 - sqrt(frand(1.0))) * (glhanoi->numberOfDisks - 1));
+       /* fprintf(stderr, "Debug: Num disks: %d; num poles: %d\n", glhanoi->numberOfDisks, glhanoi->numberOfPoles); */
+       
        glhanoi->wire = MI_IS_WIREFRAME(mi);
        glhanoi->light = light;
        glhanoi->fog = fog;
@@ -1370,10 +1568,7 @@ ENTRYPOINT void init_glhanoi(ModeInfo * mi)
        }
 
        initLights(!glhanoi->wire && glhanoi->light);
-       if(makeTextures(glhanoi) != 0) {
-               fprintf(stderr, "can't allocate memory for marble texture\n");
-               exit(EXIT_FAILURE);
-       }
+       checkAllocAndExit(!makeTextures(glhanoi), "textures\n");
 
        initData(glhanoi);
        initView(glhanoi);
@@ -1396,7 +1591,6 @@ ENTRYPOINT void init_glhanoi(ModeInfo * mi)
                glEnable(GL_FOG);
        }
 
-
        glhanoi->duration = START_DURATION;
        changeState(glhanoi, START);
 }
@@ -1410,7 +1604,7 @@ ENTRYPOINT void draw_glhanoi(ModeInfo * mi)
        if(!glhanoi->glx_context)
                return;
 
-        glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(glhanoi->glx_context));
+    glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(glhanoi->glx_context));
 
        glPolygonMode(GL_FRONT, glhanoi->wire ? GL_LINE : GL_FILL);
 
@@ -1498,7 +1692,7 @@ ENTRYPOINT void release_glhanoi(ModeInfo * mi)
                                glDeleteLists(glh->disk[j].displayList, 1);
                        }
                        free(glh->disk);
-                       for(i = 0; i < 3; i++) {
+                       for(i = 0; i < glh->numberOfPoles; i++) {
                                if(glh->pole[i].data != NULL) {
                                        free(glh->pole[i].data);
                                }
index 395fd66996ca74055b48c376117b542fc080d9be..2b74cae7dcaa1171759169f311ed8104db047fa5 100644 (file)
@@ -9,6 +9,8 @@ glhanoi - OpenGL Towers of Hanoi
 [\-root]
 [\-delay \fInumber\fP]
 [\-count \fInumber\fP]
+[\-poles \fInumber\fP]
+[\-speed \fInumber\fP]
 [\-wireframe]
 [\-light]
 [\-texture]
@@ -34,6 +36,12 @@ Per-frame delay, in microseconds.  Default: 30000 (0.03 seconds.).
 .B \-count \fInumber\fP
 Number of disks.  Default: 7.
 .TP 8
+.B \-poles \fInumber\fP
+Number of poles.  Default: random from 3 to disks+1.
+.TP 8
+.B \-speed \fInumber\fP
+Speed multiplier (for smallest disks).  Default: 1.
+.TP 8
 .B \-wireframe | \-no-wireframe
 Render in wireframe instead of solid.
 .TP 8
index c02e16cac44a12eba5fe1018768e4848fd87d47c..4738b71d999546596e50dbc6934565db1c6cb45f 100644 (file)
@@ -279,8 +279,6 @@ init_knot (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index 75e2b3e291d10e19d5a5b6dff795fac77dceb2e2..b211b50cd1baffb8733f77122bb3aa00aaafd165 100644 (file)
@@ -6,11 +6,16 @@ glmatrix - simulates the title sequence effect of the movie
 [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install]
 [\-visual \fIvisual\fP] 
 [\-delay \fIusecs\fP] 
-[\-density \fIpercentage\fP]
-[\-top | \-bottom | \-both]
-[\-small | \-large]
-[\-trace]
-[\-phone \fInumber\fP]
+[\-speed \fIratio\fP]
+[\-density \fIpct\fP]
+[\-no\-fog]
+[\-no\-waves]
+[\-no\-rotate]
+[\-binary]
+[\-hexadecimal]
+[\-dna]
+[\-clock]
+[\-timefmt \fIfmt\fP]
 [\-wireframe]
 [\-fps]
 .SH DESCRIPTION
@@ -58,6 +63,10 @@ argument disables that.
 By default, waves of color roll down the columns of glyphs.  This
 argument disables that.
 .TP 8
+.B \-no-rotate\fP
+By default, the scene slowly tilts and rotates.  This
+argument disables that.
+.TP 8
 .B \-binary\fP
 Instead of displaying Matrix glyphs, only display ones and zeros.
 .TP 8
@@ -68,6 +77,16 @@ Instead of displaying Matrix glyphs, display hexadecimal digits.
 Instead of displaying Matrix glyphs, display genetic code
 (guanine, adenine, thymine, and cytosine.)
 .TP 8
+.B \-clock\fP
+Hide a clock displaying the current time somewhere in the glyphs.
+.TP 8
+.B \-timefmt\fP \fIstrftime-string\fP
+How to format the clock when \fI\-clock\fP is specified.
+Default "\ %l%M%p\ ".
+.TP 8
+.B \-speed \fIratio\fP
+Less than 1 for slower, greater than 1 for faster.  Default 1.
+.TP 8
 .B \-wireframe
 Just draw boxes instead of textured characters.
 .TP 8
index c0e0a573e872afbba7885512c91d7f317d70d6c2..1a884bf3cb5e71b7f6404fa19b69b76a4ac83cbb 100644 (file)
@@ -555,6 +555,7 @@ init_planet (ModeInfo * mi)
   glPushMatrix ();
   glScalef (RADIUS, RADIUS, RADIUS);
   glRotatef (90, 1, 0, 0);
+  glFrontFace(GL_CW);
   unit_sphere (resolution, resolution, wire);
   mi->polygon_count += resolution*resolution;
   glPopMatrix ();
index 0cdf14d34065700d992be9787586471a9ab4d5e9..386b4d8ff8a0b9b84bb6e59c472ff3e8dffc0780 100644 (file)
@@ -358,10 +358,12 @@ image_loaded_cb (const char *filename, XRectangle *geom,
       img->geom.height *= scale;
     }
 
-  if (img->title)   /* strip filename to part after last /. */
+  if (img->title)  /* strip filename to part between last "/" and last ".". */
     {
       char *s = strrchr (img->title, '/');
       if (s) strcpy (img->title, s+1);
+      s = strrchr (img->title, '.');
+      if (s) *s = 0;
     }
 
   if (debug_p)
@@ -468,30 +470,22 @@ randomize_sprite (ModeInfo *mi, sprite *sp)
   int vp_h = MI_HEIGHT(mi);
   int img_w = sp->img->geom.width;
   int img_h = sp->img->geom.height;
-  int min_w, min_h, max_w, max_h;
+  int min_w, max_w;
   double ratio = (double) img_h / img_w;
 
   if (letterbox_p)
     {
       min_w = img_w;
-      min_h = img_h;
     }
   else
     {
       if (img_w < vp_w)
-        {
-          min_w = vp_w;
-          min_h = img_h * (float) vp_w / img_w;
-        }
+        min_w = vp_w;
       else
-        {
-          min_w = img_w * (float) vp_h / img_h;
-          min_h = vp_h;
-        }
+        min_w = img_w * (float) vp_h / img_h;
     }
 
   max_w = min_w * 100 / zoom;
-  max_h = min_h * 100 / zoom;
 
   sp->from.w = min_w + frand ((max_w - min_w) * 0.4);
   sp->to.w   = max_w - frand ((max_w - min_w) * 0.4);
index 48ab1c07a2c51dbf0f9d19f49bdc6cc6e26106aa..314a4ee622e3f385ef31432863756b251af547e3 100644 (file)
@@ -356,8 +356,6 @@ init_text (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    tp = &tps[MI_SCREEN(mi)];
   }
 
   tp = &tps[MI_SCREEN(mi)];
@@ -508,10 +506,9 @@ fill_string (const char *string, Bool wire)
   int line_height = GLUT_FONT->top - GLUT_FONT->bottom;
   int off;
   GLfloat x = 0, y = 0;
-  int lines;
 
   int ow, oh;
-  lines = text_extents (string, &ow, &oh);
+  text_extents (string, &ow, &oh);
 
   y = oh / 2 - line_height;
 
index 6b5c5d97b5fd43931186167953b78ab9c73eafd5..d31e824d960f7f14e9abbe156770a010abd0bae9 100644 (file)
@@ -33,8 +33,8 @@
 
 
 /* For debugging: if true then in wireframe, do not abbreviate. */
-static Bool wire_all_p = False+1;
-static Bool show_normals_p = False+1;
+static Bool wire_all_p = False;
+static Bool show_normals_p = False;
 
 
 /* Draws an uncapped tube of the given radius extending from top to bottom,
index 2c1ed3309928cbfaa937490b790e04495187e38f..4446d72c04216ad27d2c062d4429b88cd10e0210 100644 (file)
@@ -434,11 +434,10 @@ static vertex *vertex_split(hedge *h, vector v)
     hedge *h2, *hn1, *hn2;
     vertex *vtxn;
     edge *en;
-    face *f1, *f2;
+    face *f1;
 
     f1 = h->f;
     h2 = partner(h);
-    f2 = h2->f;
     
     vtxn = vertex_new(f1->s, v);
     hn1 = hedge_new(h, vtxn);
index 9753ac69ab8827c180eb414b214d073af7ba99bd..0c91e8b4f3da15784c9214ce2dda85b59b49c11b 100644 (file)
@@ -1032,7 +1032,7 @@ static int figure8(ModeInfo *mi, double umin, double umax, double vmin,
     sv = sin(v);
     cv2 = cos(0.5*v);
     sv2 = sin(0.5*v);
-    c2u = cos(2.0*u);
+    /*c2u = cos(2.0*u);*/
     s2u = sin(2.0*u);
     xx[0] = (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*cv;
     xx[1] = (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*sv;
index e2697a63f224aeede7476bea9c114ffd75ba9c97..c31df5a43d9a2621568c2370451df9aca0b25571 100644 (file)
@@ -611,7 +611,6 @@ generate_bottle (ModeInfo *mi)
   int wire = MI_IS_WIREFRAME(mi);
   int faces = resolution * 1.5;
   Bool smooth = do_smooth;
-  Bool have_texture = False;
 
   const lamp_geometry *top_slice = bp->model;
   const char *current_texture = 0;
@@ -660,11 +659,10 @@ generate_bottle (ModeInfo *mi)
           break;
         }
 
-      have_texture = False;
       if (!wire && texture && texture != current_texture)
         {
           current_texture = texture;
-          have_texture = load_texture (mi, current_texture);
+          load_texture (mi, current_texture);
         }
         
       /* Color the discs darker than the tube walls. */
@@ -736,7 +734,7 @@ generate_bottle (ModeInfo *mi)
     }
 
 
-  have_texture = !wire && load_texture (mi, table_tex);
+  if (!wire) load_texture (mi, table_tex);
   glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, table_color);
   bp->bottle_poly_count += draw_table (top_slice->elevation, wire);
 
@@ -1311,8 +1309,6 @@ init_lavalite (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index d4081ee969e665860078ef300726ae99b7ecc411..255ebb75e8500fb7d16ff6ead4d04c785791140f 100644 (file)
@@ -290,7 +290,6 @@ gen_blade_arcs (lockward_context *ctx)
        there = M_PI * 2.0 / g_blades;
        step = there / SUBDIV;
        here -= SUBDIV * step / 2.0;
-       there -= SUBDIV * step / 2.0;
 
        /*
         * Build outer blade arcs.
index 50b8d022548ca46715977954d17a20510646fba0..36489fefa8442b63e434f38b47453fbfac70511d 100644 (file)
@@ -398,8 +398,6 @@ init_sponge (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    sp = &sps[MI_SCREEN(mi)];
   }
 
   sp = &sps[MI_SCREEN(mi)];
index a17c67ca38ac9eef1e3e732cd772a08930771b5c..bf38150cfe5e33d58073f4b3b44955cd71bedfeb 100644 (file)
@@ -166,8 +166,6 @@ init_mgears (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index f8078b2c4534257319f0db0d53b30b392c4f73f5..58be5ceb90b1ea4cb0adc0eaa31a9b25093b4361 100644 (file)
@@ -27,7 +27,8 @@
 #define DEFAULTS       "*delay:        10000         \n" \
                        "*showFPS:      False         \n" \
                        "*wireframe:    False         \n" \
-                       "*atomFont:   -*-helvetica-medium-r-normal-*-240-*\n" \
+                       "*atomFont:   -*-helvetica-medium-r-normal-*-180-*\n" \
+                       "*atomFont2:  -*-helvetica-bold-r-normal-*-80-*\n" \
                        "*titleFont:  -*-helvetica-medium-r-normal-*-180-*\n" \
                        "*noLabelThreshold:    30     \n" \
                        "*wireframeThreshold:  150    \n" \
@@ -65,8 +66,8 @@
 #define DEF_MOLECULE    "(default)"
 #define DEF_VERBOSE     "False"
 
-#define SPHERE_SLICES 24  /* how densely to render spheres */
-#define SPHERE_STACKS 12
+#define SPHERE_SLICES 48  /* how densely to render spheres */
+#define SPHERE_STACKS 24
 
 #define SMOOTH_TUBE       /* whether to have smooth or faceted tubes */
 
@@ -76,9 +77,9 @@
 # define TUBE_FACES  8
 #endif
 
-#define SPHERE_SLICES_2  7
-#define SPHERE_STACKS_2  4
-#define TUBE_FACES_2     3
+#define SPHERE_SLICES_2  14
+#define SPHERE_STACKS_2  8
+#define TUBE_FACES_2     6
 
 
 # ifdef __GNUC__
@@ -104,10 +105,10 @@ typedef struct {
    and their approximate size in angstroms.
  */
 static const atom_data all_atom_data[] = {
-  { "H",    1.17,  0.40, "#FFFFFF", "#B3B3B3", { 0, }},
+  { "H",    1.17,  0.40, "#FFFFFF", "#000000", { 0, }},
   { "C",    1.75,  0.58, "#999999", "#FFFFFF", { 0, }},
   { "CA",   1.80,  0.60, "#0000FF", "#ADD8E6", { 0, }},
-  { "N",    1.55,  0.52, "#A2B5CD", "#836FFF", { 0, }},
+  { "N",    1.55,  0.52, "#A2B5CD", "#EE99FF", { 0, }},
   { "O",    1.40,  0.47, "#FF0000", "#FFB6C1", { 0, }},
   { "P",    1.28,  0.43, "#9370DB", "#DB7093", { 0, }},
   { "S",    1.80,  0.60, "#8B8B00", "#FFFF00", { 0, }},
@@ -159,8 +160,8 @@ typedef struct {
   GLuint molecule_dlist;
   GLuint shell_dlist;
 
-  XFontStruct *xfont1, *xfont2;
-  GLuint font1_dlist, font2_dlist;
+  XFontStruct *xfont1, *xfont2, *xfont3;
+  GLuint font1_dlist, font2_dlist, font3_dlist;
   int polygon_count;
 
   time_t draw_time;
@@ -258,7 +259,8 @@ load_fonts (ModeInfo *mi)
 {
   molecule_configuration *mc = &mcs[MI_SCREEN(mi)];
   load_font (mi->dpy, "atomFont",  &mc->xfont1, &mc->font1_dlist);
-  load_font (mi->dpy, "titleFont", &mc->xfont2, &mc->font2_dlist);
+  load_font (mi->dpy, "atomFont2", &mc->xfont2, &mc->font2_dlist);
+  load_font (mi->dpy, "titleFont", &mc->xfont3, &mc->font3_dlist);
 }
 
 
@@ -333,6 +335,16 @@ set_atom_color (ModeInfo *mi, const molecule_atom *a,
   
   gl_color[3] = alpha;
 
+  /* If we're not drawing atoms, and the color is black, use white instead.
+     This is a kludge so that H can have black text over its white ball,
+     but the text still shows up if balls are off.
+   */
+  if (font_p && !do_atoms &&
+      gl_color[0] == 0 && gl_color[1] == 0 && gl_color[2] == 0)
+    {
+      gl_color[0] = gl_color[1] = gl_color[2] = 1;
+    }
+
   if (font_p)
     glColor4f (gl_color[0], gl_color[1], gl_color[2], gl_color[3]);
   else
@@ -1195,7 +1207,7 @@ startup_blurb (ModeInfo *mi)
 {
   molecule_configuration *mc = &mcs[MI_SCREEN(mi)];
   const char *s = "Constructing molecules...";
-  print_gl_string (mi->dpy, mc->xfont2, mc->font2_dlist,
+  print_gl_string (mi->dpy, mc->xfont3, mc->font3_dlist,
                    mi->xgwa.width, mi->xgwa.height,
                    10, mi->xgwa.height - 10,
                    s, False);
@@ -1353,6 +1365,8 @@ draw_labels (ModeInfo *mi)
   molecule_configuration *mc = &mcs[MI_SCREEN(mi)];
   int wire = MI_IS_WIREFRAME(mi);
   molecule *m = &mc->molecules[mc->which];
+  XFontStruct *xfont = (mc->scale_down ? mc->xfont2 : mc->xfont1);
+  GLuint font_dlist  = (mc->scale_down ? mc->font2_dlist : mc->font1_dlist);
   int i, j;
 
   if (!do_labels)
@@ -1412,13 +1426,13 @@ draw_labels (ModeInfo *mi)
       /* Before drawing the string, shift the origin to center
          the text over the origin of the sphere. */
       glBitmap (0, 0, 0, 0,
-                -string_width (mc->xfont1, a->label, 0) / 2,
-                -mc->xfont1->descent,
+                -string_width (xfont, a->label, 0) / 2,
+                -xfont->descent,
                 NULL);
 
       for (j = 0; j < strlen(a->label); j++)
 
-        glCallList (mc->font1_dlist + (int)(a->label[j]));
+        glCallList (font_dlist + (int)(a->label[j]));
 
       glPopMatrix();
     }
@@ -1613,7 +1627,7 @@ draw_molecule (ModeInfo *mi)
       if (do_titles && m->label && *m->label)
         {
           set_atom_color (mi, 0, True, 1);
-          print_gl_string (mi->dpy, mc->xfont2, mc->font2_dlist,
+          print_gl_string (mi->dpy, mc->xfont3, mc->font3_dlist,
                            mi->xgwa.width, mi->xgwa.height,
                            10, mi->xgwa.height - 10,
                            m->label, False);
index 644ff615db3a631e09c5772a9d9bbfcd177bcede..8ba2ee0ee4d7c37f0edf80a5e9295293cf322f43 100644 (file)
@@ -883,6 +883,7 @@ push_gear (ModeInfo *mi)
 
   if (g->coax_p)
     {
+      if (!parent) abort();
       if (g->x != parent->x) abort();
       if (g->y != parent->y) abort();
       if (g->z == parent->z) abort();
@@ -1340,8 +1341,6 @@ init_pinion (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    pp = &pps[MI_SCREEN(mi)];
   }
 
   pp = &pps[MI_SCREEN(mi)];
index 3ea19abda996d816b87a189db84a5d870c41b3a5..fe3205fff41311e088b165a249bc0df4818c8674 100644 (file)
@@ -458,8 +458,6 @@ init_polyhedra (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index c69f3540c4f60deb7c22c924b917d7d6441917b3..7fa22b5c5ae1a76828189d32e256422e9ffd8377 100644 (file)
@@ -92,22 +92,22 @@ extern const char *progname;
 
 #define Malloc(lvalue,n,type) do {\
        if (!(lvalue = (type*) calloc((n), sizeof(type)))) \
-           Err("out of memory");\
+           abort();\
     } while(0)
 
 #define Realloc(lvalue,n,type) do {\
        if (!(lvalue = (type*) realloc(lvalue, (n) * sizeof(type)))) \
-           Err("out of memory");\
+           abort();\
     } while(0)
 
 #define Calloc(lvalue,n,type) do {\
        if (!(lvalue = (type*) calloc(n, sizeof(type))))\
-           Err("out of memory");\
+           abort();\
     } while(0)
 
 #define Matalloc(lvalue,n,m,type) do {\
        if (!(lvalue = (type**) matalloc(n, (m) * sizeof(type))))\
-           Err("out of memory");\
+           abort();\
     } while(0)
 
 #define Sprintfrac(lvalue,x) do {\
@@ -2263,7 +2263,7 @@ construct_polyhedron (Polyhedron *P, Vector *v, int V, Vector *f, int F,
         facelets++;
 
       } else if (P->even != -1) {
-        if (hit[i]) {
+        if (hit && hit[i]) {
           push_face3 (result, P->incid[3][i], P->incid[0][i],  ii);
           push_face3 (result, P->incid[1][i], P->incid[2][i],  ii);
         } else {
index 525c6e8fe012fb3ce045e11a8f0976626196e055..f41985866b83f422b08b222d3c29911a717dd29f 100644 (file)
@@ -105,10 +105,10 @@ static const char sccsid[] = "@(#)rubik.c 5.01 2001/03/01 xlockmore";
 
 #ifdef STANDALONE
 # define MODE_rubik
-# define DEFAULTS      "*delay: 40000 \n"              \
+# define DEFAULTS      "*delay: 20000 \n"              \
                                        "*count: -30 \n"                \
                                        "*showFPS: False \n"    \
-                                       "*cycles: 5 \n"                 \
+                                       "*cycles: 20 \n"                \
                                        "*size:  -6 \n"
 # define refresh_rubik 0
 # define rubik_handle_event 0
@@ -1789,10 +1789,10 @@ shuffle(ModeInfo * mi)
                                return False;
                rp->moves[i] = move;
        }
-       rp->VX = 0.05;
+       rp->VX = 0.005;
        if (NRAND(100) < 50)
                rp->VX *= -1;
-       rp->VY = 0.05;
+       rp->VY = 0.005;
        if (NRAND(100) < 50)
                rp->VY *= -1;
        rp->movement.face = NO_FACE;
@@ -1966,16 +1966,16 @@ draw_rubik(ModeInfo * mi)
                bounced = True;
        }
        if (bounced) {
-               rp->VX += ((float) LRAND() / (float) MAXRAND) * 0.02 - 0.01;
-               rp->VX += ((float) LRAND() / (float) MAXRAND) * 0.02 - 0.01;
-               if (rp->VX > 0.06)
-                       rp->VX = 0.06;
-               if (rp->VY > 0.06)
-                       rp->VY = 0.06;
-               if (rp->VX < -0.06)
-                       rp->VX = -0.06;
-               if (rp->VY < -0.06)
-                       rp->VY = -0.06;
+               rp->VX += ((float) LRAND() / (float) MAXRAND) * 0.002 - 0.001;
+               rp->VY += ((float) LRAND() / (float) MAXRAND) * 0.002 - 0.001;
+               if (rp->VX > 0.006)
+                       rp->VX = 0.006;
+               if (rp->VY > 0.006)
+                       rp->VY = 0.006;
+               if (rp->VX < -0.006)
+                       rp->VX = -0.006;
+               if (rp->VY < -0.006)
+                       rp->VY = -0.006;
        }
        if (!MI_IS_ICONIC(mi)) {
                glTranslatef(rp->PX, rp->PY, 0);
@@ -2084,7 +2084,7 @@ draw_rubik(ModeInfo * mi)
 
        glFlush();
 
-       rp->step += 0.05;
+       rp->step += 0.002;
 }
 
 #ifndef STANDALONE
index 7fa84b4c4d0c74f49b609c178d573173362628c4..3361b2e41d8eec7ab64a6869ba4745fc5251066e 100644 (file)
@@ -850,8 +850,6 @@ init_tentacles (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    tc = &tcs[MI_SCREEN(mi)];
   }
 
   tc = &tcs[MI_SCREEN(mi)];
index 8957c1924ea15b2f52756f2d90623107f5debcf9..6429035bade1f227c100d816644c2750057d8b0b 100644 (file)
@@ -366,7 +366,6 @@ read_hosts_file (sonar_sensor_data *ssd, const char *filename)
 
       /* Get the name and address */
 
-      name = addr = 0;
       if ((addr = strtok(buf, " ,;\t\n")))
         name = strtok(0, " ,;\t\n");
       else
@@ -614,7 +613,6 @@ 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) + 
@@ -653,8 +651,8 @@ send_ping (ping_data *pd, const sonar_bogie *b)
 
   /* Send it */
 
-  if ((result = sendto(pd->icmpsock, packet, pcktsiz, 0, 
-                       &pb->address, sizeof(pb->address)))
+  if (sendto(pd->icmpsock, packet, pcktsiz, 0, 
+             &pb->address, sizeof(pb->address))
       != pcktsiz)
     {
 #if 0
@@ -1056,7 +1054,7 @@ parse_mode (sonar_sensor_data *ssd, char **error_ret,
       if (new)
         {
           sonar_bogie *nn = new;
-          while (nn && nn->next)
+          while (nn->next)
             nn = nn->next;
           nn->next = hostlist;
           hostlist = new;
index cdafdef5d0f4dd349047fcf7fae5a79c1993d257..66d8b833ff8f006070a7086102cc0a52ce3965fb 100644 (file)
@@ -559,9 +559,11 @@ static void
 copy_and_insert_bogie (sonar_sensor_data *ssd, sonar_bogie *b,
                        sonar_bogie **to_list)
 {
-  sonar_bogie *ob, *prev;
+  sonar_bogie *ob, *next;
   if (!b) abort();
-  for (prev = 0, ob = *to_list; ob; prev = ob, ob = ob->next)
+  for (ob = *to_list, next = ob ? ob->next : 0; 
+       ob; 
+       ob = next, next = ob ? ob->next : 0)
     {
       if (ob == b) abort();   /* this will end badly */
       if (!strcmp (ob->name, b->name))  /* match! */
index 10e86d7698e1fd6b81229034067a9f5ae39deb73..eb004b11814a14075f3603cf4fd07e38b3db52dc 100644 (file)
@@ -1,4 +1,5 @@
-/* sphere, Copyright (c) 2002, 2008 Paul Bourke <pbourke@swin.edu.au>
+/* sphere, Copyright (c) 2002 Paul Bourke <pbourke@swin.edu.au>,
+ *         Copyright (c) 2010 Jamie Zawinski <jwz@jwz.org>
  * Utility function to create a unit sphere in GL.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -13,6 +14,7 @@
  * 21-Mar-01: jwz@jwz.org  Broke sphere routine out into its own file.
  * 28-Feb-02: jwz@jwz.org  New implementation from Paul Bourke:
  *                         http://astronomy.swin.edu.au/~pbourke/opengl/sphere/
+ * 21-Aug-10  jwz@jwz.org  Converted to use glDrawArrays, for OpenGL ES.
  */
 
 #include <math.h>
@@ -38,71 +40,98 @@ unit_sphere (int stacks, int slices, int wire_p)
   int polys = 0;
   int i,j;
   double theta1, theta2, theta3;
-  XYZ e, p;
+  XYZ p, n;
   XYZ la = { 0, 0, 0 }, lb = { 0, 0, 0 };
   XYZ c = {0, 0, 0};  /* center */
   double r = 1.0;     /* radius */
   int stacks2 = stacks * 2;
 
+  int mode = (wire_p ? GL_LINE_LOOP : GL_TRIANGLE_STRIP);
+
+  int arraysize, out;
+  struct { XYZ p; XYZ n; GLfloat s, t; } *array;
+
   if (r < 0)
     r = -r;
   if (slices < 0)
     slices = -slices;
 
+  arraysize = (stacks+1) * (slices+1) * (wire_p ? 4 : 2);
+  array = (void *) calloc (arraysize, sizeof(*array));
+  if (! array) abort();
+  out = 0;
+
+
   if (slices < 4 || stacks < 2 || r <= 0)
     {
-      glBegin (GL_POINTS);
-      glVertex3f (c.x, c.y, c.z);
-      glEnd();
-      return 1;
+      mode = GL_POINTS;
+      array[out++].p = c;
+      goto END;
     }
 
-  glFrontFace(GL_CW);
-
   for (j = 0; j < stacks; j++)
     {
       theta1 = j       * (M_PI+M_PI) / stacks2 - M_PI_2;
       theta2 = (j + 1) * (M_PI+M_PI) / stacks2 - M_PI_2;
 
-      glBegin (wire_p ? GL_LINE_LOOP : GL_TRIANGLE_STRIP);
-      for (i = 0; i <= slices; i++)
+      for (i = slices; i >= 0; i--)
         {
           theta3 = i * (M_PI+M_PI) / slices;
 
           if (wire_p && i != 0)
             {
-              glVertex3f (lb.x, lb.y, lb.z);
-              glVertex3f (la.x, la.y, la.z);
+              array[out++].p = lb;                             /* vertex */
+              array[out++].p = la;                             /* vertex */
             }
 
-          e.x = cos (theta2) * cos(theta3);
-          e.y = sin (theta2);
-          e.z = cos (theta2) * sin(theta3);
-          p.x = c.x + r * e.x;
-          p.y = c.y + r * e.y;
-          p.z = c.z + r * e.z;
-
-          glNormal3f (e.x, e.y, e.z);
-          glTexCoord2f (i       / (double)slices,
-                        2*(j+1) / (double)stacks2);
-          glVertex3f (p.x, p.y, p.z);
+          n.x = cos (theta2) * cos(theta3);
+          n.y = sin (theta2);
+          n.z = cos (theta2) * sin(theta3);
+          p.x = c.x + r * n.x;
+          p.y = c.y + r * n.y;
+          p.z = c.z + r * n.z;
+
+          array[out].p = p;                                    /* vertex */
+          array[out].n = n;                                    /* normal */
+          array[out].s = i       / (GLfloat) slices;           /* texture */
+          array[out].t = 2*(j+1) / (GLfloat) stacks2;
+          out++;
+
           if (wire_p) la = p;
 
-          e.x = cos(theta1) * cos(theta3);
-          e.y = sin(theta1);
-          e.z = cos(theta1) * sin(theta3);
-          p.x = c.x + r * e.x;
-          p.y = c.y + r * e.y;
-          p.z = c.z + r * e.z;
-
-          glNormal3f (e.x, e.y, e.z);
-          glTexCoord2f (i   / (double)slices,
-                        2*j / (double)stacks2);
-          glVertex3f (p.x, p.y, p.z);
+          n.x = cos(theta1) * cos(theta3);
+          n.y = sin(theta1);
+          n.z = cos(theta1) * sin(theta3);
+          p.x = c.x + r * n.x;
+          p.y = c.y + r * n.y;
+          p.z = c.z + r * n.z;
+
+          array[out].p = p;                                    /* vertex */
+          array[out].n = n;                                    /* normal */
+          array[out].s = i   / (GLfloat) slices;               /* texture */
+          array[out].t = 2*j / (GLfloat) stacks2;
+          out++;
+
+          if (out >= arraysize) abort();
+
           if (wire_p) lb = p;
           polys++;
         }
-      glEnd();
     }
+
+ END:
+
+  glEnableClientState (GL_VERTEX_ARRAY);
+  glEnableClientState (GL_NORMAL_ARRAY);
+  glEnableClientState (GL_TEXTURE_COORD_ARRAY);
+
+  glVertexPointer   (3, GL_FLOAT, sizeof(*array), &array[0].p);
+  glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
+  glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
+
+  glDrawArrays (mode, 0, out);
+
+  free (array);
+
   return polys;
 }
index f3a03f2b62655c9d27d53d97a2520f3b8fb377fd..7bd9967a6255b3968ca3bfe0c72bf0df75077baa 100644 (file)
@@ -302,23 +302,25 @@ draw_circle (ModeInfo *mi, Bool teeth_p)
 static void
 draw_bounding_box (ModeInfo *mi)
 {
-  spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)];
+  /* spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; */
 
   static const GLfloat c1[4] = { 0.2, 0.2, 0.6, 1.0 };
   static const GLfloat c2[4] = { 1.0, 0.0, 0.0, 1.0 };
   int wire = MI_IS_WIREFRAME(mi);
 
-  GLfloat x1 = cc->bbox[0].x;
-  GLfloat y1 = cc->bbox[0].y;
-  GLfloat z1 = cc->bbox[0].z;
-  GLfloat x2 = cc->bbox[1].x;
-  GLfloat y2 = cc->bbox[1].y;
-  GLfloat z2 = cc->bbox[1].z;
+  GLfloat x1,y1,z1,x2,y2,z2;
 
-#if 1
+# if 0
+  x1 = cc->bbox[0].x;
+  y1 = cc->bbox[0].y;
+  z1 = cc->bbox[0].z;
+  x2 = cc->bbox[1].x;
+  y2 = cc->bbox[1].y;
+  z2 = cc->bbox[1].z;
+# else
   x1 = y1 = z1 = -0.5;
   x2 = y2 = z2 =  0.5;
-#endif
+# endif
 
   if (do_bbox && !wire)
     {
@@ -690,8 +692,6 @@ init_spheremonics (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    cc = &ccs[MI_SCREEN(mi)];
   }
 
   cc = &ccs[MI_SCREEN(mi)];
index 3216dd37b27c4b14443e2203e14a7c25ca07b1ee..bbfe5ff4a4aa8210d137b7b0c5970561b4edf698 100644 (file)
@@ -298,6 +298,7 @@ draw_sphere(int pos, int tick)
        glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialYellow);
     glDisable (GL_TEXTURE_2D);
        glShadeModel(GL_SMOOTH);
+       glFrontFace(GL_CW);
     polys += unit_sphere (32, 32, False);
        glShadeModel(GL_FLAT);
     glEnable (GL_TEXTURE_2D);
index 0354431b65b33a8cddbb94366db1427e9d7f622e..a92b6c5737f475226440d770e8f2e9e74f5a3e5c 100644 (file)
@@ -88,8 +88,6 @@ init_stonerview (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    bp = &bps[MI_SCREEN(mi)];
   }
 
   bp = &bps[MI_SCREEN(mi)];
index 5cbb0f227cdc5239da28de0b7f3d59983bf77d42..a80f7b0183feed545c455b7ba05afb528f7f8107 100644 (file)
@@ -880,8 +880,6 @@ ENTRYPOINT void init_tangram(ModeInfo * mi)
             fprintf(stderr, "%s: out of memory\n", progname);
             exit(1);
         }
-
-        tp = &tps[MI_SCREEN(mi)];
     }
 
     tp = &tps[MI_SCREEN(mi)];
index 18f38131f4f9b3c1f5eb7d9d4c634890be5e2da4..c74410198fa1b6ab10749448cca450516f8713b9 100644 (file)
@@ -585,7 +585,7 @@ l|      |r
                tr0, tr1,
                tl0, tl1,
                l0 , l1 ,
-               bl0, depth=0.3, zdepth=15.0;
+               depth=0.3, zdepth=15.0;
        /* zdepth is how far back tunnel goes */
        /* depth is tex coord scale.  low number = fast texture shifting */
 
@@ -601,7 +601,6 @@ l|      |r
        tl1 = tl0 + half_floor;
        l0 = tr1;
        l1 = l0 + full_wall;
-       bl0 = l1;
 
        glMatrixMode(GL_TEXTURE);
        glLoadIdentity();
@@ -965,7 +964,6 @@ static void LoadTexture(ModeInfo * mi, char **fn, const char *filename, GLuint t
                                                tmpa =  teximage->data[dtaidx + cchan];
                                                tmpfa = (float) tmpa * boxdiv;
                                                /* box filter */
-                                               blursum = 0.0;
                                                for (by = -boxsize ; by <= boxsize; by++) {
                                                        for (bx = -boxsize ; bx <= boxsize; bx++) {
                                                                indx = wrapVal(ix + bx, 0, teximage->width);
@@ -1057,8 +1055,6 @@ init_tunnel (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    tc = &tconf[MI_SCREEN(mi)];
   }
 
   tc = &tconf[MI_SCREEN(mi)];
index ef3ca0623206e398a7b2527517e3a69dd36c0252..f794b197db2d285c63e0111ccce12e4b8d40c0f6 100644 (file)
@@ -189,10 +189,7 @@ init_topBlock (ModeInfo *mi)
   if (!tbs) {
     tbs = (topBlockSTATE *)
       calloc (MI_NUM_SCREENS(mi), sizeof (topBlockSTATE));
-    if (!tbs) {
-      fprintf(stderr, "%s: out of memory\n", progname);
-      exit(1);
-    }
+    if (!tbs) abort();
   }
 
   tb = &tbs[MI_SCREEN(mi)];
@@ -576,16 +573,18 @@ static void generateNewBlock(ModeInfo *mi)
                tb->numFallingBlocks++;
                llTail = tb->blockNodeRoot; 
                if (llTail == NULL) {
-                       if ((llCurrent = ((NODE*) malloc(sizeof(NODE)))) == NULL) {     fprintf(stderr, "%s: out of memory.\n", progname); }
-                       llTail = llCurrent;
-                       tb->blockNodeRoot = llCurrent; 
+                  llCurrent = ((NODE*) malloc(sizeof(NODE)));
+                  if (!llCurrent) abort();
+                  llTail = llCurrent;
+                  tb->blockNodeRoot = llCurrent; 
                } else {
                        if (tb->numFallingBlocks>=maxFalling) {
                                /* recycle */
                                llCurrent=llTail->next;
                                tb->blockNodeRoot=llCurrent->next;
                        } else {
-                               if ((llCurrent = ((NODE*) malloc(sizeof(NODE)))) == NULL) {     fprintf(stderr, "%s: out of memory..\n", progname); }
+                          llCurrent = ((NODE*) malloc(sizeof(NODE)));
+                          if (!llCurrent) abort();
                        }
                        while (llTail->next != NULL) { llTail = llTail->next; } /* find last item in list */
                }
index ec7589d15f4fc7e4b6d2a54076706ce1c8cead23..a21682501fb63f0a86fcda4c14c6e826a122f421 100644 (file)
@@ -1,4 +1,4 @@
-/* tube, Copyright (c) 2001, 2003, 2007 Jamie Zawinski <jwz@jwz.org>
+/* tube, Copyright (c) 2001-2010 Jamie Zawinski <jwz@jwz.org>
  * Utility functions to create tubes and cones in GL.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -26,6 +26,8 @@
 
 #include "tube.h"
 
+typedef struct { GLfloat x, y, z; } XYZ;
+
 static int
 unit_tube (int faces, int smooth, int caps_p, int wire_p)
 {
@@ -37,11 +39,20 @@ unit_tube (int faces, int smooth, int caps_p, int wire_p)
   GLfloat x, y, x0=0, y0=0;
   int z = 0;
 
+  int arraysize, out;
+  struct { XYZ p; XYZ n; GLfloat s, t; } *array;
+
+  arraysize = (faces+1) * 6;
+  array = (void *) calloc (arraysize, sizeof(*array));
+  if (! array) abort();
+  out = 0;
+
+
+  /* #### texture coords are currently not being computed */
+
+
   /* side walls
    */
-  glFrontFace(GL_CCW);
-  glBegin (wire_p ? GL_LINES : (smooth ? GL_QUAD_STRIP : GL_QUADS));
-
   th = 0;
   x = 1;
   y = 0;
@@ -56,13 +67,27 @@ unit_tube (int faces, int smooth, int caps_p, int wire_p)
 
   for (i = 0; i < faces; i++)
     {
+      array[out].p.x = x;                      /* bottom point A */
+      array[out].p.y = 0;
+      array[out].p.z = y;
+
       if (smooth)
-        glNormal3f(x, 0, y);
+        array[out].n = array[out].p;           /* its own normal */
       else
-        glNormal3f(x0, 0, y0);
+        {
+          array[out].n.x = x0;                 /* mid-plane normal */
+          array[out].n.y = 0;
+          array[out].n.z = y0;
+        }
+      out++;
+
+
+      array[out].p.x = x;                      /* top point A */
+      array[out].p.y = 1;
+      array[out].p.z = y;
+      array[out].n = array[out-1].n;           /* same normal */
+      out++;
 
-      glVertex3f(x, 0, y);
-      glVertex3f(x, 1, y);
 
       th += step;
       x  = cos (th);
@@ -73,32 +98,89 @@ unit_tube (int faces, int smooth, int caps_p, int wire_p)
           x0 = cos (th + s2);
           y0 = sin (th + s2);
 
-          glVertex3f(x, 1, y);
-          glVertex3f(x, 0, y);
+          array[out].p.x = x;                  /* top point B */
+          array[out].p.y = 1;
+          array[out].p.z = y;
+          array[out].n = array[out-1].n;       /* same normal */
+          out++;
+
+
+          array[out] = array[out-3];           /* bottom point A */
+          out++;
+
+          array[out] = array[out-2];           /* top point B */
+          out++;
+
+          array[out].p.x = x;                  /* bottom point B */
+          array[out].p.y = 0;
+          array[out].p.z = y;
+          array[out].n = array[out-1].n;       /* same normal */
+          out++;
+
+          polys++;
         }
+
       polys++;
+      if (out >= arraysize) abort();
     }
-  glEnd();
+
+  glEnableClientState (GL_VERTEX_ARRAY);
+  glEnableClientState (GL_NORMAL_ARRAY);
+  glEnableClientState (GL_TEXTURE_COORD_ARRAY);
+
+  glVertexPointer   (3, GL_FLOAT, sizeof(*array), &array[0].p);
+  glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
+  glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
+
+  glDrawArrays ((wire_p ? GL_LINES :
+                 (smooth ? GL_TRIANGLE_STRIP : GL_TRIANGLES)),
+                0, out);
+
 
   /* End caps
    */
   if (caps_p)
     for (z = 0; z <= 1; z++)
       {
-        glFrontFace(z == 0 ? GL_CCW : GL_CW);
-        glNormal3f(0, (z == 0 ? -1 : 1), 0);
-        glBegin(wire_p ? GL_LINE_LOOP : GL_TRIANGLE_FAN);
-        if (! wire_p) glVertex3f(0, z, 0);
-        for (i = 0, th = 0; i <= faces; i++)
+        out = 0;
+        if (! wire_p)
           {
+            array[out].p.x = 0;
+            array[out].p.y = z;
+            array[out].p.z = 0;
+
+            array[out].n.x = 0;
+            array[out].n.y = (z == 0 ? -1 : 1);
+            array[out].n.z = 0;
+            out++;
+          }
+
+        th = 0;
+        for (i = (z == 0 ? 0 : faces);
+             (z == 0 ? i <= faces : i >= 0);
+             i += (z == 0 ? 1 : -1)) {
             GLfloat x = cos (th);
             GLfloat y = sin (th);
-            glVertex3f(x, z, y);
-            th += step;
+
+            array[out] = array[0];  /* same normal and texture */
+            array[out].p.x = x;
+            array[out].p.y = z;
+            array[out].p.z = y;
+            out++;
+
+            th += (z == 0 ? step : -step);
+
             polys++;
+            if (out >= arraysize) abort();
           }
-        glEnd();
+
+        glVertexPointer   (3, GL_FLOAT, sizeof(*array), &array[0].p);
+        glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
+        glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
+
+        glDrawArrays ((wire_p ? GL_LINE_LOOP : GL_TRIANGLE_FAN), 0, out);
       }
+
   return polys;
 }
 
@@ -113,10 +195,20 @@ unit_cone (int faces, int smooth, int cap_p, int wire_p)
   GLfloat th;
   GLfloat x, y, x0, y0;
 
+  int arraysize, out;
+  struct { XYZ p; XYZ n; GLfloat s, t; } *array;
+
+  arraysize = (faces+1) * 3;
+  array = (void *) calloc (arraysize, sizeof(*array));
+  if (! array) abort();
+  out = 0;
+
+
+  /* #### texture coords are currently not being computed */
+
+
   /* side walls
    */
-  glFrontFace(GL_CW);
-  glBegin(wire_p ? GL_LINES : GL_TRIANGLES);
 
   th = 0;
   x = 1;
@@ -126,11 +218,30 @@ unit_cone (int faces, int smooth, int cap_p, int wire_p)
 
   for (i = 0; i < faces; i++)
     {
-      glNormal3f(x0, 0, y0);
-      glVertex3f(0,  1, 0);
+      array[out].p.x = x;              /* bottom point A */
+      array[out].p.y = 0;
+      array[out].p.z = y;
+
+      if (smooth)
+        array[out].n = array[out].p;   /* its own normal */
+      else
+        {
+          array[out].n.x = x0;         /* mid-plane normal */
+          array[out].n.y = 0;
+          array[out].n.z = y0;
+        }
+      out++;
+
+
+      array[out].p.x = 0;              /* tip point */
+      array[out].p.y = 1;
+      array[out].p.z = 0;
+
+      array[out].n.x = x0;             /* mid-plane normal */
+      array[out].n.y = 0;
+      array[out].n.z = y0;
+      out++;
 
-      if (smooth) glNormal3f(x, 0, y);
-      glVertex3f(x, 0, y);
 
       th += step;
       x0 = cos (th + s2);
@@ -138,30 +249,74 @@ unit_cone (int faces, int smooth, int cap_p, int wire_p)
       x  = cos (th);
       y  = sin (th);
 
-      if (smooth) glNormal3f(x, 0, y);
-      glVertex3f(x, 0, y);
+      array[out].p.x = x;              /* bottom point B */
+      array[out].p.y = 0;
+      array[out].p.z = y;
+
+      if (smooth)
+        array[out].n = array[out].p;   /* its own normal */
+      else
+        array[out].n = array[out-1].n;  /* same normal as other two */
+      out++;
+
+
+      if (out >= arraysize) abort();
       polys++;
     }
-  glEnd();
+
+  glEnableClientState (GL_VERTEX_ARRAY);
+  glEnableClientState (GL_NORMAL_ARRAY);
+  glEnableClientState (GL_TEXTURE_COORD_ARRAY);
+
+  glVertexPointer   (3, GL_FLOAT, sizeof(*array), &array[0].p);
+  glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
+  glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
+
+  glDrawArrays ((wire_p ? GL_LINES : GL_TRIANGLES), 0, out);
+
 
   /* End cap
    */
   if (cap_p)
     {
-      glFrontFace(GL_CCW);
-      glNormal3f(0, -1, 0);
-      glBegin(wire_p ? GL_LINE_LOOP : GL_TRIANGLE_FAN);
-      if (! wire_p) glVertex3f(0, 0, 0);
+      out = 0;
+
+      if (! wire_p)
+        {
+          array[out].p.x = 0;
+          array[out].p.y = 0;
+          array[out].p.z = 0;
+
+          array[out].n.x = 0;
+          array[out].n.y = -1;
+          array[out].n.z = 0;
+          out++;
+        }
+
       for (i = 0, th = 0; i <= faces; i++)
         {
           GLfloat x = cos (th);
           GLfloat y = sin (th);
-          glVertex3f(x, 0, y);
+
+          array[out] = array[0];  /* same normal and texture */
+          array[out].p.x = x;
+          array[out].p.y = 0;
+          array[out].p.z = y;
+          out++;
           th += step;
           polys++;
+          if (out >= arraysize) abort();
         }
-      glEnd();
+
+      glVertexPointer   (3, GL_FLOAT, sizeof(*array), &array[0].p);
+      glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
+      glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
+
+      glDrawArrays ((wire_p ? GL_LINE_LOOP : GL_TRIANGLE_FAN), 0, out);
     }
+
+  free (array);
+
   return polys;
 }
 
index c87fea9dd57a875f4989df065180b2c6144d21aa..8230ca08a84c8fa154fd7e5a5152016fee940b87 100644 (file)
@@ -207,6 +207,7 @@ static void LoadPath(struct tunnel_state *st)
                }
                else
                {
+                        path1 = st->path;
                        path2 = (tnPath *)malloc(sizeof(tnPath));
                        path1->next = path2;
                        path1 = path2;
@@ -249,7 +250,9 @@ void DrawTunnel(struct tunnel_state *st,
        
        cmpos = st->cam_pos;
        /* Get current curve */
-       if (st->cam_pos->next->next->next)
+       if (st->cam_pos->next &&
+            st->cam_pos->next->next &&
+            st->cam_pos->next->next->next)
        {
                p1 = st->cam_pos;
                for (i=0; i<4; i++)
index 2b4bbf80829e0d9a40496cb0a3d1b0dd54b9e53f..b207bbc0e58f224756c4b3506efeca36228ca66c 100644 (file)
@@ -445,8 +445,6 @@ init_voronoi (ModeInfo *mi)
       fprintf(stderr, "%s: out of memory\n", progname);
       exit(1);
     }
-
-    vp = &vps[MI_SCREEN(mi)];
   }
 
   vp = &vps[MI_SCREEN(mi)];
diff --git a/hacks/images/molecules/salvinorin.pdb b/hacks/images/molecules/salvinorin.pdb
new file mode 100644 (file)
index 0000000..6ac445b
--- /dev/null
@@ -0,0 +1,92 @@
+HEADER    Salvinorin A: A dissociative hallucinogen, kappa opioid receptor agonist
+ATOM      1  O           0      -1.578   3.509   1.054  0.00  0.00           O+0
+ATOM      2  O           0      -0.661  -3.341  -1.950  0.00  0.00           O+0
+ATOM      3  O           0      -0.961  -0.736  -2.292  0.00  0.00           O+0
+ATOM      4  O           0       0.223   4.284   1.789  0.00  0.00           O+0
+ATOM      5  O           0       4.133  -2.520   1.067  0.00  0.00           O+0
+ATOM      6  O           0       4.305  -2.225  -1.047  0.00  0.00           O+0
+ATOM      7  O           0      -5.473   1.972   2.519  0.00  0.00           O+0
+ATOM      8  O           0      -1.864  -4.598  -3.067  0.00  0.00           O+0
+ATOM      9  C           0       1.875  -0.263  -0.355  0.00  0.00           C+0
+ATOM     10  C           0      -0.335   1.379  -0.322  0.00  0.00           C+0
+ATOM     11  C           0       0.290  -0.090  -0.402  0.00  0.00           C+0
+ATOM     12  C           0       0.295   2.080   0.949  0.00  0.00           C+0
+ATOM     13  C           0       2.416   0.613   0.838  0.00  0.00           C+0
+ATOM     14  C           0       2.218  -1.798  -0.082  0.00  0.00           C+0
+ATOM     15  C           0       1.854   2.057   0.955  0.00  0.00           C+0
+ATOM     16  C           0      -1.892   1.349  -0.054  0.00  0.00           C+0
+ATOM     17  C           0      -0.312  -1.076  -1.312  0.00  0.00           C+0
+ATOM     18  C           0       1.427  -2.783  -1.008  0.00  0.00           C+0
+ATOM     19  C           0       2.599   0.182  -1.678  0.00  0.00           C+0
+ATOM     20  C           0      -0.152   2.242  -1.623  0.00  0.00           C+0
+ATOM     21  C           0      -0.102  -2.502  -1.056  0.00  0.00           C+0
+ATOM     22  C           0      -2.483   2.720   0.438  0.00  0.00           C+0
+ATOM     23  C           0      -0.364   3.344   1.274  0.00  0.00           C+0
+ATOM     24  C           0       3.632  -2.188  -0.023  0.00  0.00           C+0
+ATOM     25  C           0      -3.721   2.668   1.259  0.00  0.00           C+0
+ATOM     26  C           0      -4.516   3.764   1.594  0.00  0.00           C+0
+ATOM     27  C           0      -4.363   1.580   1.857  0.00  0.00           C+0
+ATOM     28  C           0      -1.768  -3.894  -2.073  0.00  0.00           C+0
+ATOM     29  C           0       5.353  -2.949   1.401  0.00  0.00           C+0
+ATOM     30  C           0      -5.577   3.309   2.365  0.00  0.00           C+0
+ATOM     31  C           0      -2.903  -3.782  -1.178  0.00  0.00           C+0
+ATOM     32  H           0      -0.032  -0.494   0.566  0.00  0.00           H+0
+ATOM     33  H           0       0.021   1.488   1.831  0.00  0.00           H+0
+ATOM     34  H           0       2.176   0.125   1.788  0.00  0.00           H+0
+ATOM     35  H           0       3.509   0.668   0.818  0.00  0.00           H+0
+ATOM     36  H           0       1.806  -2.023   0.910  0.00  0.00           H+0
+ATOM     37  H           0       2.250   2.682   0.154  0.00  0.00           H+0
+ATOM     38  H           0       2.226   2.485   1.891  0.00  0.00           H+0
+ATOM     39  H           0      -2.454   1.020  -0.933  0.00  0.00           H+0
+ATOM     40  H           0      -2.074   0.590   0.706  0.00  0.00           H+0
+ATOM     41  H           0       1.574  -3.811  -0.660  0.00  0.00           H+0
+ATOM     42  H           0       1.827  -2.744  -2.026  0.00  0.00           H+0
+ATOM     43  H           0       2.260  -0.386  -2.545  0.00  0.00           H+0
+ATOM     44  H           0       2.509   1.228  -1.923  0.00  0.00           H+0
+ATOM     45  H           0       3.681   0.081  -1.611  0.00  0.00           H+0
+ATOM     46  H           0      -0.558   1.749  -2.507  0.00  0.00           H+0
+ATOM     47  H           0      -0.638   3.215  -1.562  0.00  0.00           H+0
+ATOM     48  H           0       0.868   2.520  -1.836  0.00  0.00           H+0
+ATOM     49  H           0      -0.497  -2.735  -0.061  0.00  0.00           H+0
+ATOM     50  H           0      -2.764   3.279  -0.460  0.00  0.00           H+0
+ATOM     51  H           0      -4.357   4.736   1.321  0.00  0.00           H+0
+ATOM     52  H           0      -4.064   0.605   1.821  0.00  0.00           H+0
+ATOM     53  H           0       5.360  -3.151   2.472  0.00  0.00           H+0
+ATOM     54  H           0       6.112  -2.193   1.186  0.00  0.00           H+0
+ATOM     55  H           0       5.605  -3.873   0.875  0.00  0.00           H+0
+ATOM     56  H           0      -6.323   3.886   2.756  0.00  0.00           H+0
+ATOM     57  H           0      -3.222  -2.742  -1.105  0.00  0.00           H+0
+ATOM     58  H           0      -2.636  -4.143  -0.184  0.00  0.00           H+0
+ATOM     59  H           0      -3.759  -4.370  -1.521  0.00  0.00           H+0
+CONECT    1   22   23    0    0                                         NONE  65
+CONECT    2   21   28    0    0                                         NONE  66
+CONECT    3   17    0    0    0                                         NONE  67
+CONECT    4   23    0    0    0                                         NONE  68
+CONECT    5   24   29    0    0                                         NONE  69
+CONECT    6   24    0    0    0                                         NONE  70
+CONECT    7   27   30    0    0                                         NONE  71
+CONECT    8   28    0    0    0                                         NONE  72
+CONECT    9   11   13   14   19                                         NONE  73
+CONECT   10   11   12   16   20                                         NONE  74
+CONECT   11    9   10   17   32                                         NONE  75
+CONECT   12   10   15   23   33                                         NONE  76
+CONECT   13    9   15   34   35                                         NONE  77
+CONECT   14    9   18   24   36                                         NONE  78
+CONECT   15   12   13   37   38                                         NONE  79
+CONECT   16   10   22   39   40                                         NONE  80
+CONECT   17    3   11   21    0                                         NONE  81
+CONECT   18   14   21   41   42                                         NONE  82
+CONECT   19    9   43   44   45                                         NONE  83
+CONECT   20   10   46   47   48                                         NONE  84
+CONECT   21    2   17   18   49                                         NONE  85
+CONECT   22    1   16   25   50                                         NONE  86
+CONECT   23    1    4   12    0                                         NONE  87
+CONECT   24    5    6   14    0                                         NONE  88
+CONECT   25   22   26   27    0                                         NONE  89
+CONECT   26   25   30   51    0                                         NONE  90
+CONECT   27    7   25   52    0                                         NONE  91
+CONECT   28    2    8   31    0                                         NONE  92
+CONECT   29    5   53   54   55                                         NONE  93
+CONECT   30    7   26   56    0                                         NONE  94
+CONECT   31   28   57   58   59                                         NONE  95
+END                                                                     NONE  96
index 986acd5327a0292b23bdf5e52b1cd7efe1a6b211..6e48f3f277c28369e6ab188423885c37a18ca502 100644 (file)
@@ -290,7 +290,6 @@ static inline unsigned long rgb2point(int depth, int r, int g, int b)
     switch(depth) 
     {
     case 32:
-       ret = 0xff000000;
     case 24:
 #ifdef HAVE_COCOA
         /* This program idiotically does not go through a color map, so
index a59332a210e3ce7d1097baf5a89f4832ac15963c..8c3f80b978ae9b903f51a55ed07a90268d2835ec 100644 (file)
@@ -126,14 +126,11 @@ static XrmOptionDescRec kaleidescope_options [] = {
 static void
 krandom_color(GLOBAL *g, XColor *color)
 {
-  int r;
-  r = random() % 3;
-
   if((g->color_mode == 0) || (g->color_mode == 1)) {
 
-    color->blue  = ((r = random()) % g->bluerange) + g->bluemin;
-    color->green = ((r = random()) % g->greenrange) + g->greenmin;
-    color->red   = ((r = random()) % g->redrange) + g->redmin;
+    color->blue  = (random() % g->bluerange)  + g->bluemin;
+    color->green = (random() % g->greenrange) + g->greenmin;
+    color->red   = (random() % g->redrange)   + g->redmin;
 
     if(!XAllocColor(g->dpy, g->cmap, color)) {
       color->pixel = g->default_fg_pixel;
index a7a0591d0e32c9109bb896b7857fa0deb6a7c2e1..0e46de67203f65a2bbbf827ab0be849d683b4c04 100644 (file)
@@ -200,7 +200,7 @@ static void Initialize( struct state *st )
 {
        XGCValues gcValues;
        XWindowAttributes XWinAttribs;
-       int iBitsPerPixel, i, j;
+       int /*iBitsPerPixel,*/ i, j;
        unsigned int distance_squared;
        float fraction;
 
@@ -208,6 +208,7 @@ static void Initialize( struct state *st )
        XGetWindowAttributes( st->dpy, st->window, &XWinAttribs );
 
        /* Find the preferred bits-per-pixel. (jwz) */
+#if 0
        {
                int pfvc = 0;
                XPixmapFormatValues *pfv = XListPixmapFormats( st->dpy, &pfvc );
@@ -220,6 +221,7 @@ static void Initialize( struct state *st )
                if( pfv )
                        XFree (pfv);
        }
+#endif
 
        /*  Create the GC. */
        st->gc = XCreateGC( st->dpy, st->window, 0, &gcValues );
index cae0397f740cfeac227d1233d42e9d8bae75a702..144e6859bd0f00d4e0d88620fac6ef91edb06d45 100644 (file)
@@ -110,7 +110,7 @@ init_images (struct state *st)
   images[i++] = &st->left_front;
   images[i++] = &st->right_front;
   images[i++] = &st->front;
-  images[i++] = &st->down;
+  images[i]   = &st->down;
 
 #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM)
 
@@ -122,7 +122,7 @@ init_images (struct state *st)
   bits[i++] = nose_f2_xpm;
   bits[i++] = nose_f3_xpm;
   bits[i++] = nose_f1_xpm;
-  bits[i++] = nose_f4_xpm;
+  bits[i]   = nose_f4_xpm;
 
   for (i = 0; i < sizeof (images) / sizeof(*images); i++)
     {
index cf708f4af68c63ea700f2aeac442d929d4578886..01a83831b1e9e85b4798df19c42c7ad3d73f138b 100644 (file)
@@ -276,11 +276,9 @@ check_death (ModeInfo * mi, pacmangamestruct * pp)
     Display *display = MI_DISPLAY (mi);
     Window window = MI_WINDOW (mi);
     unsigned int ghost;
-    int alldead;
 
     if (pp->pacman.aistate == ps_dieing) return;
 
-    alldead = 1;
     for (ghost = 0; ghost < pp->nghosts; ghost++) {
 
         /* The ghost have to be scared before you can kill them */
@@ -306,11 +304,7 @@ check_death (ModeInfo * mi, pacmangamestruct * pp)
             }
             continue;
         }
-        
-        alldead = 0;
     }
-    
-
 }
 
 /* Resets state of ghosts + pacman.  Creates a new level, draws that level. */
@@ -831,8 +825,6 @@ draw_pacman_sprite (ModeInfo * mi)
         pp->pacman.oldcf = pp->pacman.cf;
         pp->pacman.oldrf = pp->pacman.rf;
     }
-    old_mask_dir = dir;
-    old_mask_mouth = pp->pm_mouth;
 }
 
 #if 0
index 1452226af93e19af2d81e9e76c787482df8cbd00..070f9aa5fe3debb997e419605432339a95ff5614 100644 (file)
@@ -609,10 +609,8 @@ static void
 pac_chasing (pacmangamestruct * pp, pacmanstruct * p)
 {
     int posdirs[DIRVECS], nrdirs, i, highest = -(1 << 16),
-        score, dir = 0, prox, worst = 0;
-    int vx, vy;
-
-    prox = pac_ghost_prox_and_vector (pp, p, &vx, &vy);
+        score, dir = 0, worst = 0;
+    int vx = 0, vy = 0;
 
     nrdirs = pac_get_posdirs (pp, p, posdirs);
 
@@ -629,7 +627,6 @@ pac_chasing (pacmangamestruct * pp, pacmanstruct * p)
     }
     nrdirs--;
     posdirs[worst] = 0;
-    highest = -(1 << 16);
 
 
     /* get last possible direction if all else fails */
index 03f3bf42cef1d15bdd3b92d4d5b4dfdc86c45efc..860d0349e95e39cb28a293f2f77086e6641bba77 100644 (file)
@@ -243,7 +243,6 @@ static void
 setup_display (struct state *st)
 {
     XWindowAttributes xgwa;
-    Colormap cmap;
 
     int cell_size = get_integer_resource (st->dpy, "size", "Integer");
     int osize, alloc_size, oalloc;
@@ -398,8 +397,6 @@ setup_display (struct state *st)
     st->mindeathspeed *= st->diaglim;
     st->maxdeathspeed *= st->diaglim;
 
-    cmap = xgwa.colormap;
-    
     st->windowWidth = xgwa.width;
     st->windowHeight = xgwa.height;
     
index fac61995060e103740a8c5212a1ce64237189925..e030b1cd1d85f7cba8715e7f7b888803d000983d 100644 (file)
@@ -703,6 +703,7 @@ sinc(struct state *st, double x)
   int i;
   i = (int)(x * TABLE + 0.5);
   if (i >= TABLE) i = (TABLE-1) - (i-(TABLE-1));
+  if (i < 0) return 0.;
   return st->cos_tab[i];
 #elif 0
   return cos(x * M_PI/2);
@@ -732,7 +733,7 @@ add_circle_drop(struct state *st, int x, int y, int radius, int dheight)
       r = cx*cx + cy*cy;
       if (r > r2) break;
       buf[xx + yy*st->width] =
-        (short)(dheight * sinc(st, sqrt(r)/radius));
+        (short)(dheight * sinc(st, (radius > 0) ? sqrt(r)/radius : 0));
     }
 }
 
index bd251dc566a3a8f65096d71beffd67f3390e7e50..63121165d42608c123191ba1c6fdfb7b694f177e 100644 (file)
@@ -444,7 +444,7 @@ screenhack_table_handle_events (Display *dpy,
             ft->reshape_cb (dpy, window, closure,
                             event.xconfigure.width, event.xconfigure.height);
 #ifdef DEBUG_PAIR
-          if (event.xany.window == window2)
+          if (window2 && event.xany.window == window2)
             ft->reshape_cb (dpy, window2, closure2,
                             event.xconfigure.width, event.xconfigure.height);
 #endif
@@ -453,7 +453,7 @@ screenhack_table_handle_events (Display *dpy,
                (! (event.xany.window == window
                    ? ft->event_cb (dpy, window, closure, &event)
 #ifdef DEBUG_PAIR
-                   : event.xany.window == window2
+                   : (window2 && event.xany.window == window2)
                    ? ft->event_cb (dpy, window2, closure2, &event)
 #endif
                    : 0)))
index 39040ea377c66067619ea4bdc19932c23226d90a..881740c9996ed97fc30fbadae4b5b3f838928c4b 100644 (file)
@@ -296,12 +296,13 @@ static void Initialize( struct state *st )
 {
        XGCValues gcValues;
        XWindowAttributes XWinAttribs;
-       int iBitsPerPixel;
+       /*int iBitsPerPixel;*/
 
        /* Create the Image for drawing */
        XGetWindowAttributes( st->dpy, st->window, &XWinAttribs );
 
-       /* Find the preferred bits-per-pixel. (jwz) */
+#if 0
+  /* Find the preferred bits-per-pixel. (jwz) */
        {
                int i, pfvc = 0;
                XPixmapFormatValues *pfv = XListPixmapFormats( st->dpy, &pfvc );
@@ -314,6 +315,7 @@ static void Initialize( struct state *st )
                if( pfv )
                        XFree (pfv);
        }
+#endif
 
        /*  Create the GC. */
        st->gc = XCreateGC( st->dpy, st->window, 0, &gcValues );
index 60d2fd4c1015a0c8d14547671b40866663f46941..a44e11531b792a625ef384e1567c4daacf69be9c 100644 (file)
@@ -47,7 +47,6 @@ slidescreen_init (Display *dpy, Window window)
 {
   struct state *st = (struct state *) calloc (1, sizeof(*st));
   XWindowAttributes xgwa;
-  Visual *visual;
   XGCValues gcv;
   long gcflags;
 
@@ -58,7 +57,6 @@ slidescreen_init (Display *dpy, Window window)
                                             st->window, 0, 0);
   st->start_time = time ((time_t) 0);
 
-  visual = xgwa.visual;
   st->max_width = xgwa.width;
   st->max_height = xgwa.height;
 
index 0c665ea76e178ce13d75cb73320be73f2281fcd1..e0b0ea4fa72c268ce3b3e133816ce52891ae252a 100644 (file)
@@ -30,7 +30,8 @@ static const char sccsid[] = "@(#)slip.c      5.00 2000/11/01 xlockmore";
 # define DEFAULTS      "*delay: 50000 \n" \
                                        "*count: 35 \n" \
                                        "*cycles: 50 \n" \
-                                       "*ncolors: 200 \n"
+                                       "*ncolors: 200 \n" \
+                                       "*fpsSolid:     true \n"
 
 # define refresh_slip 0
 # define slip_handle_event 0
index 1ff2db11076c3c7c41340a06085f906e09377048..96a880e57fda2f1434858ca88d6fbd29bde90725 100644 (file)
@@ -1105,7 +1105,7 @@ render_speedmine (struct state *st, Drawable d)
        } else {
                t = MAX(begin_at(st), TERRAIN_LENGTH/4);
                /*t = TERRAIN_LENGTH/4; dt = 2; */
-               dt = (t >= 3*TERRAIN_LENGTH/4 ? 1 : 2);
+               /*dt = (t >= 3*TERRAIN_LENGTH/4 ? 1 : 2);*/
                i = (st->nearest -t + TERRAIN_LENGTH) % TERRAIN_LENGTH;
                render_block (st, d, st->tunnelend_gc, t);
        }
index d8b76b24070b4d3d2f3c7010a59da32688d6b1d2..aade77df66dfa1eb3b0e4505147838ecc601a646 100644 (file)
@@ -91,7 +91,7 @@ spotlight_init (Display *dpy, Window window)
   XWindowAttributes xgwa;
   long gcflags;
   Colormap cmap;
-  unsigned long fg, bg;
+  unsigned long bg;
   GC clip_gc;
   Pixmap clip_pm;
 
@@ -104,7 +104,6 @@ spotlight_init (Display *dpy, Window window)
   st->sizex = xgwa.width;
   st->sizey = xgwa.height;
   cmap = xgwa.colormap;
-  fg = get_pixel_resource (st->dpy, cmap, "foreground", "Foreground");
   bg = get_pixel_resource (st->dpy, cmap, "background", "Background");
 
   /* read parameters, keep em sane */
index dce0182eeb88c297d3a5339cc354cc906abb23b0..8343d010aee498c7eb88e9a8ad186ab5fcb1a81a 100644 (file)
@@ -607,7 +607,7 @@ init_strange(ModeInfo * mi)
        #define A Attractor
        if (useAccumulator) {
                XWindowAttributes xgwa;
-               int i,j,got_color;
+               int i,j;
                XGetWindowAttributes (display, window, &xgwa);
                /* cmap = xgwa.colormap; */
                /* cmap = XCreateColormap(display, window, MI_VISUAL(mi), AllocAll); */
@@ -638,7 +638,7 @@ init_strange(ModeInfo * mi)
                                cols[i].green = 65536*(li-FULLBLUE)/(256-FULLBLUE);
                                cols[i].blue = 65535;
                        }
-                       got_color = XAllocColor (display, xgwa.colormap, &cols[i]);
+                       XAllocColor (display, xgwa.colormap, &cols[i]);
                        /*
                        if (!XAllocColor(MI_DISPLAY(mi), cmap, &cols[i])) {
                        if (!XAllocColor(display, cmap, &cols[i])) {
index 82c2bacd483b58c68703919e4aa047624a7b138b..ce9c696b466835212fcfb9fd715b0c1b8948d07b 100644 (file)
@@ -318,7 +318,6 @@ static inline unsigned long rgb2point(int depth, int r, int g, int b)
 
     switch(depth) {
         case 32:
-            ret = 0xff000000;
         case 24:
 #ifdef HAVE_COCOA
             /* This program idiotically does not go through a color map, so
@@ -494,16 +493,11 @@ movedrawcrack(struct state *st, GC fgc, struct field *f, int cracknum)
         cr->y += ((float) STEP * sin(cr->t * M_PI/180));
     }
     else {
-        float oldx, oldy;
-
-        oldx = cr->x;
-        oldy = cr->y;
-
         cr->x += ((float) cr->ys * cos(cr->t * M_PI/180));
         cr->y += ((float) cr->ys * sin(cr->t * M_PI/180));
 
         cr->x += ((float) cr->xs * cos(cr->t * M_PI/180 - M_PI / 2));
-        cr->x += ((float) cr->xs * sin(cr->t * M_PI/180 - M_PI / 2));
+        cr->y += ((float) cr->xs * sin(cr->t * M_PI/180 - M_PI / 2));
 
         cr->t += cr->t_inc;
         cr->degrees_drawn += abs(cr->t_inc);
index 9915b36e14335b0b7d00cc7c50981f20785443f6..3f413432564b15c8f46f4f75db4043d443e9ca2c 100644 (file)
@@ -301,6 +301,8 @@ draw_triangle (ModeInfo * mi)
                                  {
                                        free_colors(mi->dpy, mi->xgwa.colormap, mi->colors,
                                                                mi->npixels);
+                    mi->npixels = 
+                      get_integer_resource (mi->dpy, "ncolors", "Integer");
                                        make_smooth_colormap (mi->dpy,
                                                                                  mi->xgwa.visual, mi->xgwa.colormap,
                                                                                  mi->colors, &mi->npixels,
index c6069e42525b7bbe85fea156fe21948b599c08d6..b96d3dc8e4b84f585b47dc761b7f899543df9a57 100644 (file)
@@ -264,7 +264,7 @@ bordupdate (struct state *st)
     for (x = xmin; x <= xmax; x++)
       sp (st, x, ybord, st->bordcol);
     for (y = ymin; y <= ymax; y++)
-      sp (st, ybord, y, st->bordcol);
+      sp (st, xbord, y, st->bordcol);
   }
 }
 
index c9f628abbb695c094b2e2ade301ad2fd168ec73b..b3d470f2e1219aeef372f25eb5e95b89def2a206 100644 (file)
@@ -85,7 +85,7 @@ display_image (state *st, const char *file)
   NSImage *image = [[NSImage alloc] 
                      initWithContentsOfFile:
                        [NSString stringWithCString: file
-                                          encoding: kCFStringEncodingUTF8]];
+                                          encoding: NSUTF8StringEncoding]];
 
   if (! image) {
     fprintf (stderr, "webcollage: failed to load \"%s\"\n", file);
index f05aee166f9d6ecf778a9bcddaec5f7077ff76c4..6c6e9d2ba236039ee2deff34cb7deedaabf701c7 100644 (file)
@@ -214,6 +214,7 @@ bevel_image (NSImage *img, int bevel_pct,
                 fraction: 1.0];
   [img unlockFocus];
 
+  [rep release];
   [bevel_img release];
 
   if (verbose_p)
@@ -374,7 +375,7 @@ main (int argc, char **argv)
   s = argv[i++]; if (1 != sscanf (s, " %d %c", &to_x, &dummy)) usage();
   s = argv[i++]; if (1 != sscanf (s, " %d %c", &to_y, &dummy)) usage();
   s = argv[i++]; if (1 != sscanf (s, " %d %c", &w, &dummy)) usage();
-  s = argv[i++]; if (1 != sscanf (s, " %d %c", &h, &dummy)) usage();
+  s = argv[i];   if (1 != sscanf (s, " %d %c", &h, &dummy)) usage();
 
   bevel_pct = 10; /* #### */
 
index 631b42b86ad3f336c02e10f4639e950d4cff1ee1..0e55eabd1b81e4e2e421cb0f2ed5cd23f5cd5f49 100644 (file)
@@ -101,16 +101,16 @@ static int gang( int x1, int y1, int x2, int y2 )
                        tang = 90;
                else
                        tang = 270;
-       }
-       if ( y1 == y2 ) {
+       } else if ( y1 == y2 ) {
 
                if ( x1 < x2 )
                        tang = 0;
                else
                        tang = 180;
 
-       } else
-       tang = (int)(0.5+atan2( -(y2-y1), x2 - x1 ) * 180.0 / M_PI );
+       } else {
+          tang = (int)(0.5+atan2( -(y2-y1), x2 - x1 ) * 180.0 / M_PI );
+        }
 
        while ( tang < 0 )
                tang += 360;
@@ -170,7 +170,6 @@ static void initColorChanger( struct state *st, color_changer * ch )
 {
 
        int q;
-       int min, max;
        XColor old_color, new_color;
 
        ch->shade_max = 2048;
@@ -185,9 +184,6 @@ static void initColorChanger( struct state *st, color_changer * ch )
        initXColor( &new_color );
        
        for ( q = 0; q < ch->shade_max; q += ch->shade_use ){
-               min = q;
-               max = q + ch->shade_use;
-               if ( max >= ch->shade_max ) max = ch->shade_max-1;
                blend_palette( ch->shade + q, ch->shade_use, &old_color, &new_color );
                old_color = new_color;
 
index b101f8573a45e47a827fd808cff09e106736b968..55134d915629e269801bd6379fc3c5ae74c77315 100644 (file)
@@ -62,6 +62,10 @@ xjack_reshape (Display *dpy, Window window, void *closure,
   st->rows--;
   st->columns--;
 
+  /* If the window is stupidly small, just truncate. */
+  if (st->rows < 4)     st->rows = 4;
+  if (st->columns < 12) st->columns = 12;
+
   if (st->y > st->rows)    st->y = st->rows-1;
   if (st->x > st->columns) st->x = st->columns-2;
 
@@ -116,9 +120,12 @@ xjack_init (Display *dpy, Window window)
 
   xjack_reshape (dpy, window, st, st->xgwa.width, st->xgwa.height);
 
-  st->left = 0xFF & (random() % ((st->columns / 2)+1));
-  st->right = st->left + (0xFF & (random() % (st->columns - st->left - 10)
-                                  + 10));
+  if (st->columns >= 21)
+    {
+      st->left = 0xFF & (random() % ((st->columns / 2)+1));
+      st->right = st->left + (0xFF & (random() % (st->columns - st->left - 10)
+                                      + 10));
+    }
   st->x = 0;
   st->y = 0;
 
index 34cffeb1c60482813fbcd864def957a8cbe5c51c..ca4f14935110f92d30c20f8221938d2b426bc366 100644 (file)
@@ -282,7 +282,6 @@ xlockmore_init (Display *dpy, Window window,
   XGCValues gcv;
   XColor color;
   int i;
-  int orig_pause;
   Bool root_p;
 
   if (! xlmft)
@@ -449,7 +448,6 @@ xlockmore_init (Display *dpy, Window window,
     mi->pause = 0;
   else if (mi->pause > 100000000)
     mi->pause = 100000000;
-  orig_pause = mi->pause;
 
   /* If this hack uses fonts (meaning, mentioned "font" in DEFAULTS)
      then load it. */
index 60fe09dd2b9c487dedf355b3ceaaab5a50231ac8..6ac91a1a793fde87e75d049a595419052875d42b 100644 (file)
@@ -502,6 +502,19 @@ init_spinners (m_state *state)
 }
 
 
+static void
+clear_spinners (m_state *state)
+{
+  int i;
+  for (i = 0; i < state->grid_width * state->grid_height; i++)
+    if (state->cells[i].spinner)
+      {
+        state->cells[i].spinner = 0;
+        state->cells[i].changed = 1;
+      }
+}
+
+
 static void set_mode (m_state *, m_mode);
 
 
@@ -563,12 +576,7 @@ init_drain (m_state *state)
     }
 
   /* Turn off all the spinners, else they never go away. */
-  for (i = 0; i < state->grid_width * state->grid_height; i++)
-    if (state->cells[i].spinner)
-      {
-        state->cells[i].spinner = 0;
-        state->cells[i].changed = 1;
-      }
+  clear_spinners (state);
 }
 
 static Bool
@@ -1176,6 +1184,7 @@ hack_text (m_state *state)
         {
         case TRACE_TEXT_A:
         case TRACE_TEXT_B:
+          clear_spinners (state);
           if (state->mode == TRACE_TEXT_A)
             {
               if (state->grid_width >= 52)
@@ -1250,6 +1259,7 @@ hack_text (m_state *state)
 
         case KNOCK:
           {
+            clear_spinners (state);
             state->typing = ("\001Wake up, Neo...\n"
                              "\001The Matrix has you...\n"
                              "\001Follow the white rabbit.\n"
@@ -1275,6 +1285,7 @@ hack_text (m_state *state)
                lot like Cisco IOS to me.  (IOS is a descendant of VMS.)
             */
 
+            clear_spinners (state);
             state->typing =
 # ifdef __GNUC__
             __extension__  /* don't warn about "string length is greater than
@@ -1564,7 +1575,7 @@ hack_matrix (m_state *state)
 
       if (state->mode == TRACE_A || state->mode == TRACE_B)
         bottom_feeder_p = True;
-      if (state->insert_top_p && state->insert_bottom_p)
+      else if (state->insert_top_p && state->insert_bottom_p)
         bottom_feeder_p = (random() & 1);
       else
         bottom_feeder_p = state->insert_bottom_p;
index f53b9136a71ce23b61f86b62b20f04050baaf447..9b9faef799d9b53658c5c9bbade18c6a6cb63def 100644 (file)
@@ -482,8 +482,8 @@ static void computeColorIndices(struct state *st)
     if (st->graySIndex[st->trailLen-1-i] > 19) st->graySIndex[st->trailLen-1-i] = 19;
   }
 
-  schizoLength = st->trailLen/4;
-  if (schizoLength < 3) schizoLength = 3;
+  /*schizoLength = st->trailLen/4;
+  if (schizoLength < 3) schizoLength = 3;*/
   /* red schizo */
   for (i = 0; i < st->trailLen; i++) {
     /*    redSIndex[trailLen-1-i] = 
index bee4176f2491f3f1f799a34417cbbc84f96d5cc7..73b27b05f3e417f25f1eca51fbd34c7c1a85fbb4 100644 (file)
@@ -72,7 +72,7 @@ zoom_init (Display *dpy, Window window)
   XGCValues gcv;
   XWindowAttributes xgwa;
   Colormap cmap;
-  unsigned long fg, bg;
+  unsigned long bg;
   long gcflags;
   int nblocksx, nblocksy;
 
@@ -83,7 +83,6 @@ zoom_init (Display *dpy, Window window)
   st->sizex = xgwa.width;
   st->sizey = xgwa.height;
   cmap = xgwa.colormap;
-  fg = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground");
   bg = get_pixel_resource(st->dpy, cmap, "background", "Background");
 
   st->delay = get_integer_resource(st->dpy, "delay", "Integer");
diff --git a/po/._pt_BR.po b/po/._pt_BR.po
new file mode 100644 (file)
index 0000000..026e870
Binary files /dev/null and b/po/._pt_BR.po differ
index cd62c28f680eda10584c2448c7801f59861f2b22..6fd50302d3a37955a8dffe87edb032800710cd72 100644 (file)
@@ -1,4 +1,4 @@
-# Auto-generated: Tue Apr 13 13:37:16 PDT 2010
+# Auto-generated: Wed Sep 15 03:10:58 PDT 2010
 driver/demo-Gtk-conf.c
 driver/demo-Gtk-support.c
 driver/demo-Gtk-widgets.c
index 15d310b2977bd0882a48e2f352e7d50cc7ad7790..a0c049b9389489cafd5bab2c27c808200bd2d2ad 100644 (file)
 # Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: 5.11\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-02-13 12:26+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2010-06-17 10:58-0300\n"
+"Last-Translator: Sérgio Brandão Cipolla <secipolla@gmail.com>\n"
+"Language-Team: Debian-BR Project <debian-l10n-portuguese@lists.debian.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: driver/demo-Gtk-conf.c:818
 msgid "Browse..."
-msgstr ""
+msgstr "Pesquisar..."
 
 #: driver/demo-Gtk-conf.c:1110
 msgid "Select file."
-msgstr ""
+msgstr "Selecionar arquivo."
 
 #: driver/demo-Gtk-support.c:135
 #, c-format
 msgid "Couldn't find pixmap file: %s"
-msgstr ""
+msgstr "Arquivo pixmap não encontrado: %s"
 
-#: driver/demo-Gtk-support.c:147 driver/demo-Gtk-support.c:179
+#: driver/demo-Gtk-support.c:147
+#: driver/demo-Gtk-support.c:179
 #, c-format
 msgid "Error loading pixmap file: %s"
-msgstr ""
+msgstr "Erro ao carregar o arquivo pixmap: %s"
 
 #: driver/demo-Gtk-support.c:182
 #, c-format
 msgid "reason: %s\n"
-msgstr ""
+msgstr "razão: %s\n"
 
-#: driver/demo-Gtk-widgets.c:161 driver/xscreensaver-demo.glade2.h:71
-#, fuzzy
+#: driver/demo-Gtk-widgets.c:161
+#: driver/xscreensaver-demo.glade2.h:71
 msgid "XScreenSaver"
-msgstr "Propriedades da proteo de tela"
+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:84
 msgid "_File"
-msgstr ""
+msgstr "Ar_quivo"
 
-#: driver/demo-Gtk-widgets.c:202 driver/xscreensaver-demo.glade2.h:76
+#: driver/demo-Gtk-widgets.c:202
+#: driver/xscreensaver-demo.glade2.h:76
 msgid "_Blank Screen Now"
-msgstr ""
+msgstr "_Apagar a Tela Agora"
 
 #: driver/demo-Gtk-widgets.c:211
-msgid ""
-"Activate the XScreenSaver daemon now (locking the screen if so configured.)"
-msgstr ""
+msgid "Activate the XScreenSaver daemon now (locking the screen if so configured.)"
+msgstr "Ativar o daemon do XScreenSaver agora (bloqueando a tela se configurado assim)."
 
-#: driver/demo-Gtk-widgets.c:215 driver/xscreensaver-demo.glade2.h:89
+#: driver/demo-Gtk-widgets.c:215
+#: driver/xscreensaver-demo.glade2.h:89
 msgid "_Lock Screen Now"
-msgstr ""
+msgstr "_Bloquear a Tela Agora"
 
 #: driver/demo-Gtk-widgets.c:224
 msgid "Lock the screen now (even if \"Lock Screen\" is unchecked.)"
-msgstr ""
+msgstr "Bloquear a tela agora (ainda que \"Bloquear Tela\" esteja desmarcado)."
 
-#: driver/demo-Gtk-widgets.c:228 driver/xscreensaver-demo.glade2.h:87
+#: driver/demo-Gtk-widgets.c:228
+#: driver/xscreensaver-demo.glade2.h:87
 msgid "_Kill Daemon"
-msgstr ""
+msgstr "_Interromper Daemon"
 
 #: driver/demo-Gtk-widgets.c:237
 msgid "Tell the running XScreenSaver daemon to exit."
-msgstr ""
+msgstr "Informar o daemon do XScreenSaver em execução para sair."
 
-#: driver/demo-Gtk-widgets.c:241 driver/xscreensaver-demo.glade2.h:98
+#: driver/demo-Gtk-widgets.c:241
+#: driver/xscreensaver-demo.glade2.h:98
 msgid "_Restart Daemon"
-msgstr ""
+msgstr "_Reiniciar Daemon"
 
 #: driver/demo-Gtk-widgets.c:250
 msgid "Kill and re-launch the XScreenSaver daemon."
-msgstr ""
+msgstr "Interromper e reiniciar o daemon do XScreenSaver."
 
 #: driver/demo-Gtk-widgets.c:263
 msgid "_Exit"
-msgstr ""
+msgstr "_Sair"
 
 #: driver/demo-Gtk-widgets.c:272
-msgid ""
-"Exit the xscreensaver-demo program (but leave the XScreenSaver daemon "
-"running in the background.)"
-msgstr ""
+msgid "Exit the xscreensaver-demo program (but leave the XScreenSaver daemon running in the background.)"
+msgstr "Sair do programa xscreensaver-demo (mas deixar o daemon do XScreenSaver em execução)."
 
-#: driver/demo-Gtk-widgets.c:276 driver/xscreensaver-demo.glade2.h:85
+#: driver/demo-Gtk-widgets.c:276
+#: driver/xscreensaver-demo.glade2.h:85
 msgid "_Help"
-msgstr ""
+msgstr "Aj_uda"
 
-#: driver/demo-Gtk-widgets.c:296 driver/xscreensaver-demo.glade2.h:72
+#: driver/demo-Gtk-widgets.c:296
+#: driver/xscreensaver-demo.glade2.h:72
 msgid "_About..."
-msgstr ""
+msgstr "_Sobre..."
 
 #: driver/demo-Gtk-widgets.c:305
 msgid "Display version information."
-msgstr ""
+msgstr "Exibir informação da versão."
 
-#: driver/demo-Gtk-widgets.c:309 driver/xscreensaver-demo.glade2.h:83
+#: driver/demo-Gtk-widgets.c:309
+#: driver/xscreensaver-demo.glade2.h:83
 msgid "_Documentation..."
-msgstr ""
+msgstr "_Documentação..."
 
 #: driver/demo-Gtk-widgets.c:318
 msgid "Go to the documentation on the XScreenSaver web page."
-msgstr ""
+msgstr "Ir para a página de documentação do XScreenSaver na web."
 
 #: driver/demo-Gtk-widgets.c:348
 msgid "Cycle After"
-msgstr ""
+msgstr "Circular Após"
 
-#: driver/demo-Gtk-widgets.c:370 driver/xscreensaver-demo.glade2.h:63
+#: driver/demo-Gtk-widgets.c:370
+#: driver/xscreensaver-demo.glade2.h:63
 msgid "Whether a password should be required to un-blank the screen."
-msgstr ""
+msgstr "Se uma senha deve ser requisitada para reativar a tela."
 
 #: driver/demo-Gtk-widgets.c:372
 msgid "Lock Screen After"
-msgstr ""
+msgstr "Bloquear Tela Após"
 
 #: driver/demo-Gtk-widgets.c:380
 msgid "Blank After"
-msgstr ""
+msgstr "Ativar Após"
 
-#: driver/demo-Gtk-widgets.c:403 driver/demo-Gtk-widgets.c:453
-#: driver/demo-Gtk-widgets.c:467 driver/demo-Gtk-widgets.c:1016
+#: 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
+msgstr "Quanto tempo antes do monitor apagar-se."
+
+#: 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 ""
+msgstr "minutos"
 
-#: driver/demo-Gtk-widgets.c:482 driver/demo-Gtk.c:3233
+#: driver/demo-Gtk-widgets.c:482
+#: driver/demo-Gtk.c:3233
 msgid "Preview"
-msgstr ""
+msgstr "Visualizar"
 
-#: 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:490
+#: driver/xscreensaver-demo.glade2.h:10
+msgid "Demo the selected screen saver in full-screen mode (click the mouse to return.)"
+msgstr "Demonstrar o protetor de tela selecionado em tela cheia (clicar com o mouse para voltar)."
 
 #: driver/demo-Gtk-widgets.c:492
 msgid "Settings..."
-msgstr ""
+msgstr "Configurações..."
 
-#: driver/demo-Gtk-widgets.c:500 driver/xscreensaver-demo.glade2.h:7
+#: driver/demo-Gtk-widgets.c:500
+#: driver/xscreensaver-demo.glade2.h:7
 msgid "Customization and explanation of the selected screen saver."
-msgstr ""
+msgstr "Personalização e explanação do protetor de tela selecionado."
 
 #: driver/demo-Gtk-widgets.c:521
 msgid "Mode:"
-msgstr ""
+msgstr "Modo:"
 
 #: driver/demo-Gtk-widgets.c:539
-#, fuzzy
 msgid "Disable Screen Saver"
-msgstr "Propriedades da proteo de tela"
+msgstr "Desativar Protetor de Tela"
 
 #: driver/demo-Gtk-widgets.c:542
 msgid "Blank Screen Only"
-msgstr ""
+msgstr "Apenas Apagar Tela"
 
 #: driver/demo-Gtk-widgets.c:545
-#, fuzzy
 msgid "Only One Screen Saver"
-msgstr "Propriedades da proteo de tela"
+msgstr "Apenas Um Protetor de Tela"
 
 #: driver/demo-Gtk-widgets.c:548
-#, fuzzy
 msgid "Random Screen Saver"
-msgstr "Propriedades da proteo de tela"
+msgstr "Protetor de Tela Aleatório"
 
-#: driver/demo-Gtk-widgets.c:571 driver/demo-Gtk.c:2419
+#: driver/demo-Gtk-widgets.c:571
+#: driver/demo-Gtk.c:2419
 msgid "Use"
-msgstr ""
+msgstr "Uso"
 
-#: driver/demo-Gtk-widgets.c:591 driver/demo-Gtk.c:2429
-#, fuzzy
+#: driver/demo-Gtk-widgets.c:591
+#: driver/demo-Gtk.c:2429
 msgid "Screen Saver"
-msgstr "Propriedades da proteo de tela"
+msgstr "Protetor de Tela"
 
 #: driver/demo-Gtk-widgets.c:644
 msgid "\\/"
-msgstr ""
+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: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 "Executar o próximo protetor de tela na lista, em tela cheia (clicar com o mouse para voltar)."
 
 #: driver/demo-Gtk-widgets.c:654
 msgid "/\\"
-msgstr ""
+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: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 "Executar o protetor de tela anterior na lista, em tela cheia (clicar com o mouse para voltar)."
 
-#: driver/demo-Gtk-widgets.c:664 driver/demo-Gtk-widgets.c:1607
+#: driver/demo-Gtk-widgets.c:664
+#: driver/demo-Gtk-widgets.c:1607
 #: driver/xscreensaver-demo.glade2.h:11
 msgid "Description"
-msgstr ""
+msgstr "Descrição"
 
 #: driver/demo-Gtk-widgets.c:691
 msgid "Display Modes"
-msgstr ""
+msgstr "Modos de Exibição"
 
 #: driver/demo-Gtk-widgets.c:707
 msgid "Diagnostics"
-msgstr ""
+msgstr "Diagnósticos"
 
 #: driver/demo-Gtk-widgets.c:751
 msgid "Whether the daemon should print lots of debugging information."
-msgstr ""
+msgstr "Se o daemon deve imprimir montes de informação de depuração."
 
 #: driver/demo-Gtk-widgets.c:753
 msgid "Verbose Diagnostics"
-msgstr ""
+msgstr "Diagnósticos Verbosos"
 
 #: driver/demo-Gtk-widgets.c:768
-msgid ""
-"Whether any error output of the display modes should be redirected to the "
-"screen."
-msgstr ""
+msgid "Whether any error output of the display modes should be redirected to the screen."
+msgstr "Se qualquer saída de erro dos modos de exibição deve ser redirecionada à tela."
 
 #: driver/demo-Gtk-widgets.c:770
 msgid "Display Subprocess Errors"
-msgstr ""
+msgstr "Exibir Erros de Subprocessos"
 
 #: 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 ""
+msgid "Whether the splash screen (with the version number and `Help' button) should be momentarily displayed when the daemon first starts up."
+msgstr "Se a tela de abertura (com o número da versão e o botão `Ajuda') deve ser exibida momentaneamente no início do daemon."
 
 #: driver/demo-Gtk-widgets.c:787
 msgid "Display Splash Screen at Startup"
-msgstr ""
+msgstr "Exibir Tela de Abertura ao Iniciar"
 
 #: driver/demo-Gtk-widgets.c:796
 msgid "Colormaps"
-msgstr ""
+msgstr "Mapa de Cores"
 
-#: 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: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 "Se se deve instalar um mapa de cores privado ao executar em modo de 8-bit no Visual padrão."
 
 #: driver/demo-Gtk-widgets.c:842
 msgid "Install Colormap"
-msgstr ""
+msgstr "Instalar Mapa de Cores"
 
-#: 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:865
+#: driver/xscreensaver-demo.glade2.h:69
+msgid "Whether the screen should slowly fade to black when the screen saver activates."
+msgstr "Se a tela deve apagar-se gradualmente na ativação do protetor de tela."
 
 #: driver/demo-Gtk-widgets.c:867
 msgid "Fade To Black When Blanking"
-msgstr ""
+msgstr "Apagar Gradualmente"
 
-#: 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:882
+#: driver/xscreensaver-demo.glade2.h:68
+msgid "Whether the screen should slowly fade in from black when the screen saver deactivates."
+msgstr "Se a tela deve ser reativada gradualmente na desativação do protetor de tela."
 
 #: driver/demo-Gtk-widgets.c:884
 msgid "Fade From Black When Unblanking"
-msgstr ""
+msgstr "Reativar Gradualmente"
 
 #: driver/demo-Gtk-widgets.c:910
 msgid "Fade Duration"
-msgstr ""
+msgstr "Duração"
 
-#: driver/demo-Gtk-widgets.c:928 driver/xscreensaver-demo.glade2.h:26
+#: driver/demo-Gtk-widgets.c:928
+#: driver/xscreensaver-demo.glade2.h:26
 msgid "How long it should take for the screen to fade in and out."
-msgstr ""
+msgstr "Quanto tempo deve levar o apagamento e a reativação graduais."
 
-#: driver/demo-Gtk-widgets.c:932 driver/xscreensaver-demo.glade2.h:111
+#: driver/demo-Gtk-widgets.c:932
+#: driver/xscreensaver-demo.glade2.h:111
 msgid "seconds"
-msgstr ""
+msgstr "segundos"
 
-#: driver/demo-Gtk-widgets.c:942 driver/xscreensaver-demo.glade2.h:13
+#: driver/demo-Gtk-widgets.c:942
+#: driver/xscreensaver-demo.glade2.h:13
 msgid "Display Power Management"
-msgstr ""
+msgstr "Gerenciamento de Energia do Monitor"
 
-#: driver/demo-Gtk-widgets.c:986 driver/xscreensaver-demo.glade2.h:67
+#: driver/demo-Gtk-widgets.c:986
+#: driver/xscreensaver-demo.glade2.h:67
 msgid "Whether the monitor should be powered down after a while."
-msgstr ""
+msgstr "Se o monitor deve ser desligado após algum tempo."
 
 #: driver/demo-Gtk-widgets.c:988
 msgid "Power Management Enabled"
-msgstr ""
+msgstr "Gerenciamento de Energia Ativado"
 
 #: driver/demo-Gtk-widgets.c:1056
 msgid "Off After"
-msgstr ""
+msgstr "Desligar Após"
 
 #: driver/demo-Gtk-widgets.c:1069
 msgid "Suspend After"
-msgstr ""
+msgstr "Suspender Após"
 
 #: driver/demo-Gtk-widgets.c:1082
 msgid "Standby After"
-msgstr ""
+msgstr "Standby Após"
 
-#: driver/demo-Gtk-widgets.c:1105 driver/xscreensaver-demo.glade2.h:28
+#: driver/demo-Gtk-widgets.c:1105
+#: driver/xscreensaver-demo.glade2.h:28
 msgid "How long until the monitor goes into power-saving mode."
-msgstr ""
+msgstr "Quanto tempo até que o monitor entre em modo de economia de energia."
 
-#: driver/demo-Gtk-widgets.c:1119 driver/xscreensaver-demo.glade2.h:29
+#: driver/demo-Gtk-widgets.c:1119
+#: driver/xscreensaver-demo.glade2.h:29
 msgid "How long until the monitor powers down."
-msgstr ""
+msgstr "Quanto tempo até que o monitor desligue."
 
-#: driver/demo-Gtk-widgets.c:1123 driver/xscreensaver-demo.glade2.h:30
+#: driver/demo-Gtk-widgets.c:1123
+#: driver/xscreensaver-demo.glade2.h:30
 msgid "Image Manipulation"
-msgstr ""
+msgstr "Manipulação de Imagem"
 
-#: 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: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 "Se os modos de manipulação de imagem devem ser executados sobre uma imagem na sua área de trabalho."
 
 #: driver/demo-Gtk-widgets.c:1169
 msgid "Grab Desktop Images"
-msgstr ""
+msgstr "Capturar Imagens da Área de Trabalho"
 
 #: 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 ""
+msgid "Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one)."
+msgstr "Se os modos de manipulação de imagem devem ser executados sobre imagens da captura de vídeo do sistema (se houver)."
 
 #: driver/demo-Gtk-widgets.c:1186
 msgid "Grab Video Frames"
-msgstr ""
+msgstr "Capturar Quadros de Vídeo"
 
-#: 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:1201
+#: driver/xscreensaver-demo.glade2.h:66
+msgid "Whether the image-manipulating modes should operate on random images loaded from disk."
+msgstr "Se os modos de manipulação de imagem devem ser executados sobre imagens aleatórias carregadas do disco."
 
 #: driver/demo-Gtk-widgets.c:1203
 msgid "Choose Random Image:"
-msgstr ""
+msgstr "Escolher Imagem Aleatória:"
 
-#: driver/demo-Gtk-widgets.c:1236 driver/xscreensaver-demo.glade2.h:53
+#: driver/demo-Gtk-widgets.c:1236
+#: driver/xscreensaver-demo.glade2.h:53
 msgid "The directory from which images will be randomly chosen."
-msgstr ""
+msgstr "O diretório do qual imagens serão escolhidas aleatoriamente."
 
 #: driver/demo-Gtk-widgets.c:1238
 msgid "Browse"
-msgstr ""
+msgstr "Pesquisar"
 
-#: driver/demo-Gtk-widgets.c:1246 driver/demo-Gtk-widgets.c:1599
+#: driver/demo-Gtk-widgets.c:1246
+#: driver/demo-Gtk-widgets.c:1599
 #: driver/xscreensaver-demo.glade2.h:2
 msgid "Advanced"
-msgstr ""
+msgstr "Avançado"
 
 #: driver/demo-Gtk-widgets.c:1444
 msgid "XScreenSaver: Mode-Specific Settings"
-msgstr ""
+msgstr "XScreenSaver: Configurações Específicas dos Modos"
 
-#: driver/demo-Gtk-widgets.c:1466 driver/xscreensaver-demo.glade2.h:41
+#: driver/demo-Gtk-widgets.c:1466
+#: driver/xscreensaver-demo.glade2.h:41
 msgid "Settings"
-msgstr ""
+msgstr "Configurações"
 
-#: driver/demo-Gtk-widgets.c:1495 driver/xscreensaver-demo.glade2.h:43
+#: driver/demo-Gtk-widgets.c:1495
+#: driver/xscreensaver-demo.glade2.h:43
 msgid "Standard"
-msgstr ""
+msgstr "Básico"
 
 #: driver/demo-Gtk-widgets.c:1532
 msgid "Visual:"
-msgstr ""
+msgstr "Visual:"
 
-#: driver/demo-Gtk-widgets.c:1550 driver/demo-Gtk-widgets.c:1573
-#: driver/demo-Gtk.c:1695 driver/demo-Gtk.c:3252
+#: 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 ""
+msgstr "Qualquer"
 
-#: driver/demo-Gtk-widgets.c:1551 driver/xscreensaver-demo.glade2.h:4
+#: driver/demo-Gtk-widgets.c:1551
+#: driver/xscreensaver-demo.glade2.h:4
 msgid "Best"
-msgstr ""
+msgstr "Melhor"
 
-#: driver/demo-Gtk-widgets.c:1552 driver/xscreensaver-demo.glade2.h:8
+#: driver/demo-Gtk-widgets.c:1552
+#: driver/xscreensaver-demo.glade2.h:8
 msgid "Default"
-msgstr ""
+msgstr "Padrão"
 
-#: driver/demo-Gtk-widgets.c:1553 driver/xscreensaver-demo.glade2.h:9
+#: driver/demo-Gtk-widgets.c:1553
+#: driver/xscreensaver-demo.glade2.h:9
 msgid "Default-N"
-msgstr ""
+msgstr "Padrão-N"
 
-#: driver/demo-Gtk-widgets.c:1554 driver/xscreensaver-demo.glade2.h:18
+#: driver/demo-Gtk-widgets.c:1554
+#: driver/xscreensaver-demo.glade2.h:18
 msgid "GL"
-msgstr ""
+msgstr "GL"
 
-#: driver/demo-Gtk-widgets.c:1555 driver/xscreensaver-demo.glade2.h:54
+#: driver/demo-Gtk-widgets.c:1555
+#: driver/xscreensaver-demo.glade2.h:54
 msgid "TrueColor"
-msgstr ""
+msgstr "TrueColor"
 
-#: driver/demo-Gtk-widgets.c:1556 driver/xscreensaver-demo.glade2.h:38
+#: driver/demo-Gtk-widgets.c:1556
+#: driver/xscreensaver-demo.glade2.h:38
 msgid "PseudoColor"
-msgstr ""
+msgstr "PseudoColor"
 
-#: driver/demo-Gtk-widgets.c:1557 driver/xscreensaver-demo.glade2.h:44
+#: driver/demo-Gtk-widgets.c:1557
+#: driver/xscreensaver-demo.glade2.h:44
 msgid "StaticGray"
-msgstr ""
+msgstr "StaticGray"
 
-#: driver/demo-Gtk-widgets.c:1558 driver/xscreensaver-demo.glade2.h:22
+#: driver/demo-Gtk-widgets.c:1558
+#: driver/xscreensaver-demo.glade2.h:22
 msgid "GrayScale"
-msgstr ""
+msgstr "GrayScale"
 
-#: driver/demo-Gtk-widgets.c:1559 driver/xscreensaver-demo.glade2.h:12
+#: driver/demo-Gtk-widgets.c:1559
+#: driver/xscreensaver-demo.glade2.h:12
 msgid "DirectColor"
-msgstr ""
+msgstr "DirectColor"
 
-#: driver/demo-Gtk-widgets.c:1560 driver/xscreensaver-demo.glade2.h:6
+#: driver/demo-Gtk-widgets.c:1560
+#: driver/xscreensaver-demo.glade2.h:6
 #: hacks/config/fuzzyflakes.xml.h:3
 msgid "Color"
-msgstr ""
+msgstr "Cor"
 
-#: driver/demo-Gtk-widgets.c:1561 driver/xscreensaver-demo.glade2.h:21
+#: driver/demo-Gtk-widgets.c:1561
+#: driver/xscreensaver-demo.glade2.h:21
 msgid "Gray"
-msgstr ""
+msgstr "Cinza"
 
-#: driver/demo-Gtk-widgets.c:1562 driver/xscreensaver-demo.glade2.h:32
+#: driver/demo-Gtk-widgets.c:1562
+#: driver/xscreensaver-demo.glade2.h:32
 msgid "Mono"
-msgstr ""
+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 ""
+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 "O tipo visual do X que esta demonstração requererá. Se o visual estiver disponível ele será usado, de outro modo esta demonstração não será executada."
 
 #: driver/demo-Gtk-widgets.c:1575
 msgid "Command Line:"
-msgstr ""
+msgstr "Linha de Comando:"
 
 #: driver/demo-Gtk-widgets.c:1647
 msgid "Documentation..."
-msgstr ""
+msgstr "Documentação..."
 
 #: driver/demo-Gtk-widgets.c:1655
 msgid "Click here to read the manual for this display mode, if it has one."
-msgstr ""
+msgstr "Clique aqui para ler o manual para este modo de exibição, se houver."
 
 #: driver/demo-Gtk-widgets.c:1680
 msgid "Advanced >>"
-msgstr ""
+msgstr "Avançado >>"
 
 #: driver/demo-Gtk-widgets.c:1688
 msgid "Edit the command line directly."
-msgstr ""
+msgstr "Editar a linha de comando diretamente."
 
 #: driver/demo-Gtk-widgets.c:1690
 msgid "Standard <<"
-msgstr ""
+msgstr "Básico <<"
 
 #: driver/demo-Gtk-widgets.c:1698
 msgid "Back to the graphical configuration options."
-msgstr ""
+msgstr "Voltar às opções gráficas de configuração."
 
-#: driver/demo-Gtk-widgets.c:1709 driver/demo-Gtk.c:832
+#: driver/demo-Gtk-widgets.c:1709
+#: driver/demo-Gtk.c:832
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: driver/demo-Gtk-widgets.c:1718
 msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
 
-#: driver/demo-Gtk.c:692 driver/demo-Gtk.c:4282
+#: driver/demo-Gtk.c:692
+#: driver/demo-Gtk.c:4282
 #, c-format
 msgid ""
 "Warning:\n"
@@ -495,10 +518,14 @@ msgid ""
 "The XScreenSaver daemon doesn't seem to be running\n"
 "on display \"%s\".  Launch it now?"
 msgstr ""
+"Atenção:\n"
+"\n"
+"Parece que o daemon do xscreensaver não está sendo executado\n"
+"no monitor \"%s\". Lançá-lo agora?"
 
 #: driver/demo-Gtk.c:740
 msgid "For updates, check http://www.jwz.org/xscreensaver/"
-msgstr ""
+msgstr "Para atualizações, examine http://www.jwz.org/xscreensaver/"
 
 #: driver/demo-Gtk.c:870
 msgid ""
@@ -506,6 +533,9 @@ msgid ""
 "\n"
 "No Help URL has been specified.\n"
 msgstr ""
+"Erro:\n"
+"\n"
+"Nenhuma URL de Ajuda foi especificada.\n"
 
 #: driver/demo-Gtk.c:967
 msgid ""
@@ -514,6 +544,10 @@ msgid ""
 "The xscreensaver daemon did not start up properly.\n"
 "\n"
 msgstr ""
+"Erro:\n"
+"\n"
+"O daemon do xscreensaver não iniciou adequadamente.\n"
+"\n"
 
 #: driver/demo-Gtk.c:979
 msgid ""
@@ -533,10 +567,25 @@ msgid ""
 "You shouldn't run X as root. Instead, you should log in as a\n"
 "normal user, and `su' as necessary."
 msgstr ""
+"O programa está sendo executado pelo root. Isso geralmente significa\n"
+"que o xscreensaver foi incapaz de contatar o seu servidor X porque o\n"
+"controle de acesso está ligado. Tente executar esse comando:\n"
+"\n"
+"                        xhost +localhost\n"
+"\n"
+"e então selecionar `Arquivo / Reiniciar Daemon'.\n"
+"\n"
+"Note que desligar o controle de acesso permitirá que qualquer um\n"
+"que esteja logado nessa máquina acesse a sua tela, o que pode ser\n"
+"considerado um problema de segurança. Por favor, leia o manual do\n"
+"xscreensaver e as perguntas frequentes (FAQ) para mais informações.\n"
+"\n"
+"Você não deveria executar o X como root. Em vez disso, você deveria\n"
+"autenticar-se como um usuário normal e `su' quando necessário."
 
 #: driver/demo-Gtk.c:995
 msgid "Please check your $PATH and permissions."
-msgstr ""
+msgstr "Por favor, verifique o seu $PATH e as permissões."
 
 #: driver/demo-Gtk.c:1033
 msgid ""
@@ -544,6 +593,9 @@ msgid ""
 "\n"
 "Couldn't determine init file name!\n"
 msgstr ""
+"Erro:\n"
+"\n"
+"Incapaz de determinar o nome do arquivo init!\n"
 
 #: driver/demo-Gtk.c:1038
 #, c-format
@@ -552,6 +604,9 @@ msgid ""
 "\n"
 "Couldn't write %s\n"
 msgstr ""
+"Erro:\n"
+"\n"
+"Incapaz de escrever %s\n"
 
 #: driver/demo-Gtk.c:1101
 msgid ""
@@ -559,6 +614,9 @@ msgid ""
 "\n"
 "no `manualCommand' resource set."
 msgstr ""
+"Erro:\n"
+"\n"
+"Nenhum recurso `manualCommand' definido."
 
 #: driver/demo-Gtk.c:1284
 #, c-format
@@ -567,6 +625,9 @@ msgid ""
 "\n"
 "Unparsable time format: \"%s\"\n"
 msgstr ""
+"Erro:\n"
+"\n"
+"Formato de tempo não analisável: \"%s\"\n"
 
 #: driver/demo-Gtk.c:1991
 #, c-format
@@ -575,36 +636,42 @@ msgid ""
 "\n"
 "Directory does not exist: \"%s\"\n"
 msgstr ""
+"Erro:\n"
+"\n"
+"O diretório não existe: \"%s\"\n"
 
-#: driver/demo-Gtk.c:2021 driver/demo-Gtk.c:2052
+#: driver/demo-Gtk.c:2021
+#: driver/demo-Gtk.c:2052
 #, c-format
 msgid ""
 "Error:\n"
 "\n"
 "File does not exist: \"%s\"\n"
 msgstr ""
+"Erro:\n"
+"\n"
+"O arquivo não existe: \"%s\"\n"
 
 #: driver/demo-Gtk.c:2877
 msgid "Descriptions not available: no XML support compiled in."
-msgstr ""
+msgstr "Descrições não disponíveis: suporte ao XML não foi compilado."
 
 #: driver/demo-Gtk.c:2882
 msgid "No description available."
-msgstr ""
+msgstr "Nenhuma descrição disponível."
 
 #: driver/demo-Gtk.c:3204
 msgid "Blank Screen"
-msgstr ""
+msgstr "Apagar Tela"
 
 #: driver/demo-Gtk.c:3210
-#, fuzzy
 msgid "Screen Saver Disabled"
-msgstr "Propriedades da proteo de tela"
+msgstr "Protetor de Tela Desativado"
 
 #: driver/demo-Gtk.c:3243
-#, c-format
+#, fuzzy, c-format
 msgid "%s: %.100s Settings"
-msgstr ""
+msgstr "%s: Intervalos de %.100s"
 
 #: driver/demo-Gtk.c:3407
 #, c-format
@@ -613,22 +680,25 @@ msgid ""
 "\n"
 "file \"%s\" has changed, reloading.\n"
 msgstr ""
+"Atenção:\n"
+"\n"
+"O arquivo \"%s\" foi modificado, recarregando.\n"
 
 #: driver/demo-Gtk.c:3492
 msgid "No Preview"
-msgstr ""
+msgstr "Nenhuma Visualização"
 
 #: driver/demo-Gtk.c:3492
 msgid "Available"
-msgstr ""
+msgstr "Disponível"
 
 #: driver/demo-Gtk.c:3493
 msgid "Not"
-msgstr ""
+msgstr "Não"
 
 #: driver/demo-Gtk.c:3493
 msgid "Installed"
-msgstr ""
+msgstr "Instalado"
 
 #: driver/demo-Gtk.c:4292
 #, c-format
@@ -648,6 +718,20 @@ msgid ""
 "\n"
 "Restart the xscreensaver daemon now?\n"
 msgstr ""
+"Atenção:\n"
+"\n"
+"O %s está sendo executado pelo usuário \"%s\" no host \"%s\".\n"
+"No entanto o display de gerenciamento \"%s\" do xscreensaver\n"
+"está sendo executado pelo usuário \"%s\" no host \"%s\".\n"
+"\n"
+"Como são usuários diferentes, eles não lêem/escrevem\n"
+"o mesmo arquivo ~/.xscreensaver, portanto o %s não\n"
+"funcionará corretamente.\n"
+"\n"
+"Você deveria ou re-executar o %s como \"%s\", ou\n"
+"re-executar o xscreensaver como \"%s\".\n"
+"\n"
+"Reiniciar o daemon do xscreensaver agora?\n"
 
 #: driver/demo-Gtk.c:4317
 #, c-format
@@ -664,6 +748,17 @@ msgid ""
 "\n"
 "Restart the daemon on \"%s\" as \"%s\" now?\n"
 msgstr ""
+"Atenção:\n"
+"\n"
+"O %s está sendo executado pelo usuário \"%s\" no host \"%s\".\n"
+"No entanto o display de gerenciamento \"%s\" do xscreensaver\n"
+"está sendo executado pelo usuário \"%s\" no host \"%s\".\n"
+"\n"
+"Se essas duas máquinas não compartilham um sistema de arquivos\n"
+"(ou seja, se elas não enxergam o mesmo arquivo ~%s/.xscreensaver)\n"
+"então o %s não funcionará corretamente.\n"
+"\n"
+"Reiniciar o daemon em \"%s\" como \"%s\" agora?\n"
 
 #: driver/demo-Gtk.c:4339
 #, c-format
@@ -676,132 +771,138 @@ msgid ""
 "\n"
 "Restart the xscreensaver daemon now?\n"
 msgstr ""
+"Atenção:\n"
+"\n"
+"Este é o %s versão %s.\n"
+"No entanto o display de gerenciamento \"%s\" do xscreensaver\n"
+"é versão %s. Isso poderia causar problemas.\n"
+"\n"
+"Reiniciar o daemon do xscreensaver agora?\n"
 
 #: driver/demo-Gtk.c:4800
 #, c-format
 msgid "%s: unknown option: %s\n"
-msgstr ""
+msgstr "%s: opção desconhecida: %s\n"
 
 #: driver/demo-Gtk.c:4865
-#, fuzzy
 msgid "Screensaver Preferences"
-msgstr "Propriedades da proteo de tela"
+msgstr "Preferências do Protetor de Tela"
 
 #: driver/screensaver-properties.desktop.in.h:1
 msgid "Change screensaver properties"
-msgstr ""
+msgstr "Modificar as propriedades do protetor de tela"
 
 #: driver/screensaver-properties.desktop.in.h:2
-#, fuzzy
 msgid "Screensaver"
-msgstr "Propriedades da proteo de tela"
+msgstr "Protetor de Tela"
 
 #: driver/xscreensaver-demo.glade2.h:1
 msgid "*"
-msgstr ""
+msgstr "*"
 
 #: driver/xscreensaver-demo.glade2.h:5
 msgid "Choose _Random Image:"
-msgstr ""
+msgstr "Escolher Imagem _Aleatória:"
 
 #: driver/xscreensaver-demo.glade2.h:14
 msgid "F_ade Duration"
-msgstr ""
+msgstr "Dura_ção"
 
 #: driver/xscreensaver-demo.glade2.h:15
 msgid "Fade from Black When _Unblanking"
-msgstr ""
+msgstr "_Reativar Gradualmente"
 
 #: driver/xscreensaver-demo.glade2.h:16
 msgid "Fade to Black when _Blanking"
-msgstr ""
+msgstr "Apagar _Gradualmente"
 
 #: driver/xscreensaver-demo.glade2.h:17
 msgid "Fading and Colormaps"
-msgstr ""
+msgstr "Esvaecimento e Mapa de Cores"
 
 #: driver/xscreensaver-demo.glade2.h:19
 msgid "Grab Desktop _Images"
-msgstr ""
+msgstr "Capturar _Imagens da Área de Trabalho"
 
 #: driver/xscreensaver-demo.glade2.h:20
 msgid "Grab _Video Frames"
-msgstr ""
+msgstr "Capturar Quadros de _Vídeo"
 
 #: driver/xscreensaver-demo.glade2.h:23
 msgid "How long after the screen blanks until a password will be required."
-msgstr ""
+msgstr "Passar a exigir senha após quanto tempo do apagamento da tela."
 
 #: driver/xscreensaver-demo.glade2.h:24
 msgid "How long before the screen saver activates."
-msgstr ""
+msgstr "Quanto tempo antes de ativar o protetor de tela."
 
 #: driver/xscreensaver-demo.glade2.h:25
-msgid ""
-"How long each display mode should run before choosing a new one (in Random "
-"mode.)"
-msgstr ""
+msgid "How long each display mode should run before choosing a new one (in Random mode.)"
+msgstr "Por quanto tempo executar cada modo de exibição antes de escolher um novo (no modo Aleatório)."
 
 #: driver/xscreensaver-demo.glade2.h:27
 msgid "How long until the monitor goes completely black."
-msgstr ""
+msgstr "Quanto tempo até que a tela se apague."
 
 #: driver/xscreensaver-demo.glade2.h:31
 msgid "Install _Colormap"
-msgstr ""
+msgstr "Instalar Mapa de _Cores"
 
 #: driver/xscreensaver-demo.glade2.h:33
 msgid "Never blank the screen or power down the monitor."
-msgstr ""
+msgstr "Nunca apagar a tela ou desligar o monitor."
 
 #: driver/xscreensaver-demo.glade2.h:34
 msgid ""
 "No Preview\n"
 "Available"
 msgstr ""
+"Nenhuma Visualização\n"
+"Disponível"
 
 #: driver/xscreensaver-demo.glade2.h:36
 msgid ""
 "Not\n"
 "Installed"
 msgstr ""
+"Não\n"
+"Instalado"
 
 #: driver/xscreensaver-demo.glade2.h:42
 msgid "Stand_by After"
-msgstr ""
+msgstr "Stand_by Após"
 
 #: driver/xscreensaver-demo.glade2.h:45
 msgid "Sus_pend After"
-msgstr ""
+msgstr "Suspe_nder Após"
 
 #: driver/xscreensaver-demo.glade2.h:46
 msgid "Text Manipulation"
-msgstr ""
+msgstr "Manipulação de Texto"
 
 #: driver/xscreensaver-demo.glade2.h:47
 msgid "Text _file"
-msgstr ""
+msgstr "Arquivo de Te_xto"
 
 #: driver/xscreensaver-demo.glade2.h:48
-msgid ""
-"Text-displaying modes will display the contents of this URL (HTML or RSS)."
-msgstr ""
+msgid "Text-displaying modes will display the contents of this URL (HTML or RSS)."
+msgstr "Os modos de exibição de texto exibirão o conteúdo dessa URL (HTML ou RSS)."
 
 #: driver/xscreensaver-demo.glade2.h:49
 msgid "Text-displaying modes will display the contents of this file."
-msgstr ""
+msgstr "Os modos de exibição de texto exibirão o conteúdo desse arquivo."
 
 #: driver/xscreensaver-demo.glade2.h:50
 msgid "Text-displaying modes will display the local host name, date, and time."
-msgstr ""
+msgstr "Os modos de exibição de texto exibirão o nome do host local, a data e a hora."
 
 #: driver/xscreensaver-demo.glade2.h:51
 msgid "Text-displaying modes will display the output of this program."
-msgstr ""
+msgstr "Os modos de exibição de texto exibirão a saída desse programa."
 
 #: driver/xscreensaver-demo.glade2.h:52
 msgid "Text-displaying modes will display the text typed here."
-msgstr ""
+msgstr "Os modos de exibição de texto exibirão o texto digitado aqui."
 
 #: driver/xscreensaver-demo.glade2.h:55
 msgid ""
@@ -810,1007 +911,1460 @@ msgid ""
 "This probably means that the \"xscreensaver-extras\" and\n"
 "\"xscreensaver-gl-extras\" packages are not installed."
 msgstr ""
+"Parece que poucos (ou nenhum) protetores de tela estão disponíveis.\n"
+"\n"
+"Isso provavelmente significa que os pacotes \"xscreensaver-data-extra\",\n"
+"\"xscreensaver-gl\" e \"xscreensaver-gl-extra\" não estão instalados."
 
 #: driver/xscreensaver-demo.glade2.h:59
 msgid "When idle or locked, blacken the screen only."
-msgstr ""
+msgstr "Quando inativa ou bloqueada, apenas apagar a tela."
 
 #: 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 ""
+msgid "When idle or locked, choose a random display mode from among the checked items in the list below."
+msgstr "Quando inativa ou bloqueada, escolher um modo aleatório entre os marcados na lista abaixo."
 
 #: 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 ""
+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 "Quando inativa ou bloqueada, escolher um modo aleatório entre os marcados na lista abaixo. Executar o mesmo modo em todos os monitores."
 
 #: driver/xscreensaver-demo.glade2.h:62
 msgid "When idle or locked, run the display mode selected below."
-msgstr ""
+msgstr "Quando inativa ou bloqueada, executar o modo de exibição selecionado abaixo."
 
 #: 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 ""
+msgid "Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one.)"
+msgstr "Se os modos de manipulação de imagem devem ser executados sobre imagens da captura de vídeo do sistema (se houver)."
 
 #: driver/xscreensaver-demo.glade2.h:73
 msgid "_Advanced"
-msgstr ""
+msgstr "Avança_do"
 
 #: driver/xscreensaver-demo.glade2.h:74
 msgid "_Advanced >>"
-msgstr ""
+msgstr "_Avançado >>"
 
 #: driver/xscreensaver-demo.glade2.h:75
 msgid "_Blank After"
-msgstr ""
+msgstr "_Ativar Após"
 
 #: driver/xscreensaver-demo.glade2.h:77
 msgid "_Blank Screen Only"
-msgstr ""
+msgstr "Apenas Apa_gar a Tela"
 
 #: driver/xscreensaver-demo.glade2.h:78
 msgid "_Browse"
-msgstr ""
+msgstr "_Pesquisar"
 
 #: driver/xscreensaver-demo.glade2.h:79
 msgid "_Command Line:"
-msgstr ""
+msgstr "Linha de _Comando:"
 
 #: driver/xscreensaver-demo.glade2.h:80
 msgid "_Cycle After"
-msgstr ""
+msgstr "_Circular Após"
 
 #: driver/xscreensaver-demo.glade2.h:81
-#, fuzzy
 msgid "_Disable Screen Saver"
-msgstr "Propriedades da proteo de tela"
+msgstr "_Desativar Protetor de Tela"
 
 #: driver/xscreensaver-demo.glade2.h:82
 msgid "_Display Modes"
-msgstr ""
+msgstr "Modos de Exibiçã_o"
 
 #: driver/xscreensaver-demo.glade2.h:86
 msgid "_Host Name and Time"
-msgstr ""
+msgstr "Nome do _Host e Hora"
 
 #: driver/xscreensaver-demo.glade2.h:88
-#, fuzzy
 msgid "_Lock Screen After  "
-msgstr "Propriedades da proteo de tela"
+msgstr "_Bloquear Tela Após"
 
 #: driver/xscreensaver-demo.glade2.h:90
 msgid "_Mode:"
-msgstr ""
+msgstr "_Modo:"
 
 #: driver/xscreensaver-demo.glade2.h:91
 msgid "_Off After"
-msgstr ""
+msgstr "De_sligar Após"
 
 #: driver/xscreensaver-demo.glade2.h:92
-#, fuzzy
 msgid "_Only One Screen Saver"
-msgstr "Propriedades da proteo de tela"
+msgstr "Apenas _Um Protetor de Tela"
 
 #: driver/xscreensaver-demo.glade2.h:93
 msgid "_Power Management Enabled"
-msgstr ""
+msgstr "Gerenciamento de _Energia Ativado"
 
 #: driver/xscreensaver-demo.glade2.h:94
 msgid "_Preview"
-msgstr ""
+msgstr "_Visualizar"
 
 #: driver/xscreensaver-demo.glade2.h:95
 msgid "_Program"
-msgstr ""
+msgstr "Progra_ma"
 
 #: driver/xscreensaver-demo.glade2.h:96
 msgid "_Quit"
-msgstr ""
+msgstr "_Sair"
 
 #: driver/xscreensaver-demo.glade2.h:97
-#, fuzzy
 msgid "_Random Screen Saver"
-msgstr "Propriedades da proteo de tela"
+msgstr "Protetor de Tela _Aleatório"
 
 #: driver/xscreensaver-demo.glade2.h:99
-#, fuzzy
 msgid "_Same Random Savers"
-msgstr "Propriedades da proteo de tela"
+msgstr "Os _Mesmos Protetores Aleatórios"
 
 #: driver/xscreensaver-demo.glade2.h:100
 msgid "_Settings..."
-msgstr ""
+msgstr "_Configurações..."
 
 #: driver/xscreensaver-demo.glade2.h:101
 msgid "_Standard <<"
-msgstr ""
+msgstr "_Básico <<"
 
 #: driver/xscreensaver-demo.glade2.h:102
 msgid "_Text"
-msgstr ""
+msgstr "_Texto"
 
 #: driver/xscreensaver-demo.glade2.h:103
 msgid "_URL"
-msgstr ""
+msgstr "UR_L"
 
 #: driver/xscreensaver-demo.glade2.h:104
 msgid "_Visual:"
-msgstr ""
+msgstr "_Visual:"
 
 #: driver/xscreensaver-demo.glade2.h:105
 msgid "dialog1"
-msgstr ""
+msgstr "diálogo1"
 
 #: driver/xscreensaver-demo.glade2.h:107
 msgid "no preview"
-msgstr ""
+msgstr "sem visualização"
 
 #: driver/xscreensaver-demo.glade2.h:108
 msgid "not installed"
-msgstr ""
+msgstr "não instalado"
 
 #: driver/xscreensaver-demo.glade2.h:109
 msgid "nothing"
-msgstr ""
+msgstr "nada"
 
 #: driver/xscreensaver-demo.glade2.h:110
 msgid "preview"
-msgstr ""
+msgstr "visualizar"
 
 #: hacks/config/anemone.xml.h:1
 msgid "Anemone"
-msgstr ""
+msgstr "Anêmona"
 
-#: hacks/config/anemone.xml.h:2 hacks/config/fuzzyflakes.xml.h:1
+#: hacks/config/anemone.xml.h:2
+#: hacks/config/fuzzyflakes.xml.h:1
 msgid "Arms"
-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/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
+msgstr "Braços"
+
+#: 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 ""
-
-#: 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
+msgstr "Rápido"
+
+#: 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 ""
-
-#: 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
+msgstr "Pouco"
+
+#: 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 ""
-
-#: 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
+msgstr "Muito"
+
+#: 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 ""
+msgstr "Número de Cores"
 
-#: hacks/config/anemone.xml.h:7 hacks/config/fireflies.xml.h:32
+#: hacks/config/anemone.xml.h:7
+#: hacks/config/fireflies.xml.h:32
 #: hacks/config/pyro.xml.h:8
 msgid "Often"
-msgstr ""
+msgstr "Frequentemente"
 
 #: 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
+msgstr "Raramente"
+
+#: 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
+msgstr "Devagar"
+
+#: 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 ""
+msgstr "Velocidade"
 
 #: hacks/config/anemone.xml.h:11
 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
+msgstr "Tentáculos"
+
+#: 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 ""
+msgstr "Grosso"
 
-#: 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/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 ""
-
-#: 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
+msgstr "Espessura"
+
+#: 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 ""
+msgstr "Fino"
 
 #: 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
+msgstr "Velocidade de Giro"
+
+#: 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 ""
+msgstr "Duas"
 
 #: hacks/config/anemone.xml.h:17
 msgid "Wiggling tentacles. By Gabriel Finch."
-msgstr ""
+msgstr "Tentáculos Serpenteantes. Por Gabriel Finch."
 
 #: hacks/config/anemone.xml.h:18
 msgid "Withdraw freqency"
-msgstr ""
+msgstr "Frequência de Recuo"
 
 #: hacks/config/anemotaxis.xml.h:1
 msgid "Anemotaxis"
-msgstr ""
+msgstr "Anemotaxis"
 
 #: 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 ""
+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 "O Anemotaxis demonstra um algoritmo de pesquisa elaborado para localizar a fonte de um odor numa atmosfera turbulenta. O pesquisador é capaz de perceber o odor e determinar a direção do vento no local naquele instante. O objetivo é encontrar a fonte no menor tempo médio. Escrito por Eugene Balkovsky."
 
 #: hacks/config/anemotaxis.xml.h:3
 msgid "Distance"
-msgstr ""
+msgstr "Distância"
 
-#: hacks/config/anemotaxis.xml.h:4 hacks/config/hyperball.xml.h:1
+#: hacks/config/anemotaxis.xml.h:4
+#: hacks/config/hyperball.xml.h:1
 #: hacks/config/hypercube.xml.h:1
 msgid "Far"
-msgstr ""
+msgstr "Longe"
 
-#: hacks/config/anemotaxis.xml.h:8 hacks/config/hyperball.xml.h:7
+#: hacks/config/anemotaxis.xml.h:8
+#: hacks/config/hyperball.xml.h:7
 #: hacks/config/hypercube.xml.h:6
 msgid "Near"
-msgstr ""
+msgstr "Perto"
 
 #: hacks/config/anemotaxis.xml.h:9
 msgid "Searchers"
-msgstr ""
+msgstr "Pesquisadores"
 
 #: hacks/config/anemotaxis.xml.h:11
 msgid "Sources"
-msgstr ""
+msgstr "Fontes"
 
 #: 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 ""
+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 "Um autômato celular que é verdadeiramente uma máquina de Turing bidimensional: conforme as cabeças (``formigas'') andam pela tela, elas modificam o valor do pixel pelo seu caminho. Então, conforme elas passam sobre os pixels modificados, o seu comportamento é influenciado. Escrito por David Bagley."
 
 #: hacks/config/ant.xml.h:2
 msgid "Ant"
-msgstr ""
+msgstr "Formiga"
 
 #: hacks/config/ant.xml.h:3
 msgid "Ant Size"
-msgstr ""
+msgstr "Tamanho da Formiga"
 
 #: hacks/config/ant.xml.h:4
 msgid "Ants Count"
-msgstr ""
+msgstr "Quantidade de Formigas"
 
 #: hacks/config/ant.xml.h:5
 msgid "Draw Eyes"
-msgstr ""
+msgstr "Desenhar Olhos"
 
 #: 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
+msgstr "Células de Quatro Lados"
+
+#: 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 ""
+msgstr "Grande"
 
 #: hacks/config/ant.xml.h:10
 msgid "Nine Sided Cells"
-msgstr ""
+msgstr "Células de Nove Lados"
 
 #: hacks/config/ant.xml.h:12
 msgid "Random Cell Shape"
-msgstr ""
+msgstr "Forma da Célula Aleatória"
 
-#: hacks/config/ant.xml.h:13 hacks/config/speedmine.xml.h:11
+#: hacks/config/ant.xml.h:13
+#: hacks/config/speedmine.xml.h:11
 msgid "Sharp Turns"
-msgstr ""
+msgstr "Curvas Acentuadas"
 
 #: hacks/config/ant.xml.h:14
 msgid "Six Sided Cells"
-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
+msgstr "Células de Seis lados"
+
+#: 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 ""
+msgstr "Pequeno"
 
 #: hacks/config/ant.xml.h:18
 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
+msgstr "Células de Três Lados"
+
+#: 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 ""
+msgstr "Tempo Limite"
 
 #: hacks/config/ant.xml.h:20
 msgid "Truchet Lines"
-msgstr ""
+msgstr "Linhas de Truchet"
 
 #: hacks/config/ant.xml.h:21
 msgid "Twelve Sided Cells"
-msgstr ""
+msgstr "Células de Doze Lados"
 
 #: hacks/config/antinspect.xml.h:1
 msgid "AntInspect"
-msgstr ""
+msgstr "AntInspect"
 
 #: hacks/config/antinspect.xml.h:2
 msgid "Draw Shadows"
-msgstr ""
+msgstr "Desenhar Sombras"
 
 #: 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
+msgid "Draws a trio of ants moving their spheres around a circle. Written by Blair Tennessy."
+msgstr "Desenha um trio de formigas movimentando suas esferas em redor de um círculo. Escrito por Blair Tennessy."
+
+#: 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 ""
+msgstr "Exibir Quadros-por-Segundo"
 
 #: hacks/config/antmaze.xml.h:1
 msgid "AntMaze"
-msgstr ""
+msgstr "AntMaze"
 
 #: 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 ""
+msgid "Antmaze draws a few views of a few ants walking around in a simple maze. Written by Blair Tennessy."
+msgstr "O Antmaze desenha umas vistas de algumas formigas andando por um labirinto simples. Escrito por Blair Tennessy."
 
 #: hacks/config/antspotlight.xml.h:1
 msgid "AntSpotlight"
-msgstr ""
+msgstr "AntSpotlight"
 
 #: 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 ""
+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 "O Antspotlight desenha uma formiga (com uma lanterna) que anda sobre uma imagem, da sua área de trabalho ou outra. Escrito por Blair Tennessy."
 
 #: hacks/config/apollonian.xml.h:1
 msgid "Apollonian"
-msgstr ""
+msgstr "Apollonius"
 
 #: hacks/config/apollonian.xml.h:2
 msgid "Deep"
-msgstr ""
+msgstr "Profundo"
 
 #: hacks/config/apollonian.xml.h:3
 msgid "Depth"
-msgstr ""
+msgstr "Profundidade"
 
 #: hacks/config/apollonian.xml.h:4
 msgid "Draw Labels"
-msgstr ""
+msgstr "Desenhar Indicações"
 
 #: hacks/config/apollonian.xml.h:6
 msgid "Include Alternate Geometries"
-msgstr ""
+msgstr "Incluir Geometrias Alternativas"
 
 #: 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."
+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 ""
+msgstr "Raso"
 
 #: hacks/config/apple2.xml.h:1
 msgid "Apple ]["
-msgstr ""
+msgstr "Apple ]["
 
 #: hacks/config/apple2.xml.h:2
 msgid "Basic Programming Mode"
-msgstr ""
+msgstr "Modo de Programação BASIC"
 
-#: hacks/config/apple2.xml.h:3 hacks/config/halo.xml.h:8
+#: hacks/config/apple2.xml.h:3
+#: hacks/config/halo.xml.h:8
 #: hacks/config/imsmap.xml.h:11
 msgid "Random Mode"
-msgstr ""
+msgstr "Modo Aleatório"
 
 #: 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 "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 ""
+msgstr "Modo de Apresentação de Slides"
 
 #: 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
+msgstr "Modo de Texto"
+
+#: 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 ""
+msgstr "Programa de Texto"
 
 #: hacks/config/atlantis.xml.h:1
 msgid "Agressive"
-msgstr ""
+msgstr "Agressivo"
 
 #: hacks/config/atlantis.xml.h:2
 msgid "Atlantis"
-msgstr ""
+msgstr "Atlantis"
 
 #: hacks/config/atlantis.xml.h:3
 msgid "Clear Water"
-msgstr ""
+msgstr "Água Límpida"
 
 #: hacks/config/atlantis.xml.h:5
 msgid "Flat Background"
-msgstr ""
+msgstr "Fundo Sólido"
 
 #: hacks/config/atlantis.xml.h:6
 msgid "Gradient Background"
-msgstr ""
+msgstr "Fundo em Gradiente"
 
 #: hacks/config/atlantis.xml.h:7
 msgid "Number of Sharks"
-msgstr ""
+msgstr "Número de Tubarões"
 
 #: hacks/config/atlantis.xml.h:8
 msgid "Shark Proximity"
-msgstr ""
+msgstr "Proximidade dos Tubarões"
 
 #: hacks/config/atlantis.xml.h:9
 msgid "Shark Speed"
-msgstr ""
+msgstr "Velocidade dos Tubarões"
 
 #: hacks/config/atlantis.xml.h:10
 msgid "Shimmering Water"
-msgstr ""
+msgstr "Água Trêmula"
 
 #: hacks/config/atlantis.xml.h:12
 msgid "Shy"
-msgstr ""
-
-#: hacks/config/atlantis.xml.h:14 hacks/config/cage.xml.h:5
-#: hacks/config/extrusion.xml.h:12 hacks/config/gears.xml.h: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
+msgstr "Acanhado"
+
+#: 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 ""
+msgstr "Sólido"
 
 #: 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."
+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
+msgstr "Velocidade das Baleias"
+
+#: 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 ""
+msgstr "Estrutura de Arames"
 
 #: hacks/config/attraction.xml.h:1
 msgid "Attraction"
-msgstr ""
+msgstr "Atração"
 
 #: hacks/config/attraction.xml.h:2
 msgid "Ball Count"
-msgstr ""
+msgstr "Quantidade de Bolas"
 
 #: hacks/config/attraction.xml.h:3
 msgid "Ball Mass"
-msgstr ""
+msgstr "Massa das Bolas"
 
-#: hacks/config/attraction.xml.h:4 hacks/config/fluidballs.xml.h:3
+#: hacks/config/attraction.xml.h:4
+#: hacks/config/fluidballs.xml.h:3
 msgid "Balls"
-msgstr ""
+msgstr "Bolas"
 
 #: 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/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 ""
 
 #: hacks/config/attraction.xml.h:7
 msgid "Environmental Viscosity"
-msgstr ""
+msgstr "Viscosidade do ambiente"
 
 #: hacks/config/attraction.xml.h:9
 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/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 ""
+msgstr "Alta"
 
 #: hacks/config/attraction.xml.h:11
 msgid "Ignore Screen Edges"
@@ -1821,62 +2375,86 @@ 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"
+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: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/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 "Linhas"
+
+#: 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 ""
-
-#: 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
+msgstr "Comprido"
+
+#: 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 ""
+msgstr "Baixa"
 
 #: hacks/config/attraction.xml.h:20
 msgid "Orbital Mode"
@@ -1890,8 +2468,10 @@ msgstr ""
 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:23
+#: hacks/config/fuzzyflakes.xml.h:13
+#: hacks/config/spotlight.xml.h:3
+#: hacks/config/xplanet.xml.h:55
 msgid "Radius"
 msgstr ""
 
@@ -1899,34 +2479,52 @@ msgstr ""
 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: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 ""
+msgstr "Curto"
 
 #: hacks/config/attraction.xml.h:29
 msgid "Splines"
 msgstr ""
 
-#: hacks/config/attraction.xml.h:30 hacks/config/fireflies.xml.h:42
+#: hacks/config/attraction.xml.h:30
+#: hacks/config/fireflies.xml.h:42
 msgid "Tails"
-msgstr ""
+msgstr "Caudas"
 
-#: hacks/config/attraction.xml.h:31 hacks/config/euler2d.xml.h:16
+#: hacks/config/attraction.xml.h:31
+#: hacks/config/euler2d.xml.h:16
 #: hacks/config/juggle.xml.h:10
 msgid "Trail Length"
 msgstr ""
@@ -1936,20 +2534,21 @@ 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."
+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/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 ""
 
-#: 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/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 ""
@@ -1960,24 +2559,22 @@ msgstr ""
 
 #: hacks/config/barcode.xml.h:1
 msgid "Barcode"
-msgstr ""
+msgstr "Código de Barras"
 
 #: hacks/config/barcode.xml.h:2
 msgid "Barcode Clock (24 Hour)"
-msgstr ""
+msgstr "Relógio de Código de Barras (24 Horas)"
 
 #: hacks/config/barcode.xml.h:3
 msgid "Barcode Clock (AM/PM)"
-msgstr ""
+msgstr "Relógio de Código de Barras (AM/PM)"
 
 #: hacks/config/barcode.xml.h:5
 msgid "Scrolling Barcodes"
-msgstr ""
+msgstr "Passagem de Código de Barras"
 
 #: hacks/config/barcode.xml.h:8
-msgid ""
-"This draws a random sequence of colorful barcodes scrolling across your "
-"screen. CONSUME! By Dan Bornstein."
+msgid "This draws a random sequence of colorful barcodes scrolling across your screen. CONSUME! By Dan Bornstein."
 msgstr ""
 
 #: hacks/config/blaster.xml.h:1
@@ -1985,13 +2582,11 @@ msgid "Blaster"
 msgstr ""
 
 #: 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."
+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
+#: hacks/config/blaster.xml.h:5
+#: hacks/config/penetrate.xml.h:4
 msgid "Lasers"
 msgstr ""
 
@@ -1999,7 +2594,8 @@ msgstr ""
 msgid "Robots"
 msgstr ""
 
-#: hacks/config/blaster.xml.h:10 hacks/config/glplanet.xml.h:11
+#: hacks/config/blaster.xml.h:10
+#: hacks/config/glplanet.xml.h:11
 msgid "Stars"
 msgstr ""
 
@@ -2015,7 +2611,8 @@ msgstr ""
 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:3
 msgid "Fade"
 msgstr ""
 
@@ -2024,9 +2621,7 @@ msgid "Motion Blur"
 msgstr ""
 
 #: 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."
+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
@@ -2050,23 +2645,15 @@ msgid "Grab Screen"
 msgstr ""
 
 #: 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."
+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
+#: hacks/config/blocktube.xml.h:2
+#: hacks/config/timetunnel.xml.h:3
 msgid "Color Change Time"
 msgstr ""
 
@@ -2083,21 +2670,22 @@ msgid "Solid Blocks"
 msgstr ""
 
 #: 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."
+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
 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:8
+#: hacks/config/fireflies.xml.h:17
+#: hacks/config/pinion.xml.h:7
 msgid "Huge"
 msgstr ""
 
-#: hacks/config/boing.xml.h:4 hacks/config/crackberg.xml.h:12
+#: hacks/config/boing.xml.h:4
+#: hacks/config/crackberg.xml.h:12
 msgid "Lighting"
 msgstr ""
 
@@ -2113,12 +2701,18 @@ 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/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 ""
 
@@ -2127,16 +2721,13 @@ msgid "Smoothing"
 msgstr ""
 
 #: 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."
+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
+#: hacks/config/boing.xml.h:14
+#: hacks/config/boxed.xml.h:16
+#: hacks/config/fireflies.xml.h:43
+#: hacks/config/pinion.xml.h:14
 msgid "Tiny"
 msgstr ""
 
@@ -2144,7 +2735,8 @@ 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:3
 msgid "Do Red/Blue 3D separation"
 msgstr ""
 
@@ -2153,25 +2745,33 @@ msgid "Number of Spots"
 msgstr ""
 
 #: hacks/config/bouboule.xml.h:10
-msgid ""
-"This draws what looks like a spinning, deforming balloon with varying-sized "
-"spots painted on its invisible surface. Written by Jeremie Petit."
+msgid "This draws what looks like a spinning, deforming balloon with varying-sized spots painted on its invisible surface. Written by Jeremie Petit."
 msgstr ""
 
 #: 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
+#: 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 ""
 
@@ -2203,7 +2803,8 @@ msgstr ""
 msgid "Wireframe Cow"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:2 hacks/config/fluidballs.xml.h:2
+#: hacks/config/boxed.xml.h:2
+#: hacks/config/fluidballs.xml.h:2
 msgid "Ball Size"
 msgstr ""
 
@@ -2212,22 +2813,24 @@ 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."
+msgid "Draws a box full of 3D bouncing balls that explode. Written by Sander van Grieken."
 msgstr ""
 
 #: hacks/config/boxed.xml.h:5
 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
+#: 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/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"
 msgstr ""
@@ -2240,11 +2843,13 @@ msgstr ""
 msgid "Number of Balls"
 msgstr ""
 
-#: hacks/config/boxed.xml.h:13 hacks/config/hopalong.xml.h:18
+#: hacks/config/boxed.xml.h:13
+#: hacks/config/hopalong.xml.h:18
 msgid "Popcorn"
 msgstr ""
 
-#: hacks/config/boxfit.xml.h:1 hacks/config/popsquares.xml.h:1
+#: hacks/config/boxfit.xml.h:1
+#: hacks/config/popsquares.xml.h:1
 msgid "Border"
 msgstr ""
 
@@ -2252,7 +2857,8 @@ msgstr ""
 msgid "BoxFit"
 msgstr ""
 
-#: hacks/config/boxfit.xml.h:3 hacks/config/cubenetic.xml.h:1
+#: hacks/config/boxfit.xml.h:3
+#: hacks/config/cubenetic.xml.h:1
 msgid "Boxes"
 msgstr ""
 
@@ -2273,24 +2879,19 @@ msgid "Color Gradient"
 msgstr ""
 
 #: hacks/config/boxfit.xml.h:9
-#, fuzzy
 msgid "Grab Images"
-msgstr "Propriedades da proteo de tela"
+msgstr "Capturar Imagens"
 
 #: 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."
+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
+#: hacks/config/boxfit.xml.h:13
+#: hacks/config/xearth.xml.h:23
 msgid "Spacing"
 msgstr ""
 
@@ -2299,34 +2900,51 @@ msgid "Braid"
 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
+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 ""
 
-#: hacks/config/braid.xml.h:5 hacks/config/epicycle.xml.h:7
+#: hacks/config/braid.xml.h:5
+#: hacks/config/epicycle.xml.h:7
 #: hacks/config/nerverot.xml.h:12
 msgid "Line Thickness"
 msgstr ""
@@ -2335,12 +2953,14 @@ msgstr ""
 msgid "Max Rings"
 msgstr ""
 
-#: hacks/config/bsod.xml.h:1 hacks/config/molecule.xml.h:1
+#: hacks/config/bsod.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/molecule.xml.h:2
 msgid "5 seconds"
 msgstr ""
 
@@ -2365,10 +2985,7 @@ msgid "BSOD"
 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 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
@@ -2464,16 +3081,15 @@ msgid "Bubble3D"
 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."
+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
 msgid "Transparent Bubbles"
 msgstr ""
 
-#: hacks/config/bubbles.xml.h:1 hacks/config/xfishtank.xml.h:2
+#: hacks/config/bubbles.xml.h:1
+#: hacks/config/xfishtank.xml.h:2
 msgid "Bubbles"
 msgstr ""
 
@@ -2506,17 +3122,11 @@ 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."
+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."
+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
@@ -2527,21 +3137,25 @@ msgstr ""
 msgid "Cage"
 msgstr ""
 
-#: hacks/config/cage.xml.h:7 hacks/config/cube21.xml.h:22
+#: hacks/config/cage.xml.h:7
+#: hacks/config/cube21.xml.h:22
 msgid "Textured"
 msgstr ""
 
 #: 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
+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 ""
@@ -2554,22 +3168,14 @@ msgstr ""
 msgid "Carousel"
 msgstr ""
 
-#: hacks/config/carousel.xml.h:6 hacks/config/electricsheep.xml.h:7
+#: hacks/config/carousel.xml.h:6
+#: hacks/config/electricsheep.xml.h:7
 #: hacks/config/fliptext.xml.h:8
 msgid "Frame Rate"
-msgstr ""
+msgstr "Taxa de Quadros"
 
 #: 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."
+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
@@ -2580,7 +3186,8 @@ msgstr ""
 msgid "Number of Images:"
 msgstr ""
 
-#: hacks/config/carousel.xml.h:13 hacks/config/glslideshow.xml.h:20
+#: hacks/config/carousel.xml.h:13
+#: hacks/config/glslideshow.xml.h:20
 msgid "Show Image Titles"
 msgstr ""
 
@@ -2596,7 +3203,8 @@ msgstr ""
 msgid "Tilt Left/Right Only"
 msgstr ""
 
-#: hacks/config/carousel.xml.h:18 hacks/config/glslideshow.xml.h:21
+#: 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 ""
@@ -2609,7 +3217,8 @@ msgstr ""
 msgid "0 seconds"
 msgstr ""
 
-#: hacks/config/ccurve.xml.h:2 hacks/config/polyhedra.xml.h:2
+#: hacks/config/ccurve.xml.h:2
+#: hacks/config/polyhedra.xml.h:2
 msgid "30 seconds"
 msgstr ""
 
@@ -2621,17 +3230,19 @@ msgstr ""
 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/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 ""
 
 #: hacks/config/ccurve.xml.h:8
-msgid ""
-"Generates self-similar linear fractals, including the classic ``C Curve.'' "
-"Written by Rick Campbell."
+msgid "Generates self-similar linear fractals, including the classic ``C Curve.'' Written by Rick Campbell."
 msgstr ""
 
 #: hacks/config/celtic.xml.h:1
@@ -2647,8 +3258,7 @@ msgid "Pause"
 msgstr ""
 
 #: hacks/config/celtic.xml.h:6
-msgid ""
-"Repeatedly draws random Celtic cross-stitch patterns. By Max Froumentin."
+msgid "Repeatedly draws random Celtic cross-stitch patterns. By Max Froumentin."
 msgstr ""
 
 #: hacks/config/circuit.xml.h:1
@@ -2659,7 +3269,8 @@ msgstr ""
 msgid "Circuit"
 msgstr ""
 
-#: hacks/config/circuit.xml.h:3 hacks/config/gflux.xml.h:4
+#: hacks/config/circuit.xml.h:3
+#: hacks/config/gflux.xml.h:4
 #: hacks/config/pulsar.xml.h:2
 msgid "Directional Lighting"
 msgstr ""
@@ -2672,24 +3283,32 @@ msgstr ""
 msgid "Parts"
 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/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 ""
 
-#: hacks/config/circuit.xml.h:8 hacks/config/pinion.xml.h:10
+#: hacks/config/circuit.xml.h:8
+#: hacks/config/pinion.xml.h:10
 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: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 ""
 
-#: hacks/config/cloudlife.xml.h:1 hacks/config/demon.xml.h:2
+#: hacks/config/cloudlife.xml.h:1
+#: hacks/config/demon.xml.h:2
 #: hacks/config/petri.xml.h:1
 msgid "Cell Size"
 msgstr ""
@@ -2699,12 +3318,7 @@ 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."
+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
@@ -2727,24 +3341,30 @@ 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/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."
+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/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 ""
@@ -2753,30 +3373,41 @@ msgstr ""
 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/qix.xml.h:5 hacks/config/squiral.xml.h:1
+#: 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 ""
 
-#: hacks/config/coral.xml.h:10 hacks/config/squiral.xml.h:13
+#: hacks/config/coral.xml.h:10
+#: hacks/config/squiral.xml.h:13
 msgid "Seeds"
 msgstr ""
 
 #: 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 "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 ""
 
@@ -2785,9 +3416,7 @@ 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;"
+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
@@ -2811,9 +3440,7 @@ msgid "Flat Shading"
 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 "Flies through height maps, optionally animating the creation and destruction of generated tiles; tiles `grow' into place."
 msgstr ""
 
 #: hacks/config/crackberg.xml.h:7
@@ -2832,7 +3459,8 @@ msgstr ""
 msgid "Immediate"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:11 hacks/config/glslideshow.xml.h:14
+#: hacks/config/crackberg.xml.h:11
+#: hacks/config/glslideshow.xml.h:14
 msgid "Letterbox"
 msgstr ""
 
@@ -2844,9 +3472,12 @@ msgstr ""
 msgid "Plain"
 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
+#: 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 ""
 
@@ -2866,7 +3497,8 @@ msgstr ""
 msgid "Vomit"
 msgstr ""
 
-#: hacks/config/crackberg.xml.h:22 hacks/config/flurry.xml.h:11
+#: hacks/config/crackberg.xml.h:22
+#: hacks/config/flurry.xml.h:11
 msgid "Water"
 msgstr ""
 
@@ -2875,28 +3507,39 @@ msgid "Critical"
 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."
+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 ""
 
-#: 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
+#: 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 ""
 
@@ -2908,7 +3551,8 @@ msgstr ""
 msgid "Draw Cell"
 msgstr ""
 
-#: hacks/config/crystal.xml.h:5 hacks/config/spheremonics.xml.h:3
+#: hacks/config/crystal.xml.h:5
+#: hacks/config/spheremonics.xml.h:3
 #: hacks/config/xearth.xml.h:6
 msgid "Draw Grid"
 msgstr ""
@@ -2918,9 +3562,7 @@ msgid "Horizontal Symmetries"
 msgstr ""
 
 #: hacks/config/crystal.xml.h:9
-msgid ""
-"Moving polygons, similar to a kaleidescope (more like a kaleidescope than "
-"the hack called `kaleid,' actually.) This one by Jouk Jansen."
+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
@@ -2928,9 +3570,7 @@ msgid "Vertical Symmetries"
 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."
+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
@@ -2957,7 +3597,8 @@ msgstr ""
 msgid "Random color"
 msgstr ""
 
-#: hacks/config/cube21.xml.h:11 hacks/config/rocks.xml.h:8
+#: hacks/config/cube21.xml.h:11
+#: hacks/config/rocks.xml.h:8
 msgid "Rotation"
 msgstr ""
 
@@ -3013,67 +3654,96 @@ msgstr ""
 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/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."
+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
+#: 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
+#: 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
+#: 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
+#: 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
+#: 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
+#: 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
+#: 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 ""
 
@@ -3089,13 +3759,20 @@ msgstr ""
 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/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 ""
@@ -3105,9 +3782,7 @@ msgid "CubeStorm"
 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."
+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
@@ -3119,11 +3794,7 @@ msgid "Strut Thickness"
 msgstr ""
 
 #: 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."
+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
@@ -3135,9 +3806,7 @@ msgid "DangerBall"
 msgstr ""
 
 #: hacks/config/dangerball.xml.h:2
-msgid ""
-"Draws a ball that periodically extrudes many random spikes. Ouch! Written by "
-"Jamie Zawinski."
+msgid "Draws a ball that periodically extrudes many random spikes. Ouch! Written by Jamie Zawinski."
 msgstr ""
 
 #: hacks/config/dangerball.xml.h:7
@@ -3213,19 +3882,15 @@ msgid "Stretchy Melt"
 msgstr ""
 
 #: 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."
+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 ""
 
-#: hacks/config/deco.xml.h:6 hacks/config/menger.xml.h:5
+#: hacks/config/deco.xml.h:6
+#: hacks/config/menger.xml.h:5
 #: hacks/config/sierpinski3d.xml.h:4
 msgid "Max Depth"
 msgstr ""
@@ -3235,15 +3900,13 @@ msgid "Min Size"
 msgstr ""
 
 #: 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."
+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/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 ""
@@ -3253,11 +3916,7 @@ msgid "Deluxe"
 msgstr ""
 
 #: 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."
+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
@@ -3265,9 +3924,7 @@ msgid "Transparency"
 msgstr ""
 
 #: 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."
+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
@@ -3283,9 +3940,7 @@ msgid "Discrete"
 msgstr ""
 
 #: 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."
+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
@@ -3298,39 +3953,40 @@ msgstr ""
 
 #: hacks/config/distort.xml.h:3
 msgid "Distort"
-msgstr ""
+msgstr "Distorcer"
 
 #: hacks/config/distort.xml.h:6
 msgid "Lens Count"
-msgstr ""
+msgstr "Quantidade de Lentes"
 
 #: hacks/config/distort.xml.h:7
 msgid "Lens Size"
-msgstr ""
+msgstr "Tamanho da Lente"
 
 #: hacks/config/distort.xml.h:8
 msgid "Magnify"
-msgstr ""
+msgstr "Aumentar"
 
 #: hacks/config/distort.xml.h:10
 msgid "Reflect"
-msgstr ""
+msgstr "Refletir"
 
 #: hacks/config/distort.xml.h:14
 msgid "Swamp Thing"
 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."
+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
+#: 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 ""
 
@@ -3351,10 +4007,7 @@ 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."
+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
@@ -3382,14 +4035,7 @@ 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;."
+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
@@ -3416,16 +4062,16 @@ msgstr ""
 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/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 ""
 
 #: 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."
+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
@@ -3453,9 +4099,7 @@ 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."
+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
@@ -3494,7 +4138,8 @@ msgstr ""
 msgid "1 minute"
 msgstr ""
 
-#: hacks/config/epicycle.xml.h:2 hacks/config/polyhedra.xml.h:1
+#: hacks/config/epicycle.xml.h:2
+#: hacks/config/polyhedra.xml.h:1
 msgid "1 second"
 msgstr ""
 
@@ -3507,11 +4152,7 @@ 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."
+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
@@ -3526,8 +4167,10 @@ msgstr ""
 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:7
+#: hacks/config/fluidballs.xml.h:9
+#: hacks/config/qix.xml.h:9
+#: hacks/config/speedmine.xml.h:4
 msgid "Gravity"
 msgstr ""
 
@@ -3563,7 +4206,8 @@ msgstr ""
 msgid "Euler2d"
 msgstr ""
 
-#: hacks/config/euler2d.xml.h:10 hacks/config/whirlwindwarp.xml.h:5
+#: hacks/config/euler2d.xml.h:10
+#: hacks/config/whirlwindwarp.xml.h:5
 msgid "Particles"
 msgstr ""
 
@@ -3572,16 +4216,11 @@ msgid "Power"
 msgstr ""
 
 #: hacks/config/euler2d.xml.h:13
-msgid ""
-"Simulates two dimensional Incompressible Inviscid Fluid Flow. Written by "
-"Stephen Montgomery-Smith."
+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."
+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
@@ -3604,7 +4243,8 @@ msgstr ""
 msgid "Join Offset"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:8 hacks/config/polytopes.xml.h:16
+#: hacks/config/extrusion.xml.h:8
+#: hacks/config/polytopes.xml.h:16
 msgid "Random Object"
 msgstr ""
 
@@ -3624,19 +4264,19 @@ msgstr ""
 msgid "Twistoid"
 msgstr ""
 
-#: hacks/config/extrusion.xml.h:17 hacks/config/glplanet.xml.h:12
+#: 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
+#: hacks/config/extrusion.xml.h:18
+#: hacks/config/glplanet.xml.h:13
 msgid "Use Lighting"
 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."
+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
@@ -3664,12 +4304,7 @@ 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;."
+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
@@ -3728,7 +4363,8 @@ msgstr ""
 msgid "Half"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:18 hacks/config/fluidballs.xml.h:10
+#: hacks/config/fireflies.xml.h:18
+#: hacks/config/fluidballs.xml.h:10
 msgid "Hurricane"
 msgstr ""
 
@@ -3788,7 +4424,8 @@ msgstr ""
 msgid "Split a swarm"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:36 hacks/config/fluidballs.xml.h:21
+#: hacks/config/fireflies.xml.h:36
+#: hacks/config/fluidballs.xml.h:21
 #: hacks/config/glforestfire.xml.h:16
 msgid "Still"
 msgstr ""
@@ -3817,7 +4454,8 @@ msgstr ""
 msgid "Wide"
 msgstr ""
 
-#: hacks/config/fireflies.xml.h:45 hacks/config/fluidballs.xml.h:23
+#: hacks/config/fireflies.xml.h:45
+#: hacks/config/fluidballs.xml.h:23
 msgid "Wind"
 msgstr ""
 
@@ -3825,7 +4463,8 @@ msgstr ""
 msgid "Wind picks up"
 msgstr ""
 
-#: hacks/config/fireworkx.xml.h:1 hacks/config/lavalite.xml.h:3
+#: hacks/config/fireworkx.xml.h:1
+#: hacks/config/lavalite.xml.h:3
 msgid "Activity"
 msgstr ""
 
@@ -3838,10 +4477,7 @@ 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"
+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
@@ -3865,21 +4501,20 @@ msgid "Text for Flag"
 msgstr ""
 
 #: 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."
+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
+#: 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 ""
 
-#: 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/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 ""
@@ -3888,7 +4523,8 @@ msgstr ""
 msgid "Another iterative fractal generator. Written by Scott Draves."
 msgstr ""
 
-#: hacks/config/flame.xml.h:4 hacks/config/jigglypuff.xml.h:4
+#: hacks/config/flame.xml.h:4
+#: hacks/config/jigglypuff.xml.h:4
 msgid "Complexity"
 msgstr ""
 
@@ -3905,9 +4541,7 @@ 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."
+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
@@ -3919,36 +4553,34 @@ 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."
+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
+#: hacks/config/fliptext.xml.h:1
+#: hacks/config/starwars.xml.h:3
 msgid "Centered Text"
 msgstr ""
 
 #: 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."
+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
 msgid "FlipText"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:5 hacks/config/starwars.xml.h:7
+#: 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
+#: 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
+#: hacks/config/fliptext.xml.h:7
+#: hacks/config/starwars.xml.h:9
 msgid "Font Point Size"
 msgstr ""
 
@@ -3956,11 +4588,13 @@ msgstr ""
 msgid "Random Text Alignment"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:15 hacks/config/starwars.xml.h:15
+#: hacks/config/fliptext.xml.h:15
+#: hacks/config/starwars.xml.h:15
 msgid "Text Columns"
 msgstr ""
 
-#: hacks/config/fliptext.xml.h:16 hacks/config/starwars.xml.h:16
+#: hacks/config/fliptext.xml.h:16
+#: hacks/config/starwars.xml.h:16
 msgid "Text Lines"
 msgstr ""
 
@@ -3973,9 +4607,7 @@ msgid "Length of trails"
 msgstr ""
 
 #: hacks/config/flow.xml.h:13
-msgid ""
-"Strange attractors formed of flows in a 3D differential equation phase "
-"space. Written by Tim Auckland."
+msgid "Strange attractors formed of flows in a 3D differential equation phase space. Written by Tim Auckland."
 msgstr ""
 
 #: hacks/config/flow.xml.h:16
@@ -4014,7 +4646,8 @@ msgstr ""
 msgid "FluidBalls"
 msgstr ""
 
-#: hacks/config/fluidballs.xml.h:8 hacks/config/twang.xml.h:4
+#: hacks/config/fluidballs.xml.h:8
+#: hacks/config/twang.xml.h:4
 msgid "Friction"
 msgstr ""
 
@@ -4023,11 +4656,7 @@ msgid "Jupiter"
 msgstr ""
 
 #: hacks/config/fluidballs.xml.h:14
-msgid ""
-"Models the physics of bouncing balls, or of particles in a gas or fluid, "
-"depending on the settings. If \"Shake Box\" is selected, then every now and "
-"then, the box will be rotated, changing which direction is down (in order to "
-"keep the settled balls in motion.) By Peter Birtles and Jamie Zawinski."
+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
@@ -4071,18 +4700,11 @@ 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"
+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."
+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
@@ -4097,9 +4719,12 @@ msgstr ""
 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
+#: 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 ""
 
@@ -4140,12 +4765,7 @@ 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."
+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
@@ -4156,14 +4776,13 @@ msgstr ""
 msgid "Vapor Trails"
 msgstr ""
 
-#: hacks/config/forest.xml.h:2 hacks/config/glforestfire.xml.h:6
+#: hacks/config/forest.xml.h:2
+#: hacks/config/glforestfire.xml.h:6
 msgid "Forest"
 msgstr ""
 
 #: hacks/config/forest.xml.h:7
-msgid ""
-"This draws fractal trees. Written by Peter Baumung. Everybody loves "
-"fractals, right?"
+msgid "This draws fractal trees. Written by Peter Baumung. Everybody loves fractals, right?"
 msgstr ""
 
 #: hacks/config/fuzzyflakes.xml.h:2
@@ -4182,7 +4801,8 @@ msgstr ""
 msgid "FuzzyFlakes"
 msgstr ""
 
-#: hacks/config/fuzzyflakes.xml.h:11 hacks/config/xspirograph.xml.h:4
+#: hacks/config/fuzzyflakes.xml.h:11
+#: hacks/config/xspirograph.xml.h:4
 msgid "Layers"
 msgstr ""
 
@@ -4199,10 +4819,7 @@ msgid "Rotate Viewpoint"
 msgstr ""
 
 #: 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."
+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
@@ -4213,15 +4830,13 @@ msgstr ""
 msgid "Planetary Gear System"
 msgstr ""
 
-#: hacks/config/gears.xml.h:5 hacks/config/goop.xml.h:9
+#: 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."
+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
@@ -4233,9 +4848,7 @@ msgid "Checkerboard"
 msgstr ""
 
 #: hacks/config/gflux.xml.h:5
-msgid ""
-"Draws a rippling waves on a rotating wireframe grid, using GL. Written by "
-"Josiah Pease."
+msgid "Draws a rippling waves on a rotating wireframe grid, using GL. Written by Josiah Pease."
 msgstr ""
 
 #: hacks/config/gflux.xml.h:7
@@ -4251,15 +4864,16 @@ msgid "Mesh Density"
 msgstr ""
 
 #: hacks/config/gflux.xml.h:10
-#, fuzzy
 msgid "Screen Image"
-msgstr "Propriedades da proteo de tela"
+msgstr "Imagem da Tela"
 
-#: hacks/config/gflux.xml.h:14 hacks/config/interference.xml.h:21
+#: hacks/config/gflux.xml.h:14
+#: hacks/config/interference.xml.h:21
 msgid "Wave Speed"
 msgstr ""
 
-#: hacks/config/gflux.xml.h:15 hacks/config/glmatrix.xml.h:20
+#: hacks/config/gflux.xml.h:15
+#: hacks/config/glmatrix.xml.h:20
 msgid "Waves"
 msgstr ""
 
@@ -4276,25 +4890,17 @@ 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."
+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/gleidescope.xml.h:2
+#: hacks/config/glslideshow.xml.h:6
 #: hacks/config/mirrorblob.xml.h:3
 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."
+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
@@ -4322,14 +4928,11 @@ msgid "Desert"
 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;."
+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
+#: hacks/config/glforestfire.xml.h:5
+#: hacks/config/glmatrix.xml.h:9
 msgid "Fog"
 msgstr ""
 
@@ -4378,10 +4981,7 @@ msgid "Number of Disks"
 msgstr ""
 
 #: 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."
+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
@@ -4389,12 +4989,11 @@ msgid "GLKnots"
 msgstr ""
 
 #: hacks/config/glknots.xml.h:5
-msgid ""
-"Generates some twisting 3d knot patterns. Spins 'em around. Written by Jamie "
-"Zawinski."
+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/glknots.xml.h:7
+#: hacks/config/lavalite.xml.h:17
 #: hacks/config/spheremonics.xml.h:9
 msgid "Resolution"
 msgstr ""
@@ -4403,12 +5002,15 @@ msgstr ""
 msgid "Segmented"
 msgstr ""
 
-#: hacks/config/glknots.xml.h:18 hacks/config/lavalite.xml.h:28
+#: hacks/config/glknots.xml.h:18
+#: hacks/config/lavalite.xml.h:28
 #: hacks/config/xmountains.xml.h:25
+#, fuzzy
 msgid "Smooth"
-msgstr ""
+msgstr "Suave"
 
-#: hacks/config/glmatrix.xml.h:2 hacks/config/xmatrix.xml.h:1
+#: hacks/config/glmatrix.xml.h:2
+#: hacks/config/xmatrix.xml.h:1
 msgid "Binary Encoding"
 msgstr ""
 
@@ -4425,18 +5027,15 @@ msgid "Draw Solid Boxes"
 msgstr ""
 
 #: 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."
+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
 msgid "GLMatrix"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:11 hacks/config/xmatrix.xml.h:7
+#: hacks/config/glmatrix.xml.h:11
+#: hacks/config/xmatrix.xml.h:7
 msgid "Genetic Encoding"
 msgstr ""
 
@@ -4448,11 +5047,13 @@ msgstr ""
 msgid "Glyph Speed"
 msgstr ""
 
-#: hacks/config/glmatrix.xml.h:14 hacks/config/xmatrix.xml.h:8
+#: 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
+#: hacks/config/glmatrix.xml.h:15
+#: hacks/config/xmatrix.xml.h:11
 msgid "Matrix Encoding"
 msgstr ""
 
@@ -4461,11 +5062,7 @@ 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'."
+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
@@ -4480,13 +5077,16 @@ msgstr ""
 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
+#: 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 ""
 
-#: hacks/config/glslideshow.xml.h:5 hacks/config/glsnake.xml.h:2
+#: hacks/config/glslideshow.xml.h:5
+#: hacks/config/glsnake.xml.h:2
 #: hacks/config/mirrorblob.xml.h:2
 msgid "30 Seconds"
 msgstr ""
@@ -4500,35 +5100,29 @@ msgstr ""
 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
+#: hacks/config/mirrorblob.xml.h:6
 msgid "Crossfade Duration:"
 msgstr ""
 
 #: hacks/config/glslideshow.xml.h:11
 msgid "Frame Rate:"
-msgstr ""
+msgstr "Taxa de Quadros:"
 
 #: 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."
+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
 msgid "Pan/Zoom Duration:"
 msgstr ""
 
-#: hacks/config/glsnake.xml.h:1 hacks/config/lavalite.xml.h:1
+#: hacks/config/glsnake.xml.h:1
+#: hacks/config/lavalite.xml.h:1
 msgid "1"
 msgstr ""
 
@@ -4537,9 +5131,7 @@ msgid "Angular Velocity"
 msgstr ""
 
 #: 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."
+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
@@ -4575,9 +5167,7 @@ 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."
+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
@@ -4592,7 +5182,8 @@ msgstr ""
 msgid "Spin all the way around"
 msgstr ""
 
-#: hacks/config/gltext.xml.h:19 hacks/config/noseguy.xml.h:5
+#: hacks/config/gltext.xml.h:19
+#: hacks/config/noseguy.xml.h:5
 msgid "Text"
 msgstr ""
 
@@ -4601,9 +5192,7 @@ 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;."
+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
@@ -4635,14 +5224,7 @@ 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."
+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
@@ -4666,9 +5248,7 @@ msgid "Orbital Decay"
 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 "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
@@ -4676,8 +5256,7 @@ msgid "Greynetic"
 msgstr ""
 
 #: hacks/config/greynetic.xml.h:5
-msgid ""
-"This draws random colored and stippled rectangles. Written by Jamie Zawinski."
+msgid "This draws random colored and stippled rectangles. Written by Jamie Zawinski."
 msgstr ""
 
 #: hacks/config/halftone.xml.h:1
@@ -4693,11 +5272,7 @@ msgid "Dot size"
 msgstr ""
 
 #: 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;."
+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
@@ -4745,10 +5320,7 @@ 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."
+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
@@ -4756,9 +5328,7 @@ msgid "Helix"
 msgstr ""
 
 #: hacks/config/helix.xml.h:5
-msgid ""
-"This repeatedly generates spirally string-art-ish patterns. Written by Jamie "
-"Zawinski."
+msgid "This repeatedly generates spirally string-art-ish patterns. Written by Jamie Zawinski."
 msgstr ""
 
 #: hacks/config/hopalong.xml.h:3
@@ -4806,9 +5376,7 @@ msgid "Sine"
 msgstr ""
 
 #: 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."
+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
@@ -4816,35 +5384,36 @@ msgid "Hyperball"
 msgstr ""
 
 #: 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."
+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
+#: 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
+#: 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
+#: 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
+#: 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
+#: 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
+#: hacks/config/hyperball.xml.h:15
+#: hacks/config/hypercube.xml.h:15
 msgid "ZW Rotation"
 msgstr ""
 
@@ -4853,23 +5422,16 @@ msgid "Hypercube"
 msgstr ""
 
 #: 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 "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
+#: hacks/config/hypertorus.xml.h:2
+#: hacks/config/polytopes.xml.h:5
 msgid "4.0"
 msgstr ""
 
@@ -4881,23 +5443,28 @@ msgstr ""
 msgid "Color Wheel"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:5 hacks/config/polytopes.xml.h:10
+#: hacks/config/hypertorus.xml.h:5
+#: hacks/config/polytopes.xml.h:10
 msgid "Display Speed"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:7 hacks/config/polytopes.xml.h:12
+#: 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
+#: 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
+#: 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
+#: hacks/config/hypertorus.xml.h:10
+#: hacks/config/polytopes.xml.h:15
 msgid "Perspective 4d"
 msgstr ""
 
@@ -4929,20 +5496,19 @@ msgstr ""
 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
+#: 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 ""
 
 #: 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."
+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
+#: hacks/config/hypertorus.xml.h:22
+#: hacks/config/polytopes.xml.h:23
 msgid "Transparent Surface"
 msgstr ""
 
@@ -4950,31 +5516,38 @@ msgstr ""
 msgid "Two-Sided"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:24 hacks/config/polytopes.xml.h:24
+#: hacks/config/hypertorus.xml.h:24
+#: hacks/config/polytopes.xml.h:24
 msgid "WX Rotation Speed"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:25 hacks/config/polytopes.xml.h:25
+#: hacks/config/hypertorus.xml.h:25
+#: hacks/config/polytopes.xml.h:25
 msgid "WY Rotation Speed"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:26 hacks/config/polytopes.xml.h:26
+#: hacks/config/hypertorus.xml.h:26
+#: hacks/config/polytopes.xml.h:26
 msgid "WZ Rotation Speed"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:27 hacks/config/polytopes.xml.h:27
+#: 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
+#: hacks/config/hypertorus.xml.h:28
+#: hacks/config/polytopes.xml.h:28
 msgid "XY Rotation Speed"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:29 hacks/config/polytopes.xml.h:29
+#: hacks/config/hypertorus.xml.h:29
+#: hacks/config/polytopes.xml.h:29
 msgid "XZ Rotation Speed"
 msgstr ""
 
-#: hacks/config/hypertorus.xml.h:30 hacks/config/polytopes.xml.h:30
+#: hacks/config/hypertorus.xml.h:30
+#: hacks/config/polytopes.xml.h:30
 msgid "YZ Rotation Speed"
 msgstr ""
 
@@ -5006,7 +5579,8 @@ msgstr ""
 msgid "Number of Colours"
 msgstr ""
 
-#: hacks/config/ifs.xml.h:11 hacks/config/phosphor.xml.h:6
+#: hacks/config/ifs.xml.h:11
+#: hacks/config/phosphor.xml.h:6
 msgid "Scale"
 msgstr ""
 
@@ -5015,12 +5589,7 @@ msgid "Single"
 msgstr ""
 
 #: 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."
+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
@@ -5044,40 +5613,24 @@ msgid "Saturation 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."
+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
 msgid "Interaggregate"
 msgstr ""
 
-#: hacks/config/interaggregate.xml.h:3 hacks/config/intermomentary.xml.h:3
+#: hacks/config/interaggregate.xml.h:3
+#: hacks/config/intermomentary.xml.h:3
 msgid "Number of Discs"
 msgstr ""
 
 #: 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"
+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
+#: hacks/config/interference.xml.h:1
+#: hacks/config/rotzoomer.xml.h:1
 msgid "0"
 msgstr ""
 
@@ -5090,10 +5643,7 @@ msgid "Anim Speed"
 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."
+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
@@ -5104,33 +5654,27 @@ 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:9
+#: hacks/config/xearth.xml.h:11
+#: hacks/config/zoom.xml.h:5
 msgid "Magnification"
 msgstr ""
 
 #: hacks/config/interference.xml.h:16
 msgid "Number of Waves"
-msgstr ""
+msgstr "Número de Ondas"
 
 #: hacks/config/interference.xml.h:20
 msgid "Wave Size"
-msgstr ""
+msgstr "Tamanho das Ondas"
 
 #: 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"
+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
@@ -5161,7 +5705,8 @@ msgstr ""
 msgid "Rotation speed"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:17 hacks/config/sphere.xml.h:7
+#: hacks/config/jigglypuff.xml.h:17
+#: hacks/config/sphere.xml.h:7
 msgid "Sphere"
 msgstr ""
 
@@ -5177,25 +5722,14 @@ msgstr ""
 msgid "Spoooooky"
 msgstr ""
 
-#: hacks/config/jigglypuff.xml.h:21 hacks/config/polyhedra.xml.h:148
+#: 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"
+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
@@ -5231,13 +5765,7 @@ 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."
+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
@@ -5285,9 +5813,7 @@ msgid "turn on/off pattern descriptions."
 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."
+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
@@ -5322,7 +5848,8 @@ msgstr ""
 msgid "Min Objects"
 msgstr ""
 
-#: hacks/config/julia.xml.h:3 hacks/config/rorschach.xml.h:4
+#: hacks/config/julia.xml.h:3
+#: hacks/config/rorschach.xml.h:4
 msgid "Iterations"
 msgstr ""
 
@@ -5331,28 +5858,19 @@ 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."
+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."
+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 ""
 
-#: hacks/config/kaleidescope.xml.h:6 hacks/config/qix.xml.h:18
+#: hacks/config/kaleidescope.xml.h:6
+#: hacks/config/qix.xml.h:18
 msgid "Segments"
 msgstr ""
 
@@ -5369,9 +5887,7 @@ 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."
+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
@@ -5391,16 +5907,11 @@ msgid "Randomize"
 msgstr ""
 
 #: hacks/config/kumppa.xml.h:10
-msgid ""
-"Spiraling, spinning, and very, very fast splashes of color rush toward the "
-"screen. Written by Teemu Suutari."
+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."
+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
@@ -5412,12 +5923,11 @@ msgid "Laser"
 msgstr ""
 
 #: hacks/config/laser.xml.h:7
-msgid ""
-"Moving radiating lines, that look vaguely like scanning laser beams. Written "
-"by Pascal Pensa. (Frankie say: relax.)"
+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
+#: hacks/config/lavalite.xml.h:2
+#: hacks/config/xmountains.xml.h:2
 msgid "10"
 msgstr ""
 
@@ -5430,15 +5940,7 @@ 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.\""
+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
@@ -5470,9 +5972,7 @@ msgid "Lightning"
 msgstr ""
 
 #: hacks/config/lightning.xml.h:7
-msgid ""
-"This one draws crackling fractal lightning bolts. It's simple, direct, and "
-"to the point. If only it had sound... Written by Keith Romberg."
+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
@@ -5484,16 +5984,11 @@ msgid "Steps"
 msgstr ""
 
 #: 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."
+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."
+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
@@ -5533,9 +6028,7 @@ msgid "Open and Closed Figures"
 msgstr ""
 
 #: hacks/config/lmorph.xml.h:15
-msgid ""
-"This generates random spline-ish line drawings and morphs between them. "
-"Written by Sverre H. Huseby and Glenn T. Lines."
+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
@@ -5543,16 +6036,15 @@ msgid "Loop"
 msgstr ""
 
 #: hacks/config/loop.xml.h:10
-msgid ""
-"This one produces loop-shaped colonies that spawn, age, and eventually die. "
-"Written by David Bagley."
+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
+#: hacks/config/maze.xml.h:5
+#: hacks/config/slidescreen.xml.h:3
 msgid "Grid Size"
 msgstr ""
 
@@ -5593,10 +6085,7 @@ msgid "Solve Speed"
 msgstr ""
 
 #: 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."
+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
@@ -5620,9 +6109,7 @@ msgid "MemScroller"
 msgstr ""
 
 #: 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."
+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
@@ -5630,10 +6117,7 @@ msgid "Menger"
 msgstr ""
 
 #: 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."
+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
@@ -5641,9 +6125,7 @@ msgid "Big"
 msgstr ""
 
 #: hacks/config/metaballs.xml.h:2
-msgid ""
-"Draws two dimensional metaballs: overlapping and merging balls with fuzzy "
-"edges. By W.P. van Paassen."
+msgid "Draws two dimensional metaballs: overlapping and merging balls with fuzzy edges. By W.P. van Paassen."
 msgstr ""
 
 #: hacks/config/metaballs.xml.h:7
@@ -5666,14 +6148,13 @@ msgstr ""
 msgid "Blobby"
 msgstr ""
 
-#: hacks/config/mirrorblob.xml.h:5 hacks/config/nerverot.xml.h:2
+#: hacks/config/mirrorblob.xml.h:5
+#: hacks/config/nerverot.xml.h:2
 msgid "Calm"
 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."
+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
@@ -5721,9 +6202,7 @@ msgid "Mismunch"
 msgstr ""
 
 #: 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."
+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
@@ -5734,15 +6213,14 @@ msgstr ""
 msgid "Simultaneous Squares"
 msgstr ""
 
-#: hacks/config/mismunch.xml.h:13 hacks/config/munch.xml.h:10
+#: hacks/config/mismunch.xml.h:13
+#: hacks/config/munch.xml.h:10
 #: hacks/config/qix.xml.h:26
 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 "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
@@ -5761,7 +6239,8 @@ msgstr ""
 msgid "Solid Floor"
 msgstr ""
 
-#: hacks/config/moebius.xml.h:9 hacks/config/qix.xml.h:20
+#: hacks/config/moebius.xml.h:9
+#: hacks/config/qix.xml.h:20
 msgid "Solid Objects"
 msgstr ""
 
@@ -5769,28 +6248,17 @@ msgstr ""
 msgid "Moire"
 msgstr ""
 
-#: hacks/config/moire.xml.h:8 hacks/config/rorschach.xml.h:6
+#: hacks/config/moire.xml.h:8
+#: hacks/config/rorschach.xml.h:6
 msgid "Offset"
 msgstr ""
 
 #: 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''."
+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."
+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
@@ -5809,7 +6277,8 @@ msgstr ""
 msgid "Draw Atomic Nuclei"
 msgstr ""
 
-#: hacks/config/molecule.xml.h:7 hacks/config/spheremonics.xml.h:2
+#: hacks/config/molecule.xml.h:7
+#: hacks/config/spheremonics.xml.h:2
 msgid "Draw Bounding Box"
 msgstr ""
 
@@ -5818,10 +6287,7 @@ 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."
+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
@@ -5837,9 +6303,7 @@ 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..."
+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
@@ -5847,9 +6311,7 @@ msgid "Morph3D"
 msgstr ""
 
 #: hacks/config/mountain.xml.h:3
-msgid ""
-"Generates random 3d plots that look vaguely mountainous. Written by Pascal "
-"Pensa."
+msgid "Generates random 3d plots that look vaguely mountainous. Written by Pascal Pensa."
 msgstr ""
 
 #: hacks/config/mountain.xml.h:5
@@ -5857,11 +6319,7 @@ msgid "Mountain"
 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."
+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
@@ -5885,9 +6343,7 @@ 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."
+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
@@ -5902,7 +6358,8 @@ msgstr ""
 msgid "Nervousness"
 msgstr ""
 
-#: hacks/config/nerverot.xml.h:18 hacks/config/pyro.xml.h:12
+#: hacks/config/nerverot.xml.h:18
+#: hacks/config/pyro.xml.h:12
 msgid "Seldom"
 msgstr ""
 
@@ -5919,11 +6376,7 @@ 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."
+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
@@ -5940,7 +6393,7 @@ msgstr ""
 
 #: hacks/config/noseguy.xml.h:6
 msgid "Text File"
-msgstr ""
+msgstr "Arquivo de Texto"
 
 #: hacks/config/noseguy.xml.h:8
 msgid "Use Text Below"
@@ -5955,9 +6408,7 @@ msgid "Player Size"
 msgstr ""
 
 #: hacks/config/pacman.xml.h:4
-msgid ""
-"Simulates a game of Pac-Man on a randomly-created level. Written by Edwin de "
-"Jong."
+msgid "Simulates a game of Pac-Man on a randomly-created level. Written by Edwin de Jong."
 msgstr ""
 
 #: hacks/config/pedal.xml.h:7
@@ -5965,11 +6416,7 @@ msgid "Pedal"
 msgstr ""
 
 #: 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."
+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
@@ -5989,9 +6436,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."
+msgid "This hack simulates the classic arcade game Missile Command. Written by Adam Miller."
 msgstr ""
 
 #: hacks/config/penrose.xml.h:1
@@ -5999,18 +6444,7 @@ 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."
+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
@@ -6082,19 +6516,11 @@ msgid "Square"
 msgstr ""
 
 #: 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."
+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."
+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
@@ -6126,9 +6552,7 @@ 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."
+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
@@ -6140,9 +6564,7 @@ msgid "2000"
 msgstr ""
 
 #: hacks/config/pinion.xml.h:4
-msgid ""
-"Draws an interconnected set of gears moving across the screen. Written by "
-"Jamie Zawinski."
+msgid "Draws an interconnected set of gears moving across the screen. Written by Jamie Zawinski."
 msgstr ""
 
 #: hacks/config/pinion.xml.h:6
@@ -6182,9 +6604,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."
+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
@@ -6203,7 +6623,8 @@ msgstr ""
 msgid "System Length"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:4 hacks/config/sballs.xml.h:1
+#: hacks/config/polyhedra.xml.h:4
+#: hacks/config/sballs.xml.h:1
 msgid "Cube"
 msgstr ""
 
@@ -6240,18 +6661,15 @@ 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."
+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
+#: hacks/config/polyhedra.xml.h:15
+#: hacks/config/sballs.xml.h:2
 msgid "Dodecahedron"
 msgstr ""
 
@@ -6467,7 +6885,8 @@ msgstr ""
 msgid "Hexahemioctacron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:71 hacks/config/sballs.xml.h:5
+#: hacks/config/polyhedra.xml.h:71
+#: hacks/config/sballs.xml.h:5
 msgid "Icosahedron"
 msgstr ""
 
@@ -6519,7 +6938,8 @@ msgstr ""
 msgid "Medial Triambic Icosahedron"
 msgstr ""
 
-#: hacks/config/polyhedra.xml.h:85 hacks/config/sballs.xml.h:7
+#: hacks/config/polyhedra.xml.h:85
+#: hacks/config/sballs.xml.h:7
 msgid "Octahedron"
 msgstr ""
 
@@ -6832,9 +7252,7 @@ msgid "Polyominoes"
 msgstr ""
 
 #: hacks/config/polyominoes.xml.h:8
-msgid ""
-"Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
-"puzzle pieces. Written by Stephen Montgomery-Smith."
+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
@@ -6874,12 +7292,7 @@ msgid "Single Color"
 msgstr ""
 
 #: 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."
+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
@@ -6887,10 +7300,7 @@ msgid "Pong"
 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."
+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
@@ -6906,8 +7316,7 @@ msgid "Subdivision"
 msgstr ""
 
 #: hacks/config/popsquares.xml.h:9
-msgid ""
-"This draws a pop-art-ish looking grid of pulsing colors. By Levi Burton."
+msgid "This draws a pop-art-ish looking grid of pulsing colors. By Levi Burton."
 msgstr ""
 
 #: hacks/config/popsquares.xml.h:10
@@ -6927,9 +7336,7 @@ 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."
+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
@@ -6937,10 +7344,7 @@ 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."
+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
@@ -7000,8 +7404,7 @@ msgid "Pyro"
 msgstr ""
 
 #: hacks/config/pyro.xml.h:11
-msgid ""
-"Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski."
+msgid "Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski."
 msgstr ""
 
 #: hacks/config/qix.xml.h:1
@@ -7037,11 +7440,7 @@ 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."
+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
@@ -7053,10 +7452,7 @@ msgid "Queens"
 msgstr ""
 
 #: 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."
+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
@@ -7069,10 +7465,7 @@ msgid "1%"
 msgstr ""
 
 #: 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."
+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
@@ -7095,7 +7488,8 @@ msgstr ""
 msgid "Seed Radius"
 msgstr ""
 
-#: hacks/config/rd-bomb.xml.h:19 hacks/config/twang.xml.h:12
+#: hacks/config/rd-bomb.xml.h:19
+#: hacks/config/twang.xml.h:12
 msgid "Tile Size"
 msgstr ""
 
@@ -7148,10 +7542,7 @@ msgid "Storm"
 msgstr ""
 
 #: 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."
+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
@@ -7163,10 +7554,7 @@ msgid "Steering"
 msgstr ""
 
 #: 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."
+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
@@ -7178,12 +7566,7 @@ msgid "Rorschach"
 msgstr ""
 
 #: 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."
+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
@@ -7195,12 +7578,11 @@ msgid "With Y Symmetry"
 msgstr ""
 
 #: 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."
+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
+#: hacks/config/rotor.xml.h:4
+#: hacks/config/wander.xml.h:9
 msgid "Length"
 msgstr ""
 
@@ -7217,9 +7599,7 @@ msgid "Animate"
 msgstr ""
 
 #: hacks/config/rotzoomer.xml.h:4
-msgid ""
-"Creates a collage of rotated and scaled portions of the screen. Written by "
-"Claudio Matsuoka."
+msgid "Creates a collage of rotated and scaled portions of the screen. Written by Claudio Matsuoka."
 msgstr ""
 
 #: hacks/config/rotzoomer.xml.h:6
@@ -7243,9 +7623,7 @@ msgid "Wandering Rectangles"
 msgstr ""
 
 #: 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."
+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
@@ -7257,10 +7635,7 @@ msgid "Show Shuffling"
 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;."
+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
@@ -7284,9 +7659,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."
+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
@@ -7294,9 +7667,7 @@ msgid "Sierpinski"
 msgstr ""
 
 #: hacks/config/sierpinski.xml.h:10
-msgid ""
-"This draws the two-dimensional variant of the recursive Sierpinski triangle "
-"fractal. Written by Desmond Daignault."
+msgid "This draws the two-dimensional variant of the recursive Sierpinski triangle fractal. Written by Desmond Daignault."
 msgstr ""
 
 #: hacks/config/sierpinski3d.xml.h:7
@@ -7304,12 +7675,11 @@ msgid "Sierpinski3D"
 msgstr ""
 
 #: 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."
+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/slidescreen.xml.h:1
+#: hacks/config/twang.xml.h:1
 #: hacks/config/zoom.xml.h:1
 msgid "Border Width"
 msgstr ""
@@ -7323,12 +7693,7 @@ msgid "SlideScreen"
 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."
+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
@@ -7336,14 +7701,7 @@ msgid "Slip"
 msgstr ""
 
 #: 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."
+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
@@ -7407,12 +7765,7 @@ msgid "Team B Name"
 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 "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
@@ -7444,9 +7797,7 @@ 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."
+msgid "Simulates speeding down a rocky mineshaft, or a funky dancing worm. Written by Conrad Parker."
 msgstr ""
 
 #: hacks/config/speedmine.xml.h:16
@@ -7457,15 +7808,13 @@ msgstr ""
 msgid "Thrust"
 msgstr ""
 
-#: hacks/config/speedmine.xml.h:19 hacks/config/worm.xml.h:10
+#: hacks/config/speedmine.xml.h:19
+#: hacks/config/worm.xml.h:10
 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."
+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
@@ -7473,14 +7822,7 @@ 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;."
+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
@@ -7492,21 +7834,16 @@ 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."
+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
+#: hacks/config/spiral.xml.h:2
+#: hacks/config/superquadrics.xml.h:2
 msgid "Cycles"
 msgstr ""
 
 #: hacks/config/spiral.xml.h:7
-msgid ""
-"Moving circular patterns, by Peter Schmitzberger. Moving circular patterns "
-"means moire; interference patterns, of course."
+msgid "Moving circular patterns, by Peter Schmitzberger. Moving circular patterns means moire; interference patterns, of course."
 msgstr ""
 
 #: hacks/config/spiral.xml.h:11
@@ -7514,9 +7851,7 @@ msgid "Spiral"
 msgstr ""
 
 #: 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."
+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
@@ -7532,10 +7867,7 @@ msgid "Sproingies"
 msgstr ""
 
 #: 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."
+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
@@ -7546,7 +7878,8 @@ msgstr ""
 msgid "Left"
 msgstr ""
 
-#: hacks/config/squiral.xml.h:11 hacks/config/twang.xml.h:8
+#: hacks/config/squiral.xml.h:11
+#: hacks/config/twang.xml.h:8
 msgid "Randomness"
 msgstr ""
 
@@ -7563,18 +7896,7 @@ 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!"
+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
@@ -7582,9 +7904,7 @@ msgid "Stairs"
 msgstr ""
 
 #: hacks/config/stairs.xml.h:8
-msgid ""
-"by Marcelo Vianna's third Escher GL hack, this one draws an ``infinite'' "
-"staircase."
+msgid "by Marcelo Vianna's third Escher GL hack, this one draws an ``infinite'' staircase."
 msgstr ""
 
 #: hacks/config/starfish.xml.h:1
@@ -7600,11 +7920,7 @@ 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."
+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
@@ -7612,12 +7928,7 @@ 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."
+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
@@ -7649,10 +7960,7 @@ 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."
+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
@@ -7664,13 +7972,11 @@ 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."
+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
+#: hacks/config/substrate.xml.h:2
+#: hacks/config/xplanet.xml.h:2
 #, no-c-format
 msgid "0%"
 msgstr ""
@@ -7684,10 +7990,7 @@ 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."
+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
@@ -7703,10 +8006,7 @@ 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."
+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
@@ -7714,10 +8014,7 @@ 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."
+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
@@ -7757,9 +8054,7 @@ 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."
+msgid "This draws a working analog clock composed of floating, throbbing bubbles. Written by Bernd Paysan."
 msgstr ""
 
 #: hacks/config/t3d.xml.h:16
@@ -7771,8 +8066,7 @@ msgid "Wobbliness"
 msgstr ""
 
 #: hacks/config/tangram.xml.h:3
-msgid ""
-"Lets you watch the computer solve Tangram puzzles Written by Jeremy English."
+msgid "Lets you watch the computer solve Tangram puzzles Written by Jeremy English."
 msgstr ""
 
 #: hacks/config/tangram.xml.h:6
@@ -7796,9 +8090,7 @@ 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."
+msgid "Displays a view of the ``Bird in a Thornbush'' fractal. Written by Tim Auckland."
 msgstr ""
 
 #: hacks/config/thornbird.xml.h:6
@@ -7822,9 +8114,7 @@ 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."
+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
@@ -7840,9 +8130,7 @@ msgid "Timetunnel"
 msgstr ""
 
 #: hacks/config/triangle.xml.h:2
-msgid ""
-"Generates random mountain ranges using iterative subdivision of triangles. "
-"Written by Tobias Gloth."
+msgid "Generates random mountain ranges using iterative subdivision of triangles. Written by Tobias Gloth."
 msgstr ""
 
 #: hacks/config/triangle.xml.h:7
@@ -7850,9 +8138,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."
+msgid "This draws line- and arc-based Truchet patterns that tile the screen. Written by Adrian Likins."
 msgstr ""
 
 #: hacks/config/truchet.xml.h:5
@@ -7860,8 +8146,7 @@ msgid "Truchet"
 msgstr ""
 
 #: hacks/config/twang.xml.h:2
-msgid ""
-"Divides the screen into a grid, and plucks them. Written by Dan Bornstein."
+msgid "Divides the screen into a grid, and plucks them. Written by Dan Bornstein."
 msgstr ""
 
 #: hacks/config/twang.xml.h:6
@@ -7897,13 +8182,7 @@ 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."
+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
@@ -7911,10 +8190,7 @@ 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."
+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
@@ -7926,8 +8202,7 @@ msgid "Draw Spots"
 msgstr ""
 
 #: hacks/config/wander.xml.h:6
-msgid ""
-"Draws a colorful random-walk, in various forms. Written by Rick Campbell."
+msgid "Draws a colorful random-walk, in various forms. Written by Rick Campbell."
 msgstr ""
 
 #: hacks/config/wander.xml.h:14
@@ -7963,14 +8238,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."
+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
@@ -7982,10 +8250,7 @@ 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."
+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
@@ -8057,10 +8322,7 @@ 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."
+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
@@ -8076,9 +8338,7 @@ msgid "Wormhole"
 msgstr ""
 
 #: hacks/config/wormhole.xml.h:9
-msgid ""
-"Wormhole simulates flying through a colored wormhole in space. Written by "
-"Jon Rafkind."
+msgid "Wormhole simulates flying through a colored wormhole in space. Written by Jon Rafkind."
 msgstr ""
 
 #: hacks/config/xanalogtv.xml.h:1
@@ -8086,12 +8346,7 @@ 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."
+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
@@ -8099,11 +8354,7 @@ 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;."
+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
@@ -8126,7 +8377,8 @@ msgstr ""
 msgid "Huge Font"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:6 hacks/config/xmatrix.xml.h:10
+#: hacks/config/xdaliclock.xml.h:6
+#: hacks/config/xmatrix.xml.h:10
 msgid "Large Font"
 msgstr ""
 
@@ -8134,7 +8386,8 @@ msgstr ""
 msgid "Medium Font"
 msgstr ""
 
-#: hacks/config/xdaliclock.xml.h:8 hacks/config/xmatrix.xml.h:16
+#: hacks/config/xdaliclock.xml.h:8
+#: hacks/config/xmatrix.xml.h:16
 msgid "Small Font"
 msgstr ""
 
@@ -8143,18 +8396,15 @@ msgid "XDaliClock"
 msgstr ""
 
 #: 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;."
+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 ""
 
-#: hacks/config/xearth.xml.h:2 hacks/config/xplanet.xml.h:7
+#: hacks/config/xearth.xml.h:2
+#: hacks/config/xplanet.xml.h:7
 msgid "Date/Time Stamp"
 msgstr ""
 
@@ -8170,15 +8420,18 @@ msgstr ""
 msgid "Label Cities"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:9 hacks/config/xplanet.xml.h:49
+#: hacks/config/xearth.xml.h:9
+#: hacks/config/xplanet.xml.h:49
 msgid "Lower Left"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:10 hacks/config/xplanet.xml.h:50
+#: hacks/config/xearth.xml.h:10
+#: hacks/config/xplanet.xml.h:50
 msgid "Lower Right"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:13 hacks/config/xplanet.xml.h:51
+#: hacks/config/xearth.xml.h:13
+#: hacks/config/xplanet.xml.h:51
 msgid "Mercator Projection"
 msgstr ""
 
@@ -8194,11 +8447,13 @@ msgstr ""
 msgid "North/South Rotation"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:18 hacks/config/xplanet.xml.h:53
+#: 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
+#: hacks/config/xearth.xml.h:19
+#: hacks/config/xplanet.xml.h:56
 msgid "Real Time"
 msgstr ""
 
@@ -8214,26 +8469,23 @@ msgstr ""
 msgid "Terminator   Blurry"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:27 hacks/config/xplanet.xml.h:61
+#: 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
+#: hacks/config/xearth.xml.h:29
+#: hacks/config/xplanet.xml.h:62
 msgid "Upper Left"
 msgstr ""
 
-#: hacks/config/xearth.xml.h:30 hacks/config/xplanet.xml.h:63
+#: hacks/config/xearth.xml.h:30
+#: hacks/config/xplanet.xml.h:63
 msgid "Upper Right"
 msgstr ""
 
 #: 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;."
+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
@@ -8249,10 +8501,7 @@ msgid "Fish Speed"
 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;."
+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
@@ -8264,9 +8513,7 @@ msgid "Bitmap File"
 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."
+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
@@ -8278,11 +8525,7 @@ msgid "Xflame"
 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.''"
+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
@@ -8290,10 +8533,7 @@ msgid "Xjack"
 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."
+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
@@ -8301,11 +8541,7 @@ msgid "Xlyap"
 msgstr ""
 
 #: 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."
+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
@@ -8461,12 +8697,7 @@ msgid "Viewpoint"
 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!)"
+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
@@ -8814,18 +9045,11 @@ msgid "Xplanet"
 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;."
+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."
+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
@@ -8833,9 +9057,7 @@ msgid "XRaySwarm"
 msgstr ""
 
 #: 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;."
+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
@@ -8843,9 +9065,7 @@ msgid "Xsnow"
 msgstr ""
 
 #: hacks/config/xspirograph.xml.h:5
-msgid ""
-"Simulates that pen-in-nested-plastic-gears toy from your childhood. By Rohit "
-"Singh."
+msgid "Simulates that pen-in-nested-plastic-gears toy from your childhood. By Rohit Singh."
 msgstr ""
 
 #: hacks/config/xspirograph.xml.h:6
@@ -8873,9 +9093,7 @@ msgid "XTeeVee"
 msgstr ""
 
 #: 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."
+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
@@ -8887,10 +9105,7 @@ msgid "Lenses"
 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."
+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 ""
 
 #, fuzzy
@@ -8900,3 +9115,4 @@ msgstr ""
 #, fuzzy
 #~ msgid "Preview of screen saver"
 #~ msgstr "Propriedades da proteo de tela"
+
diff --git a/utils/._colors.c b/utils/._colors.c
deleted file mode 100644 (file)
index 64a8885..0000000
Binary files a/utils/._colors.c and /dev/null differ
index 2e10b55b428f478b425d3fa749ca82edc926a01e..e06359c72db811738959df9bc1f733e359485a4d 100644 (file)
@@ -336,16 +336,11 @@ make_color_path (Display *dpy, Colormap cmap,
   k = 0;
   for (i = 0; i < npoints; i++)
     {
-      int distance, direction;
-      distance = h[(i+1) % npoints] - h[i];
-      direction = (distance >= 0 ? -1 : 1);
-
-      if (distance > 180)
-       distance = 180 - (distance - 180);
-      else if (distance < -180)
-       distance = -(180 - ((-distance) - 180));
-      else
-       direction = -direction;
+      int distance = h[(i+1) % npoints] - h[i];
+      int direction = (distance >= 0 ? -1 : 1);
+
+      if (distance <= 180 && distance >= -180)
+        direction = -direction;
 
 #ifdef DEBUG
       fprintf (stderr, "point %d: %3d %.2f %.2f\n",
@@ -541,7 +536,7 @@ make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap,
                   allocate_p, (writable_pP && *writable_pP));
 
   /* If we tried for writable cells and got none, try for non-writable. */
-  if (allocate_p && *ncolorsP == 0 && *writable_pP)
+  if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP)
     {
       *writable_pP = False;
       goto RETRY_NON_WRITABLE;
index e056778899ba3612060186503f45ed865663f2bf..05b213e2aec540a4fac553b57f2e4b0367b560a3 100644 (file)
@@ -574,12 +574,7 @@ losira (eraser_state *st)
   else if (st->ratio < mode2)          /* squeeze from the top/bottom */
     {
       double ratio = (st->ratio - mode1) / (mode2 - mode1);
-      double prev_ratio = (st->prev_ratio - mode1) / (mode2 - mode1);
       int max = st->height / 2;
-      int step = (max * ratio) - (max * prev_ratio);
-
-      if (step <= 0)
-        step = 1;
 
       /* fill middle */
       XFillRectangle (st->dpy, st->window, st->fg_gc,
index 54396c765616bdd51f0e84f84178c803c2539d84..438197e80da1ff1eb2b4db6dcbb9d8e5a47c7cae 100644 (file)
@@ -582,13 +582,13 @@ pipe_cb (XtPointer closure, int *source, XtInputId *id)
     Window r;
     int x, y;
     unsigned int w, h, bbw, d;
-    struct stat *st;
+    struct stat st;
 
     /* Log something to syslog so we can tell the difference between
        corrupted images and broken symlinks. */
     if (!*buf)
       fprintf (stderr, "%s: no image filename found\n", progname);
-    else if (! stat (buf, st))
+    else if (! stat (buf, &st))
       fprintf (stderr, "%s: %s: unparsable\n", progname, buf);
     else
       {
@@ -730,11 +730,9 @@ load_random_image_1 (Screen *screen, Window window, Drawable drawable,
     done = True;
   }
 
-  if (! done) {
+  if (! done)
     draw_colorbars (screen, xgwa.visual, drawable, xgwa.colormap,
                     0, 0, xgwa.width, xgwa.height);
-    done = True;
-  }
 
   if (callback) {
     /* If we got here, we loaded synchronously even though they wanted async.
index ed3d31cbca13308270d339d4c46cd11e2884d284..d2d447771ae6a98469b18b6a3af6161f83a4ec81 100644 (file)
@@ -29,7 +29,6 @@
 
 #define SMOOTHNESS 1.0
 
-static void no_more_memory (void);
 static void grow_spline_points (spline* s);
 static void mid_point (double x0, double y0, double x1, double y1,
                       double *mx, double *my);
@@ -45,19 +44,11 @@ static void calc_section (spline* s, double cminus1x, double cminus1y,
                          double cx, double cy, double cplus1x, double cplus1y,
                          double cplus2x, double cplus2y);
 
-static void
-no_more_memory (void)
-{
-  fprintf (stderr, "No more memory\n");
-  exit (1);
-}
-
 spline*
 make_spline (unsigned int size)
 {
   spline* s = (spline*)calloc (1, sizeof (spline));
-  if (!s)
-    no_more_memory ();
+  if (!s) abort();
   s->n_controls = size;
   s->control_x = (double*)calloc (s->n_controls, sizeof (double));
   s->control_y = (double*)calloc (s->n_controls, sizeof (double));
@@ -67,7 +58,7 @@ make_spline (unsigned int size)
   s->points = (XPoint*)calloc (s->allocated_points, sizeof (XPoint));
 
   if (!s->control_x || !s->control_y || !s->points)
-    no_more_memory ();
+    abort();
 
   return s;
 }
@@ -78,9 +69,7 @@ grow_spline_points (spline *s)
   s->allocated_points *= 2;
   s->points =
     (XPoint*)realloc (s->points, s->allocated_points * sizeof (XPoint));
-
-  if (!s->points)
-    no_more_memory ();
+  if (!s->points) abort();
 }
 
 static void 
index 299ab6556c488f35b46c51fed0bb29fc77fe7f56..189b07471562bb007eb31dba30b06b1dfa15bb8c 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
-       "@(#)xscreensaver 5.11 (13-Apr-2010), by Jamie Zawinski (jwz@jwz.org)";
+       "@(#)xscreensaver 5.12 (15-Sep-2010), by Jamie Zawinski (jwz@jwz.org)";
index 24c95209b8bd7996d9b7ea2e82016abe4f547d1f..6e62a41c0a4cf03b617cf38f24efc748a1049daa 100644 (file)
@@ -1,5 +1,5 @@
 %define        name xscreensaver
-%define        version 5.11
+%define        version 5.12
 
 Summary:       X screen saver and locker
 Name:          %{name}
index 5d0e05b27cf0abe25ca5cfa5490b16d70fedae7b..569808071efaabfffb7f79c979cfb0f4cffff8c5 100644 (file)
                AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; };
                AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; };
                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 */; };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF0DCA520C4CBB0D00D76972 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF1A176F0D6D6EE3008AF328 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF32D9F00F3AD0B40080F535 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF35E89C0E63823600691F2F /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF3C71550D624BF50030CC0D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF48DEFF0A0C25E000F94CF9 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF4A3459102A593600A81B2A /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF4FD6F60CE7A486005EE58E /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF4FF4CA0D52CBDE00666F98 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF998EEA0A083DB30051049D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3393C0B058505002B0E7D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA33C010B058E17002B0E7D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D69409C03B6200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D85B09C03BD300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D85D09C03BD700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D85F09C03BDA00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D86109C03BDE00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D86309C03BE200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D86509C03BE500E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D86709C03BE800E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D86909C03BEC00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D86B09C03BEF00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D86D09C03BF300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D86F09C03BF700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D87109C03BFB00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D87309C03C0000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D87509C03C0400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D87709C03C0A00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D87909C03C1200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D87B09C03C1700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D87D09C03C1B00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D87F09C03C1E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D88109C03C2100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D88309C03C2400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D88509C03C2700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D88709C03C2A00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D88909C03C2E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D88B09C03C3200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D88D09C03C3600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D88F09C03C3900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D89109C03C3C00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D89309C03C4000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D89509C03C4400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D89709C03C4700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D89B09C03C4D00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D89D09C03C5000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D89F09C03C5300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8A109C03C5600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8A309C03C5F00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8A509C03C6200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8A909C03C6900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8AB09C03C6D00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8AD09C03C7000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8AF09C03C7300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8B109C03C7600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8B309C03C7900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8B509C03C7C00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8B709C03C7F00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8B909C03C8200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8BB09C03C8600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8BD09C03C8900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8BF09C03C8D00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8C109C03C9000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8C309C03C9300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8C509C03C9600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8C709C03C9900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8C909C03C9E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8CB09C03CA100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8CD09C03CA400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8CF09C03CA800E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8D109C03CAB00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8D309C03CAE00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8D709C03CB400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8D909C03CB700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8DB09C03CBA00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8DD09C03CBD00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8DF09C03CC000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8E109C03CC400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8E309C03CCA00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8E509C03CCD00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8E709C03CD100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8E909C03CD500E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8EB09C03CD800E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8ED09C03CDB00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8EF09C03CDE00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8F109C03CE100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8F309C03CE400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8F509C03CE800E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8F709C03CEA00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8F909C03CED00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8FB09C03CF100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8FD09C03CF400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D8FF09C03CF700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D90109C03D0000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D90309C03D0400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D90509C03D0700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D90709C03D0B00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D90909C03D0E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D90B09C03D1100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D90D09C03D1400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D90F09C03D1800E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D91109C03D1B00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D91309C03D1E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D91509C03D2100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D91709C03D2400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D91909C03D2700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D91D09C03D3000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D91F09C03D3300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D92109C03D3600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D92309C03D3A00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D92509C03D3D00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D92709C03D4000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D92909C03D4400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D92B09C03D4700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D92D09C03D4A00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D92F09C03D4E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D93109C03D5100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D93309C03D5400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D93509C03D5700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D93709C03D5B00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D93909C03D5E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D93B09C03D6200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D93D09C03D6C00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D93F09C03D6F00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D94109C03D7200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D94309C03D7600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D94509C03D7A00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D94709C03D7E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D94909C03D8100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D94B09C03D8500E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D94D09C03D8D00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D94F09C03D9100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D95109C03D9400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D95309C03D9800E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D95509C03D9C00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D95709C03DA100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D95909C03DA400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D95B09C03DA800E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D95D09C03DAB00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D95F09C03DAE00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D96109C03DB100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D96309C03DB500E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D96509C03DB900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D96709C03DBC00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D96909C03DBF00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D96B09C03DC600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D96D09C03DCA00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D96F09C03DCD00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D97109C03DD000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D97309C03DD300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D97509C03DD700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D97709C03DDA00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D97909C03DDD00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D97B09C03DE000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D97D09C03DE400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D97F09C03DE700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D98109C03DEA00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D98309C03DEE00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D98509C03DF100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D98709C03DF400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D98909C03DF700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D98B09C03DFC00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D98D09C03E0500E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D98F09C03E0F00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D99109C03E1200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D99309C03E1600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D99509C03E1900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D99709C03E1C00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D99909C03E2000E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D99B09C03E2300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D99D09C03E2600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D99F09C03E2900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9A109C03E2E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9A309C03E3200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9A509C03E3600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9A709C03E3A00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9A909C03E3D00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9AB09C03E4200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9AD09C03E4600E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9AF09C03E4B00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9B109C03E4E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9B309C03E5100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9B509C03E5700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9B709C03E5B00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9B909C03E5E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9BB09C03E6200E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9BD09C03E6500E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9BF09C03E6900E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9C109C03E6E00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9C309C03E7100E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9C509C03E7400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9C709C03E7800E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9C909C03E7C00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9CB09C03E7F00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9CD09C03E8400E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9CF09C03E8700E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9D109C03E8B00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9D309C03E8F00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3D9D509C03E9300E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFA3DBA209C0424C00E4CFCA /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFCCCBB509C033DF00353F4D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFCCCBC709C03AAF00353F4D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFCCCBCB09C03AEE00353F4D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFCCCBCD09C03AF400353F4D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFCCCBCF09C03AF800353F4D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFCCCBD109C03AFC00353F4D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFCCCBD309C03B0000353F4D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFCCCBD509C03B0500353F4D /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFD51B2C0F063B4A00471C02 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFE2A4660E2E904600ADB298 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFE30BF80E52B14700CCF4A5 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFE6A1930CDD7B2E002805BF /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFE6A4290CDD7FAA002805BF /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFF463430C4403E400EE6509 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AFF463680C440AEF00EE6509 /* ShellScript */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
 /* End PBXShellScriptBuildPhase section */
                        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;