From http://www.jwz.org/xscreensaver/xscreensaver-5.22.tar.gz
authorZygo Blaxell <zblaxell@faye.furryterror.org>
Tue, 16 Jul 2013 15:07:35 +0000 (11:07 -0400)
committerZygo Blaxell <zblaxell@faye.furryterror.org>
Tue, 16 Jul 2013 15:07:49 +0000 (11:07 -0400)
-rw-r--r-- 1 zblaxell zblaxell 7411666 Jul 16 05:35 xscreensaver-5.22.tar.gz
b1d7f97d9b60d9c68c0f3e019cad885f5c7bd6ec  xscreensaver-5.22.tar.gz

174 files changed:
Makefile.in
OSX/InvertedSlider.h
OSX/InvertedSlider.m
OSX/Makefile
OSX/README
OSX/SaverListController.m
OSX/SaverRunner.h
OSX/SaverRunner.m
OSX/SaverRunner.plist
OSX/XScreenSaver.plist
OSX/XScreenSaverConfigSheet.m
OSX/XScreenSaverGLView.m
OSX/XScreenSaverView.h
OSX/XScreenSaverView.m
OSX/apple2-app.xml [new file with mode: 0644]
OSX/bindist.rtf
OSX/build-fntable.pl
OSX/iSaverRunner.plist
OSX/ios-function-table.m [new file with mode: 0644]
OSX/ios_function_tables.h [deleted file]
OSX/phosphor-app.xml [new file with mode: 0644]
OSX/update-info-plist.pl
OSX/update-thumbnail.pl
README
driver/XScreenSaver.ad.in
driver/XScreenSaver_ad.h
driver/exec.c
driver/xscreensaver-getimage-file
driver/xscreensaver-getimage.c
driver/xscreensaver.c
hacks/Makefile.in
hacks/abstractile.c
hacks/anemone.c
hacks/anemotaxis.c
hacks/apple2-main.c
hacks/attraction.c
hacks/attraction.man
hacks/blaster.c
hacks/blitspin.c
hacks/bouboule.c
hacks/boxfit.c
hacks/braid.c
hacks/bumps.c
hacks/ccurve.c
hacks/celtic.c
hacks/cloudlife.c
hacks/compile_axp.com
hacks/compile_decc.com
hacks/config/README
hacks/config/apple2.xml
hacks/config/fliptext.xml
hacks/config/hexadrop.xml [new file with mode: 0644]
hacks/config/kaleidocycle.xml [new file with mode: 0644]
hacks/config/phosphor.xml
hacks/config/quasicrystal.xml [new file with mode: 0644]
hacks/config/unknownpleasures.xml [new file with mode: 0644]
hacks/coral.c
hacks/critical.c
hacks/crystal.c
hacks/cwaves.c
hacks/cynosure.c
hacks/decayscreen.c
hacks/deco.c
hacks/deluxe.c
hacks/demon.c
hacks/discrete.c
hacks/distort.c
hacks/drift.c
hacks/epicycle.c
hacks/euler2d.c
hacks/fadeplot.c
hacks/fireworkx.c
hacks/flame.c
hacks/fluidballs.c
hacks/galaxy.c
hacks/glx/Makefile.in
hacks/glx/companion.c
hacks/glx/cubenetic.c
hacks/glx/dnalogo.c
hacks/glx/engine.c
hacks/glx/font-ximage.c
hacks/glx/glschool.c
hacks/glx/gltrackball.c
hacks/glx/jwzgles.c
hacks/glx/jwzglesI.h
hacks/glx/kaleidocycle.c [new file with mode: 0644]
hacks/glx/kaleidocycle.man [new file with mode: 0644]
hacks/glx/quasicrystal.c [new file with mode: 0644]
hacks/glx/quasicrystal.man [new file with mode: 0644]
hacks/glx/tangram.c
hacks/glx/texfont.c
hacks/glx/unknownpleasures.c [new file with mode: 0644]
hacks/glx/unknownpleasures.man [new file with mode: 0644]
hacks/glx/xpm-ximage.c
hacks/goop.c
hacks/grav.c
hacks/greynetic.c
hacks/halftone.c
hacks/halo.c
hacks/helix.c
hacks/hexadrop.c [new file with mode: 0644]
hacks/hexadrop.man [new file with mode: 0644]
hacks/hopalong.c
hacks/ifs.c
hacks/imsmap.c
hacks/interaggregate.c
hacks/interference.c
hacks/intermomentary.c
hacks/julia.c
hacks/kaleidescope.c
hacks/kumppa.c
hacks/loop.c
hacks/maze.c
hacks/memscroller.c
hacks/metaballs.c
hacks/moire.c
hacks/moire2.c
hacks/munch.c
hacks/nerverot.c
hacks/pacman.c
hacks/pacman_level.c
hacks/pedal.c
hacks/penrose.c
hacks/petri.c
hacks/phosphor.c
hacks/piecewise.c
hacks/polyominoes.c
hacks/popsquares.c
hacks/qix.c
hacks/rd-bomb.c
hacks/ripples.c
hacks/rocks.c
hacks/rorschach.c
hacks/rotzoomer.c
hacks/screenhack.c
hacks/shadebobs.c
hacks/sierpinski.c
hacks/slidescreen.c
hacks/slip.c
hacks/speedmine.c
hacks/spotlight.c
hacks/squiral.c
hacks/starfish.c
hacks/strange.c
hacks/substrate.c
hacks/swirl.c
hacks/thornbird.c
hacks/triangle.c
hacks/truchet.c
hacks/twang.c
hacks/vermiculate.c
hacks/wander.c
hacks/whirlwindwarp.c
hacks/whirlygig.c
hacks/wormhole.c
hacks/xflame.c
hacks/xjack.c
hacks/xlockmore.c
hacks/xlyap.c
hacks/xml2man.pl
hacks/xrayswarm.c
hacks/xspirograph.c
hacks/zoom.c
po/POTFILES.in
setup.com
utils/colors.c
utils/colors.h
utils/grabclient.c
utils/grabscreen.c
utils/minixpm.c
utils/spline.c
utils/version.h
xscreensaver.spec
xscreensaver.xcodeproj/project.pbxproj

index c905925fffa0a74b4aff69dede985baf0abf8e0c..ccbe5f8bac240442bb73f59cdc74bfd7607afcee 100644 (file)
@@ -334,7 +334,9 @@ www::
   echo '' ;                                                                \
                                                                            \
   for EXT in tar.gz dmg ; do                                               \
   echo '' ;                                                                \
                                                                            \
   for EXT in tar.gz dmg ; do                                               \
-    OLDEST=`ls xscreensaver*.$$EXT | head -n 1` ;                          \
+    OLDEST=`ls xscreensaver*.$$EXT |                                       \
+      fgrep -v 5.14 |                                                      \
+      head -n 1` ;                                                         \
     /bin/echo -n "Delete $$DEST/$$OLDEST? ";                               \
     read line;                                                             \
     if [ "x$$line" = "xyes" -o "x$$line" = "xy" ]; then                            \
     /bin/echo -n "Delete $$DEST/$$OLDEST? ";                               \
     read line;                                                             \
     if [ "x$$line" = "xyes" -o "x$$line" = "xy" ]; then                            \
index 6e9dece82f1a7253deae2d1ad70f0ea802be1e23..986e8edde0b82104450ded662b120de1056b67b2 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org>
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
@@ -30,4 +30,9 @@
 
 - (id) initWithFrame:(NSRect)r inverted:(BOOL)_inv integers:(BOOL)_int;
 
 
 - (id) initWithFrame:(NSRect)r inverted:(BOOL)_inv integers:(BOOL)_int;
 
+# ifdef USE_IPHONE
+- (double) transformedValue;
+- (void) setTransformedValue:(double)v;
+# endif
+
 @end
 @end
index c4fd5e3740fd3ce28472a35a76dede73a743864c..605d6e2dea70da61c3c1004243a5fa1caca82528 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org>
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
   return v2;
 }
 
   return v2;
 }
 
--(double) doubleValue;
-{
-# ifdef USE_IPHONE
-  return [self transformValue:[self value]];
-# else
-  return [self transformValue:[super doubleValue]];
-# endif
-}
-
--(void) setDoubleValue:(double)v
-{
-# ifdef USE_IPHONE
-  return [super setValue:[self transformValue:v]];
-# else
-  return [super setDoubleValue:[self transformValue:v]];
-# endif
-}
-
-
-#ifdef USE_IPHONE
-
-- (void)setValue:(float)v animated:(BOOL)a
-{
-  return [super setValue:[self transformValue:v] animated:a];
-}
-
+#ifndef USE_IPHONE
 
 
-/* Draw the thumb in the right place by also inverting its position
-   relative to the track.
+/* On MacOS, we have to transform the value on every entry and exit point
+   to this class.  So, we implement doubleValue and setDoubleValue to
+   transform the value; and we then have to re-implement every getter and
+   setter in terms of those.  There's no way to simply change how the
+   slider is displayed without mucking with the value inside of it.
  */
  */
-- (CGRect)thumbRectForBounds:(CGRect)bounds
-                   trackRect:(CGRect)rect
-                       value:(float)value
-{
-  CGRect thumb = [super thumbRectForBounds:bounds trackRect:rect value:value];
-  if (inverted)
-    thumb.origin.x = rect.size.width - thumb.origin.x - thumb.size.width;
-  return thumb;
-}
-
-#endif // !USE_IPHONE
-
-
 
 
-/* Implement all accessor methods in terms of "doubleValue" above.
-   (Note that these normally exist only on MacOS, not on iOS.)
- */
-
--(float) floatValue;
+-(double) doubleValue
 {
 {
-  return (float) [self doubleValue];
+  return [self transformValue:[super doubleValue]];
 }
 
 }
 
--(int) intValue;
+-(void) setDoubleValue:(double)v
 {
 {
-  return (int) [self doubleValue];
+  return [super setDoubleValue:[self transformValue:v]];
 }
 
 }
 
--(id) objectValue;
-{
-  return [NSNumber numberWithDouble:[self doubleValue]];
-}
+-(float)floatValue       { return (float) [self doubleValue]; }
+-(int)intValue           { return (int) [self doubleValue]; }
+-(NSInteger)integerValue { return (NSInteger) [self doubleValue]; }
+-(id)objectValue { return [NSNumber numberWithDouble:[self doubleValue]]; }
 
 
--(NSString *) stringValue;
+-(NSString *)stringValue
 {
 {
-  return [NSString stringWithFormat:@"%f", [self floatValue]];
+  if (integers)
+    return [NSString stringWithFormat:@"%d", [self intValue]];
+  else
+    return [NSString stringWithFormat:@"%f", [self doubleValue]];
 }
 
 - (NSAttributedString *)attributedStringValue;
 }
 
 - (NSAttributedString *)attributedStringValue;
   return [[NSAttributedString alloc] initWithString:[self stringValue]];
 }
 
   return [[NSAttributedString alloc] initWithString:[self stringValue]];
 }
 
-
-/* Implment all setter methods in terms of "setDoubleValue", above.
- */
-
--(void) setFloatValue:(float)v
-{
-  [self setDoubleValue:(double)v];
-}
-
--(void) setIntValue:(int)v
-{
-  [self setDoubleValue:(double)v];
+-(void)setFloatValue:(float)v       { [self setDoubleValue: (double) v];      }
+-(void)setIntValue:  (int)v         { [self setDoubleValue: (double) v];      }
+-(void)setIntegerValue:(NSInteger)v { [self setDoubleValue: (double) v];      }
+-(void)setStringValue:(NSString *)v { [self setDoubleValue: [v doubleValue]]; }
+-(void)takeIntValueFrom:(id)f       { [self setIntValue:    [f intValue]];    }
+-(void)takeFloatValueFrom:(id)f     { [self setFloatValue:  [f floatValue]];  }
+-(void)takeDoubleValueFrom:(id)f    { [self setDoubleValue: [f doubleValue]]; }
+-(void)takeStringValueFrom:(id)f    { [self setStringValue: [f stringValue]]; }
+-(void)takeObjectValueFrom:(id)f    { [self setObjectValue: [f objectValue]]; }
+-(void)takeIntegerValueFrom:(id)f   { [self setIntegerValue:[f integerValue]];}
+-(void) setAttributedStringValue:(NSAttributedString *)v {
+  [self setStringValue:[v string]];
 }
 
 -(void) setObjectValue:(id <NSCopying>)v
 }
 
 -(void) setObjectValue:(id <NSCopying>)v
   [self setDoubleValue:[((NSNumber *) v) doubleValue]];
 }
 
   [self setDoubleValue:[((NSNumber *) v) doubleValue]];
 }
 
--(void) setStringValue:(NSString *)v
+#else  // USE_IPHONE
+
+/* On iOS, we have control over how the value is displayed, but there's no
+   way to transform the value on input and output: if we wrap 'value' and
+   'setValue' analagously to what we do on MacOS, things fail in weird
+   ways.  Presumably some parts of the system are accessing the value
+   instance variable directly instead of going through the methods.
+
+   So the only way around this is to enforce that all of our calls into
+   this object use a new API: 'transformedValue' and 'setTransformedValue'.
+   The code in XScreenSaverConfigSheet uses that instead.
+ */
+
+- (CGRect)thumbRectForBounds:(CGRect)bounds
+                   trackRect:(CGRect)rect
+                       value:(float)value
+{
+  CGRect thumb = [super thumbRectForBounds: bounds
+                                 trackRect: rect 
+                                     value: [self transformValue:value]];
+  if (inverted)
+    thumb.origin.x = rect.size.width - thumb.origin.x - thumb.size.width;
+  return thumb;
+}
+
+-(double) transformedValue
 {
 {
-  [self setDoubleValue:[v doubleValue]];
+  return [self transformValue: [self value]];
 }
 
 }
 
--(void) setAttributedStringValue:(NSAttributedString *)v
+-(void) setTransformedValue:(double)v
 {
 {
-  [self setStringValue:[v string]];
+  [self setValue: [self transformValue: v]];
 }
 
 }
 
+#endif // USE_IPHONE
+
+
 @end
 @end
index b2354dfae06aa02bd678650327890dcfb45a85c1..7e99452ec51825fc997e80b333e8aa40a76acdc3 100644 (file)
@@ -1,4 +1,4 @@
-# XScreenSaver for MacOS X, Copyright (c) 2006-2012 by Jamie Zawinski.
+# XScreenSaver for MacOS X, Copyright (c) 2006-2013 by Jamie Zawinski.
 
 XCODEBUILD = /usr/bin/xcodebuild
 TARGETS    = -target "All Savers"
 
 XCODEBUILD = /usr/bin/xcodebuild
 TARGETS    = -target "All Savers"
@@ -12,7 +12,7 @@ all: debug release
 
 clean:
        -rm -rf build
 
 clean:
        -rm -rf build
-#      cd ..; $(XCODEBUILD) -target $(TARGETS) clean
+#      cd ..; $(XCODEBUILD) $(TARGETS) clean
 
 distclean:
        -rm -f config.status config.cache config.log \
 
 distclean:
        -rm -f config.status config.cache config.log \
@@ -33,7 +33,8 @@ release:: update_thumbs
 release:: sign
 
 sign:
 release:: sign
 
 sign:
-       @for f in build/Release/*.{saver,app} ; do \
+       @for f in build/Release/*.app/Contents/*/*.saver \
+                 build/Release/*.{saver,app} ; do \
          codesign -vfs $(CERT) $$f ; \
         done
 
          codesign -vfs $(CERT) $$f ; \
         done
 
@@ -62,8 +63,8 @@ update_thumbs::
 
 
 # Arrrrgh
 
 
 # Arrrrgh
-ios_function_tables.h::
-       @./build-fntable.pl build/Debug-iphoneos/XScreenSaver.app $@
+ios-function-table.m::
+       @./build-fntable.pl build/Debug-iphonesimulator/XScreenSaver.app $@
 
 
 echo_tarfiles:
 
 
 echo_tarfiles:
index 551e3bb6814a53c79a85ee20d61caee1add1aca0..f8f7458b03563659d714cda5e3fecc3517d8209a 100644 (file)
@@ -8,3 +8,33 @@ directories.
 
 To build these programs, XCode 2.4 or later is required.
 To run them, MacOS 10.4.0 or later is required.
 
 To build these programs, XCode 2.4 or later is required.
 To run them, MacOS 10.4.0 or later is required.
+
+
+This is how you add a new screen saver to the Xcode project. It's a
+ridiculously long list of steps!
+
+  1: Duplicate a target (Dangerball for GL, or Attraction for X11).
+  2: Rename it, and drag it to the right spot in the list.
+  3: Delete the dangerball.c and dangerball.xml files from the new target.
+  4: Delete the "DangerBall copy-Info.plist" file that got created.
+  5: Delete the "DangerBall copy-Info.plist" from the Build Settings too.
+  6: Change PRODUCT_NAME in Build Settings.
+  7: Manage Schemes, rename "DangerBall Copy".
+  8: Move to the right place in the list.
+  9: Scheme / Run: set SELECTED_SAVER environment variable.
+ 10: Scheme / Run / Info: Executable: SaverTester.app.
+ 11: File / Add Files / the new .c and .xml.
+     Add to targets: the new target, and also "XScreenSaver-iOS".
+ 12: Re-order them in the file list.
+ 13: In target "All Savers (OpenGL)" add the new target as a dependency.
+ 14: In target "XScreenSaver-iOS", reorder new files in "Copy" and "Compile".
+ 15: In target "XScreenSaver-iOS", add "-DUSE_GL" to the new file's options.
+ 16: Put a 200x150 screen shot in ~/www/xscreensaver/screenshots/
+ 17: ln -s ../../src/xscreensaver/OSX/build/Debug/NEW.saver \
+           ~/Library/Screen\ Savers/
+ 18: Build "XScreenSaver-iOS" once. then:
+     cd ~/src/xscreensaver/OSX ; make ios-function-table.m
+     and build it again.
+ 19: cvs add xscreensaver.xcodeproj/xcuserdata/*/xcschemes/*.xcscheme
+ 20: Don't forget to create a man page from the XML with xml2man.pl,
+     and update Makefile.in.
index 484cb1685449bdb50a625d1a7ccfe445c23e27eb..e0abeca61db2eead825090e704b44aad8241ade9 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2012-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -36,6 +36,7 @@
 {
   // Extract the version number and release date from the version string.
   // Here's an area where I kind of wish I had "Two Problems".
 {
   // Extract the version number and release date from the version string.
   // Here's an area where I kind of wish I had "Two Problems".
+  // I guess I could add custom key to the Info.plist for this.
 
   NSArray *a = [[NSString stringWithCString: screensaver_id
                           encoding:NSASCIIStringEncoding]
 
   NSArray *a = [[NSString stringWithCString: screensaver_id
                           encoding:NSASCIIStringEncoding]
  */
 - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
 {
  */
 - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
 {
+  if (motion != UIEventSubtypeMotionShake)
+    return;
   NSMutableArray *a = [NSMutableArray arrayWithCapacity: 200];
   for (NSArray *sec in letter_sections)
     for (NSString *s in sec)
   NSMutableArray *a = [NSMutableArray arrayWithCapacity: 200];
   for (NSArray *sec in letter_sections)
     for (NSString *s in sec)
index 0284ccf5065a296ebb7a9b3f9b8aad96d1e6f865..b8716263a4ac0214ebc4967fb1f2e0552aa15775 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -55,6 +55,8 @@
   GLuint gl_framebuffer, gl_renderbuffer;
   IBOutlet UIView *view;
   UIImage *saved_screenshot;
   GLuint gl_framebuffer, gl_renderbuffer;
   IBOutlet UIView *view;
   UIImage *saved_screenshot;
+  UIView *aboutBox;
+  NSTimer *splashTimer;
 
 # endif // USE_IPHONE
 }
 
 # endif // USE_IPHONE
 }
@@ -62,9 +64,9 @@
 - (void) loadSaver: (NSString *)name launch:(BOOL)launch;
 - (void) loadSaver: (NSString *)name;
 - (void) selectedSaverDidChange:(NSDictionary *)change;
 - (void) loadSaver: (NSString *)name launch:(BOOL)launch;
 - (void) loadSaver: (NSString *)name;
 - (void) selectedSaverDidChange:(NSDictionary *)change;
+- (void) aboutPanel: (id)sender;
 
 #ifndef USE_IPHONE
 
 #ifndef USE_IPHONE
-- (void) aboutPanel: (id)sender;
 - (void) openPreferences: (id)sender;
 #else  // USE_IPHONE
 - (void) openPreferences: (NSString *)which;
 - (void) openPreferences: (id)sender;
 #else  // USE_IPHONE
 - (void) openPreferences: (NSString *)which;
index 526f62eb0dc4071b3a0a8e19c1282a154cf7f207..c94e6c1473d173929608a6a29b772295536716af 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -19,7 +19,7 @@
 
    Second, it can be used to transform any screen saver into a standalone
    program.  Just put one (and only one) .saver bundle into the app
 
    Second, it can be used to transform any screen saver into a standalone
    program.  Just put one (and only one) .saver bundle into the app
-   bundle's Contents/PlugIns/ directory, and it will load and run that
+   bundle's Contents/Resources/ directory, and it will load and run that
    saver at start-up (without the saver-selection menu or other chrome).
    This is how the "Phosphor.app" and "Apple2.app" programs work.
 
    saver at start-up (without the saver-selection menu or other chrome).
    This is how the "Phosphor.app" and "Apple2.app" programs work.
 
                           initWithFrame:rect
                           saverName:module
                           isPreview:YES];
                           initWithFrame:rect
                           saverName:module
                           isPreview:YES];
-  if (! instance) return 0;
+  if (! instance) {
+    NSLog(@"Failed to instantiate %@ for \"%@\"", new_class, module);
+    return 0;
+  }
 
 
   /* KLUGE: Inform the underlying program that we're in "standalone"
 
 
   /* KLUGE: Inform the underlying program that we're in "standalone"
@@ -211,6 +214,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
   }
 
   NSAssert (sv, @"no saver view");
   }
 
   NSAssert (sv, @"no saver view");
+  if (!sv) return;
   NSWindow *prefs = [sv configureSheet];
 
   [NSApp beginSheet:prefs
   NSWindow *prefs = [sv configureSheet];
 
   [NSApp beginSheet:prefs
@@ -362,8 +366,6 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
 
 - (void)loadSaver:(NSString *)name launch:(BOOL)launch
 {
 
 - (void)loadSaver:(NSString *)name launch:(BOOL)launch
 {
-  // NSLog (@"selecting saver \"%@\"", name);
-
 # ifndef USE_IPHONE
 
   if (saverName && [saverName isEqualToString: name]) {
 # ifndef USE_IPHONE
 
   if (saverName && [saverName isEqualToString: name]) {
@@ -413,6 +415,10 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
 
 # else  // USE_IPHONE
 
 
 # else  // USE_IPHONE
 
+#  if TARGET_IPHONE_SIMULATOR
+  NSLog (@"selecting saver \"%@\"", name);
+#  endif
+
   NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
   [prefs setObject:name forKey:@"selectedSaverName"];
   [prefs synchronize];
   NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
   [prefs setObject:name forKey:@"selectedSaverName"];
   [prefs synchronize];
@@ -429,7 +435,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
   if (! backgroundView) {
     // This view is the parent of the XScreenSaverView, and exists only
     // so that there is a black background behind it.  Without this, when
   if (! backgroundView) {
     // This view is the parent of the XScreenSaverView, and exists only
     // so that there is a black background behind it.  Without this, when
-    // rotation is in progresss, the scrolling-list window's corners show
+    // rotation is in progress, the scrolling-list window's corners show
     // through in the corners.
     backgroundView = [[[NSView class] alloc] initWithFrame:[window frame]];
     [backgroundView setBackgroundColor:[NSColor blackColor]];
     // through in the corners.
     backgroundView = [[[NSView class] alloc] initWithFrame:[window frame]];
     [backgroundView setBackgroundColor:[NSColor blackColor]];
@@ -469,6 +475,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
     [backgroundView addSubview: saverView];
     [saverView becomeFirstResponder];
     [saverView startAnimation];
     [backgroundView addSubview: saverView];
     [saverView becomeFirstResponder];
     [saverView startAnimation];
+    [self aboutPanel:nil];
   }
 # endif // USE_IPHONE
 }
   }
 # endif // USE_IPHONE
 }
@@ -480,10 +487,10 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
 }
 
 
 }
 
 
-# ifndef USE_IPHONE
-
 - (void)aboutPanel:(id)sender
 {
 - (void)aboutPanel:(id)sender
 {
+# ifndef USE_IPHONE
+
   NSDictionary *bd = [saverBundle infoDictionary];
   NSMutableDictionary *d = [NSMutableDictionary dictionaryWithCapacity:20];
 
   NSDictionary *bd = [saverBundle infoDictionary];
   NSMutableDictionary *d = [NSMutableDictionary dictionaryWithCapacity:20];
 
@@ -499,9 +506,168 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
 
   [[NSApplication sharedApplication]
     orderFrontStandardAboutPanelWithOptions:d];
 
   [[NSApplication sharedApplication]
     orderFrontStandardAboutPanelWithOptions:d];
-}
+# else  // USE_IPHONE
+
+  NSString *name = saverName;
+  NSString *year = [self makeDesc:saverName yearOnly:YES];
+
+
+  CGRect frame = [saverView frame];
+  CGFloat rot;
+  CGFloat pt1 = 24;
+  CGFloat pt2 = 14;
+  UIFont *font1 = [UIFont boldSystemFontOfSize:  pt1];
+  UIFont *font2 = [UIFont italicSystemFontOfSize:pt2];
+  CGSize tsize1 = [name sizeWithFont:font1
+                   constrainedToSize:CGSizeMake(frame.size.width,
+                                                frame.size.height)];
+  CGSize tsize2 = [year sizeWithFont:font2
+                   constrainedToSize:CGSizeMake(frame.size.width,
+                                                frame.size.height)];
+  CGSize tsize = CGSizeMake (tsize1.width > tsize2.width ?
+                             tsize1.width : tsize2.width,
+                             tsize1.height + tsize2.height);
+
+  // Don't know how to find inner margin of UITextView.
+  CGFloat margin = 10;
+  tsize.width  += margin * 4;
+  tsize.height += margin * 2;
+
+  if ([saverView frame].size.width >= 768)
+    tsize.height += pt1 * 3;  // extra bottom margin on iPad
+
+  frame = CGRectMake (0, 0, tsize.width, tsize.height);
+
+  UIInterfaceOrientation orient =
+    // Why are both of these wrong when starting up rotated??
+    [[UIDevice currentDevice] orientation];
+    // [rootViewController interfaceOrientation];
+
+  /* Get the text oriented properly, and move it to the bottom of the
+     screen, since many savers have action in the middle.
+   */
+  switch (orient) {
+  case UIDeviceOrientationLandscapeRight:     
+    rot = -M_PI/2;
+    frame.origin.x = ([saverView frame].size.width
+                      - (tsize.width - tsize.height) / 2
+                      - tsize.height);
+    frame.origin.y = ([saverView frame].size.height - tsize.height) / 2;
+    break;
+  case UIDeviceOrientationLandscapeLeft:
+    rot = M_PI/2;
+    frame.origin.x = -(tsize.width - tsize.height) / 2;
+    frame.origin.y = ([saverView frame].size.height - tsize.height) / 2;
+    break;
+  case UIDeviceOrientationPortraitUpsideDown: 
+    rot = M_PI;
+    frame.origin.x = ([saverView frame].size.width  - tsize.width) / 2;
+    frame.origin.y = 0;
+    break;
+  default:
+    rot = 0;
+    frame.origin.x = ([saverView frame].size.width  - tsize.width) / 2;
+    frame.origin.y =  [saverView frame].size.height - tsize.height;
+    break;
+  }
+
+  if (aboutBox)
+    [aboutBox removeFromSuperview];
+
+  aboutBox = [[UIView alloc] initWithFrame:frame];
+
+  aboutBox.transform = CGAffineTransformMakeRotation (rot);
+  aboutBox.backgroundColor = [UIColor clearColor];
 
 
+  /* There seems to be no easy way to stroke the font, so instead draw
+     it 5 times, 4 in black and 1 in yellow, offset by 1 pixel, and add
+     a black shadow to each.  (You'd think the shadow alone would be
+     enough, but there's no way to make it dark enough to be legible.)
+   */
+  for (int i = 0; i < 5; i++) {
+    UITextView *textview;
+    int off = 1;
+    frame.origin.x = frame.origin.y = 0;
+    switch (i) {
+      case 0: frame.origin.x = -off; break;
+      case 1: frame.origin.x =  off; break;
+      case 2: frame.origin.y = -off; break;
+      case 3: frame.origin.y =  off; break;
+    }
+
+    for (int j = 0; j < 2; j++) {
+
+      frame.origin.y = (j == 0 ? 0 : pt1);
+      textview = [[UITextView alloc] initWithFrame:frame];
+      textview.font = (j == 0 ? font1 : font2);
+      textview.text = (j == 0 ? name  : year);
+      textview.textAlignment = UITextAlignmentCenter;
+      textview.showsHorizontalScrollIndicator = NO;
+      textview.showsVerticalScrollIndicator   = NO;
+      textview.scrollEnabled = NO;
+      textview.editable = NO;
+      textview.userInteractionEnabled = NO;
+      textview.backgroundColor = [UIColor clearColor];
+      textview.textColor = (i == 4 
+                            ? [UIColor yellowColor]
+                            : [UIColor blackColor]);
+
+      CALayer *textLayer = (CALayer *)
+        [textview.layer.sublayers objectAtIndex:0];
+      textLayer.shadowColor   = [UIColor blackColor].CGColor;
+      textLayer.shadowOffset  = CGSizeMake(0, 0);
+      textLayer.shadowOpacity = 1;
+      textLayer.shadowRadius  = 2;
+
+      [aboutBox addSubview:textview];
+    }
+  }
+
+  CABasicAnimation *anim = 
+    [CABasicAnimation animationWithKeyPath:@"opacity"];
+  anim.duration     = 0.3;
+  anim.repeatCount  = 1;
+  anim.autoreverses = NO;
+  anim.fromValue    = [NSNumber numberWithFloat:0.0];
+  anim.toValue      = [NSNumber numberWithFloat:1.0];
+  [aboutBox.layer addAnimation:anim forKey:@"animateOpacity"];
+
+  [backgroundView addSubview:aboutBox];
+
+  if (splashTimer)
+    [splashTimer invalidate];
+
+  splashTimer =
+    [NSTimer scheduledTimerWithTimeInterval: anim.duration + 2
+             target:self
+             selector:@selector(aboutOff)
+             userInfo:nil
+             repeats:NO];
 # endif // USE_IPHONE
 # endif // USE_IPHONE
+}
+
+
+# ifdef USE_IPHONE
+- (void)aboutOff
+{
+  if (aboutBox) {
+    if (splashTimer) {
+      [splashTimer invalidate];
+      splashTimer = 0;
+    }
+    CABasicAnimation *anim = 
+      [CABasicAnimation animationWithKeyPath:@"opacity"];
+    anim.duration     = 0.3;
+    anim.repeatCount  = 1;
+    anim.autoreverses = NO;
+    anim.fromValue    = [NSNumber numberWithFloat: 1];
+    anim.toValue      = [NSNumber numberWithFloat: 0];
+    anim.delegate     = self;
+    aboutBox.layer.opacity = 0;
+    [aboutBox.layer addAnimation:anim forKey:@"animateOpacity"];
+  }
+}
+#endif // USE_IPHONE
 
 
 
 
 
 
@@ -560,6 +726,9 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
     [result addObject: name];
   }
 
     [result addObject: name];
   }
 
+  if (! [result count])
+    result = 0;
+
   return result;
 }
 
   return result;
 }
 
@@ -570,7 +739,11 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
   NSMutableArray *dirs = [NSMutableArray arrayWithCapacity: 10];
 
 # ifndef USE_IPHONE
   NSMutableArray *dirs = [NSMutableArray arrayWithCapacity: 10];
 
 # ifndef USE_IPHONE
-  // On MacOS, look in the "Contents/PlugIns/" directory in the bundle.
+  // On MacOS, look in the "Contents/Resources/" and "Contents/PlugIns/"
+  // directories in the bundle.
+  [dirs addObject: [[[[NSBundle mainBundle] bundlePath]
+                      stringByAppendingPathComponent:@"Contents"]
+                     stringByAppendingPathComponent:@"Resources"]];
   [dirs addObject: [[NSBundle mainBundle] builtInPlugInsPath]];
 
   // Also look in the same directory as the executable.
   [dirs addObject: [[NSBundle mainBundle] builtInPlugInsPath]];
 
   // Also look in the same directory as the executable.
@@ -578,14 +751,16 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
                      stringByDeletingLastPathComponent]];
 
   // Finally, look in standard MacOS screensaver directories.
                      stringByDeletingLastPathComponent]];
 
   // Finally, look in standard MacOS screensaver directories.
-  [dirs addObject: @"~/Library/Screen Savers"];
-  [dirs addObject: @"/Library/Screen Savers"];
-  [dirs addObject: @"/System/Library/Screen Savers"];
+//  [dirs addObject: @"~/Library/Screen Savers"];
+//  [dirs addObject: @"/Library/Screen Savers"];
+//  [dirs addObject: @"/System/Library/Screen Savers"];
 
 
-# else
-  // On iOS, just look in the bundle's root directory.
+# else  // USE_IPHONE
+
+  // On iOS, only look in the bundle's root directory.
   [dirs addObject: [[NSBundle mainBundle] bundlePath]];
   [dirs addObject: [[NSBundle mainBundle] bundlePath]];
-# endif
+
+# endif // USE_IPHONE
 
   int i;
   for (i = 0; i < [dirs count]; i++) {
 
   int i;
   for (i = 0; i < [dirs count]; i++) {
@@ -656,6 +831,84 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
 
 #else  // USE_IPHONE
 
 
 #else  // USE_IPHONE
 
+- (NSString *) makeDesc:(NSString *)saver
+                  yearOnly:(BOOL) yearp
+{
+  NSString *desc = 0;
+  NSString *path = [saverDir stringByAppendingPathComponent:
+                               [[saver lowercaseString]
+                                 stringByReplacingOccurrencesOfString:@" "
+                                 withString:@""]];
+  NSRange r;
+
+  path = [path stringByAppendingPathExtension:@"xml"];
+  desc = [NSString stringWithContentsOfFile:path
+                   encoding:NSISOLatin1StringEncoding
+                   error:nil];
+  if (! desc) goto FAIL;
+
+  r = [desc rangeOfString:@"<_description>"
+            options:NSCaseInsensitiveSearch];
+  if (r.length == 0) {
+    desc = 0;
+    goto FAIL;
+  }
+  desc = [desc substringFromIndex: r.location + r.length];
+  r = [desc rangeOfString:@"</_description>"
+            options:NSCaseInsensitiveSearch];
+  if (r.length > 0)
+    desc = [desc substringToIndex: r.location];
+
+  // Leading and trailing whitespace.
+  desc = [desc stringByTrimmingCharactersInSet:
+                 [NSCharacterSet whitespaceAndNewlineCharacterSet]];
+
+  // Let's see if we can find a year on the last line.
+  r = [desc rangeOfString:@"\n" options:NSBackwardsSearch];
+  NSString *year = 0;
+  for (NSString *word in
+         [[desc substringFromIndex:r.location + r.length]
+           componentsSeparatedByCharactersInSet:
+             [NSCharacterSet characterSetWithCharactersInString:
+                               @" \t\n-."]]) {
+    int n = [word doubleValue];
+    if (n > 1970 && n < 2100)
+      year = word;
+  }
+
+  // Delete everything after the first blank line.
+  r = [desc rangeOfString:@"\n\n" options:0];
+  if (r.length > 0)
+    desc = [desc substringToIndex: r.location];
+
+  // Truncate really long ones.
+  int max = 140;
+  if ([desc length] > max)
+    desc = [desc substringToIndex: max];
+
+  if (year)
+    desc = [year stringByAppendingString:
+                   [@": " stringByAppendingString: desc]];
+
+  if (yearp)
+    desc = year ? year : @"";
+
+FAIL:
+  if (! desc) {
+    desc = @"Oops, this module appears to be incomplete.";
+    // NSLog(@"broken saver: %@", path);
+  }
+
+  return desc;
+}
+
+- (NSString *) makeDesc:(NSString *)saver
+{
+  return [self makeDesc:saver yearOnly:NO];
+}
+
+
+
 /* Create a dictionary of one-line descriptions of every saver,
    for display on the UITableView.
  */
 /* Create a dictionary of one-line descriptions of every saver,
    for display on the UITableView.
  */
@@ -663,73 +916,9 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
 {
   NSMutableDictionary *dict = 
     [NSMutableDictionary dictionaryWithCapacity:[saverNames count]];
 {
   NSMutableDictionary *dict = 
     [NSMutableDictionary dictionaryWithCapacity:[saverNames count]];
-
   for (NSString *saver in saverNames) {
   for (NSString *saver in saverNames) {
-    NSString *desc = 0;
-    NSString *path = [saverDir stringByAppendingPathComponent:
-                                 [[saver lowercaseString]
-                                   stringByReplacingOccurrencesOfString:@" "
-                                   withString:@""]];
-    NSRange r;
-
-    path = [path stringByAppendingPathExtension:@"xml"];
-    desc = [NSString stringWithContentsOfFile:path
-                     encoding:NSISOLatin1StringEncoding
-                     error:nil];
-    if (! desc) goto FAIL;
-
-    r = [desc rangeOfString:@"<_description>"
-              options:NSCaseInsensitiveSearch];
-    if (r.length == 0) {
-      desc = 0;
-      goto FAIL;
-    }
-    desc = [desc substringFromIndex: r.location + r.length];
-    r = [desc rangeOfString:@"</_description>"
-              options:NSCaseInsensitiveSearch];
-    if (r.length > 0)
-      desc = [desc substringToIndex: r.location];
-
-    // Leading and trailing whitespace.
-    desc = [desc stringByTrimmingCharactersInSet:
-                   [NSCharacterSet whitespaceAndNewlineCharacterSet]];
-
-    // Let's see if we can find a year on the last line.
-    r = [desc rangeOfString:@"\n" options:NSBackwardsSearch];
-    NSString *year = 0;
-    for (NSString *word in
-           [[desc substringFromIndex:r.location + r.length]
-             componentsSeparatedByCharactersInSet:
-               [NSCharacterSet characterSetWithCharactersInString:
-                                 @" \t\n-."]]) {
-      int n = [word doubleValue];
-      if (n > 1970 && n < 2100)
-        year = word;
-    }
-
-    // Delete everything after the first blank line.
-    r = [desc rangeOfString:@"\n\n" options:0];
-    if (r.length > 0)
-      desc = [desc substringToIndex: r.location];
-
-    // Truncate really long ones.
-    int max = 140;
-    if ([desc length] > max)
-      desc = [desc substringToIndex: max];
-
-    if (year)
-      desc = [year stringByAppendingString:
-                     [@": " stringByAppendingString: desc]];
-
-  FAIL:
-    if (! desc) {
-      desc = @"Oops, this module appears to be incomplete.";
-      // NSLog(@"broken saver: %@", path);
-    }
-
-    [dict setObject:desc forKey:saver];
+    [dict setObject:[self makeDesc:saver] forKey:saver];
   }
   }
-
   return dict;
 }
 
   return dict;
 }
 
@@ -969,8 +1158,9 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str)
 # ifdef USE_IPHONE
   /* Don't auto-launch the saver unless it was running last time.
      XScreenSaverView manages this, on crash_timer.
 # ifdef USE_IPHONE
   /* Don't auto-launch the saver unless it was running last time.
      XScreenSaverView manages this, on crash_timer.
+     Unless forced.
    */
    */
-  if (! [prefs boolForKey:@"wasRunning"])
+  if (!forced && ![prefs boolForKey:@"wasRunning"])
     return;
 # endif
 
     return;
 # endif
 
index 0a864dc52fc8ad7f42bf2e9261d93e2d907e2949..28460692ebb046ef0b18e2f7b863208fa6457210 100644 (file)
@@ -12,7 +12,7 @@ http://www.jwz.org/xscreensaver/</string>
        <key>CFBundleIconFile</key>
        <string>SaverRunner</string>
        <key>CFBundleIdentifier</key>
        <key>CFBundleIconFile</key>
        <string>SaverRunner</string>
        <key>CFBundleIdentifier</key>
-       <string>org.jwz.xscreensaver.${EXECUTABLE_NAME}</string>
+       <string>${BUNDLE_IDENTIFIER}</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleLongVersionString</key>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleLongVersionString</key>
@@ -22,11 +22,11 @@ http://www.jwz.org/xscreensaver/</string>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>5.21</string>
+       <string>5.22</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5.21</string>
+       <string>5.22</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.4</string>
        <key>NSHumanReadableCopyright</key>
        <key>LSMinimumSystemVersion</key>
        <string>10.4</string>
        <key>NSHumanReadableCopyright</key>
index 36c8a0efa503f8818621672ae1c2e32c4d482078..b47a5fd318d9aa9cbce76eb0106dd25beb4883df 100644 (file)
@@ -7,7 +7,7 @@
        <key>CFBundleExecutable</key>
        <string>${EXECUTABLE_NAME}</string>
        <key>CFBundleIdentifier</key>
        <key>CFBundleExecutable</key>
        <string>${EXECUTABLE_NAME}</string>
        <key>CFBundleIdentifier</key>
-       <string>org.jwz.xscreensaver.${EXECUTABLE_NAME}</string>
+       <string>${BUNDLE_IDENTIFIER}</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>BNDL</string>
        <key>CFBundleShortVersionString</key>
-       <string>5.21</string>
+       <string>5.22</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5.21</string>
+       <string>5.22</string>
        <key>LSMinimumSystemVersion</key>
        <string>10.4</string>
        <key>NSMainNibFile</key>
        <key>LSMinimumSystemVersion</key>
        <string>10.4</string>
        <key>NSMainNibFile</key>
index b32e47612a15fe7e2ac36867b227044d114c351a..ebf33827ea9747ba397588fbe336cfe45a1bc529 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -533,7 +533,12 @@ static void layout_group (NSView *group, BOOL horiz_p);
   if ([active_text_field canResignFirstResponder])
     [active_text_field resignFirstResponder];
   NSString *pref_key = [pref_keys objectAtIndex: [sender tag]];
   if ([active_text_field canResignFirstResponder])
     [active_text_field resignFirstResponder];
   NSString *pref_key = [pref_keys objectAtIndex: [sender tag]];
-  double v = [sender value];
+
+  // Hacky API. See comment in InvertedSlider.m.
+  double v = ([sender isKindOfClass: [InvertedSlider class]]
+              ? [(InvertedSlider *) sender transformedValue]
+              : [sender value]);
+
   if (v == (int) v)
     [userDefaultsController setInteger:v forKey:pref_key];
   else
   if (v == (int) v)
     [userDefaultsController setInteger:v forKey:pref_key];
   else
@@ -689,7 +694,11 @@ static void layout_group (NSView *group, BOOL horiz_p);
 
   if ([control isKindOfClass:[UISlider class]]) {
     sel = @selector(sliderAction:);
 
   if ([control isKindOfClass:[UISlider class]]) {
     sel = @selector(sliderAction:);
-    [(UISlider *) control setValue: dval];
+    // Hacky API. See comment in InvertedSlider.m.
+    if ([control isKindOfClass:[InvertedSlider class]])
+      [(InvertedSlider *) control setTransformedValue: dval];
+    else
+      [(UISlider *) control setValue: dval];
   } else if ([control isKindOfClass:[UISwitch class]]) {
     sel = @selector(switchAction:);
     [(UISwitch *) control setOn: ((int) dval != 0)];
   } else if ([control isKindOfClass:[UISwitch class]]) {
     sel = @selector(switchAction:);
     [(UISwitch *) control setOn: ((int) dval != 0)];
index 3d3aeeaba4b438fb84d0b57eeeaac642e4b79533..7ec10090624b18cb61f76bb24c018ffb38c5ab23 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org>
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
@@ -207,13 +207,13 @@ extern void check_gl_error (const char *type);
 {
 # ifdef USE_IPHONE
   UIGraphicsPushContext (backbuffer);
 {
 # ifdef USE_IPHONE
   UIGraphicsPushContext (backbuffer);
-#endif
+# endif
 
   [self render_x11];
 
 # ifdef USE_IPHONE
   UIGraphicsPopContext();
 
   [self render_x11];
 
 # ifdef USE_IPHONE
   UIGraphicsPopContext();
-#endif
+# endif
 }
 
 
 }
 
 
@@ -233,6 +233,7 @@ extern void check_gl_error (const char *type);
 # else
   double s = 1;
 # endif
 # else
   double s = 1;
 # endif
+  // Store a realistic size in backbuffer_size, though the buffer is minimal.
   NSRect f = [self bounds];
   backbuffer_size.width  = (int) (s * f.size.width);
   backbuffer_size.height = (int) (s * f.size.height);
   NSRect f = [self bounds];
   backbuffer_size.width  = (int) (s * f.size.width);
   backbuffer_size.height = (int) (s * f.size.height);
@@ -247,7 +248,7 @@ extern void check_gl_error (const char *type);
     CGColorSpaceRelease (cs);
   }
 }
     CGColorSpaceRelease (cs);
   }
 }
-# endif // USE_IPHONE
+# endif // USE_BACKBUFFER
 
 
 - (void)dealloc {
 
 
 - (void)dealloc {
@@ -338,6 +339,7 @@ init_GL (ModeInfo *mi)
 
     NSAssert (pixfmt, @"unable to create NSOpenGLPixelFormat");
 
 
     NSAssert (pixfmt, @"unable to create NSOpenGLPixelFormat");
 
+    // #### Analyze says: "Potential leak of an object stored into pixfmt"
     ctx = [[NSOpenGLContext alloc] 
             initWithFormat:pixfmt
               shareContext:nil];
     ctx = [[NSOpenGLContext alloc] 
             initWithFormat:pixfmt
               shareContext:nil];
@@ -349,9 +351,8 @@ init_GL (ModeInfo *mi)
   [ctx setValues:&r forParameter:NSOpenGLCPSwapInterval];
 //  check_gl_error ("NSOpenGLCPSwapInterval");  // SEGV sometimes. Too early?
 
   [ctx setValues:&r forParameter:NSOpenGLCPSwapInterval];
 //  check_gl_error ("NSOpenGLCPSwapInterval");  // SEGV sometimes. Too early?
 
-  // #### "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.
+  // #### Analyze says: "Potential leak of an object stored into "ctx"
+  // But makeCurrentContext retains it (right?)
 
   [ctx makeCurrentContext];
   check_gl_error ("makeCurrentContext");
 
   [ctx makeCurrentContext];
   check_gl_error ("makeCurrentContext");
@@ -397,9 +398,9 @@ init_GL (ModeInfo *mi)
     eagl_layer.opaque = TRUE;
     eagl_layer.drawableProperties = 
       [NSDictionary dictionaryWithObjectsAndKeys:
     eagl_layer.opaque = TRUE;
     eagl_layer.drawableProperties = 
       [NSDictionary dictionaryWithObjectsAndKeys:
-      kEAGLColorFormatRGBA8,             kEAGLDrawablePropertyColorFormat,
-      [NSNumber numberWithBool:!dbuf_p], kEAGLDrawablePropertyRetainedBacking,
-      nil];
+       kEAGLColorFormatRGBA8,             kEAGLDrawablePropertyColorFormat,
+       [NSNumber numberWithBool:!dbuf_p], kEAGLDrawablePropertyRetainedBacking,
+       nil];
 
     // Without this, the GL frame buffer is half the screen resolution!
     eagl_layer.contentsScale = [UIScreen mainScreen].scale;
 
     // Without this, the GL frame buffer is half the screen resolution!
     eagl_layer.contentsScale = [UIScreen mainScreen].scale;
@@ -410,6 +411,7 @@ init_GL (ModeInfo *mi)
   if (!ogl_ctx)
     return 0;
   [view setOglContext:ogl_ctx];
   if (!ogl_ctx)
     return 0;
   [view setOglContext:ogl_ctx];
+  // #### Analyze says "Potential leak of an object stored into ogl_ctx"
 
   check_gl_error ("OES_init");
 
 
   check_gl_error ("OES_init");
 
index 0fe2046c0d4de0a3df3cf1b616ee82378b02737a..6902c559ea749aac3708edcd55eb67b748ffee8c 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org>
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
   NSSize rot_from, rot_to;     // start size rect, end size rect
   GLfloat angle_from, angle_to;        // start angle, end angle
   double rot_start_time;
   NSSize rot_from, rot_to;     // start size rect, end size rect
   GLfloat angle_from, angle_to;        // start angle, end angle
   double rot_start_time;
+  BOOL ignore_rotation_p;
 
   NSSize rot_current_size;
   GLfloat rot_current_angle;
 
   NSTimer *crash_timer;
 
 
   NSSize rot_current_size;
   GLfloat rot_current_angle;
 
   NSTimer *crash_timer;
 
+  NSDictionary *function_tables;
+
 # endif // USE_IPHONE
 
 # ifdef USE_BACKBUFFER
 # endif // USE_IPHONE
 
 # ifdef USE_BACKBUFFER
index a0dc3813200b738f86d24d2c2aea71251d283c9a..d773fc84d048ab6b75c4015befb677e5431867b5 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski <jwz@jwz.org>
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 #import "xlockmoreI.h"
 #import "jwxyz-timers.h"
 
 #import "xlockmoreI.h"
 #import "jwxyz-timers.h"
 
-#ifdef USE_IPHONE
-# include "ios_function_tables.h"
-static NSDictionary *function_tables = 0;
-#endif
-
 
 /* Garbage collection only exists if we are being compiled against the 
    10.6 SDK or newer, not if we are building against the 10.4 SDK.
 
 /* Garbage collection only exists if we are being compiled against the 
    10.6 SDK or newer, not if we are building against the 10.4 SDK.
@@ -50,6 +45,8 @@ int mono_p = 0;
 
 # ifdef USE_IPHONE
 
 
 # ifdef USE_IPHONE
 
+extern NSDictionary *make_function_table_dict(void);  // ios-function-table.m
+
 /* Stub definition of the superclass, for iPhone.
  */
 @implementation ScreenSaverView
 /* Stub definition of the superclass, for iPhone.
  */
 @implementation ScreenSaverView
@@ -98,7 +95,6 @@ int mono_p = 0;
 
 
 @interface XScreenSaverView (Private)
 
 
 @interface XScreenSaverView (Private)
-- (void) stopAndClose;
 - (void) stopAndClose:(Bool)relaunch;
 @end
 
 - (void) stopAndClose:(Bool)relaunch;
 @end
 
@@ -120,6 +116,7 @@ int mono_p = 0;
   CFBundleRef cfb = CFBundleCreate (kCFAllocatorDefault, url);
   CFRelease (url);
   NSAssert1 (cfb, @"no CFBundle for \"%@\"", path);
   CFBundleRef cfb = CFBundleCreate (kCFAllocatorDefault, url);
   CFRelease (url);
   NSAssert1 (cfb, @"no CFBundle for \"%@\"", path);
+  // #### Analyze says "Potential leak of an object stored into cfb"
   
   if (! name)
     name = [[path lastPathComponent] stringByDeletingPathExtension];
   
   if (! name)
     name = [[path lastPathComponent] stringByDeletingPathExtension];
@@ -141,9 +138,9 @@ int mono_p = 0;
 
 # else  // USE_IPHONE
   // Remember: any time you add a new saver to the iOS app,
 
 # else  // USE_IPHONE
   // Remember: any time you add a new saver to the iOS app,
-  // manually run "make ios_function_tables.h"!
+  // manually run "make ios-function-table.m"!
   if (! function_tables)
   if (! function_tables)
-    function_tables = [make_function_tables_dict() retain];
+    function_tables = [make_function_table_dict() retain];
   NSValue *v = [function_tables objectForKey: name];
   void *addr = v ? [v pointerValue] : 0;
 # endif // USE_IPHONE
   NSValue *v = [function_tables objectForKey: name];
   void *addr = v ? [v pointerValue] : 0;
 # endif // USE_IPHONE
@@ -236,7 +233,7 @@ add_default_options (const XrmOptionDescRec *opts,
 # endif
  // ".textLiteral:        ",
  // ".textFile:           ",
 # endif
  // ".textLiteral:        ",
  // ".textFile:           ",
-    ".textURL:            http://twitter.com/statuses/public_timeline.atom",
+    ".textURL:            http://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss",
  // ".textProgram:        ",
     ".grabDesktopImages:  yes",
 # ifndef USE_IPHONE
  // ".textProgram:        ",
     ".grabDesktopImages:  yes",
 # ifndef USE_IPHONE
@@ -474,6 +471,7 @@ double_time (void)
                          selector:@selector(allSystemsGo:)
                          userInfo:nil
                          repeats:NO];
                          selector:@selector(allSystemsGo:)
                          userInfo:nil
                          repeats:NO];
+
 # endif // USE_IPHONE
 
   // Never automatically turn the screen off if we are docked,
 # endif // USE_IPHONE
 
   // Never automatically turn the screen off if we are docked,
@@ -562,6 +560,10 @@ screenhack_do_fps (Display *dpy, Window w, fps_state *fpst, void *closure)
    anyway, since that's a higher resolution than most desktop monitors
    have even today.  (This is only true for X11 programs, not GL 
    programs.  Those are fine at full rez.)
    anyway, since that's a higher resolution than most desktop monitors
    have even today.  (This is only true for X11 programs, not GL 
    programs.  Those are fine at full rez.)
+
+   This method is overridden in XScreenSaverGLView, since this kludge
+   isn't necessary for GL programs, being resolution independent by
+   nature.
  */
 - (CGFloat) hackedContentScaleFactor
 {
  */
 - (CGFloat) hackedContentScaleFactor
 {
@@ -629,9 +631,10 @@ double current_device_rotation (void)
 #   undef CLAMP180
 
   double s = [self hackedContentScaleFactor];
 #   undef CLAMP180
 
   double s = [self hackedContentScaleFactor];
-  if (((int) backbuffer_size.width  != (int) (s * rot_current_size.width) ||
-       (int) backbuffer_size.height != (int) (s * rot_current_size.height))
-/*      && rotation_ratio == -1*/)
+  if (!ignore_rotation_p &&
+      /* rotation_ratio && */
+      ((int) backbuffer_size.width  != (int) (s * rot_current_size.width) ||
+       (int) backbuffer_size.height != (int) (s * rot_current_size.height)))
     [self resize_x11];
 }
 
     [self resize_x11];
 }
 
@@ -639,7 +642,7 @@ double current_device_rotation (void)
 - (void)alertView:(UIAlertView *)av clickedButtonAtIndex:(NSInteger)i
 {
   if (i == 0) exit (-1);       // Cancel
 - (void)alertView:(UIAlertView *)av clickedButtonAtIndex:(NSInteger)i
 {
   if (i == 0) exit (-1);       // Cancel
-  [self stopAndClose];         // Keep going
+  [self stopAndClose:NO];      // Keep going
 }
 
 - (void) handleException: (NSException *)e
 }
 
 - (void) handleException: (NSException *)e
@@ -784,6 +787,13 @@ double current_device_rotation (void)
     resized_p = NO;
     NSAssert(!xdata, @"xdata already initialized");
     
     resized_p = NO;
     NSAssert(!xdata, @"xdata already initialized");
     
+# ifdef USE_IPHONE
+  /* Some X11 hacks (fluidballs) want to ignore all rotation events. */
+  ignore_rotation_p =
+    get_boolean_resource (xdpy, "ignoreRotation", "IgnoreRotation");
+# endif // USE_IPHONE
+
+
 # undef ya_rand_init
     ya_rand_init (0);
     
 # undef ya_rand_init
     ya_rand_init (0);
     
@@ -995,18 +1005,19 @@ double current_device_rotation (void)
 # ifdef USE_IPHONE
   // Then compute the transformations for rotation.
 
 # ifdef USE_IPHONE
   // Then compute the transformations for rotation.
 
-  // The rotation origin for layer.affineTransform is in the center already.
-  CGAffineTransform t =
-    CGAffineTransformMakeRotation (rot_current_angle / (180.0 / M_PI));
+  if (!ignore_rotation_p) {
+    // The rotation origin for layer.affineTransform is in the center already.
+    CGAffineTransform t =
+      CGAffineTransformMakeRotation (rot_current_angle / (180.0 / M_PI));
 
 
-  // Correct the aspect ratio.
-  CGRect frame = [self bounds];
-  double s = [self hackedContentScaleFactor];
-  t = CGAffineTransformScale(t,
-                             backbuffer_size.width  / (s * frame.size.width),
-                             backbuffer_size.height / (s * frame.size.height));
-
-  self.layer.affineTransform = t;
+    // Correct the aspect ratio.
+    CGRect frame = [self bounds];
+    double s = [self hackedContentScaleFactor];
+    t = CGAffineTransformScale(t,
+                            backbuffer_size.width  / (s * frame.size.width),
+                            backbuffer_size.height / (s * frame.size.height));
+    self.layer.affineTransform = t;
+  }
 # endif // USE_IPHONE
 
   // Then copy that bitmap to the screen, by just stuffing it into
 # endif // USE_IPHONE
 
   // Then copy that bitmap to the screen, by just stuffing it into
@@ -1081,6 +1092,7 @@ double current_device_rotation (void)
 
   // #### am I expected to retain this, or not? wtf.
   //      I thought not, but if I don't do this, we (sometimes) crash.
 
   // #### am I expected to retain this, or not? wtf.
   //      I thought not, but if I don't do this, we (sometimes) crash.
+  // #### Analyze says "potential leak of an object stored into sheet"
   [sheet retain];
 
   return sheet;
   [sheet retain];
 
   return sheet;
@@ -1207,7 +1219,7 @@ double current_device_rotation (void)
         break;
       }
     default:
         break;
       }
     default:
-      NSAssert (0, @"unknown X11 event type: %d", type);
+      NSAssert1 (0, @"unknown X11 event type: %d", type);
       break;
   }
 
       break;
   }
 
@@ -1288,7 +1300,7 @@ double current_device_rotation (void)
 #else  // USE_IPHONE
 
 
 #else  // USE_IPHONE
 
 
-- (void) stopAndClose
+- (void) stopAndClose:(Bool)relaunch_p
 {
   if ([self isAnimating])
     [self stopAnimation];
 {
   if ([self isAnimating])
     [self stopAnimation];
@@ -1305,26 +1317,23 @@ double current_device_rotation (void)
   }
 
   UIView *fader = [self superview];  // the "backgroundView" view is our parent
   }
 
   UIView *fader = [self superview];  // the "backgroundView" view is our parent
-  [UIView animateWithDuration: 0.5
-          animations:^{ fader.alpha = 0.0; }
-          completion:^(BOOL finished) {
-            [fader removeFromSuperview];
-             fader.alpha = 1.0;
-          }];
-}
-
-
-- (void) stopAndClose:(Bool)relaunch_p
-{
-  [self stopAndClose];
 
   if (relaunch_p) {   // Fake a shake on the SaverListController.
 
   if (relaunch_p) {   // Fake a shake on the SaverListController.
-    UIViewController *v = [[self window] rootViewController];
+    // Why is [self window] sometimes null here?
+    UIWindow *w = [[UIApplication sharedApplication] keyWindow];
+    UIViewController *v = [w rootViewController];
     if ([v isKindOfClass: [UINavigationController class]]) {
       UINavigationController *n = (UINavigationController *) v;
       [[n topViewController] motionEnded: UIEventSubtypeMotionShake
                                withEvent: nil];
     }
     if ([v isKindOfClass: [UINavigationController class]]) {
       UINavigationController *n = (UINavigationController *) v;
       [[n topViewController] motionEnded: UIEventSubtypeMotionShake
                                withEvent: nil];
     }
+  } else {     // Not launching another, animate our return to the list.
+    [UIView animateWithDuration: 0.5
+            animations:^{ fader.alpha = 0.0; }
+            completion:^(BOOL finished) {
+               [fader removeFromSuperview];
+               fader.alpha = 1.0;
+            }];
   }
 }
 
   }
 }
 
@@ -1505,6 +1514,10 @@ double current_device_rotation (void)
 
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
 
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
+  // If they are trying to pinch, just do nothing.
+  if ([[event allTouches] count] > 1)
+    return;
+
   tap_time = 0;
 
   if (xsft->event_cb && xwindow) {
   tap_time = 0;
 
   if (xsft->event_cb && xwindow) {
@@ -1542,6 +1555,10 @@ double current_device_rotation (void)
 
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 {
 
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 {
+  // If they are trying to pinch, just do nothing.
+  if ([[event allTouches] count] > 1)
+    return;
+
   if (xsft->event_cb && xwindow) {
     double s = [self hackedContentScaleFactor];
     XEvent xe;
   if (xsft->event_cb && xwindow) {
     double s = [self hackedContentScaleFactor];
     XEvent xe;
@@ -1560,7 +1577,7 @@ double current_device_rotation (void)
       double dist = sqrt (((p.x - tap_point.x) * (p.x - tap_point.x)) +
                           ((p.y - tap_point.y) * (p.y - tap_point.y)));
       if (tap_time + 0.5 >= double_time() && dist < 20) {
       double dist = sqrt (((p.x - tap_point.x) * (p.x - tap_point.x)) +
                           ((p.y - tap_point.y) * (p.y - tap_point.y)));
       if (tap_time + 0.5 >= double_time() && dist < 20) {
-        [self stopAndClose];
+        [self stopAndClose:NO];
         return;
       }
 
         return;
       }
 
@@ -1581,6 +1598,10 @@ double current_device_rotation (void)
 
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
 {
 
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
 {
+  // If they are trying to pinch, just do nothing.
+  if ([[event allTouches] count] > 1)
+    return;
+
   if (xsft->event_cb && xwindow) {
     double s = [self hackedContentScaleFactor];
     XEvent xe;
   if (xsft->event_cb && xwindow) {
     double s = [self hackedContentScaleFactor];
     XEvent xe;
diff --git a/OSX/apple2-app.xml b/OSX/apple2-app.xml
new file mode 100644 (file)
index 0000000..583aeb1
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="apple2" _label="Apple2">
+
+ <command arg="-root"/>
+
+  <hgroup>
+   <vgroup>
+    <number id="tvcolor" type="slider" arg="-tv-color %"
+            _label="Color Knob" _low-label="Low" _high-label="High"
+            low="0" high="1000" default="70"/>
+    <number id="tvtint" type="slider" arg="-tv-tint %"
+            _label="Tint Knob" _low-label="Low" _high-label="High"
+            low="0" high="100" default="5"/>
+   </vgroup>
+   <vgroup>
+    <number id="tvbrightness" type="slider" arg="-tv-brightness %"
+            _label="Brightness Knob" _low-label="Low" _high-label="High"
+            low="0" high="200" default="150"/>
+    <number id="tvcontrast" type="slider" arg="-tv-contrast %"
+            _label="Contrast Knob" _low-label="Low" _high-label="High"
+            low="0" high="1500" default="1000"/>
+   </vgroup>
+  </hgroup>
+
+ <_description>
+A fully-functional VT100 terminal emulator simulating 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.
+
+http://en.wikipedia.org/wiki/Apple_II_series
+
+Written by Trevor Blackwell; 2003.
+  </_description>
+</screensaver>
index 22875fa3adba02b91f25c45fe36026c9a5e55fd8..27d041c6f90843cea16e1bf76f24917fd312a925 100644 (file)
@@ -18,8 +18,8 @@ XScreenSaver\
 by Jamie Zawinski\
 and many others\
 \
 by Jamie Zawinski\
 and many others\
 \
-version 5.21\
-04-Feb-2013\
+version 5.22\
+16-Jul-2013\
 \
 {\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}}
 \
 \
 {\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}}
 \
index f5e3b1f3dc69fc07c4d49854707b38783ef833d9..ed294aadbab9d8f62d003281f0cb1d865e2acf16 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
 #!/usr/bin/perl -w
-# Copyright Â© 2012 Jamie Zawinski <jwz@jwz.org>
+# Copyright Â© 2012-2013 Jamie Zawinski <jwz@jwz.org>
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
@@ -9,7 +9,7 @@
 # software for any purpose.  It is provided "as is" without express or 
 # implied warranty.
 #
 # software for any purpose.  It is provided "as is" without express or 
 # implied warranty.
 #
-# Generates a .h file that lists all the function tables we use, because
+# Generates a .c file that lists all the function tables we use, because
 # CFBundleGetDataPointerForName doesn't work in "Archive" builds.
 # What a crock of shit.
 #
 # CFBundleGetDataPointerForName doesn't work in "Archive" builds.
 # What a crock of shit.
 #
@@ -23,7 +23,7 @@ require 5;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.1 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.2 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 1;
 
 
 my $verbose = 1;
 
@@ -42,20 +42,40 @@ sub build_h($$) {
 
   my $suf = 'xscreensaver_function_table';
 
 
   my $suf = 'xscreensaver_function_table';
 
-  my $body = "extern struct $suf";
+  my $body = ("/* Generated file, do not edit.\n" .
+              "   Created: " . localtime() . " by $progname $version.\n" .
+              " */\n" .
+              "\n" .
+              "#import <Foundation/Foundation.h>\n" .
+              "#import <UIKit/UIKit.h>\n" .
+              "\n" .
+              "extern NSDictionary *make_function_table_dict(void);\n" .
+              "\n");
+
+  $body .= "extern struct $suf";
   foreach my $s (@names) {
     $body .= "\n *${s}_${suf},";
   }
   $body =~ s/,\s*$/;/s;
 
   foreach my $s (@names) {
     $body .= "\n *${s}_${suf},";
   }
   $body =~ s/,\s*$/;/s;
 
-  $body .= ("\n\n" .
-            "static NSDictionary *make_function_tables_dict(void)\n{\n" .
-            "  return\n    [NSDictionary dictionaryWithObjectsAndKeys:\n");
-  foreach my $s (@names) {
-    $body .= "\t[NSValue valueWithPointer:&${s}_${suf}], @\"${s}\",\n";
+  sub line($$) {
+    my ($s, $suf) = @_;
+    return "\t[NSValue valueWithPointer:&${s}_${suf}], @\"${s}\",\n";
   }
   }
-  $body .= ("\tnil];\n" .
-            "}\n");
+
+  $body .= ("\n\n" .
+            "NSDictionary *make_function_table_dict(void)\n{\n" .
+            "  return\n    [NSDictionary dictionaryWithObjectsAndKeys:\n" .
+            "\n" .
+            "#if defined(APPLE2_ONLY)\n" .
+            " " . line('apple2', $suf) .
+            "#elif defined(PHOSPHOR_ONLY)\n" .
+            " " . line('phosphor', $suf) .
+            "#else\n");
+  foreach my $s (@names) { $body .= line($s, $suf); }
+  $body .= ("#endif\n" .
+            "\tnil];\n" .
+            "}\n\n");
 
   my $obody = '';
   if (open (my $in, '<', $outfile)) {
 
   my $obody = '';
   if (open (my $in, '<', $outfile)) {
@@ -64,7 +84,11 @@ sub build_h($$) {
     close $in;
   }
 
     close $in;
   }
 
-  if ($obody eq $body) {
+  # strip comments/date for diff.
+  my ($body2, $obody2) = ($body, $obody);
+  foreach ($body2, $obody2) { s@/\*.*?\*/@@gs; }
+
+  if ($body2 eq $obody2) {
     print STDERR "$progname: $outfile: unchanged\n" if ($verbose > 1);
   } else {
     my $file_tmp = "$outfile.tmp";
     print STDERR "$progname: $outfile: unchanged\n" if ($verbose > 1);
   } else {
     my $file_tmp = "$outfile.tmp";
@@ -88,7 +112,7 @@ sub error($) {
 }
 
 sub usage() {
 }
 
 sub usage() {
-  print STDERR "usage: $progname [--verbose] program.app output.h\n";
+  print STDERR "usage: $progname [--verbose] program.app output.c\n";
   exit 1;
 }
 
   exit 1;
 }
 
index 8a2404a02f54e49e73654ae49d37e7223ab6b9e4..43ce2f4e754931ff574c385fbcc974b12de4badc 100644 (file)
@@ -9,7 +9,7 @@
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleVersion</key>
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleVersion</key>
-       <string>5.21</string>
+       <string>5.22</string>
        <key>NSMainNibFile</key>
        <string>iSaverRunner</string>
        <key>CFBundlePackageType</key>
        <key>NSMainNibFile</key>
        <string>iSaverRunner</string>
        <key>CFBundlePackageType</key>
        <key>UIStatusBarHidden</key>
        <true/>
        <key>CFBundleShortVersionString</key>
        <key>UIStatusBarHidden</key>
        <true/>
        <key>CFBundleShortVersionString</key>
-       <string>5.21</string>
+       <string>5.22</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>UIRequiredDeviceCapabilities</key>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>UIRequiredDeviceCapabilities</key>
-       <array>
-               <string>armv7</string>
-       </array>
+       <dict>
+               <key>opengles-1</key>
+               <true/>
+       </dict>
        <key>CFBundleExecutable</key>
        <string>${EXECUTABLE_NAME}</string>
        <key>UISupportedInterfaceOrientations~ipad</key>
        <key>CFBundleExecutable</key>
        <string>${EXECUTABLE_NAME}</string>
        <key>UISupportedInterfaceOrientations~ipad</key>
@@ -38,7 +39,7 @@
        <key>CFBundleLongVersionString</key>
        <string>XScreenSaver 5.15, Â© 2001-2012 Jamie Zawinski.</string>
        <key>CFBundleIdentifier</key>
        <key>CFBundleLongVersionString</key>
        <string>XScreenSaver 5.15, Â© 2001-2012 Jamie Zawinski.</string>
        <key>CFBundleIdentifier</key>
-       <string>org.jwz.xscreensaver</string>
+       <string>${BUNDLE_IDENTIFIER}</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleIconFiles</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleIconFiles</key>
diff --git a/OSX/ios-function-table.m b/OSX/ios-function-table.m
new file mode 100644 (file)
index 0000000..b109fb6
--- /dev/null
@@ -0,0 +1,421 @@
+/* Generated file, do not edit.
+   Created: Mon Jul  8 16:42:29 2013 by build-fntable.pl 1.2.
+ */
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+extern NSDictionary *make_function_table_dict(void);
+
+extern struct xscreensaver_function_table
+ *abstractile_xscreensaver_function_table,
+ *anemone_xscreensaver_function_table,
+ *anemotaxis_xscreensaver_function_table,
+ *antinspect_xscreensaver_function_table,
+ *antmaze_xscreensaver_function_table,
+ *antspotlight_xscreensaver_function_table,
+ *apollonian_xscreensaver_function_table,
+ *apple2_xscreensaver_function_table,
+ *atlantis_xscreensaver_function_table,
+ *attraction_xscreensaver_function_table,
+ *atunnel_xscreensaver_function_table,
+ *barcode_xscreensaver_function_table,
+ *blaster_xscreensaver_function_table,
+ *blinkbox_xscreensaver_function_table,
+ *blitspin_xscreensaver_function_table,
+ *blocktube_xscreensaver_function_table,
+ *boing_xscreensaver_function_table,
+ *bouboule_xscreensaver_function_table,
+ *bouncingcow_xscreensaver_function_table,
+ *boxed_xscreensaver_function_table,
+ *boxfit_xscreensaver_function_table,
+ *braid_xscreensaver_function_table,
+ *bsod_xscreensaver_function_table,
+ *bubble3d_xscreensaver_function_table,
+ *bumps_xscreensaver_function_table,
+ *cage_xscreensaver_function_table,
+ *carousel_xscreensaver_function_table,
+ *ccurve_xscreensaver_function_table,
+ *celtic_xscreensaver_function_table,
+ *circuit_xscreensaver_function_table,
+ *cloudlife_xscreensaver_function_table,
+ *companioncube_xscreensaver_function_table,
+ *compass_xscreensaver_function_table,
+ *coral_xscreensaver_function_table,
+ *crackberg_xscreensaver_function_table,
+ *crystal_xscreensaver_function_table,
+ *cube21_xscreensaver_function_table,
+ *cubenetic_xscreensaver_function_table,
+ *cubestorm_xscreensaver_function_table,
+ *cubicgrid_xscreensaver_function_table,
+ *cwaves_xscreensaver_function_table,
+ *cynosure_xscreensaver_function_table,
+ *dangerball_xscreensaver_function_table,
+ *decayscreen_xscreensaver_function_table,
+ *deco_xscreensaver_function_table,
+ *deluxe_xscreensaver_function_table,
+ *demon_xscreensaver_function_table,
+ *discrete_xscreensaver_function_table,
+ *distort_xscreensaver_function_table,
+ *dnalogo_xscreensaver_function_table,
+ *drift_xscreensaver_function_table,
+ *endgame_xscreensaver_function_table,
+ *engine_xscreensaver_function_table,
+ *epicycle_xscreensaver_function_table,
+ *eruption_xscreensaver_function_table,
+ *euler2d_xscreensaver_function_table,
+ *fadeplot_xscreensaver_function_table,
+ *fiberlamp_xscreensaver_function_table,
+ *fireworkx_xscreensaver_function_table,
+ *flame_xscreensaver_function_table,
+ *flipflop_xscreensaver_function_table,
+ *flipscreen3d_xscreensaver_function_table,
+ *fliptext_xscreensaver_function_table,
+ *flow_xscreensaver_function_table,
+ *fluidballs_xscreensaver_function_table,
+ *flyingtoasters_xscreensaver_function_table,
+ *fontglide_xscreensaver_function_table,
+ *fuzzyflakes_xscreensaver_function_table,
+ *galaxy_xscreensaver_function_table,
+ *gears_xscreensaver_function_table,
+ *gflux_xscreensaver_function_table,
+ *glblur_xscreensaver_function_table,
+ *glcells_xscreensaver_function_table,
+ *gleidescope_xscreensaver_function_table,
+ *glhanoi_xscreensaver_function_table,
+ *glknots_xscreensaver_function_table,
+ *glmatrix_xscreensaver_function_table,
+ *glplanet_xscreensaver_function_table,
+ *glschool_xscreensaver_function_table,
+ *glslideshow_xscreensaver_function_table,
+ *glsnake_xscreensaver_function_table,
+ *gltext_xscreensaver_function_table,
+ *goop_xscreensaver_function_table,
+ *grav_xscreensaver_function_table,
+ *greynetic_xscreensaver_function_table,
+ *halftone_xscreensaver_function_table,
+ *halo_xscreensaver_function_table,
+ *helix_xscreensaver_function_table,
+ *hexadrop_xscreensaver_function_table,
+ *hilbert_xscreensaver_function_table,
+ *hopalong_xscreensaver_function_table,
+ *hypertorus_xscreensaver_function_table,
+ *hypnowheel_xscreensaver_function_table,
+ *ifs_xscreensaver_function_table,
+ *imsmap_xscreensaver_function_table,
+ *interaggregate_xscreensaver_function_table,
+ *interference_xscreensaver_function_table,
+ *intermomentary_xscreensaver_function_table,
+ *jigglypuff_xscreensaver_function_table,
+ *jigsaw_xscreensaver_function_table,
+ *juggler3d_xscreensaver_function_table,
+ *julia_xscreensaver_function_table,
+ *kaleidescope_xscreensaver_function_table,
+ *kaleidocycle_xscreensaver_function_table,
+ *klein_xscreensaver_function_table,
+ *kumppa_xscreensaver_function_table,
+ *lament_xscreensaver_function_table,
+ *lavalite_xscreensaver_function_table,
+ *loop_xscreensaver_function_table,
+ *m6502_xscreensaver_function_table,
+ *maze_xscreensaver_function_table,
+ *memscroller_xscreensaver_function_table,
+ *menger_xscreensaver_function_table,
+ *metaballs_xscreensaver_function_table,
+ *mirrorblob_xscreensaver_function_table,
+ *moebius_xscreensaver_function_table,
+ *moebiusgears_xscreensaver_function_table,
+ *moire_xscreensaver_function_table,
+ *moire2_xscreensaver_function_table,
+ *molecule_xscreensaver_function_table,
+ *morph3d_xscreensaver_function_table,
+ *mountain_xscreensaver_function_table,
+ *munch_xscreensaver_function_table,
+ *nerverot_xscreensaver_function_table,
+ *noof_xscreensaver_function_table,
+ *noseguy_xscreensaver_function_table,
+ *pacman_xscreensaver_function_table,
+ *pedal_xscreensaver_function_table,
+ *penetrate_xscreensaver_function_table,
+ *penrose_xscreensaver_function_table,
+ *petri_xscreensaver_function_table,
+ *phosphor_xscreensaver_function_table,
+ *photopile_xscreensaver_function_table,
+ *piecewise_xscreensaver_function_table,
+ *pinion_xscreensaver_function_table,
+ *pipes_xscreensaver_function_table,
+ *polyhedra_xscreensaver_function_table,
+ *polyominoes_xscreensaver_function_table,
+ *polytopes_xscreensaver_function_table,
+ *pong_xscreensaver_function_table,
+ *popsquares_xscreensaver_function_table,
+ *providence_xscreensaver_function_table,
+ *pulsar_xscreensaver_function_table,
+ *pyro_xscreensaver_function_table,
+ *qix_xscreensaver_function_table,
+ *quasicrystal_xscreensaver_function_table,
+ *queens_xscreensaver_function_table,
+ *rdbomb_xscreensaver_function_table,
+ *ripples_xscreensaver_function_table,
+ *rocks_xscreensaver_function_table,
+ *rorschach_xscreensaver_function_table,
+ *rotzoomer_xscreensaver_function_table,
+ *rubik_xscreensaver_function_table,
+ *rubikblocks_xscreensaver_function_table,
+ *sballs_xscreensaver_function_table,
+ *shadebobs_xscreensaver_function_table,
+ *sierpinski_xscreensaver_function_table,
+ *sierpinski3d_xscreensaver_function_table,
+ *skytentacles_xscreensaver_function_table,
+ *slidescreen_xscreensaver_function_table,
+ *slip_xscreensaver_function_table,
+ *sonar_xscreensaver_function_table,
+ *speedmine_xscreensaver_function_table,
+ *spheremonics_xscreensaver_function_table,
+ *spotlight_xscreensaver_function_table,
+ *sproingies_xscreensaver_function_table,
+ *squiral_xscreensaver_function_table,
+ *stairs_xscreensaver_function_table,
+ *starfish_xscreensaver_function_table,
+ *starwars_xscreensaver_function_table,
+ *stonerview_xscreensaver_function_table,
+ *strange_xscreensaver_function_table,
+ *substrate_xscreensaver_function_table,
+ *superquadrics_xscreensaver_function_table,
+ *surfaces_xscreensaver_function_table,
+ *swirl_xscreensaver_function_table,
+ *tangram_xscreensaver_function_table,
+ *thornbird_xscreensaver_function_table,
+ *timetunnel_xscreensaver_function_table,
+ *topblock_xscreensaver_function_table,
+ *triangle_xscreensaver_function_table,
+ *tronbit_xscreensaver_function_table,
+ *truchet_xscreensaver_function_table,
+ *twang_xscreensaver_function_table,
+ *unknownpleasures_xscreensaver_function_table,
+ *vermiculate_xscreensaver_function_table,
+ *voronoi_xscreensaver_function_table,
+ *wander_xscreensaver_function_table,
+ *whirlwindwarp_xscreensaver_function_table,
+ *wormhole_xscreensaver_function_table,
+ *xanalogtv_xscreensaver_function_table,
+ *xflame_xscreensaver_function_table,
+ *xjack_xscreensaver_function_table,
+ *xlyap_xscreensaver_function_table,
+ *xmatrix_xscreensaver_function_table,
+ *xrayswarm_xscreensaver_function_table,
+ *xspirograph_xscreensaver_function_table,
+ *zoom_xscreensaver_function_table;
+
+NSDictionary *make_function_table_dict(void)
+{
+  return
+    [NSDictionary dictionaryWithObjectsAndKeys:
+
+#if defined(APPLE2_ONLY)
+       [NSValue valueWithPointer:&apple2_xscreensaver_function_table], @"apple2",
+#elif defined(PHOSPHOR_ONLY)
+       [NSValue valueWithPointer:&phosphor_xscreensaver_function_table], @"phosphor",
+#else
+       [NSValue valueWithPointer:&abstractile_xscreensaver_function_table], @"abstractile",
+       [NSValue valueWithPointer:&anemone_xscreensaver_function_table], @"anemone",
+       [NSValue valueWithPointer:&anemotaxis_xscreensaver_function_table], @"anemotaxis",
+       [NSValue valueWithPointer:&antinspect_xscreensaver_function_table], @"antinspect",
+       [NSValue valueWithPointer:&antmaze_xscreensaver_function_table], @"antmaze",
+       [NSValue valueWithPointer:&antspotlight_xscreensaver_function_table], @"antspotlight",
+       [NSValue valueWithPointer:&apollonian_xscreensaver_function_table], @"apollonian",
+       [NSValue valueWithPointer:&apple2_xscreensaver_function_table], @"apple2",
+       [NSValue valueWithPointer:&atlantis_xscreensaver_function_table], @"atlantis",
+       [NSValue valueWithPointer:&attraction_xscreensaver_function_table], @"attraction",
+       [NSValue valueWithPointer:&atunnel_xscreensaver_function_table], @"atunnel",
+       [NSValue valueWithPointer:&barcode_xscreensaver_function_table], @"barcode",
+       [NSValue valueWithPointer:&blaster_xscreensaver_function_table], @"blaster",
+       [NSValue valueWithPointer:&blinkbox_xscreensaver_function_table], @"blinkbox",
+       [NSValue valueWithPointer:&blitspin_xscreensaver_function_table], @"blitspin",
+       [NSValue valueWithPointer:&blocktube_xscreensaver_function_table], @"blocktube",
+       [NSValue valueWithPointer:&boing_xscreensaver_function_table], @"boing",
+       [NSValue valueWithPointer:&bouboule_xscreensaver_function_table], @"bouboule",
+       [NSValue valueWithPointer:&bouncingcow_xscreensaver_function_table], @"bouncingcow",
+       [NSValue valueWithPointer:&boxed_xscreensaver_function_table], @"boxed",
+       [NSValue valueWithPointer:&boxfit_xscreensaver_function_table], @"boxfit",
+       [NSValue valueWithPointer:&braid_xscreensaver_function_table], @"braid",
+       [NSValue valueWithPointer:&bsod_xscreensaver_function_table], @"bsod",
+       [NSValue valueWithPointer:&bubble3d_xscreensaver_function_table], @"bubble3d",
+       [NSValue valueWithPointer:&bumps_xscreensaver_function_table], @"bumps",
+       [NSValue valueWithPointer:&cage_xscreensaver_function_table], @"cage",
+       [NSValue valueWithPointer:&carousel_xscreensaver_function_table], @"carousel",
+       [NSValue valueWithPointer:&ccurve_xscreensaver_function_table], @"ccurve",
+       [NSValue valueWithPointer:&celtic_xscreensaver_function_table], @"celtic",
+       [NSValue valueWithPointer:&circuit_xscreensaver_function_table], @"circuit",
+       [NSValue valueWithPointer:&cloudlife_xscreensaver_function_table], @"cloudlife",
+       [NSValue valueWithPointer:&companioncube_xscreensaver_function_table], @"companioncube",
+       [NSValue valueWithPointer:&compass_xscreensaver_function_table], @"compass",
+       [NSValue valueWithPointer:&coral_xscreensaver_function_table], @"coral",
+       [NSValue valueWithPointer:&crackberg_xscreensaver_function_table], @"crackberg",
+       [NSValue valueWithPointer:&crystal_xscreensaver_function_table], @"crystal",
+       [NSValue valueWithPointer:&cube21_xscreensaver_function_table], @"cube21",
+       [NSValue valueWithPointer:&cubenetic_xscreensaver_function_table], @"cubenetic",
+       [NSValue valueWithPointer:&cubestorm_xscreensaver_function_table], @"cubestorm",
+       [NSValue valueWithPointer:&cubicgrid_xscreensaver_function_table], @"cubicgrid",
+       [NSValue valueWithPointer:&cwaves_xscreensaver_function_table], @"cwaves",
+       [NSValue valueWithPointer:&cynosure_xscreensaver_function_table], @"cynosure",
+       [NSValue valueWithPointer:&dangerball_xscreensaver_function_table], @"dangerball",
+       [NSValue valueWithPointer:&decayscreen_xscreensaver_function_table], @"decayscreen",
+       [NSValue valueWithPointer:&deco_xscreensaver_function_table], @"deco",
+       [NSValue valueWithPointer:&deluxe_xscreensaver_function_table], @"deluxe",
+       [NSValue valueWithPointer:&demon_xscreensaver_function_table], @"demon",
+       [NSValue valueWithPointer:&discrete_xscreensaver_function_table], @"discrete",
+       [NSValue valueWithPointer:&distort_xscreensaver_function_table], @"distort",
+       [NSValue valueWithPointer:&dnalogo_xscreensaver_function_table], @"dnalogo",
+       [NSValue valueWithPointer:&drift_xscreensaver_function_table], @"drift",
+       [NSValue valueWithPointer:&endgame_xscreensaver_function_table], @"endgame",
+       [NSValue valueWithPointer:&engine_xscreensaver_function_table], @"engine",
+       [NSValue valueWithPointer:&epicycle_xscreensaver_function_table], @"epicycle",
+       [NSValue valueWithPointer:&eruption_xscreensaver_function_table], @"eruption",
+       [NSValue valueWithPointer:&euler2d_xscreensaver_function_table], @"euler2d",
+       [NSValue valueWithPointer:&fadeplot_xscreensaver_function_table], @"fadeplot",
+       [NSValue valueWithPointer:&fiberlamp_xscreensaver_function_table], @"fiberlamp",
+       [NSValue valueWithPointer:&fireworkx_xscreensaver_function_table], @"fireworkx",
+       [NSValue valueWithPointer:&flame_xscreensaver_function_table], @"flame",
+       [NSValue valueWithPointer:&flipflop_xscreensaver_function_table], @"flipflop",
+       [NSValue valueWithPointer:&flipscreen3d_xscreensaver_function_table], @"flipscreen3d",
+       [NSValue valueWithPointer:&fliptext_xscreensaver_function_table], @"fliptext",
+       [NSValue valueWithPointer:&flow_xscreensaver_function_table], @"flow",
+       [NSValue valueWithPointer:&fluidballs_xscreensaver_function_table], @"fluidballs",
+       [NSValue valueWithPointer:&flyingtoasters_xscreensaver_function_table], @"flyingtoasters",
+       [NSValue valueWithPointer:&fontglide_xscreensaver_function_table], @"fontglide",
+       [NSValue valueWithPointer:&fuzzyflakes_xscreensaver_function_table], @"fuzzyflakes",
+       [NSValue valueWithPointer:&galaxy_xscreensaver_function_table], @"galaxy",
+       [NSValue valueWithPointer:&gears_xscreensaver_function_table], @"gears",
+       [NSValue valueWithPointer:&gflux_xscreensaver_function_table], @"gflux",
+       [NSValue valueWithPointer:&glblur_xscreensaver_function_table], @"glblur",
+       [NSValue valueWithPointer:&glcells_xscreensaver_function_table], @"glcells",
+       [NSValue valueWithPointer:&gleidescope_xscreensaver_function_table], @"gleidescope",
+       [NSValue valueWithPointer:&glhanoi_xscreensaver_function_table], @"glhanoi",
+       [NSValue valueWithPointer:&glknots_xscreensaver_function_table], @"glknots",
+       [NSValue valueWithPointer:&glmatrix_xscreensaver_function_table], @"glmatrix",
+       [NSValue valueWithPointer:&glplanet_xscreensaver_function_table], @"glplanet",
+       [NSValue valueWithPointer:&glschool_xscreensaver_function_table], @"glschool",
+       [NSValue valueWithPointer:&glslideshow_xscreensaver_function_table], @"glslideshow",
+       [NSValue valueWithPointer:&glsnake_xscreensaver_function_table], @"glsnake",
+       [NSValue valueWithPointer:&gltext_xscreensaver_function_table], @"gltext",
+       [NSValue valueWithPointer:&goop_xscreensaver_function_table], @"goop",
+       [NSValue valueWithPointer:&grav_xscreensaver_function_table], @"grav",
+       [NSValue valueWithPointer:&greynetic_xscreensaver_function_table], @"greynetic",
+       [NSValue valueWithPointer:&halftone_xscreensaver_function_table], @"halftone",
+       [NSValue valueWithPointer:&halo_xscreensaver_function_table], @"halo",
+       [NSValue valueWithPointer:&helix_xscreensaver_function_table], @"helix",
+       [NSValue valueWithPointer:&hexadrop_xscreensaver_function_table], @"hexadrop",
+       [NSValue valueWithPointer:&hilbert_xscreensaver_function_table], @"hilbert",
+       [NSValue valueWithPointer:&hopalong_xscreensaver_function_table], @"hopalong",
+       [NSValue valueWithPointer:&hypertorus_xscreensaver_function_table], @"hypertorus",
+       [NSValue valueWithPointer:&hypnowheel_xscreensaver_function_table], @"hypnowheel",
+       [NSValue valueWithPointer:&ifs_xscreensaver_function_table], @"ifs",
+       [NSValue valueWithPointer:&imsmap_xscreensaver_function_table], @"imsmap",
+       [NSValue valueWithPointer:&interaggregate_xscreensaver_function_table], @"interaggregate",
+       [NSValue valueWithPointer:&interference_xscreensaver_function_table], @"interference",
+       [NSValue valueWithPointer:&intermomentary_xscreensaver_function_table], @"intermomentary",
+       [NSValue valueWithPointer:&jigglypuff_xscreensaver_function_table], @"jigglypuff",
+       [NSValue valueWithPointer:&jigsaw_xscreensaver_function_table], @"jigsaw",
+       [NSValue valueWithPointer:&juggler3d_xscreensaver_function_table], @"juggler3d",
+       [NSValue valueWithPointer:&julia_xscreensaver_function_table], @"julia",
+       [NSValue valueWithPointer:&kaleidescope_xscreensaver_function_table], @"kaleidescope",
+       [NSValue valueWithPointer:&kaleidocycle_xscreensaver_function_table], @"kaleidocycle",
+       [NSValue valueWithPointer:&klein_xscreensaver_function_table], @"klein",
+       [NSValue valueWithPointer:&kumppa_xscreensaver_function_table], @"kumppa",
+       [NSValue valueWithPointer:&lament_xscreensaver_function_table], @"lament",
+       [NSValue valueWithPointer:&lavalite_xscreensaver_function_table], @"lavalite",
+       [NSValue valueWithPointer:&loop_xscreensaver_function_table], @"loop",
+       [NSValue valueWithPointer:&m6502_xscreensaver_function_table], @"m6502",
+       [NSValue valueWithPointer:&maze_xscreensaver_function_table], @"maze",
+       [NSValue valueWithPointer:&memscroller_xscreensaver_function_table], @"memscroller",
+       [NSValue valueWithPointer:&menger_xscreensaver_function_table], @"menger",
+       [NSValue valueWithPointer:&metaballs_xscreensaver_function_table], @"metaballs",
+       [NSValue valueWithPointer:&mirrorblob_xscreensaver_function_table], @"mirrorblob",
+       [NSValue valueWithPointer:&moebius_xscreensaver_function_table], @"moebius",
+       [NSValue valueWithPointer:&moebiusgears_xscreensaver_function_table], @"moebiusgears",
+       [NSValue valueWithPointer:&moire_xscreensaver_function_table], @"moire",
+       [NSValue valueWithPointer:&moire2_xscreensaver_function_table], @"moire2",
+       [NSValue valueWithPointer:&molecule_xscreensaver_function_table], @"molecule",
+       [NSValue valueWithPointer:&morph3d_xscreensaver_function_table], @"morph3d",
+       [NSValue valueWithPointer:&mountain_xscreensaver_function_table], @"mountain",
+       [NSValue valueWithPointer:&munch_xscreensaver_function_table], @"munch",
+       [NSValue valueWithPointer:&nerverot_xscreensaver_function_table], @"nerverot",
+       [NSValue valueWithPointer:&noof_xscreensaver_function_table], @"noof",
+       [NSValue valueWithPointer:&noseguy_xscreensaver_function_table], @"noseguy",
+       [NSValue valueWithPointer:&pacman_xscreensaver_function_table], @"pacman",
+       [NSValue valueWithPointer:&pedal_xscreensaver_function_table], @"pedal",
+       [NSValue valueWithPointer:&penetrate_xscreensaver_function_table], @"penetrate",
+       [NSValue valueWithPointer:&penrose_xscreensaver_function_table], @"penrose",
+       [NSValue valueWithPointer:&petri_xscreensaver_function_table], @"petri",
+       [NSValue valueWithPointer:&phosphor_xscreensaver_function_table], @"phosphor",
+       [NSValue valueWithPointer:&photopile_xscreensaver_function_table], @"photopile",
+       [NSValue valueWithPointer:&piecewise_xscreensaver_function_table], @"piecewise",
+       [NSValue valueWithPointer:&pinion_xscreensaver_function_table], @"pinion",
+       [NSValue valueWithPointer:&pipes_xscreensaver_function_table], @"pipes",
+       [NSValue valueWithPointer:&polyhedra_xscreensaver_function_table], @"polyhedra",
+       [NSValue valueWithPointer:&polyominoes_xscreensaver_function_table], @"polyominoes",
+       [NSValue valueWithPointer:&polytopes_xscreensaver_function_table], @"polytopes",
+       [NSValue valueWithPointer:&pong_xscreensaver_function_table], @"pong",
+       [NSValue valueWithPointer:&popsquares_xscreensaver_function_table], @"popsquares",
+       [NSValue valueWithPointer:&providence_xscreensaver_function_table], @"providence",
+       [NSValue valueWithPointer:&pulsar_xscreensaver_function_table], @"pulsar",
+       [NSValue valueWithPointer:&pyro_xscreensaver_function_table], @"pyro",
+       [NSValue valueWithPointer:&qix_xscreensaver_function_table], @"qix",
+       [NSValue valueWithPointer:&quasicrystal_xscreensaver_function_table], @"quasicrystal",
+       [NSValue valueWithPointer:&queens_xscreensaver_function_table], @"queens",
+       [NSValue valueWithPointer:&rdbomb_xscreensaver_function_table], @"rdbomb",
+       [NSValue valueWithPointer:&ripples_xscreensaver_function_table], @"ripples",
+       [NSValue valueWithPointer:&rocks_xscreensaver_function_table], @"rocks",
+       [NSValue valueWithPointer:&rorschach_xscreensaver_function_table], @"rorschach",
+       [NSValue valueWithPointer:&rotzoomer_xscreensaver_function_table], @"rotzoomer",
+       [NSValue valueWithPointer:&rubik_xscreensaver_function_table], @"rubik",
+       [NSValue valueWithPointer:&rubikblocks_xscreensaver_function_table], @"rubikblocks",
+       [NSValue valueWithPointer:&sballs_xscreensaver_function_table], @"sballs",
+       [NSValue valueWithPointer:&shadebobs_xscreensaver_function_table], @"shadebobs",
+       [NSValue valueWithPointer:&sierpinski_xscreensaver_function_table], @"sierpinski",
+       [NSValue valueWithPointer:&sierpinski3d_xscreensaver_function_table], @"sierpinski3d",
+       [NSValue valueWithPointer:&skytentacles_xscreensaver_function_table], @"skytentacles",
+       [NSValue valueWithPointer:&slidescreen_xscreensaver_function_table], @"slidescreen",
+       [NSValue valueWithPointer:&slip_xscreensaver_function_table], @"slip",
+       [NSValue valueWithPointer:&sonar_xscreensaver_function_table], @"sonar",
+       [NSValue valueWithPointer:&speedmine_xscreensaver_function_table], @"speedmine",
+       [NSValue valueWithPointer:&spheremonics_xscreensaver_function_table], @"spheremonics",
+       [NSValue valueWithPointer:&spotlight_xscreensaver_function_table], @"spotlight",
+       [NSValue valueWithPointer:&sproingies_xscreensaver_function_table], @"sproingies",
+       [NSValue valueWithPointer:&squiral_xscreensaver_function_table], @"squiral",
+       [NSValue valueWithPointer:&stairs_xscreensaver_function_table], @"stairs",
+       [NSValue valueWithPointer:&starfish_xscreensaver_function_table], @"starfish",
+       [NSValue valueWithPointer:&starwars_xscreensaver_function_table], @"starwars",
+       [NSValue valueWithPointer:&stonerview_xscreensaver_function_table], @"stonerview",
+       [NSValue valueWithPointer:&strange_xscreensaver_function_table], @"strange",
+       [NSValue valueWithPointer:&substrate_xscreensaver_function_table], @"substrate",
+       [NSValue valueWithPointer:&superquadrics_xscreensaver_function_table], @"superquadrics",
+       [NSValue valueWithPointer:&surfaces_xscreensaver_function_table], @"surfaces",
+       [NSValue valueWithPointer:&swirl_xscreensaver_function_table], @"swirl",
+       [NSValue valueWithPointer:&tangram_xscreensaver_function_table], @"tangram",
+       [NSValue valueWithPointer:&thornbird_xscreensaver_function_table], @"thornbird",
+       [NSValue valueWithPointer:&timetunnel_xscreensaver_function_table], @"timetunnel",
+       [NSValue valueWithPointer:&topblock_xscreensaver_function_table], @"topblock",
+       [NSValue valueWithPointer:&triangle_xscreensaver_function_table], @"triangle",
+       [NSValue valueWithPointer:&tronbit_xscreensaver_function_table], @"tronbit",
+       [NSValue valueWithPointer:&truchet_xscreensaver_function_table], @"truchet",
+       [NSValue valueWithPointer:&twang_xscreensaver_function_table], @"twang",
+       [NSValue valueWithPointer:&unknownpleasures_xscreensaver_function_table], @"unknownpleasures",
+       [NSValue valueWithPointer:&vermiculate_xscreensaver_function_table], @"vermiculate",
+       [NSValue valueWithPointer:&voronoi_xscreensaver_function_table], @"voronoi",
+       [NSValue valueWithPointer:&wander_xscreensaver_function_table], @"wander",
+       [NSValue valueWithPointer:&whirlwindwarp_xscreensaver_function_table], @"whirlwindwarp",
+       [NSValue valueWithPointer:&wormhole_xscreensaver_function_table], @"wormhole",
+       [NSValue valueWithPointer:&xanalogtv_xscreensaver_function_table], @"xanalogtv",
+       [NSValue valueWithPointer:&xflame_xscreensaver_function_table], @"xflame",
+       [NSValue valueWithPointer:&xjack_xscreensaver_function_table], @"xjack",
+       [NSValue valueWithPointer:&xlyap_xscreensaver_function_table], @"xlyap",
+       [NSValue valueWithPointer:&xmatrix_xscreensaver_function_table], @"xmatrix",
+       [NSValue valueWithPointer:&xrayswarm_xscreensaver_function_table], @"xrayswarm",
+       [NSValue valueWithPointer:&xspirograph_xscreensaver_function_table], @"xspirograph",
+       [NSValue valueWithPointer:&zoom_xscreensaver_function_table], @"zoom",
+#endif
+       nil];
+}
+
diff --git a/OSX/ios_function_tables.h b/OSX/ios_function_tables.h
deleted file mode 100644 (file)
index 5854587..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-extern struct xscreensaver_function_table
- *abstractile_xscreensaver_function_table,
- *anemone_xscreensaver_function_table,
- *anemotaxis_xscreensaver_function_table,
- *antinspect_xscreensaver_function_table,
- *antmaze_xscreensaver_function_table,
- *antspotlight_xscreensaver_function_table,
- *apollonian_xscreensaver_function_table,
- *apple2_xscreensaver_function_table,
- *atlantis_xscreensaver_function_table,
- *attraction_xscreensaver_function_table,
- *atunnel_xscreensaver_function_table,
- *barcode_xscreensaver_function_table,
- *blaster_xscreensaver_function_table,
- *blinkbox_xscreensaver_function_table,
- *blitspin_xscreensaver_function_table,
- *blocktube_xscreensaver_function_table,
- *boing_xscreensaver_function_table,
- *bouboule_xscreensaver_function_table,
- *bouncingcow_xscreensaver_function_table,
- *boxed_xscreensaver_function_table,
- *boxfit_xscreensaver_function_table,
- *braid_xscreensaver_function_table,
- *bsod_xscreensaver_function_table,
- *bubble3d_xscreensaver_function_table,
- *bumps_xscreensaver_function_table,
- *cage_xscreensaver_function_table,
- *carousel_xscreensaver_function_table,
- *ccurve_xscreensaver_function_table,
- *celtic_xscreensaver_function_table,
- *circuit_xscreensaver_function_table,
- *cloudlife_xscreensaver_function_table,
- *companioncube_xscreensaver_function_table,
- *compass_xscreensaver_function_table,
- *coral_xscreensaver_function_table,
- *crackberg_xscreensaver_function_table,
- *crystal_xscreensaver_function_table,
- *cube21_xscreensaver_function_table,
- *cubenetic_xscreensaver_function_table,
- *cubestorm_xscreensaver_function_table,
- *cubicgrid_xscreensaver_function_table,
- *cwaves_xscreensaver_function_table,
- *cynosure_xscreensaver_function_table,
- *dangerball_xscreensaver_function_table,
- *decayscreen_xscreensaver_function_table,
- *deco_xscreensaver_function_table,
- *deluxe_xscreensaver_function_table,
- *demon_xscreensaver_function_table,
- *discrete_xscreensaver_function_table,
- *distort_xscreensaver_function_table,
- *dnalogo_xscreensaver_function_table,
- *drift_xscreensaver_function_table,
- *endgame_xscreensaver_function_table,
- *engine_xscreensaver_function_table,
- *epicycle_xscreensaver_function_table,
- *eruption_xscreensaver_function_table,
- *euler2d_xscreensaver_function_table,
- *fadeplot_xscreensaver_function_table,
- *fiberlamp_xscreensaver_function_table,
- *fireworkx_xscreensaver_function_table,
- *flame_xscreensaver_function_table,
- *flipflop_xscreensaver_function_table,
- *flipscreen3d_xscreensaver_function_table,
- *fliptext_xscreensaver_function_table,
- *flow_xscreensaver_function_table,
- *fluidballs_xscreensaver_function_table,
- *flyingtoasters_xscreensaver_function_table,
- *fontglide_xscreensaver_function_table,
- *fuzzyflakes_xscreensaver_function_table,
- *galaxy_xscreensaver_function_table,
- *gears_xscreensaver_function_table,
- *gflux_xscreensaver_function_table,
- *glblur_xscreensaver_function_table,
- *glcells_xscreensaver_function_table,
- *gleidescope_xscreensaver_function_table,
- *glhanoi_xscreensaver_function_table,
- *glknots_xscreensaver_function_table,
- *glmatrix_xscreensaver_function_table,
- *glplanet_xscreensaver_function_table,
- *glschool_xscreensaver_function_table,
- *glslideshow_xscreensaver_function_table,
- *glsnake_xscreensaver_function_table,
- *gltext_xscreensaver_function_table,
- *goop_xscreensaver_function_table,
- *grav_xscreensaver_function_table,
- *greynetic_xscreensaver_function_table,
- *halftone_xscreensaver_function_table,
- *halo_xscreensaver_function_table,
- *helix_xscreensaver_function_table,
- *hilbert_xscreensaver_function_table,
- *hopalong_xscreensaver_function_table,
- *hypertorus_xscreensaver_function_table,
- *hypnowheel_xscreensaver_function_table,
- *ifs_xscreensaver_function_table,
- *imsmap_xscreensaver_function_table,
- *interaggregate_xscreensaver_function_table,
- *interference_xscreensaver_function_table,
- *intermomentary_xscreensaver_function_table,
- *jigglypuff_xscreensaver_function_table,
- *jigsaw_xscreensaver_function_table,
- *juggler3d_xscreensaver_function_table,
- *julia_xscreensaver_function_table,
- *kaleidescope_xscreensaver_function_table,
- *klein_xscreensaver_function_table,
- *kumppa_xscreensaver_function_table,
- *lament_xscreensaver_function_table,
- *lavalite_xscreensaver_function_table,
- *loop_xscreensaver_function_table,
- *m6502_xscreensaver_function_table,
- *maze_xscreensaver_function_table,
- *memscroller_xscreensaver_function_table,
- *menger_xscreensaver_function_table,
- *metaballs_xscreensaver_function_table,
- *mirrorblob_xscreensaver_function_table,
- *moebius_xscreensaver_function_table,
- *moebiusgears_xscreensaver_function_table,
- *moire_xscreensaver_function_table,
- *moire2_xscreensaver_function_table,
- *molecule_xscreensaver_function_table,
- *morph3d_xscreensaver_function_table,
- *mountain_xscreensaver_function_table,
- *munch_xscreensaver_function_table,
- *nerverot_xscreensaver_function_table,
- *noof_xscreensaver_function_table,
- *noseguy_xscreensaver_function_table,
- *pacman_xscreensaver_function_table,
- *pedal_xscreensaver_function_table,
- *penetrate_xscreensaver_function_table,
- *penrose_xscreensaver_function_table,
- *petri_xscreensaver_function_table,
- *phosphor_xscreensaver_function_table,
- *photopile_xscreensaver_function_table,
- *piecewise_xscreensaver_function_table,
- *pinion_xscreensaver_function_table,
- *pipes_xscreensaver_function_table,
- *polyhedra_xscreensaver_function_table,
- *polyominoes_xscreensaver_function_table,
- *polytopes_xscreensaver_function_table,
- *pong_xscreensaver_function_table,
- *popsquares_xscreensaver_function_table,
- *providence_xscreensaver_function_table,
- *pulsar_xscreensaver_function_table,
- *pyro_xscreensaver_function_table,
- *qix_xscreensaver_function_table,
- *queens_xscreensaver_function_table,
- *rdbomb_xscreensaver_function_table,
- *ripples_xscreensaver_function_table,
- *rocks_xscreensaver_function_table,
- *rorschach_xscreensaver_function_table,
- *rotzoomer_xscreensaver_function_table,
- *rubik_xscreensaver_function_table,
- *rubikblocks_xscreensaver_function_table,
- *sballs_xscreensaver_function_table,
- *shadebobs_xscreensaver_function_table,
- *sierpinski_xscreensaver_function_table,
- *sierpinski3d_xscreensaver_function_table,
- *skytentacles_xscreensaver_function_table,
- *slidescreen_xscreensaver_function_table,
- *slip_xscreensaver_function_table,
- *sonar_xscreensaver_function_table,
- *speedmine_xscreensaver_function_table,
- *spheremonics_xscreensaver_function_table,
- *spotlight_xscreensaver_function_table,
- *sproingies_xscreensaver_function_table,
- *squiral_xscreensaver_function_table,
- *stairs_xscreensaver_function_table,
- *starfish_xscreensaver_function_table,
- *starwars_xscreensaver_function_table,
- *stonerview_xscreensaver_function_table,
- *strange_xscreensaver_function_table,
- *substrate_xscreensaver_function_table,
- *superquadrics_xscreensaver_function_table,
- *surfaces_xscreensaver_function_table,
- *swirl_xscreensaver_function_table,
- *tangram_xscreensaver_function_table,
- *thornbird_xscreensaver_function_table,
- *timetunnel_xscreensaver_function_table,
- *topblock_xscreensaver_function_table,
- *triangle_xscreensaver_function_table,
- *tronbit_xscreensaver_function_table,
- *truchet_xscreensaver_function_table,
- *twang_xscreensaver_function_table,
- *vermiculate_xscreensaver_function_table,
- *voronoi_xscreensaver_function_table,
- *wander_xscreensaver_function_table,
- *whirlwindwarp_xscreensaver_function_table,
- *wormhole_xscreensaver_function_table,
- *xanalogtv_xscreensaver_function_table,
- *xflame_xscreensaver_function_table,
- *xjack_xscreensaver_function_table,
- *xlyap_xscreensaver_function_table,
- *xmatrix_xscreensaver_function_table,
- *xrayswarm_xscreensaver_function_table,
- *xspirograph_xscreensaver_function_table,
- *zoom_xscreensaver_function_table;
-
-static NSDictionary *make_function_tables_dict(void)
-{
-  return
-    [NSDictionary dictionaryWithObjectsAndKeys:
-       [NSValue valueWithPointer:&abstractile_xscreensaver_function_table], @"abstractile",
-       [NSValue valueWithPointer:&anemone_xscreensaver_function_table], @"anemone",
-       [NSValue valueWithPointer:&anemotaxis_xscreensaver_function_table], @"anemotaxis",
-       [NSValue valueWithPointer:&antinspect_xscreensaver_function_table], @"antinspect",
-       [NSValue valueWithPointer:&antmaze_xscreensaver_function_table], @"antmaze",
-       [NSValue valueWithPointer:&antspotlight_xscreensaver_function_table], @"antspotlight",
-       [NSValue valueWithPointer:&apollonian_xscreensaver_function_table], @"apollonian",
-       [NSValue valueWithPointer:&apple2_xscreensaver_function_table], @"apple2",
-       [NSValue valueWithPointer:&atlantis_xscreensaver_function_table], @"atlantis",
-       [NSValue valueWithPointer:&attraction_xscreensaver_function_table], @"attraction",
-       [NSValue valueWithPointer:&atunnel_xscreensaver_function_table], @"atunnel",
-       [NSValue valueWithPointer:&barcode_xscreensaver_function_table], @"barcode",
-       [NSValue valueWithPointer:&blaster_xscreensaver_function_table], @"blaster",
-       [NSValue valueWithPointer:&blinkbox_xscreensaver_function_table], @"blinkbox",
-       [NSValue valueWithPointer:&blitspin_xscreensaver_function_table], @"blitspin",
-       [NSValue valueWithPointer:&blocktube_xscreensaver_function_table], @"blocktube",
-       [NSValue valueWithPointer:&boing_xscreensaver_function_table], @"boing",
-       [NSValue valueWithPointer:&bouboule_xscreensaver_function_table], @"bouboule",
-       [NSValue valueWithPointer:&bouncingcow_xscreensaver_function_table], @"bouncingcow",
-       [NSValue valueWithPointer:&boxed_xscreensaver_function_table], @"boxed",
-       [NSValue valueWithPointer:&boxfit_xscreensaver_function_table], @"boxfit",
-       [NSValue valueWithPointer:&braid_xscreensaver_function_table], @"braid",
-       [NSValue valueWithPointer:&bsod_xscreensaver_function_table], @"bsod",
-       [NSValue valueWithPointer:&bubble3d_xscreensaver_function_table], @"bubble3d",
-       [NSValue valueWithPointer:&bumps_xscreensaver_function_table], @"bumps",
-       [NSValue valueWithPointer:&cage_xscreensaver_function_table], @"cage",
-       [NSValue valueWithPointer:&carousel_xscreensaver_function_table], @"carousel",
-       [NSValue valueWithPointer:&ccurve_xscreensaver_function_table], @"ccurve",
-       [NSValue valueWithPointer:&celtic_xscreensaver_function_table], @"celtic",
-       [NSValue valueWithPointer:&circuit_xscreensaver_function_table], @"circuit",
-       [NSValue valueWithPointer:&cloudlife_xscreensaver_function_table], @"cloudlife",
-       [NSValue valueWithPointer:&companioncube_xscreensaver_function_table], @"companioncube",
-       [NSValue valueWithPointer:&compass_xscreensaver_function_table], @"compass",
-       [NSValue valueWithPointer:&coral_xscreensaver_function_table], @"coral",
-       [NSValue valueWithPointer:&crackberg_xscreensaver_function_table], @"crackberg",
-       [NSValue valueWithPointer:&crystal_xscreensaver_function_table], @"crystal",
-       [NSValue valueWithPointer:&cube21_xscreensaver_function_table], @"cube21",
-       [NSValue valueWithPointer:&cubenetic_xscreensaver_function_table], @"cubenetic",
-       [NSValue valueWithPointer:&cubestorm_xscreensaver_function_table], @"cubestorm",
-       [NSValue valueWithPointer:&cubicgrid_xscreensaver_function_table], @"cubicgrid",
-       [NSValue valueWithPointer:&cwaves_xscreensaver_function_table], @"cwaves",
-       [NSValue valueWithPointer:&cynosure_xscreensaver_function_table], @"cynosure",
-       [NSValue valueWithPointer:&dangerball_xscreensaver_function_table], @"dangerball",
-       [NSValue valueWithPointer:&decayscreen_xscreensaver_function_table], @"decayscreen",
-       [NSValue valueWithPointer:&deco_xscreensaver_function_table], @"deco",
-       [NSValue valueWithPointer:&deluxe_xscreensaver_function_table], @"deluxe",
-       [NSValue valueWithPointer:&demon_xscreensaver_function_table], @"demon",
-       [NSValue valueWithPointer:&discrete_xscreensaver_function_table], @"discrete",
-       [NSValue valueWithPointer:&distort_xscreensaver_function_table], @"distort",
-       [NSValue valueWithPointer:&dnalogo_xscreensaver_function_table], @"dnalogo",
-       [NSValue valueWithPointer:&drift_xscreensaver_function_table], @"drift",
-       [NSValue valueWithPointer:&endgame_xscreensaver_function_table], @"endgame",
-       [NSValue valueWithPointer:&engine_xscreensaver_function_table], @"engine",
-       [NSValue valueWithPointer:&epicycle_xscreensaver_function_table], @"epicycle",
-       [NSValue valueWithPointer:&eruption_xscreensaver_function_table], @"eruption",
-       [NSValue valueWithPointer:&euler2d_xscreensaver_function_table], @"euler2d",
-       [NSValue valueWithPointer:&fadeplot_xscreensaver_function_table], @"fadeplot",
-       [NSValue valueWithPointer:&fiberlamp_xscreensaver_function_table], @"fiberlamp",
-       [NSValue valueWithPointer:&fireworkx_xscreensaver_function_table], @"fireworkx",
-       [NSValue valueWithPointer:&flame_xscreensaver_function_table], @"flame",
-       [NSValue valueWithPointer:&flipflop_xscreensaver_function_table], @"flipflop",
-       [NSValue valueWithPointer:&flipscreen3d_xscreensaver_function_table], @"flipscreen3d",
-       [NSValue valueWithPointer:&fliptext_xscreensaver_function_table], @"fliptext",
-       [NSValue valueWithPointer:&flow_xscreensaver_function_table], @"flow",
-       [NSValue valueWithPointer:&fluidballs_xscreensaver_function_table], @"fluidballs",
-       [NSValue valueWithPointer:&flyingtoasters_xscreensaver_function_table], @"flyingtoasters",
-       [NSValue valueWithPointer:&fontglide_xscreensaver_function_table], @"fontglide",
-       [NSValue valueWithPointer:&fuzzyflakes_xscreensaver_function_table], @"fuzzyflakes",
-       [NSValue valueWithPointer:&galaxy_xscreensaver_function_table], @"galaxy",
-       [NSValue valueWithPointer:&gears_xscreensaver_function_table], @"gears",
-       [NSValue valueWithPointer:&gflux_xscreensaver_function_table], @"gflux",
-       [NSValue valueWithPointer:&glblur_xscreensaver_function_table], @"glblur",
-       [NSValue valueWithPointer:&glcells_xscreensaver_function_table], @"glcells",
-       [NSValue valueWithPointer:&gleidescope_xscreensaver_function_table], @"gleidescope",
-       [NSValue valueWithPointer:&glhanoi_xscreensaver_function_table], @"glhanoi",
-       [NSValue valueWithPointer:&glknots_xscreensaver_function_table], @"glknots",
-       [NSValue valueWithPointer:&glmatrix_xscreensaver_function_table], @"glmatrix",
-       [NSValue valueWithPointer:&glplanet_xscreensaver_function_table], @"glplanet",
-       [NSValue valueWithPointer:&glschool_xscreensaver_function_table], @"glschool",
-       [NSValue valueWithPointer:&glslideshow_xscreensaver_function_table], @"glslideshow",
-       [NSValue valueWithPointer:&glsnake_xscreensaver_function_table], @"glsnake",
-       [NSValue valueWithPointer:&gltext_xscreensaver_function_table], @"gltext",
-       [NSValue valueWithPointer:&goop_xscreensaver_function_table], @"goop",
-       [NSValue valueWithPointer:&grav_xscreensaver_function_table], @"grav",
-       [NSValue valueWithPointer:&greynetic_xscreensaver_function_table], @"greynetic",
-       [NSValue valueWithPointer:&halftone_xscreensaver_function_table], @"halftone",
-       [NSValue valueWithPointer:&halo_xscreensaver_function_table], @"halo",
-       [NSValue valueWithPointer:&helix_xscreensaver_function_table], @"helix",
-       [NSValue valueWithPointer:&hilbert_xscreensaver_function_table], @"hilbert",
-       [NSValue valueWithPointer:&hopalong_xscreensaver_function_table], @"hopalong",
-       [NSValue valueWithPointer:&hypertorus_xscreensaver_function_table], @"hypertorus",
-       [NSValue valueWithPointer:&hypnowheel_xscreensaver_function_table], @"hypnowheel",
-       [NSValue valueWithPointer:&ifs_xscreensaver_function_table], @"ifs",
-       [NSValue valueWithPointer:&imsmap_xscreensaver_function_table], @"imsmap",
-       [NSValue valueWithPointer:&interaggregate_xscreensaver_function_table], @"interaggregate",
-       [NSValue valueWithPointer:&interference_xscreensaver_function_table], @"interference",
-       [NSValue valueWithPointer:&intermomentary_xscreensaver_function_table], @"intermomentary",
-       [NSValue valueWithPointer:&jigglypuff_xscreensaver_function_table], @"jigglypuff",
-       [NSValue valueWithPointer:&jigsaw_xscreensaver_function_table], @"jigsaw",
-       [NSValue valueWithPointer:&juggler3d_xscreensaver_function_table], @"juggler3d",
-       [NSValue valueWithPointer:&julia_xscreensaver_function_table], @"julia",
-       [NSValue valueWithPointer:&kaleidescope_xscreensaver_function_table], @"kaleidescope",
-       [NSValue valueWithPointer:&klein_xscreensaver_function_table], @"klein",
-       [NSValue valueWithPointer:&kumppa_xscreensaver_function_table], @"kumppa",
-       [NSValue valueWithPointer:&lament_xscreensaver_function_table], @"lament",
-       [NSValue valueWithPointer:&lavalite_xscreensaver_function_table], @"lavalite",
-       [NSValue valueWithPointer:&loop_xscreensaver_function_table], @"loop",
-       [NSValue valueWithPointer:&m6502_xscreensaver_function_table], @"m6502",
-       [NSValue valueWithPointer:&maze_xscreensaver_function_table], @"maze",
-       [NSValue valueWithPointer:&memscroller_xscreensaver_function_table], @"memscroller",
-       [NSValue valueWithPointer:&menger_xscreensaver_function_table], @"menger",
-       [NSValue valueWithPointer:&metaballs_xscreensaver_function_table], @"metaballs",
-       [NSValue valueWithPointer:&mirrorblob_xscreensaver_function_table], @"mirrorblob",
-       [NSValue valueWithPointer:&moebius_xscreensaver_function_table], @"moebius",
-       [NSValue valueWithPointer:&moebiusgears_xscreensaver_function_table], @"moebiusgears",
-       [NSValue valueWithPointer:&moire_xscreensaver_function_table], @"moire",
-       [NSValue valueWithPointer:&moire2_xscreensaver_function_table], @"moire2",
-       [NSValue valueWithPointer:&molecule_xscreensaver_function_table], @"molecule",
-       [NSValue valueWithPointer:&morph3d_xscreensaver_function_table], @"morph3d",
-       [NSValue valueWithPointer:&mountain_xscreensaver_function_table], @"mountain",
-       [NSValue valueWithPointer:&munch_xscreensaver_function_table], @"munch",
-       [NSValue valueWithPointer:&nerverot_xscreensaver_function_table], @"nerverot",
-       [NSValue valueWithPointer:&noof_xscreensaver_function_table], @"noof",
-       [NSValue valueWithPointer:&noseguy_xscreensaver_function_table], @"noseguy",
-       [NSValue valueWithPointer:&pacman_xscreensaver_function_table], @"pacman",
-       [NSValue valueWithPointer:&pedal_xscreensaver_function_table], @"pedal",
-       [NSValue valueWithPointer:&penetrate_xscreensaver_function_table], @"penetrate",
-       [NSValue valueWithPointer:&penrose_xscreensaver_function_table], @"penrose",
-       [NSValue valueWithPointer:&petri_xscreensaver_function_table], @"petri",
-       [NSValue valueWithPointer:&phosphor_xscreensaver_function_table], @"phosphor",
-       [NSValue valueWithPointer:&photopile_xscreensaver_function_table], @"photopile",
-       [NSValue valueWithPointer:&piecewise_xscreensaver_function_table], @"piecewise",
-       [NSValue valueWithPointer:&pinion_xscreensaver_function_table], @"pinion",
-       [NSValue valueWithPointer:&pipes_xscreensaver_function_table], @"pipes",
-       [NSValue valueWithPointer:&polyhedra_xscreensaver_function_table], @"polyhedra",
-       [NSValue valueWithPointer:&polyominoes_xscreensaver_function_table], @"polyominoes",
-       [NSValue valueWithPointer:&polytopes_xscreensaver_function_table], @"polytopes",
-       [NSValue valueWithPointer:&pong_xscreensaver_function_table], @"pong",
-       [NSValue valueWithPointer:&popsquares_xscreensaver_function_table], @"popsquares",
-       [NSValue valueWithPointer:&providence_xscreensaver_function_table], @"providence",
-       [NSValue valueWithPointer:&pulsar_xscreensaver_function_table], @"pulsar",
-       [NSValue valueWithPointer:&pyro_xscreensaver_function_table], @"pyro",
-       [NSValue valueWithPointer:&qix_xscreensaver_function_table], @"qix",
-       [NSValue valueWithPointer:&queens_xscreensaver_function_table], @"queens",
-       [NSValue valueWithPointer:&rdbomb_xscreensaver_function_table], @"rdbomb",
-       [NSValue valueWithPointer:&ripples_xscreensaver_function_table], @"ripples",
-       [NSValue valueWithPointer:&rocks_xscreensaver_function_table], @"rocks",
-       [NSValue valueWithPointer:&rorschach_xscreensaver_function_table], @"rorschach",
-       [NSValue valueWithPointer:&rotzoomer_xscreensaver_function_table], @"rotzoomer",
-       [NSValue valueWithPointer:&rubik_xscreensaver_function_table], @"rubik",
-       [NSValue valueWithPointer:&rubikblocks_xscreensaver_function_table], @"rubikblocks",
-       [NSValue valueWithPointer:&sballs_xscreensaver_function_table], @"sballs",
-       [NSValue valueWithPointer:&shadebobs_xscreensaver_function_table], @"shadebobs",
-       [NSValue valueWithPointer:&sierpinski_xscreensaver_function_table], @"sierpinski",
-       [NSValue valueWithPointer:&sierpinski3d_xscreensaver_function_table], @"sierpinski3d",
-       [NSValue valueWithPointer:&skytentacles_xscreensaver_function_table], @"skytentacles",
-       [NSValue valueWithPointer:&slidescreen_xscreensaver_function_table], @"slidescreen",
-       [NSValue valueWithPointer:&slip_xscreensaver_function_table], @"slip",
-       [NSValue valueWithPointer:&sonar_xscreensaver_function_table], @"sonar",
-       [NSValue valueWithPointer:&speedmine_xscreensaver_function_table], @"speedmine",
-       [NSValue valueWithPointer:&spheremonics_xscreensaver_function_table], @"spheremonics",
-       [NSValue valueWithPointer:&spotlight_xscreensaver_function_table], @"spotlight",
-       [NSValue valueWithPointer:&sproingies_xscreensaver_function_table], @"sproingies",
-       [NSValue valueWithPointer:&squiral_xscreensaver_function_table], @"squiral",
-       [NSValue valueWithPointer:&stairs_xscreensaver_function_table], @"stairs",
-       [NSValue valueWithPointer:&starfish_xscreensaver_function_table], @"starfish",
-       [NSValue valueWithPointer:&starwars_xscreensaver_function_table], @"starwars",
-       [NSValue valueWithPointer:&stonerview_xscreensaver_function_table], @"stonerview",
-       [NSValue valueWithPointer:&strange_xscreensaver_function_table], @"strange",
-       [NSValue valueWithPointer:&substrate_xscreensaver_function_table], @"substrate",
-       [NSValue valueWithPointer:&superquadrics_xscreensaver_function_table], @"superquadrics",
-       [NSValue valueWithPointer:&surfaces_xscreensaver_function_table], @"surfaces",
-       [NSValue valueWithPointer:&swirl_xscreensaver_function_table], @"swirl",
-       [NSValue valueWithPointer:&tangram_xscreensaver_function_table], @"tangram",
-       [NSValue valueWithPointer:&thornbird_xscreensaver_function_table], @"thornbird",
-       [NSValue valueWithPointer:&timetunnel_xscreensaver_function_table], @"timetunnel",
-       [NSValue valueWithPointer:&topblock_xscreensaver_function_table], @"topblock",
-       [NSValue valueWithPointer:&triangle_xscreensaver_function_table], @"triangle",
-       [NSValue valueWithPointer:&tronbit_xscreensaver_function_table], @"tronbit",
-       [NSValue valueWithPointer:&truchet_xscreensaver_function_table], @"truchet",
-       [NSValue valueWithPointer:&twang_xscreensaver_function_table], @"twang",
-       [NSValue valueWithPointer:&vermiculate_xscreensaver_function_table], @"vermiculate",
-       [NSValue valueWithPointer:&voronoi_xscreensaver_function_table], @"voronoi",
-       [NSValue valueWithPointer:&wander_xscreensaver_function_table], @"wander",
-       [NSValue valueWithPointer:&whirlwindwarp_xscreensaver_function_table], @"whirlwindwarp",
-       [NSValue valueWithPointer:&wormhole_xscreensaver_function_table], @"wormhole",
-       [NSValue valueWithPointer:&xanalogtv_xscreensaver_function_table], @"xanalogtv",
-       [NSValue valueWithPointer:&xflame_xscreensaver_function_table], @"xflame",
-       [NSValue valueWithPointer:&xjack_xscreensaver_function_table], @"xjack",
-       [NSValue valueWithPointer:&xlyap_xscreensaver_function_table], @"xlyap",
-       [NSValue valueWithPointer:&xmatrix_xscreensaver_function_table], @"xmatrix",
-       [NSValue valueWithPointer:&xrayswarm_xscreensaver_function_table], @"xrayswarm",
-       [NSValue valueWithPointer:&xspirograph_xscreensaver_function_table], @"xspirograph",
-       [NSValue valueWithPointer:&zoom_xscreensaver_function_table], @"zoom",
-       nil];
-}
diff --git a/OSX/phosphor-app.xml b/OSX/phosphor-app.xml
new file mode 100644 (file)
index 0000000..7f10d5a
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="phosphor" _label="Phosphor">
+
+ <command arg="-root"/>
+
+ <hgroup>
+  <vgroup>
+   <number id="delay" type="slider" arg="-delay %"
+           _label="Frame rate" _low-label="Low" _high-label="High"
+           low="0" high="100000" default="50000"
+           convert="invert"/>
+
+   <number id="scale" type="spinbutton" arg="-scale %"
+           _label="Font scale" low="1" high="20" default="6"/>
+
+   <number id="fade" type="slider" arg="-ticks %"
+           _label="Fade" _low-label="Slow" _high-label="Fast"
+           low="1" high="100" default="20"
+           convert="invert"/>
+  </vgroup>
+ </hgroup>
+
+  <_description>
+A fully-functional VT100 terminal emulator simulating an old terminal,
+with large pixels and long-sustain phosphor.
+
+Written by Jamie Zawinski; 1999.
+  </_description>
+</screensaver>
index ce17e1cdbb4edaf1a03e5de273dc638c08b49faa..ec8981a1ac759d3b578f044a6d6e579d3b7e53ae 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
 #!/usr/bin/perl -w
-# Copyright Â© 2006-2013 Jamie Zawinski <jwz@jwz.org>
+# Copyright Ã‚© 2006-2013 Jamie Zawinski <jwz@jwz.org>
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
@@ -24,7 +24,7 @@ use strict;
 
 my ($exec_dir, $progname) = ($0 =~ m@^(.*?)/([^/]+)$@);
 
 
 my ($exec_dir, $progname) = ($0 =~ m@^(.*?)/([^/]+)$@);
 
-my $version = q{ $Revision: 1.23 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.24 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 $ENV{PATH} = "/usr/local/bin:$ENV{PATH}";   # for seticon
 
 
 $ENV{PATH} = "/usr/local/bin:$ENV{PATH}";   # for seticon
 
@@ -47,6 +47,7 @@ sub read_info_plist($) {
   } else {
     error ("$file: $!");
   }
   } else {
     error ("$file: $!");
   }
+  print STDERR "$progname: read $file\n" if ($verbose > 2);
   local $/ = undef;  # read entire file
   my $body = <$in>;
   close $in;
   local $/ = undef;  # read entire file
   my $body = <$in>;
   close $in;
@@ -82,6 +83,7 @@ sub read_saver_xml($) {
   } else {
     error ("$file: $!");
   }
   } else {
     error ("$file: $!");
   }
+  print STDERR "$progname: read $file\n" if ($verbose > 2);
   local $/ = undef;  # read entire file
   my $body = <$in>;
   close $in;
   local $/ = undef;  # read entire file
   my $body = <$in>;
   close $in;
index 407cc8f2fe351ac283f71c725c52177612b6a516..0df5d1f72ac7eea19fb0ebdf47a6878eb6d3d34f 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
 #!/usr/bin/perl -w
-# Copyright Â© 2006-2012 Jamie Zawinski <jwz@jwz.org>
+# Copyright Â© 2006-2013 Jamie Zawinski <jwz@jwz.org>
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
@@ -18,10 +18,12 @@ require 5;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.1 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.2 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 1;
 
 
 my $verbose = 1;
 
+$ENV{PATH} = "/opt/local/bin:$ENV{PATH}";   # MacPorts, for ImageMagick
+
 
 sub safe_system(@) {
   my @cmd = @_;
 
 sub safe_system(@) {
   my @cmd = @_;
diff --git a/README b/README
index 0b7de8bcadd449348cfe60eb05789454bbb5283e..1e98c0a8e11c08fd56726f7a7862c069ae1d4c03 100644 (file)
--- a/README
+++ b/README
@@ -38,6 +38,20 @@ XScreenSaver has an extensive manual -- please read it!
 
 ===============================================================================
 
 
 ===============================================================================
 
+Changes since 5.21:   * New hacks, `kaleidocycle', `quasicrystal',
+                        `unknownpleasures' and `hexadrop'.
+                      * Performance improvements for `interference'.
+                      * Fixed possible crashes in `apple2', `maze', `pacman',
+                        `polyominoes', `fireworkx', `engine'.
+                      * Fix for `bumps' in 64 bit.
+                      * Fixed preferences crash on old iOS 5 devices.
+                      * Fixed "Shake to Randomize"; display name of saver.
+                      * Fixed weirdness with "Frame Rate" sliders on iOS.
+                      * Fixed rotation problems with `pacman', `decayscreen'.
+                      * Better dragging in `fluidballs'.
+                      * Ignore rotation in hacks that don't benefit from it.
+                      * Ignore DEACTIVATE messages when locked, instead of
+                        popping up the password dialog box.
 Changes since 5.20:   * Changed default text source from Twitter to Wikipedia,
                         since Twitter now requires a login to get any feeds.
                       * New version of `fireworkx'.
 Changes since 5.20:   * Changed default text source from Twitter to Wikipedia,
                         since Twitter now requires a login to get any feeds.
                       * New version of `fireworkx'.
index 12d49d2392fa1fe0d807b3b2183b059503adf3ab..9ab4425d3ba9ea9e7288e75bd5071741a29725c2 100644 (file)
@@ -4,8 +4,8 @@
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
 !            a screen saver and locker for the X window system
 !                            by Jamie Zawinski
 !
-!                              version 5.21
-!                              04-Feb-2013
+!                              version 5.22
+!                              16-Jul-2013
 !
 ! See "man xscreensaver" for more info.  The latest version is always
 ! available at http://www.jwz.org/xscreensaver/
 !
 ! See "man xscreensaver" for more info.  The latest version is always
 ! available at http://www.jwz.org/xscreensaver/
@@ -355,7 +355,11 @@ GetViewPortIsFullOfLies: False
 @GL_KLUDGE@ GL:                                rubikblocks -root                           \n\
 @GL_KLUDGE@ GL:                                companioncube -root                         \n\
 @GL_KLUDGE@ GL:                                hilbert -root                               \n\
 @GL_KLUDGE@ GL:                                rubikblocks -root                           \n\
 @GL_KLUDGE@ GL:                                companioncube -root                         \n\
 @GL_KLUDGE@ GL:                                hilbert -root                               \n\
-@GL_KLUDGE@ GL:                                tronbit -root                               \n
+@GL_KLUDGE@ GL:                                tronbit -root                               \n\
+                               hexadrop -root                              \n\
+@GL_KLUDGE@ GL:                                kaleidocycle -root                          \n\
+@GL_KLUDGE@ GL:                                quasicrystal -root                          \n\
+@GL_KLUDGE@ GL:                                unknownpleasures -root                      \n
 
 
 
 
 
 
@@ -474,6 +478,7 @@ XScreenSaver.bourneShell:           /bin/sh
 *hacks.nerverot.name:       NerveRot
 *hacks.noseguy.name:        NoseGuy
 *hacks.popsquares.name:     PopSquares
 *hacks.nerverot.name:       NerveRot
 *hacks.noseguy.name:        NoseGuy
 *hacks.popsquares.name:     PopSquares
+*hacks.quasicrystal.name:   QuasiCrystal
 *hacks.rd-bomb.name:        RDbomb
 *hacks.rdbomb.name:         RDbomb
 *hacks.rotzoomer.name:      RotZoomer
 *hacks.rd-bomb.name:        RDbomb
 *hacks.rdbomb.name:         RDbomb
 *hacks.rotzoomer.name:      RotZoomer
@@ -490,6 +495,7 @@ XScreenSaver.bourneShell:           /bin/sh
 *hacks.timetunnel.name:     TimeTunnel
 *hacks.topblock.name:       TopBlock
 *hacks.tronbit.name:        TronBit
 *hacks.timetunnel.name:     TimeTunnel
 *hacks.topblock.name:       TopBlock
 *hacks.tronbit.name:        TronBit
+*hacks.unknownpleasures.name:UnknownPleasures
 *hacks.vidwhacker.name:     VidWhacker
 *hacks.webcollage.name:     WebCollage
 *hacks.whirlwindwarp.name:  WhirlWindWarp
 *hacks.vidwhacker.name:     VidWhacker
 *hacks.webcollage.name:     WebCollage
 *hacks.whirlwindwarp.name:  WhirlWindWarp
index 3b6b133b66032394f07e49da3538727fece4bdc3..4c9d55f27c7256d1d0585befcc53ce6cb4d92a4e 100644 (file)
   GL:                          rubikblocks -root                           \\n\
   GL:                          companioncube -root                         \\n\
   GL:                          hilbert -root                               \\n\
   GL:                          rubikblocks -root                           \\n\
   GL:                          companioncube -root                         \\n\
   GL:                          hilbert -root                               \\n\
-  GL:                          tronbit -root                               \\n",
+  GL:                          tronbit -root                               \\n\
+                               hexadrop -root                              \\n\
+  GL:                          kaleidocycle -root                          \\n\
+  GL:                          quasicrystal -root                          \\n\
+  GL:                          unknownpleasures -root                      \\n",
 "XScreenSaver.pointerPollTime:         0:00:05",
 "XScreenSaver.pointerHysteresis:               10",
 "XScreenSaver.initialDelay:            0:00:00",
 "XScreenSaver.pointerPollTime:         0:00:05",
 "XScreenSaver.pointerHysteresis:               10",
 "XScreenSaver.initialDelay:            0:00:00",
 "*hacks.nerverot.name:       NerveRot",
 "*hacks.noseguy.name:        NoseGuy",
 "*hacks.popsquares.name:     PopSquares",
 "*hacks.nerverot.name:       NerveRot",
 "*hacks.noseguy.name:        NoseGuy",
 "*hacks.popsquares.name:     PopSquares",
+"*hacks.quasicrystal.name:   QuasiCrystal",
 "*hacks.rd-bomb.name:        RDbomb",
 "*hacks.rdbomb.name:         RDbomb",
 "*hacks.rotzoomer.name:      RotZoomer",
 "*hacks.rd-bomb.name:        RDbomb",
 "*hacks.rdbomb.name:         RDbomb",
 "*hacks.rotzoomer.name:      RotZoomer",
 "*hacks.timetunnel.name:     TimeTunnel",
 "*hacks.topblock.name:       TopBlock",
 "*hacks.tronbit.name:        TronBit",
 "*hacks.timetunnel.name:     TimeTunnel",
 "*hacks.topblock.name:       TopBlock",
 "*hacks.tronbit.name:        TronBit",
+"*hacks.unknownpleasures.name:UnknownPleasures",
 "*hacks.vidwhacker.name:     VidWhacker",
 "*hacks.webcollage.name:     WebCollage",
 "*hacks.whirlwindwarp.name:  WhirlWindWarp",
 "*hacks.vidwhacker.name:     VidWhacker",
 "*hacks.webcollage.name:     WebCollage",
 "*hacks.whirlwindwarp.name:  WhirlWindWarp",
index 5da53a01831a406d07f947edd08a6399c4ce06fc..38ca88a0f26c687b5c55ba63b9515f8750e5fae9 100644 (file)
@@ -1,5 +1,5 @@
 /* exec.c --- executes a program in *this* pid, without an intervening process.
 /* exec.c --- executes a program in *this* pid, without an intervening process.
- * xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -286,6 +286,7 @@ on_path_p (const char *program)
       strcat (p2, "/");
       strcat (p2, cmd);
       result = (0 == stat (p2, &st));
       strcat (p2, "/");
       strcat (p2, cmd);
       result = (0 == stat (p2, &st));
+      free (p2);
       if (result)
         goto DONE;
       token = strtok (0, ":");
       if (result)
         goto DONE;
       token = strtok (0, ":");
index cc61a08d86f69ae796b52d8542bc734f1b6f10ba..7b45988de5f0e49eb97261b4c002416c570ac9c2 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
 #!/usr/bin/perl -w
-# Copyright Â© 2001-2012 Jamie Zawinski <jwz@jwz.org>.
+# Copyright Â© 2001-2013 Jamie Zawinski <jwz@jwz.org>.
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
@@ -57,7 +57,7 @@ BEGIN { eval 'use LWP::Simple;' }
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
 
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.34 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.35 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 
 
 my $verbose = 0;
 
@@ -330,6 +330,8 @@ sub write_cache($) {
 
 sub html_unquote($) {
   my ($h) = @_;
 
 sub html_unquote($) {
   my ($h) = @_;
+
+  # This only needs to handle entities that occur in RSS, not full HTML.
   my %ent = ( 'amp' => '&', 'lt' => '<', 'gt' => '>', 
               'quot' => '"', 'apos' => "'" );
   $h =~ s/(&(\#)?([[:alpha:]\d]+);?)/
   my %ent = ( 'amp' => '&', 'lt' => '<', 'gt' => '>', 
               'quot' => '"', 'apos' => "'" );
   $h =~ s/(&(\#)?([[:alpha:]\d]+);?)/
index 8eac38de09cf304d4b90d6f87c2c63bdb74e651c..7123265cfdbbb911c594ac8032cdb6c1c3d6a8dd 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2001-2012 by Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2001-2013 by Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -1666,6 +1666,8 @@ get_image (Screen *screen,
         draw_colorbars (screen, xgwa.visual, drawable, xgwa.colormap,
                         0, 0, 0, 0);
         XSync (dpy, False);
         draw_colorbars (screen, xgwa.visual, drawable, xgwa.colormap,
                         0, 0, 0, 0);
         XSync (dpy, False);
+        if (! file_prop) file_prop = "";
+
       }
       break;
 
       }
       break;
 
@@ -1706,8 +1708,23 @@ get_image (Screen *screen,
   {
     Atom a = XInternAtom (dpy, XA_XSCREENSAVER_IMAGE_FILENAME, False);
     if (file_prop && *file_prop)
   {
     Atom a = XInternAtom (dpy, XA_XSCREENSAVER_IMAGE_FILENAME, False);
     if (file_prop && *file_prop)
-      XChangeProperty (dpy, window, a, XA_STRING, 8, PropModeReplace, 
-                       (unsigned char *) file_prop, strlen(file_prop));
+      {
+        char *f2 = strdup (file_prop);
+
+        /* Take the extension off of the file name. */
+        /* Duplicated in utils/grabclient.c. */
+        char *slash = strrchr (f2, '/');
+        char *dot = strrchr ((slash ? slash : f2), '.');
+        if (dot) *dot = 0;
+        /* Replace slashes with newlines */
+        /* while ((dot = strchr(f2, '/'))) *dot = '\n'; */
+        /* Replace slashes with spaces */
+        while ((dot = strchr(f2, '/'))) *dot = ' ';
+
+        XChangeProperty (dpy, window, a, XA_STRING, 8, PropModeReplace, 
+                         (unsigned char *) f2, strlen(f2));
+        free (f2);
+      }
     else
       XDeleteProperty (dpy, window, a);
 
     else
       XDeleteProperty (dpy, window, a);
 
index daacb41051e2361c05b8a9308163c08029bdfd82..e9ed44e31d5dbf0955a8c7487fe194eb5a28708b 100644 (file)
@@ -1802,29 +1802,40 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p)
     }
   else if (type == XA_DEACTIVATE)
     {
     }
   else if (type == XA_DEACTIVATE)
     {
-      if (! until_idle_p)
-       {
-          if (si->throttled_p && p->verbose_p)
-            fprintf (stderr, "%s: unthrottled.\n", blurb());
-         si->throttled_p = False;
+      if (si->locked_p) 
+        {
+          clientmessage_response(si, window, False,
+              "DEACTIVATE ClientMessage received while locked: ignored.",
+              "screen is locked.");
+        }
+      else
+        {
+          if (! until_idle_p)
+            {
+              if (si->throttled_p && p->verbose_p)
+                fprintf (stderr, "%s: unthrottled.\n", blurb());
+              si->throttled_p = False;
 
 
-         clientmessage_response(si, window, False,
-                                "DEACTIVATE ClientMessage received.",
-                                "deactivating.");
-         if (si->using_mit_saver_extension || si->using_sgi_saver_extension)
-           {
-             XForceScreenSaver (si->dpy, ScreenSaverReset);
-             return False;
-           }
-         else
-           {
-             return True;
-           }
-       }
-      clientmessage_response(si, window, False,
-     "ClientMessage DEACTIVATE received while inactive: resetting idle timer.",
-                            "not active: idle timer reset.");
-      reset_timers (si);
+              clientmessage_response(si, window, False,
+                                     "DEACTIVATE ClientMessage received.",
+                                     "deactivating.");
+              if (si->using_mit_saver_extension ||
+                  si->using_sgi_saver_extension)
+                {
+                  XForceScreenSaver (si->dpy, ScreenSaverReset);
+                  return False;
+                }
+              else
+                {
+                  return True;
+                }
+            }
+          clientmessage_response(si, window, False,
+                          "ClientMessage DEACTIVATE received while inactive: "
+                          "resetting idle timer.",
+                                 "not active: idle timer reset.");
+          reset_timers (si);
+        }
     }
   else if (type == XA_CYCLE)
     {
     }
   else if (type == XA_CYCLE)
     {
index 92c67dfb0cca3f084c63b8f39cce8e989bd5efc2..25bc2b0ac3e413b0c0e68007edc6719b80a6c11e 100644 (file)
@@ -113,7 +113,7 @@ SRCS                = attraction.c blitspin.c bouboule.c braid.c bubbles.c \
                  fuzzyflakes.c anemotaxis.c memscroller.c substrate.c \
                  intermomentary.c fireworkx.c fiberlamp.c \
                  boxfit.c interaggregate.c celtic.c cwaves.c m6502.c \
                  fuzzyflakes.c anemotaxis.c memscroller.c substrate.c \
                  intermomentary.c fireworkx.c fiberlamp.c \
                  boxfit.c interaggregate.c celtic.c cwaves.c m6502.c \
-                 asm6502.c abstractile.c lcdscrub.c \
+                 asm6502.c abstractile.c lcdscrub.c hexadrop.c \
                  webcollage-cocoa.m webcollage-helper-cocoa.m
 SCRIPTS                = vidwhacker webcollage ljlatest
 
                  webcollage-cocoa.m webcollage-helper-cocoa.m
 SCRIPTS                = vidwhacker webcollage ljlatest
 
@@ -153,7 +153,7 @@ OBJS                = attraction.o blitspin.o bouboule.o braid.o bubbles.o \
                  intermomentary.o fireworkx.o fiberlamp.o boxfit.o \
                  interaggregate.o celtic.o cwaves.o webcollage-cocoa.o \
                  webcollage-helper-cocoa.o m6502.o asm6502.o abstractile.o \
                  intermomentary.o fireworkx.o fiberlamp.o boxfit.o \
                  interaggregate.o celtic.o cwaves.o webcollage-cocoa.o \
                  webcollage-helper-cocoa.o m6502.o asm6502.o abstractile.o \
-                 lcdscrub.o
+                 lcdscrub.o hexadrop.o
 
 EXES           = attraction blitspin bouboule braid decayscreen deco \
                  drift flame galaxy grav greynetic halo \
 
 EXES           = attraction blitspin bouboule braid decayscreen deco \
                  drift flame galaxy grav greynetic halo \
@@ -174,7 +174,7 @@ EXES                = attraction blitspin bouboule braid decayscreen deco \
                  fontglide apple2 xanalogtv pong  wormhole \
                  pacman fuzzyflakes anemotaxis memscroller substrate \
                  intermomentary fireworkx fiberlamp boxfit interaggregate \
                  fontglide apple2 xanalogtv pong  wormhole \
                  pacman fuzzyflakes anemotaxis memscroller substrate \
                  intermomentary fireworkx fiberlamp boxfit interaggregate \
-                 celtic cwaves m6502 abstractile lcdscrub \
+                 celtic cwaves m6502 abstractile lcdscrub hexadrop \
                  @JPEG_EXES@
 JPEG_EXES      = webcollage-helper
 
                  @JPEG_EXES@
 JPEG_EXES      = webcollage-helper
 
@@ -226,7 +226,7 @@ MEN         = anemone.man apollonian.man attraction.man \
                  anemotaxis.man memscroller.man substrate.man \
                  intermomentary.man fireworkx.man fiberlamp.man boxfit.man \
                  interaggregate.man celtic.man cwaves.man abstractile.man \
                  anemotaxis.man memscroller.man substrate.man \
                  intermomentary.man fireworkx.man fiberlamp.man boxfit.man \
                  interaggregate.man celtic.man cwaves.man abstractile.man \
-                 lcdscrub.man
+                 lcdscrub.man hexadrop.man
 
 RETIRED_MEN    = ant.man bubbles.man critical.man flag.man forest.man \
                  laser.man lightning.man lisa.man lissie.man lmorph.man \
 
 RETIRED_MEN    = ant.man bubbles.man critical.man flag.man forest.man \
                  laser.man lightning.man lisa.man lissie.man lmorph.man \
@@ -841,6 +841,9 @@ abstractile:        abstractile.o   $(HACK_OBJS) $(COL)
 lcdscrub:      lcdscrub.o      $(HACK_OBJS)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
 
 lcdscrub:      lcdscrub.o      $(HACK_OBJS)
        $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(HACK_LIBS)
 
+hexadrop:      hexadrop.o      $(HACK_OBJS) $(COL)
+       $(CC_HACK) -o $@ $@.o   $(HACK_OBJS) $(COL) $(HACK_LIBS)
+
 # The rules for those hacks which follow the `xlockmore' API.
 #
 
 # The rules for those hacks which follow the `xlockmore' API.
 #
 
@@ -1709,6 +1712,17 @@ helix.o: $(UTILS_SRC)/resources.h
 helix.o: $(UTILS_SRC)/usleep.h
 helix.o: $(UTILS_SRC)/visual.h
 helix.o: $(UTILS_SRC)/yarandom.h
 helix.o: $(UTILS_SRC)/usleep.h
 helix.o: $(UTILS_SRC)/visual.h
 helix.o: $(UTILS_SRC)/yarandom.h
+hexadrop.o: ../config.h
+hexadrop.o: $(srcdir)/fps.h
+hexadrop.o: $(srcdir)/screenhackI.h
+hexadrop.o: $(srcdir)/screenhack.h
+hexadrop.o: $(UTILS_SRC)/colors.h
+hexadrop.o: $(UTILS_SRC)/grabscreen.h
+hexadrop.o: $(UTILS_SRC)/hsv.h
+hexadrop.o: $(UTILS_SRC)/resources.h
+hexadrop.o: $(UTILS_SRC)/usleep.h
+hexadrop.o: $(UTILS_SRC)/visual.h
+hexadrop.o: $(UTILS_SRC)/yarandom.h
 hopalong.o: ../config.h
 hopalong.o: $(srcdir)/fps.h
 hopalong.o: $(srcdir)/screenhackI.h
 hopalong.o: ../config.h
 hopalong.o: $(srcdir)/fps.h
 hopalong.o: $(srcdir)/screenhackI.h
index 647b7aab93180c8e8db6294e1e511fdaf4d252ef..aaac029e8b098c82b7cd0c042148f4200284788e 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
  * Copyright (c) 2004-2009 Steve Sundstrom
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * Copyright (c) 2004-2009 Steve Sundstrom
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -6,7 +6,7 @@
  * the above copyright notice appear in all copies and that both that
  * copyright notice and this permission notice appear in supporting
  * documentation.  No representations are made about the suitability of this
  * the above copyright notice appear in all copies and that both that
  * copyright notice and this permission notice appear in supporting
  * documentation.  No representations are made about the suitability of this
- * software for any purpose.  It is provided "as is" without express or 
+ * software for any purpose.  It is provided "as is" without express or
  * implied warranty.
  */
 
  * implied warranty.
  */
 
@@ -41,7 +41,7 @@
 #define PT_NL                  3
 
 #define D3D_NONE               0
 #define PT_NL                  3
 
 #define D3D_NONE               0
-#define D3D_BLOCK              1 
+#define D3D_BLOCK              1
 #define D3D_NEON               2
 #define D3D_TILED              3
 
 #define D3D_NEON               2
 #define D3D_TILED              3
 
@@ -74,7 +74,7 @@ struct gridStruct {
     unsigned int line, hl, hr, vu, vd, dhl, dhr, dvu, dvd;
 };
 
     unsigned int line, hl, hr, vu, vd, dhl, dhr, dvu, dvd;
 };
 
-/* basically the same as global variables, but used to keep them in a bucket 
+/* basically the same as global variables, but used to keep them in a bucket
    and pass them around easier like the original C++ implementation */
 struct state {
   /* window values */
    and pass them around easier like the original C++ implementation */
 struct state {
   /* window values */
@@ -118,10 +118,10 @@ struct state {
   int round;
   int outline;
   /* layered draw variables */
   int round;
   int outline;
   /* layered draw variables */
-  int pattern[LAYERS], shape[LAYERS], mix[LAYERS]; 
-  int csw[LAYERS], wsx[LAYERS], wsy[LAYERS], sec[LAYERS]; 
-  int cs1[LAYERS], cs2[LAYERS], cs3[LAYERS]; int cs4[LAYERS]; 
-  int wave[LAYERS], waveh[LAYERS], wavel[LAYERS]; 
+  int pattern[LAYERS], shape[LAYERS], mix[LAYERS];
+  int csw[LAYERS], wsx[LAYERS], wsy[LAYERS], sec[LAYERS];
+  int cs1[LAYERS], cs2[LAYERS], cs3[LAYERS]; int cs4[LAYERS];
+  int wave[LAYERS], waveh[LAYERS], wavel[LAYERS];
   int rx1[LAYERS], rx2[LAYERS], rx3[LAYERS];
   int ry1[LAYERS], ry2[LAYERS], ry3[LAYERS];
   /* misc variables */
   int rx1[LAYERS], rx2[LAYERS], rx3[LAYERS];
   int ry1[LAYERS], ry2[LAYERS], ry3[LAYERS];
   /* misc variables */
@@ -130,24 +130,24 @@ struct state {
   struct timeval time;
 };
 
   struct timeval time;
 };
 
-static int 
-_min(int a, int b) 
+static int
+_min(int a, int b)
 {
   if (a<=b)
     return(a);
   return(b);
 }
 
 {
   if (a<=b)
     return(a);
   return(b);
 }
 
-static int 
-_max(int a, int b) 
+static int
+_max(int a, int b)
 {
   if (a>=b)
     return(a);
   return(b);
 }
 
 {
   if (a>=b)
     return(a);
   return(b);
 }
 
-static int 
-_dist(struct state *st, int x1, int x2, int y1, int y2, int s) 
+static int
+_dist(struct state *st, int x1, int x2, int y1, int y2, int s)
 {
   double xd=x1-x2;
   double yd=y1-y2;
 {
   double xd=x1-x2;
   double yd=y1-y2;
@@ -163,10 +163,10 @@ _dist(struct state *st, int x1, int x2, int y1, int y2, int s)
   }
 }
 
   }
 }
 
-static int 
-_wave(struct state *st, int x, int h, int l, int wave) 
+static int
+_wave(struct state *st, int x, int h, int l, int wave)
 {
 {
-  l+=1; 
+  l+=1;
   switch(wave) {
     case 0:                                         /* cos wave*/
       return((int)(cos((double)x*M_PI/l)*h));
   switch(wave) {
     case 0:                                         /* cos wave*/
       return((int)(cos((double)x*M_PI/l)*h));
@@ -178,30 +178,30 @@ _wave(struct state *st, int x, int h, int l, int wave)
     case 4:                                   /* giant zig zag */
       return(abs((x%(l*4)-l*2))*h*3/l);
     case 5:                                        /* sawtooth */
     case 4:                                   /* giant zig zag */
       return(abs((x%(l*4)-l*2))*h*3/l);
     case 5:                                        /* sawtooth */
-      return((x%(l))*h/l); 
+      return((x%(l))*h/l);
     default:                                       /* no wave */
       return(0);
     default:                                       /* no wave */
       return(0);
-  } 
+  }
 }
 
 }
 
-static int 
-_triangle(struct state *st, int x, int y, int rx, int ry, int t) 
+static int
+_triangle(struct state *st, int x, int y, int rx, int ry, int t)
 {
   switch(t) {
     case 1:
       return(_min(_min(x+y+rx-(st->gridx/2),st->gridx-x+y),(st->gridy-y+(ry/2))*3/2));
     case 2:
 {
   switch(t) {
     case 1:
       return(_min(_min(x+y+rx-(st->gridx/2),st->gridx-x+y),(st->gridy-y+(ry/2))*3/2));
     case 2:
-      return(_min(_min(x-rx,y-ry),(rx+ry-x-y)*2/3)); 
+      return(_min(_min(x-rx,y-ry),(rx+ry-x-y)*2/3));
     case 3:
       return(_min(_min(st->gridx-x-rx,y-ry),(rx+ry-st->gridx+x-y)*2/3));
     case 4:
       return(_min(_min(x-rx,st->gridy-y-ry),(rx+ry-x-st->gridy+y)*2/3));
     case 3:
       return(_min(_min(st->gridx-x-rx,y-ry),(rx+ry-st->gridx+x-y)*2/3));
     case 4:
       return(_min(_min(x-rx,st->gridy-y-ry),(rx+ry-x-st->gridy+y)*2/3));
-  } 
+  }
   return(_min(_min(st->gridx-x-rx,st->gridy-y-ry),(rx+ry-st->gridx+x-st->gridy+y)*2/3));
 }
 
   return(_min(_min(st->gridx-x-rx,st->gridy-y-ry),(rx+ry-st->gridx+x-st->gridy+y)*2/3));
 }
 
-static void 
-_init_zlist(struct state *st) 
+static void
+_init_zlist(struct state *st)
 {
   unsigned int tmp, y, z;
 
 {
   unsigned int tmp, y, z;
 
@@ -213,7 +213,7 @@ _init_zlist(struct state *st)
     st->grid[z].line=st->grid[z].hl=st->grid[z].hr=st->grid[z].vu=st->grid[z].vd=st->grid[z].dhl=st->grid[z].dhr=st->grid[z].dvu=st->grid[z].dvd=0;
     st->zlist[z]=z;
   }
     st->grid[z].line=st->grid[z].hl=st->grid[z].hr=st->grid[z].vu=st->grid[z].vd=st->grid[z].dhl=st->grid[z].dhr=st->grid[z].dvu=st->grid[z].dvd=0;
     st->zlist[z]=z;
   }
-  /* rather than pull x,y points randomly and wait to hit final empy cells a 
+  /* rather than pull x,y points randomly and wait to hit final empy cells a
      list of all points is created and mixed so empty cells do get hit last */
   for (z=0; z<st->gridn; z++) {
     y=random()%st->gridn;
      list of all points is created and mixed so empty cells do get hit last */
   for (z=0; z<st->gridn; z++) {
     y=random()%st->gridn;
@@ -224,25 +224,24 @@ _init_zlist(struct state *st)
 }
 
 static void
 }
 
 static void
-make_color_ramp_rgb (Display *dpy, Colormap cmap,
+make_color_ramp_rgb (Screen *screen, Visual *visual, Colormap cmap,
     int r1, int g1, int b1,  int r2, int g2, int b2,
     int r1, int g1, int b1,  int r2, int g2, int b2,
-    XColor *colors, int *ncolorsP,
-    Bool closed_p, Bool allocate_p, Bool writable_p)
+    XColor *colors, int *ncolorsP, Bool closed_p)
 {
     int h1, h2;
     double s1, s2, v1, v2;
     rgb_to_hsv(r1, g1, b1, &h1, &s1, &v1);
     rgb_to_hsv(r2, g2, b2, &h2, &s2, &v2);
 {
     int h1, h2;
     double s1, s2, v1, v2;
     rgb_to_hsv(r1, g1, b1, &h1, &s1, &v1);
     rgb_to_hsv(r2, g2, b2, &h2, &s2, &v2);
-    make_color_ramp(dpy, cmap, h1, s1, v1, h2, s2, v2,
-        colors, ncolorsP, False, allocate_p, writable_p);
+    make_color_ramp(screen, visual, cmap, h1, s1, v1, h2, s2, v2,
+        colors, ncolorsP, False, True, 0);
 }
 
 
 }
 
 
-static void 
+static void
 _init_colors(struct state *st)
 {
   int col[BASECOLORS];
 _init_colors(struct state *st)
 {
   int col[BASECOLORS];
-  int c1, c2, c3, h1, h2, h3; 
+  int c1, c2, c3, h1, h2, h3;
   int r1, g1, b1, r2, g2, b2, r3, g3, b3;
   double s1, s2, s3, v1, v2, v3;
   XColor tmp_col1[16], tmp_col2[16], tmp_col3[16];
   int r1, g1, b1, r2, g2, b2, r3, g3, b3;
   double s1, s2, s3, v1, v2, v3;
   XColor tmp_col1[16], tmp_col2[16], tmp_col3[16];
@@ -281,7 +280,7 @@ _init_colors(struct state *st)
     /* 29 pink */     {0xFFFF,0x9999,0xFFFF}};
 
   if (st->d3d) {
     /* 29 pink */     {0xFFFF,0x9999,0xFFFF}};
 
   if (st->d3d) {
-    st->shades = (st->d3d==D3D_TILED) ? 5 : st->lwid/2+1;      
+    st->shades = (st->d3d==D3D_TILED) ? 5 : st->lwid/2+1;
     st->ncolors=4+random()%4;
     if (st->cmap>0) {                      /* tint the basecolors a bit */
       for (c1=0; c1<BASECOLORS; c1++)
     st->ncolors=4+random()%4;
     if (st->cmap>0) {                      /* tint the basecolors a bit */
       for (c1=0; c1<BASECOLORS; c1++)
@@ -297,44 +296,44 @@ _init_colors(struct state *st)
     }
     switch(st->cmap%4) {
       case 0:                                            /* all */
     }
     switch(st->cmap%4) {
       case 0:                                            /* all */
-        for (c1=0; c1<st->ncolors; c1++) 
+        for (c1=0; c1<st->ncolors; c1++)
           col[c1]=random()%BASECOLORS;
         break;
       case 1:                                          /* darks */
           col[c1]=random()%BASECOLORS;
         break;
       case 1:                                          /* darks */
-        for (c1=0; c1<st->ncolors; c1++) 
+        for (c1=0; c1<st->ncolors; c1++)
           col[c1]=random()%15;
         break;
       case 2:                                   /* semi consecutive darks */
         col[0]=random()%15;
           col[c1]=random()%15;
         break;
       case 2:                                   /* semi consecutive darks */
         col[0]=random()%15;
-        for (c1=1; c1<st->ncolors; c1++) 
+        for (c1=1; c1<st->ncolors; c1++)
           col[c1]=(col[c1-1]+1+random()%2)%15;
         break;
       case 3:                                   /* consecutive darks */
         col[0]=random()%(15-st->ncolors);
           col[c1]=(col[c1-1]+1+random()%2)%15;
         break;
       case 3:                                   /* consecutive darks */
         col[0]=random()%(15-st->ncolors);
-        for (c1=1; c1<st->ncolors; c1++) 
+        for (c1=1; c1<st->ncolors; c1++)
           col[c1]=col[c1-1]+1;
         break;
     }
     for (c1=0; c1<st->ncolors; c1++) {
       /* adjust colors already set */
           col[c1]=col[c1-1]+1;
         break;
     }
     for (c1=0; c1<st->ncolors; c1++) {
       /* adjust colors already set */
-      for (h1=c1*st->shades-1; h1>=0; h1--) 
+      for (h1=c1*st->shades-1; h1>=0; h1--)
         st->colors[h1+st->shades]=st->colors[h1];
         st->colors[h1+st->shades]=st->colors[h1];
-      make_color_ramp_rgb(st->display, st->xgwa.colormap,
-        basecol[col[c1]][0], basecol[col[c1]][1], basecol[col[c1]][2], 
-        0xFFFF, 0xFFFF, 0xFFFF, st->colors, &st->shades, 
-        False, True, False);
+      make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
+        basecol[col[c1]][0], basecol[col[c1]][1], basecol[col[c1]][2],
+        0xFFFF, 0xFFFF, 0xFFFF, st->colors, &st->shades,
+        False);
     }
     return;
   }
   /* not 3d */
   st->shades=1;
   if (st->cmap%2) {                                  /* basecolors */
     }
     return;
   }
   /* not 3d */
   st->shades=1;
   if (st->cmap%2) {                                  /* basecolors */
-    if (random()%3) {           
-      c1=random()%15;                
+    if (random()%3) {
+      c1=random()%15;
       c2=(c1+3+(random()%5))%15;
       c3=(c2+3+(random()%5))%15;
     } else {
       c2=(c1+3+(random()%5))%15;
       c3=(c2+3+(random()%5))%15;
     } else {
-      c1=random()%BASECOLORS;                
+      c1=random()%BASECOLORS;
       c2=(c1+5+(random()%10))%BASECOLORS;
       c3=(c2+5+(random()%10))%BASECOLORS;
     }
       c2=(c1+5+(random()%10))%BASECOLORS;
       c3=(c2+5+(random()%10))%BASECOLORS;
     }
@@ -366,9 +365,9 @@ _init_colors(struct state *st)
       st->ncolors=5+random()%5;
       if (st->cmap>1)
         r2=g2=b2=0xFFFF;
       st->ncolors=5+random()%5;
       if (st->cmap>1)
         r2=g2=b2=0xFFFF;
-      make_color_ramp_rgb(st->display, st->xgwa.colormap,
-        r1, g1, b1, r2, g2, b2, 
-        st->colors, &st->ncolors, random()%2, True, False);
+      make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
+        r1, g1, b1, r2, g2, b2,
+        st->colors, &st->ncolors, random()%2);
       break;
     case 4:                                /* 3 color make_color_loop */
     case 5:
       break;
     case 4:                                /* 3 color make_color_loop */
     case 5:
@@ -379,21 +378,21 @@ _init_colors(struct state *st)
       rgb_to_hsv(r2, g2, b2, &h2, &s2, &v2);
       rgb_to_hsv(r3, g3, b3, &h3, &s3, &v3);
 
       rgb_to_hsv(r2, g2, b2, &h2, &s2, &v2);
       rgb_to_hsv(r3, g3, b3, &h3, &s3, &v3);
 
-      make_color_loop(st->display, st->xgwa.colormap,
+      make_color_loop(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
         h1, s1, v1, h2, s2, v2, h3, s3, v3,
         st->colors, &st->ncolors, True, False);
       break;
     case 8:                                            /* random smooth */
     case 9:
       st->ncolors=(random()%4)*6+12;
         h1, s1, v1, h2, s2, v2, h3, s3, v3,
         st->colors, &st->ncolors, True, False);
       break;
     case 8:                                            /* random smooth */
     case 9:
       st->ncolors=(random()%4)*6+12;
-      make_smooth_colormap (st->display, st->xgwa.visual, 
-        st->xgwa.colormap, st->colors, &st->ncolors, 
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual,
+        st->xgwa.colormap, st->colors, &st->ncolors,
         True, False, True);
       break;
     case 10:                                                 /* rainbow */
       st->ncolors=(random()%4)*6+12;
         True, False, True);
       break;
     case 10:                                                 /* rainbow */
       st->ncolors=(random()%4)*6+12;
-      make_uniform_colormap (st->display, st->xgwa.visual, 
-        st->xgwa.colormap, st->colors, &st->ncolors, 
+      make_uniform_colormap (st->xgwa.screen, st->xgwa.visual,
+        st->xgwa.colormap, st->colors, &st->ncolors,
         True, False, True);
       break;
     case 11:                                     /* dark to light blend */
         True, False, True);
       break;
     case 11:                                     /* dark to light blend */
@@ -401,12 +400,12 @@ _init_colors(struct state *st)
     case 13:
     case 14:
       st->ncolors=7;
     case 13:
     case 14:
       st->ncolors=7;
-      make_color_ramp_rgb(st->display, st->xgwa.colormap,
-        r1, g1, b1, 0xFFFF, 0xFFFF, 0xFFFF, 
-        tmp_col1, &st->ncolors, False, True, False);
-      make_color_ramp_rgb(st->display, st->xgwa.colormap,
-        r2, g2, b2, 0xFFFF, 0xFFFF, 0xFFFF, 
-        tmp_col2, &st->ncolors, False, True, False);
+      make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual,  st->xgwa.colormap,
+        r1, g1, b1, 0xFFFF, 0xFFFF, 0xFFFF,
+        tmp_col1, &st->ncolors, False);
+      make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual,  st->xgwa.colormap,
+        r2, g2, b2, 0xFFFF, 0xFFFF, 0xFFFF,
+        tmp_col2, &st->ncolors, False);
       if (st->cmap<13) {
         for(c1=0; c1<=4; c1++) {
            st->colors[c1*2]=tmp_col1[c1];
       if (st->cmap<13) {
         for(c1=0; c1<=4; c1++) {
            st->colors[c1*2]=tmp_col1[c1];
@@ -414,9 +413,9 @@ _init_colors(struct state *st)
         }
         st->ncolors=10;
       } else {
         }
         st->ncolors=10;
       } else {
-        make_color_ramp_rgb(st->display, st->xgwa.colormap,
-          r3, g3, b3, 0xFFFF, 0xFFFF, 0xFFFF, 
-          tmp_col3, &st->ncolors, False, True, False);
+        make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual,  st->xgwa.colormap,
+          r3, g3, b3, 0xFFFF, 0xFFFF, 0xFFFF,
+          tmp_col3, &st->ncolors, False);
         for(c1=0; c1<=4; c1++) {
            st->colors[c1*3]=tmp_col1[c1];
            st->colors[c1*3+1]=tmp_col2[c1];
         for(c1=0; c1<=4; c1++) {
            st->colors[c1*3]=tmp_col1[c1];
            st->colors[c1*3+1]=tmp_col2[c1];
@@ -427,8 +426,8 @@ _init_colors(struct state *st)
       break;
     default:                                                  /* random */
       st->ncolors=(random()%4)*6+12;
       break;
     default:                                                  /* random */
       st->ncolors=(random()%4)*6+12;
-      make_random_colormap (st->display, st->xgwa.visual, 
-        st->xgwa.colormap, st->colors, &st->ncolors, 
+      make_random_colormap (st->xgwa.screen, st->xgwa.visual,
+        st->xgwa.colormap, st->colors, &st->ncolors,
         False, True, False, True);
       break;
   }
         False, True, False, True);
       break;
   }
@@ -447,7 +446,7 @@ _init_colors(struct state *st)
 static int _comparedeo(const void *i, const void *j)
 {
         struct lineStruct *h1, *h2;
 static int _comparedeo(const void *i, const void *j)
 {
         struct lineStruct *h1, *h2;
-                                                                                
+
         h1=(struct lineStruct *)i;
         h2=(struct lineStruct *)j;
         if (h1->deo > h2->deo)
         h1=(struct lineStruct *)i;
         h2=(struct lineStruct *)j;
         if (h1->deo > h2->deo)
@@ -457,7 +456,7 @@ static int _comparedeo(const void *i, const void *j)
         return(0);
 }
 
         return(0);
 }
 
-static int 
+static int
 _hv(struct state *st, int x, int y, int d1, int d2, int pn, Bool de)
 {
   int v1, v2, r;
 _hv(struct state *st, int x, int y, int d1, int d2, int pn, Bool de)
 {
   int v1, v2, r;
@@ -495,7 +494,7 @@ _hv(struct state *st, int x, int y, int d1, int d2, int pn, Bool de)
   return(r);
 }
        
   return(r);
 }
        
-static int 
+static int
 _getdeo(struct state *st, int x, int y, int map, int de)
 {
   int cr;
 _getdeo(struct state *st, int x, int y, int map, int de)
 {
   int cr;
@@ -505,39 +504,39 @@ _getdeo(struct state *st, int x, int y, int map, int de)
     case 1:                                          /* vertical one side */
       return(y);
     case 2:                                        /* horizontal two side */
     case 1:                                          /* vertical one side */
       return(y);
     case 2:                                        /* horizontal two side */
-      return(_min(x,st->gridx-x)+1); 
+      return(_min(x,st->gridx-x)+1);
     case 3:                                          /* vertical two side */
     case 3:                                          /* vertical two side */
-      return(_min(y,st->gridy-y)+1); 
+      return(_min(y,st->gridy-y)+1);
     case 4:                                                     /* square */
       return(_max(abs(x-st->rx3[de]),abs(y-st->ry3[de]))+1);
     case 5:                                                /* two squares */
     case 4:                                                     /* square */
       return(_max(abs(x-st->rx3[de]),abs(y-st->ry3[de]))+1);
     case 5:                                                /* two squares */
-      return(_min(_max(abs(x-(st->rx3[de]/2)),abs(y-st->ry3[de])),_max(abs(x-(st->gridx-(st->rx2[de]/2))),abs(y-st->ry2[de])))+1); 
+      return(_min(_max(abs(x-(st->rx3[de]/2)),abs(y-st->ry3[de])),_max(abs(x-(st->gridx-(st->rx2[de]/2))),abs(y-st->ry2[de])))+1);
     case 6:                                       /* horizontal rectangle */
     case 6:                                       /* horizontal rectangle */
-      return(_max(abs(x-st->rx3[de]),abs(y-(st->ry3[de]))*st->cs1[de])+1); 
+      return(_max(abs(x-st->rx3[de]),abs(y-(st->ry3[de]))*st->cs1[de])+1);
     case 7:                                         /* vertical rectangle */
     case 7:                                         /* vertical rectangle */
-      return(_max(abs(x-st->rx3[de])*st->cs1[de],abs(y-(st->ry3[de])))+1); 
+      return(_max(abs(x-st->rx3[de])*st->cs1[de],abs(y-(st->ry3[de])))+1);
     case 8:                                                    /* + cross */
     case 8:                                                    /* + cross */
-      return(_min(abs(x-st->rx3[de]),abs(y-(st->ry3[de])))+1); 
+      return(_min(abs(x-st->rx3[de]),abs(y-(st->ry3[de])))+1);
     case 9:                                                   /* diagonal */
       return((x*3/4+y)+1);
     case 10:                                         /* opposite diagonal */
     case 9:                                                   /* diagonal */
       return((x*3/4+y)+1);
     case 10:                                         /* opposite diagonal */
-      return((x*3/4+st->gridy-y)+1); 
+      return((x*3/4+st->gridy-y)+1);
     case 11:                                                   /* diamond */
     case 11:                                                   /* diamond */
-      return((abs(x-st->rx3[de])+abs(y-st->ry3[de]))/2+1); 
+      return((abs(x-st->rx3[de])+abs(y-st->ry3[de]))/2+1);
     case 12:                                              /* two diamonds */
       return(_min(abs(x-(st->rx3[de]/2))+abs(y-st->ry3[de]),abs(x-(st->gridx-(st->rx2[de]/2)))+abs(y-st->ry2[de]))/2+1);
     case 13:                                                    /* circle */
     case 12:                                              /* two diamonds */
       return(_min(abs(x-(st->rx3[de]/2))+abs(y-st->ry3[de]),abs(x-(st->gridx-(st->rx2[de]/2)))+abs(y-st->ry2[de]))/2+1);
     case 13:                                                    /* circle */
-      return(_dist(st,x,st->rx3[de],y,st->ry3[de],0)+1); 
+      return(_dist(st,x,st->rx3[de],y,st->ry3[de],0)+1);
     case 14:                                        /* horizontal ellipse */
     case 14:                                        /* horizontal ellipse */
-      return(_dist(st,x,st->rx3[de],y,st->ry3[de],1)+1); 
+      return(_dist(st,x,st->rx3[de],y,st->ry3[de],1)+1);
     case 15:                                          /* vertical ellipse */
     case 15:                                          /* vertical ellipse */
-      return(_dist(st,x,st->rx3[de],y,st->ry3[de],2)+1); 
+      return(_dist(st,x,st->rx3[de],y,st->ry3[de],2)+1);
     case 16:                                               /* two circles */
     case 16:                                               /* two circles */
-      return(_min(_dist(st,x,st->rx3[de]/2,y,st->ry3[de],0),_dist(st,x,st->gridx-(st->rx2[de]/2),y,st->ry2[de],0))+1); 
+      return(_min(_dist(st,x,st->rx3[de]/2,y,st->ry3[de],0),_dist(st,x,st->gridx-(st->rx2[de]/2),y,st->ry2[de],0))+1);
     case 17:                                  /* horizontal straight wave */
       return(x+_wave(st,st->gridy+y,st->csw[0]*st->cs1[0],st->csw[0]*st->cs2[0],st->wave[de]));
     case 18:                                    /* vertical straight wave */
     case 17:                                  /* horizontal straight wave */
       return(x+_wave(st,st->gridy+y,st->csw[0]*st->cs1[0],st->csw[0]*st->cs2[0],st->wave[de]));
     case 18:                                    /* vertical straight wave */
-      return(y+_wave(st,st->gridx+x,st->csw[0]*st->cs1[0],st->csw[0]*st->cs2[0],st->wave[de])); 
+      return(y+_wave(st,st->gridx+x,st->csw[0]*st->cs1[0],st->csw[0]*st->cs2[0],st->wave[de]));
     case 19:                                     /* horizontal wavey wave */
       return(x+_wave(st,st->gridy+y+((x/5)*st->edir),st->csw[de]*st->cs1[de],st->csw[de]*st->cs2[de],st->wave[de])+1);
     case 20:                                       /* vertical wavey wave */
     case 19:                                     /* horizontal wavey wave */
       return(x+_wave(st,st->gridy+y+((x/5)*st->edir),st->csw[de]*st->cs1[de],st->csw[de]*st->cs2[de],st->wave[de])+1);
     case 20:                                       /* vertical wavey wave */
@@ -546,19 +545,19 @@ _getdeo(struct state *st, int x, int y, int map, int de)
     case 21:                                  /* simultaneous directional */
       return(_hv(st,x,y,st->cs1[0]%2,st->cs2[0]%2,1,de));
     case 22:                                       /* reverse directional */
     case 21:                                  /* simultaneous directional */
       return(_hv(st,x,y,st->cs1[0]%2,st->cs2[0]%2,1,de));
     case 22:                                       /* reverse directional */
-      return(_hv(st,x,y,st->cs1[0]%2,st->cs2[0]%2,-1,de)); 
+      return(_hv(st,x,y,st->cs1[0]%2,st->cs2[0]%2,-1,de));
     case 23:                                                    /* length */
     case 23:                                                    /* length */
-      if (de) 
-        return(st->dline[st->li].len*1000+random()%5000); 
-      else 
+      if (de)
+        return(st->dline[st->li].len*1000+random()%5000);
+      else
         return(st->eline[st->li].len*1000+random()%5000);
     case 24:                                                    /* object */
         return(st->eline[st->li].len*1000+random()%5000);
     case 24:                                                    /* object */
-    case 25:                                                    
-    case 26:                                                    
-    case 27:                                                    
-      if (de) 
-        return(st->dline[st->li].obj*100); 
-      else 
+    case 25:
+    case 26:
+    case 27:
+      if (de)
+        return(st->dline[st->li].obj*100);
+      else
         return(st->eline[st->li].obj*100);
     default:                                                     /* color */
       cr = (de) ? st->dline[st->li].color : st->eline[st->li].color;
         return(st->eline[st->li].obj*100);
     default:                                                     /* color */
       cr = (de) ? st->dline[st->li].color : st->eline[st->li].color;
@@ -578,7 +577,7 @@ _getdeo(struct state *st, int x, int y, int map, int de)
   return(1);
 }
 
   return(1);
 }
 
-static void 
+static void
 _init_screen(struct state *st)
 {
   int nstr, x;
 _init_screen(struct state *st)
 {
   int nstr, x;
@@ -606,7 +605,7 @@ _init_screen(struct state *st)
     st->zlist = calloc(st->narray, sizeof(unsigned int));
     st->fdol = calloc(st->narray, sizeof(unsigned int));
     st->odi = calloc(st->narray, sizeof(Bool));
     st->zlist = calloc(st->narray, sizeof(unsigned int));
     st->fdol = calloc(st->narray, sizeof(unsigned int));
     st->odi = calloc(st->narray, sizeof(Bool));
-    if ((st->dline == NULL) || (st->eline == NULL) || 
+    if ((st->dline == NULL) || (st->eline == NULL) ||
       (st->grid == NULL) || (st->zlist == NULL) ||
       (st->fdol == NULL) || (st->odi == NULL)) {
       fprintf(stderr, "not enough memory\n");
       (st->grid == NULL) || (st->zlist == NULL) ||
       (st->fdol == NULL) || (st->odi == NULL)) {
       fprintf(stderr, "not enough memory\n");
@@ -627,7 +626,7 @@ _init_screen(struct state *st)
     st->egridy=st->gridy;
 
     /* create new erase order */
     st->egridy=st->gridy;
 
     /* create new erase order */
-    for (st->li=1; st->li<=st->eli; st->li++) 
+    for (st->li=1; st->li<=st->eli; st->li++)
       st->eline[st->li].deo=(_getdeo(st,st->eline[st->li].x,st->eline[st->li].y,st->emap,0) + (random()%st->evar) + (random()%st->evar))*st->edir;
     qsort(st->eline, st->eli+1, sizeof(struct lineStruct), _comparedeo);
   }
       st->eline[st->li].deo=(_getdeo(st,st->eline[st->li].x,st->eline[st->li].y,st->emap,0) + (random()%st->evar) + (random()%st->evar))*st->edir;
     qsort(st->eline, st->eli+1, sizeof(struct lineStruct), _comparedeo);
   }
@@ -637,9 +636,9 @@ _init_screen(struct state *st)
   st->di=st->ei=st->fi=st->li=st->oi=st->zi=0;
   st->grid_full=False;
   /* li starts from 1 */
   st->di=st->ei=st->fi=st->li=st->oi=st->zi=0;
   st->grid_full=False;
   /* li starts from 1 */
-  st->dline[0].x=st->dline[0].y=st->dline[0].len=0; 
+  st->dline[0].x=st->dline[0].y=st->dline[0].len=0;
   /* to keep it first after sorting so di is never null */
   /* to keep it first after sorting so di is never null */
-  st->dline[0].deo=-999999999; 
+  st->dline[0].deo=-999999999;
 
   /* set random screen variables */
   st->lwid = (st->ii==1) ? 3 : 2+((random()%6)%4);
 
   /* set random screen variables */
   st->lwid = (st->ii==1) ? 3 : 2+((random()%6)%4);
@@ -647,13 +646,13 @@ _init_screen(struct state *st)
     (st->tile==TILE_OUTLINE)) ? D3D_NONE :
     (st->tile==TILE_BLOCK) ? D3D_BLOCK :
     (st->tile==TILE_NEON) ? D3D_NEON :
     (st->tile==TILE_OUTLINE)) ? D3D_NONE :
     (st->tile==TILE_BLOCK) ? D3D_BLOCK :
     (st->tile==TILE_NEON) ? D3D_NEON :
-    (st->tile==TILE_TILED) ? D3D_TILED : 
+    (st->tile==TILE_TILED) ? D3D_TILED :
     /* force TILE_D3D on first screen to properly load all shades */
     /* force TILE_D3D on first screen to properly load all shades */
-    ((st->ii==1) && (!st->newcols)) ? D3D_TILED : (random()%5)%4; 
+    ((st->ii==1) && (!st->newcols)) ? D3D_TILED : (random()%5)%4;
 /* st->d3d=D3D_BLOCK; st->lwid=2; */
   st->outline = (st->tile==TILE_OUTLINE) ? 1 :
 /* st->d3d=D3D_BLOCK; st->lwid=2; */
   st->outline = (st->tile==TILE_OUTLINE) ? 1 :
-     ((st->tile!=TILE_RANDOM) || (random()%5)) ? 0 : 1; 
-  st->round = (st->d3d==D3D_NEON) ? 1 : 
+     ((st->tile!=TILE_RANDOM) || (random()%5)) ? 0 : 1;
+  st->round = (st->d3d==D3D_NEON) ? 1 :
     ((st->d3d==D3D_BLOCK) || (st->outline) || (random()%6)) ? 0 : 1;
   if ((st->d3d) || (st->outline) || (st->round))
     st->lwid+=2;
     ((st->d3d==D3D_BLOCK) || (st->outline) || (random()%6)) ? 0 : 1;
   if ((st->d3d) || (st->outline) || (st->round))
     st->lwid+=2;
@@ -663,7 +662,7 @@ _init_screen(struct state *st)
     st->lwid++;
   if (st->tile==TILE_THIN)
     st->lwid=2;
     st->lwid++;
   if (st->tile==TILE_THIN)
     st->lwid=2;
+
   _init_zlist(st);
 
   st->maxlen=(st->lwid>6) ? 2+(random()%4) :
   _init_zlist(st);
 
   st->maxlen=(st->lwid>6) ? 2+(random()%4) :
@@ -678,10 +677,10 @@ _init_screen(struct state *st)
   st->dmap = (st->emap+5+(random()%5))%DRAWORDERS;
 
   st->dmap=20+random()%20;
   st->dmap = (st->emap+5+(random()%5))%DRAWORDERS;
 
   st->dmap=20+random()%20;
-  
+
   st->dvar = (st->dmap>22) ? 100 : 10+(st->csw[0]*(random()%5));
   st->ddir= (random()%2) ? 1 : -1;
   st->dvar = (st->dmap>22) ? 100 : 10+(st->csw[0]*(random()%5));
   st->ddir= (random()%2) ? 1 : -1;
-  
+
   st->emap = (st->dmap+10+(random()%10))%20;
   st->evar = (st->emap>22) ? 100 : 10+(st->csw[0]*(random()%5));
   st->edir= (random()%2) ? 1 : -1;
   st->emap = (st->dmap+10+(random()%10))%20;
   st->evar = (st->emap>22) ? 100 : 10+(st->csw[0]*(random()%5));
   st->edir= (random()%2) ? 1 : -1;
@@ -694,10 +693,10 @@ _init_screen(struct state *st)
     st->shape[x]=random()%SHAPES;
     st->mix[x]=random()%20;
     nstr = (st->lwid==2) ? 20+random()%12 :
     st->shape[x]=random()%SHAPES;
     st->mix[x]=random()%20;
     nstr = (st->lwid==2) ? 20+random()%12 :
-      (st->lwid==3) ? 16+random()%8 : 
-      (st->lwid==4) ? 12+random()%6 : 
-      (st->lwid==5) ? 10+random()%5 : 
-      (st->lwid==6) ? 8+random()%4 : 
+      (st->lwid==3) ? 16+random()%8 :
+      (st->lwid==4) ? 12+random()%6 :
+      (st->lwid==5) ? 10+random()%5 :
+      (st->lwid==6) ? 8+random()%4 :
         5+random()%5;
     st->csw[x] = _max(5,st->gridy/nstr);
     st->wsx[x] = (st->wsx[x]+3+(random()%3))%STRETCHES;
         5+random()%5;
     st->csw[x] = _max(5,st->gridy/nstr);
     st->wsx[x] = (st->wsx[x]+3+(random()%3))%STRETCHES;
@@ -709,7 +708,7 @@ _init_screen(struct state *st)
     st->cs3[x] = (st->dialog) ? 1+random()%3 : 2+random()%5;
     st->cs4[x] = (st->dialog) ? 1+random()%3 : 2+random()%5;
     st->wave[x]=random()%WAVES;
     st->cs3[x] = (st->dialog) ? 1+random()%3 : 2+random()%5;
     st->cs4[x] = (st->dialog) ? 1+random()%3 : 2+random()%5;
     st->wave[x]=random()%WAVES;
-    st->wavel[x]=st->csw[x]*(2+random()%6); 
+    st->wavel[x]=st->csw[x]*(2+random()%6);
     st->waveh[x]=st->csw[x]*(1+random()%3);
     st->rx1[x]=(st->gridx/10+random()%(st->gridx*8/10));
     st->ry1[x]=(st->gridy/10+random()%(st->gridy*8/10));
     st->waveh[x]=st->csw[x]*(1+random()%3);
     st->rx1[x]=(st->gridx/10+random()%(st->gridx*8/10));
     st->ry1[x]=(st->gridy/10+random()%(st->gridy*8/10));
@@ -720,7 +719,7 @@ _init_screen(struct state *st)
   }
 }
 
   }
 }
 
-static int 
+static int
 _shape(struct state *st, int x, int y, int rx, int ry, int n)
 {
   switch(st->shape[n]) {
 _shape(struct state *st, int x, int y, int rx, int ry, int n)
 {
   switch(st->shape[n]) {
@@ -738,22 +737,22 @@ _shape(struct state *st, int x, int y, int rx, int ry, int n)
     case 8:
       return(1+_dist(st,x,rx,y,ry,st->cs1[n]));
     case 9:                                      /* black hole circle */
     case 8:
       return(1+_dist(st,x,rx,y,ry,st->cs1[n]));
     case 9:                                      /* black hole circle */
-      return(1+(st->gridx*st->gridy/(1+(_dist(st,x,rx,y,ry,st->cs2[n]))))); 
+      return(1+(st->gridx*st->gridy/(1+(_dist(st,x,rx,y,ry,st->cs2[n])))));
     case 10:                                                   /* sun */
       return(1+_min(abs(x-rx)*st->gridx/(abs(y-ry)+1),abs(y-ry)*st->gridx/(abs(x-rx)+1)));
     case 11:                             /* 2 circles+inverted circle */
     case 10:                                                   /* sun */
       return(1+_min(abs(x-rx)*st->gridx/(abs(y-ry)+1),abs(y-ry)*st->gridx/(abs(x-rx)+1)));
     case 11:                             /* 2 circles+inverted circle */
-      return(1+(_dist(st,x,rx,y,ry,st->cs1[n])*_dist(st,x,(rx*3)%st->gridx,y,(ry*5)%st->gridy,st->cs1[n])/(1+_dist(st,x,(rx*4)%st->gridx,y,(ry*7)%st->gridy,st->cs1[n])))); 
+      return(1+(_dist(st,x,rx,y,ry,st->cs1[n])*_dist(st,x,(rx*3)%st->gridx,y,(ry*5)%st->gridy,st->cs1[n])/(1+_dist(st,x,(rx*4)%st->gridx,y,(ry*7)%st->gridy,st->cs1[n]))));
     case 12:                                                   /* star */
       return(1+(int)sqrt(abs((x-rx)*(y-ry))));
     case 13:                                       /* centered ellipse */
       return(1+_dist(st,x,rx,y,ry,0)+_dist(st,x,st->gridx-rx,y,st->gridy-ry,0));
     default:                                               /* triangle */
       return(1+_triangle(st,x,y,rx,ry,st->cs4[n]));
     case 12:                                                   /* star */
       return(1+(int)sqrt(abs((x-rx)*(y-ry))));
     case 13:                                       /* centered ellipse */
       return(1+_dist(st,x,rx,y,ry,0)+_dist(st,x,st->gridx-rx,y,st->gridy-ry,0));
     default:                                               /* triangle */
       return(1+_triangle(st,x,y,rx,ry,st->cs4[n]));
-  } 
+  }
   return(1+_triangle(st,x,y,rx,ry,st->cs4[n]));
 }
 
   return(1+_triangle(st,x,y,rx,ry,st->cs4[n]));
 }
 
-static int 
+static int
 _pattern(struct state *st, int x, int y, int n)
 {
   int v=0, ox;
 _pattern(struct state *st, int x, int y, int n)
 {
   int v=0, ox;
@@ -857,7 +856,7 @@ _pattern(struct state *st, int x, int y, int n)
       v=y+(y+st->csw[n]*st->cs3[n])+_wave(st,x,st->csw[n]/3*st->cs3[n],st->csw[n]/3*st->cs2[n],st->wave[n])+_wave(st,x,st->csw[n]/3*st->cs4[n],st->csw[n]/3*st->cs1[n]*3/2,st->wave[n]);
       break;
     case 19:                                          /* double vwave */
       v=y+(y+st->csw[n]*st->cs3[n])+_wave(st,x,st->csw[n]/3*st->cs3[n],st->csw[n]/3*st->cs2[n],st->wave[n])+_wave(st,x,st->csw[n]/3*st->cs4[n],st->csw[n]/3*st->cs1[n]*3/2,st->wave[n]);
       break;
     case 19:                                          /* double vwave */
-      v=x+(x+st->csw[n]*st->cs1[n])+_wave(st,y,st->csw[n]/3*st->cs1[n],st->csw[n]/3*st->cs3[n],st->wave[n])+_wave(st,y,st->csw[n]/3*st->cs2[n],st->csw[n]/3*st->cs4[n]*3/2,st->wave[n]); 
+      v=x+(x+st->csw[n]*st->cs1[n])+_wave(st,y,st->csw[n]/3*st->cs1[n],st->csw[n]/3*st->cs3[n],st->wave[n])+_wave(st,y,st->csw[n]/3*st->cs2[n],st->csw[n]/3*st->cs4[n]*3/2,st->wave[n]);
       break;
     case 20:                                                 /* one shape */
     case 21:
       break;
     case 20:                                                 /* one shape */
     case 21:
@@ -897,7 +896,7 @@ _pattern(struct state *st, int x, int y, int n)
       v=(_min(_shape(st,x, y, st->rx2[n], st->ry2[n], n),_shape(st,x, y, st->gridx-st->rx2[n], st->gridy-st->ry2[n], n)),_min(_shape(st,x, y, st->gridx-st->rx2[n], st->ry2[n], n),_shape(st,x, y, st->rx2[n], st->gridy-st->ry2[n], n)));
       break;
     case 39:                                           /* four rainbows */
       v=(_min(_shape(st,x, y, st->rx2[n], st->ry2[n], n),_shape(st,x, y, st->gridx-st->rx2[n], st->gridy-st->ry2[n], n)),_min(_shape(st,x, y, st->gridx-st->rx2[n], st->ry2[n], n),_shape(st,x, y, st->rx2[n], st->gridy-st->ry2[n], n)));
       break;
     case 39:                                           /* four rainbows */
-      v=(_min(_shape(st,x, y, st->gridx-st->rx2[n]/2, st->csw[n], n),_shape(st,x, y, st->csw[n], st->ry2[n]/2, n)),_min(_shape(st,x, y, st->rx2[n]/2, st->gridy-st->csw[n], n),_shape(st,x, y, st->gridx-st->csw[n], st->gridy-(st->ry2[n]/2), n))); 
+      v=(_min(_shape(st,x, y, st->gridx-st->rx2[n]/2, st->csw[n], n),_shape(st,x, y, st->csw[n], st->ry2[n]/2, n)),_min(_shape(st,x, y, st->rx2[n]/2, st->gridy-st->csw[n], n),_shape(st,x, y, st->gridx-st->csw[n], st->gridy-(st->ry2[n]/2), n)));
       break;
   }
   /* stretch or contract stripe */
       break;
   }
   /* stretch or contract stripe */
@@ -912,27 +911,27 @@ _pattern(struct state *st, int x, int y, int n)
   return (abs(v));
 }
 
   return (abs(v));
 }
 
-static int 
+static int
 _getcolor(struct state *st, int x, int y)
 {
   int n, cv[LAYERS];
 _getcolor(struct state *st, int x, int y)
 {
   int n, cv[LAYERS];
-  
+
   for (n=0; n<st->layers; n++) {
     cv[n]=_pattern(st,x,y,n);
                   /* first wave/shape */
   for (n=0; n<st->layers; n++) {
     cv[n]=_pattern(st,x,y,n);
                   /* first wave/shape */
-    cv[0] = (!n) ? cv[0]/st->csw[0] : 
+    cv[0] = (!n) ? cv[0]/st->csw[0] :
                     /* checkerboard+1 */
                     /* checkerboard+1 */
-      (st->mix[n]<5) ? (cv[0]*st->csw[0]+cv[n])/st->csw[n] : 
+      (st->mix[n]<5) ? (cv[0]*st->csw[0]+cv[n])/st->csw[n] :
                /* checkerboard+ncol/2 */
                /* checkerboard+ncol/2 */
-      (st->mix[n]<12) ? cv[0]+(cv[n]/st->csw[n]*st->ncolors/2) : 
+      (st->mix[n]<12) ? cv[0]+(cv[n]/st->csw[n]*st->ncolors/2) :
                            /* add mix */
                            /* add mix */
-      (st->mix[n]<16) ? cv[0]+(cv[n]/st->csw[n]) : 
+      (st->mix[n]<16) ? cv[0]+(cv[n]/st->csw[n]) :
                       /* subtract mix */
                       /* subtract mix */
-      (st->mix[n]<18) ? cv[0]-(cv[n]/st->csw[n]) : 
+      (st->mix[n]<18) ? cv[0]-(cv[n]/st->csw[n]) :
                   /* r to l morph mix */
                   /* r to l morph mix */
-      (st->mix[n]==18) ? ((cv[0]*x)+(cv[n]*(st->gridx-x)/st->csw[n]))/st->gridx : 
+      (st->mix[n]==18) ? ((cv[0]*x)+(cv[n]*(st->gridx-x)/st->csw[n]))/st->gridx :
                   /* u to d morph mix */
                   /* u to d morph mix */
-      ((cv[0]*y)+(cv[n]*(st->gridy-y)/st->csw[n]))/st->gridy; 
+      ((cv[0]*y)+(cv[n]*(st->gridy-y)/st->csw[n]))/st->gridy;
   }
   return(cv[0]);
 }
   }
   return(cv[0]);
 }
@@ -940,58 +939,58 @@ _getcolor(struct state *st, int x, int y)
 /* return value=line direction
    st->olen=open space to edge or next blocking line
    st->bln=blocking line number or -1 if edge blocks */
 /* return value=line direction
    st->olen=open space to edge or next blocking line
    st->bln=blocking line number or -1 if edge blocks */
-static int 
+static int
 _findopen(struct state *st, int x, int y, int z)
 {
   int dir, od[4], no=0;
 
 _findopen(struct state *st, int x, int y, int z)
 {
   int dir, od[4], no=0;
 
-  if (((st->grid[z].hl) || (st->grid[z].hr)) && 
-    ((st->grid[z].vu) || (st->grid[z].vd))) 
+  if (((st->grid[z].hl) || (st->grid[z].hr)) &&
+    ((st->grid[z].vu) || (st->grid[z].vd)))
     return(DIR_NONE);
     return(DIR_NONE);
-  if ((z>st->gridx) && (!st->grid[z].hl) && (!st->grid[z].hr) && 
-    (!st->grid[z-st->gridx].line)) { 
-    od[no]=DIR_UP; 
-    no++; 
+  if ((z>st->gridx) && (!st->grid[z].hl) && (!st->grid[z].hr) &&
+    (!st->grid[z-st->gridx].line)) {
+    od[no]=DIR_UP;
+    no++;
   }
   }
-  if ((z<st->gridn-st->gridx) && (!st->grid[z].hl) && 
-    (!st->grid[z].hr) && (!st->grid[z+st->gridx].line)) { 
-    od[no]=DIR_DOWN; 
-    no++; 
+  if ((z<st->gridn-st->gridx) && (!st->grid[z].hl) &&
+    (!st->grid[z].hr) && (!st->grid[z+st->gridx].line)) {
+    od[no]=DIR_DOWN;
+    no++;
   }
   }
-  if ((x) && (!st->grid[z].hl) && (!st->grid[z].hr) && 
+  if ((x) && (!st->grid[z].hl) && (!st->grid[z].hr) &&
     (!st->grid[z-1].line)) {
     (!st->grid[z-1].line)) {
-    od[no]=DIR_LEFT; 
-    no++; 
+    od[no]=DIR_LEFT;
+    no++;
   }
   }
-  if (((z+1)%st->gridx) && (!st->grid[z].hl) && (!st->grid[z].hr) && 
-    (!st->grid[z+1].line)) { 
-    od[no]=DIR_RIGHT; 
-    no++; 
+  if (((z+1)%st->gridx) && (!st->grid[z].hl) && (!st->grid[z].hr) &&
+    (!st->grid[z+1].line)) {
+    od[no]=DIR_RIGHT;
+    no++;
   }
   }
-  if (!no) 
+  if (!no)
     return(DIR_NONE);
   dir=od[random()%no];
   st->olen=st->bln=0;
   while ((st->olen<=st->maxlen) && (!st->bln)) {
     st->olen++;
     return(DIR_NONE);
   dir=od[random()%no];
   st->olen=st->bln=0;
   while ((st->olen<=st->maxlen) && (!st->bln)) {
     st->olen++;
-    if (dir==DIR_UP) 
-      st->bln = (y-st->olen<0) ? -1 : 
+    if (dir==DIR_UP)
+      st->bln = (y-st->olen<0) ? -1 :
         st->grid[z-(st->olen*st->gridx)].line;
         st->grid[z-(st->olen*st->gridx)].line;
-    if (dir==DIR_DOWN) 
-      st->bln = (y+st->olen>=st->gridy) ? -1 : 
+    if (dir==DIR_DOWN)
+      st->bln = (y+st->olen>=st->gridy) ? -1 :
         st->grid[z+(st->olen*st->gridx)].line;
         st->grid[z+(st->olen*st->gridx)].line;
-    if (dir==DIR_LEFT) 
-      st->bln = (x-st->olen<0) ? -1 : 
+    if (dir==DIR_LEFT)
+      st->bln = (x-st->olen<0) ? -1 :
         st->grid[z-st->olen].line;
         st->grid[z-st->olen].line;
-    if (dir==DIR_RIGHT) 
-      st->bln = (x+st->olen>=st->gridx) ? -1 : 
+    if (dir==DIR_RIGHT)
+      st->bln = (x+st->olen>=st->gridx) ? -1 :
         st->grid[z+st->olen].line;
   }
         st->grid[z+st->olen].line;
   }
-  st->olen--; 
+  st->olen--;
   return(dir);
 }
 
   return(dir);
 }
 
-static void 
+static void
 _fillgrid(struct state *st)
 {
   unsigned int gridc, n, add;
 _fillgrid(struct state *st)
 {
   unsigned int gridc, n, add;
@@ -1006,14 +1005,14 @@ _fillgrid(struct state *st)
       st->grid[gridc].line=st->li;
     }
     if (st->dline[st->li].hv) {
       st->grid[gridc].line=st->li;
     }
     if (st->dline[st->li].hv) {
-      if (n) 
+      if (n)
         st->grid[gridc].hr=st->li;
       if (n<st->dline[st->li].len)
         st->grid[gridc].hl=st->li;
     } else {
         st->grid[gridc].hr=st->li;
       if (n<st->dline[st->li].len)
         st->grid[gridc].hl=st->li;
     } else {
-      if (n) 
+      if (n)
         st->grid[gridc].vd=st->li;
         st->grid[gridc].vd=st->li;
-      if (n<st->dline[st->li].len) 
+      if (n<st->dline[st->li].len)
         st->grid[gridc].vu=st->li;
     }
     if (st->fi>=st->gridn) {
         st->grid[gridc].vu=st->li;
     }
     if (st->fi>=st->gridn) {
@@ -1023,7 +1022,7 @@ _fillgrid(struct state *st)
   }
 }
 
   }
 }
 
-static void 
+static void
 _newline(struct state *st)
 {
   int bl, bz, dir, lt, x, y, z;
 _newline(struct state *st)
 {
   int bl, bz, dir, lt, x, y, z;
@@ -1035,60 +1034,60 @@ _newline(struct state *st)
   st->zi++;
   dir=_findopen(st,x,y,z);
 
   st->zi++;
   dir=_findopen(st,x,y,z);
 
-  if (!st->grid[z].line) { 
+  if (!st->grid[z].line) {
   /* this is an empty space, make a new line unless nothing is open around it */
     if (dir==DIR_NONE) {
       /* nothing is open, force a len 1 branch in any direction */
   /* this is an empty space, make a new line unless nothing is open around it */
     if (dir==DIR_NONE) {
       /* nothing is open, force a len 1 branch in any direction */
-      lt=LINE_FORCE; 
-      while ((dir==DIR_NONE) || 
-        ((dir==DIR_UP) && (!y)) || 
+      lt=LINE_FORCE;
+      while ((dir==DIR_NONE) ||
+        ((dir==DIR_UP) && (!y)) ||
         ((dir==DIR_DOWN) && (y+1==st->gridy)) ||
         ((dir==DIR_DOWN) && (y+1==st->gridy)) ||
-        ((dir==DIR_LEFT) && (!x)) || 
+        ((dir==DIR_LEFT) && (!x)) ||
         ((dir==DIR_RIGHT) && (x+1==st->gridx))) {
           dir=random()%4;
       }
       bz = (dir==DIR_UP) ? z-st->gridx : (dir==DIR_DOWN) ? z+st->gridx : (dir==DIR_LEFT) ? z-1 : z+1;
       bl = st->grid[bz].line;
         ((dir==DIR_RIGHT) && (x+1==st->gridx))) {
           dir=random()%4;
       }
       bz = (dir==DIR_UP) ? z-st->gridx : (dir==DIR_DOWN) ? z+st->gridx : (dir==DIR_LEFT) ? z-1 : z+1;
       bl = st->grid[bz].line;
-    } else if ((st->bnratio>1) && (st->bln>0) && 
-      (st->olen<st->maxlen) && (random()%st->bnratio)) { 
+    } else if ((st->bnratio>1) && (st->bln>0) &&
+      (st->olen<st->maxlen) && (random()%st->bnratio)) {
       /* branch into blocking line */
       /* branch into blocking line */
-      lt=LINE_BRIN; 
+      lt=LINE_BRIN;
       bl = st->bln;
       bl = st->bln;
-    } else { 
+    } else {
       /* make a new line and new object */
       /* make a new line and new object */
-      lt=LINE_NEW; 
+      lt=LINE_NEW;
       st->oi++;
       st->oi++;
-    }  
-  } else { 
+    }
+  } else {
     /* this is a filled space, make a branch unless nothing is open around it */
     /* this is a filled space, make a branch unless nothing is open around it */
-    if (dir==DIR_NONE) 
+    if (dir==DIR_NONE)
       return;
     /* make a branch out of this line */
       return;
     /* make a branch out of this line */
-    lt=LINE_BROUT; 
+    lt=LINE_BROUT;
     bl=st->grid[z].line;
   }
   st->li++;
     bl=st->grid[z].line;
   }
   st->li++;
-  st->dline[st->li].len = (lt==LINE_FORCE) ? 1 :  (lt==LINE_BRIN) ? 
+  st->dline[st->li].len = (lt==LINE_FORCE) ? 1 :  (lt==LINE_BRIN) ?
     st->olen+1 : (!st->forcemax) ? st->olen : 1+random()%st->olen;
   st->dline[st->li].x=x;
     st->olen+1 : (!st->forcemax) ? st->olen : 1+random()%st->olen;
   st->dline[st->li].x=x;
-  if (dir==DIR_LEFT) 
+  if (dir==DIR_LEFT)
     st->dline[st->li].x-=st->dline[st->li].len;
   st->dline[st->li].y=y;
     st->dline[st->li].x-=st->dline[st->li].len;
   st->dline[st->li].y=y;
-  if (dir==DIR_UP) 
+  if (dir==DIR_UP)
     st->dline[st->li].y-=st->dline[st->li].len;
     st->dline[st->li].y-=st->dline[st->li].len;
-  st->dline[st->li].hv = ((dir==DIR_LEFT) || (dir==DIR_RIGHT)) ? 
+  st->dline[st->li].hv = ((dir==DIR_LEFT) || (dir==DIR_RIGHT)) ?
     True : False;
     True : False;
-  st->dline[st->li].obj = (lt==LINE_NEW) ? st->oi : 
+  st->dline[st->li].obj = (lt==LINE_NEW) ? st->oi :
     st->dline[bl].obj;
     st->dline[bl].obj;
-  st->dline[st->li].color = (lt==LINE_NEW) ? 
+  st->dline[st->li].color = (lt==LINE_NEW) ?
     (_getcolor(st,x,y))%st->ncolors : st->dline[bl].color;
     (_getcolor(st,x,y))%st->ncolors : st->dline[bl].color;
-  st->dline[st->li].deo=(_getdeo(st,x,y,st->dmap,1) + 
+  st->dline[st->li].deo=(_getdeo(st,x,y,st->dmap,1) +
     (random()%st->dvar) + (random()%st->dvar))*st->ddir;
   st->dline[st->li].ndol=0;
   _fillgrid(st);
 }
 
     (random()%st->dvar) + (random()%st->dvar))*st->ddir;
   st->dline[st->li].ndol=0;
   _fillgrid(st);
 }
 
-static void 
+static void
 _create_screen(struct state *st)
 {
   while(!st->grid_full)
 _create_screen(struct state *st)
 {
   while(!st->grid_full)
@@ -1096,18 +1095,18 @@ _create_screen(struct state *st)
   qsort(st->dline, st->li+1, sizeof(struct lineStruct), _comparedeo);
 /*st->lpu=st->li/20/((6-st->speed)*3);
   Used to use a computed lpu, lines per update to control draw speed
   qsort(st->dline, st->li+1, sizeof(struct lineStruct), _comparedeo);
 /*st->lpu=st->li/20/((6-st->speed)*3);
   Used to use a computed lpu, lines per update to control draw speed
-  draw 1/lpu of the lines before each XSync which takes a split second 
+  draw 1/lpu of the lines before each XSync which takes a split second
   the higher the lpu, the quicker the screen draws.  This worked somewhat
   after the 4->5 update, however with the Mac updating so much more slowly,
   values tuned for it draw the screen in a blink on Linux.  Therefore we
   draw 1/200th of the screen with each update and sleep, if necessary */
   the higher the lpu, the quicker the screen draws.  This worked somewhat
   after the 4->5 update, however with the Mac updating so much more slowly,
   values tuned for it draw the screen in a blink on Linux.  Therefore we
   draw 1/200th of the screen with each update and sleep, if necessary */
-  st->lpu = (st->dialog) ? st->li/50 : st->li/200;   
+  st->lpu = (st->dialog) ? st->li/50 : st->li/200;
   if (!st->lpu) st->lpu = 1;
   st->bi=1;
   st->mode=MODE_ERASE;
 }
 
   if (!st->lpu) st->lpu = 1;
   st->bi=1;
   st->mode=MODE_ERASE;
 }
 
-static void 
+static void
 _fill_outline(struct state *st, int di)
 {
   int x, y, h, w;
 _fill_outline(struct state *st, int di)
 {
   int x, y, h, w;
@@ -1120,13 +1119,13 @@ _fill_outline(struct state *st, int di)
     w=(st->dline[di].len+1)*st->lwid-3;
     h=st->lwid-3;
   } else {
     w=(st->dline[di].len+1)*st->lwid-3;
     h=st->lwid-3;
   } else {
-    w=st->lwid-3; 
+    w=st->lwid-3;
     h=(st->dline[di].len+1)*st->lwid-3;
   }
   XFillRectangle (st->display, st->window, st->bgc, x, y, w, h);
 }
 
     h=(st->dline[di].len+1)*st->lwid-3;
   }
   XFillRectangle (st->display, st->window, st->bgc, x, y, w, h);
 }
 
-static void 
+static void
 _XFillRectangle(struct state *st, int di, int adj)
 {
   int a, b, x, y, w, h;
 _XFillRectangle(struct state *st, int di, int adj)
 {
   int a, b, x, y, w, h;
@@ -1137,7 +1136,7 @@ _XFillRectangle(struct state *st, int di, int adj)
     w=(st->dline[di].len+1)*st->lwid-1;
     h=st->lwid-1;
   } else {
     w=(st->dline[di].len+1)*st->lwid-1;
     h=st->lwid-1;
   } else {
-    w=st->lwid-1; 
+    w=st->lwid-1;
     h=(st->dline[di].len+1)*st->lwid-1;
   }
   switch (st->d3d) {
     h=(st->dline[di].len+1)*st->lwid-1;
   }
   switch (st->d3d) {
@@ -1154,25 +1153,25 @@ _XFillRectangle(struct state *st, int di, int adj)
       h-=st->lwid/2-1;
     break;
   }
       h-=st->lwid/2-1;
     break;
   }
-  if (!st->round) { 
+  if (!st->round) {
     XFillRectangle(st->display, st->window, st->fgc, x, y, w, h);
   } else {
     if (h<st->lwid) {                                   /* horizontal */
       a=(h-1)/2;
       for (b=0; b<=a; b++)
     XFillRectangle(st->display, st->window, st->fgc, x, y, w, h);
   } else {
     if (h<st->lwid) {                                   /* horizontal */
       a=(h-1)/2;
       for (b=0; b<=a; b++)
-        XFillRectangle(st->display, st->window, st->fgc, 
+        XFillRectangle(st->display, st->window, st->fgc,
           x+b, y+a-b, w-b*2, h-((a-b)*2));
     } else {                                               /* vertical */
       a=(w-1)/2;
       for (b=0; b<=a; b++)
           x+b, y+a-b, w-b*2, h-((a-b)*2));
     } else {                                               /* vertical */
       a=(w-1)/2;
       for (b=0; b<=a; b++)
-        XFillRectangle(st->display, st->window, st->fgc, 
+        XFillRectangle(st->display, st->window, st->fgc,
           x+a-b, y+b, w-((a-b)*2), h-b*2);
     }
   }
 }
 
           x+a-b, y+b, w-((a-b)*2), h-b*2);
     }
   }
 }
 
-static void 
-_XFillTriangle(struct state *st, int color, int x1, int y1, int x2, int y2, 
+static void
+_XFillTriangle(struct state *st, int color, int x1, int y1, int x2, int y2,
   int x3, int y3)
 {
   XPoint points[3];
   int x3, int y3)
 {
   XPoint points[3];
@@ -1184,12 +1183,12 @@ _XFillTriangle(struct state *st, int color, int x1, int y1, int x2, int y2,
   points[2].x=x3;
   points[2].y=y3;
   XSetForeground(st->display, st->fgc, st->colors[color].pixel);
   points[2].x=x3;
   points[2].y=y3;
   XSetForeground(st->display, st->fgc, st->colors[color].pixel);
-  XFillPolygon (st->display, st->window, st->fgc, points, 3, Convex, 
+  XFillPolygon (st->display, st->window, st->fgc, points, 3, Convex,
       CoordModeOrigin);
 }
 
       CoordModeOrigin);
 }
 
-static void 
-_XFillPolygon4(struct state *st, int color, int x1, int y1, int x2, int y2, 
+static void
+_XFillPolygon4(struct state *st, int color, int x1, int y1, int x2, int y2,
   int x3, int y3, int x4, int y4)
 {
   XPoint points[4];
   int x3, int y3, int x4, int y4)
 {
   XPoint points[4];
@@ -1203,11 +1202,11 @@ _XFillPolygon4(struct state *st, int color, int x1, int y1, int x2, int y2,
   points[3].x=x4;
   points[3].y=y4;
   XSetForeground(st->display, st->fgc, st->colors[color].pixel);
   points[3].x=x4;
   points[3].y=y4;
   XSetForeground(st->display, st->fgc, st->colors[color].pixel);
-  XFillPolygon (st->display, st->window, st->fgc, points, 4, Convex, 
+  XFillPolygon (st->display, st->window, st->fgc, points, 4, Convex,
       CoordModeOrigin);
 }
 
       CoordModeOrigin);
 }
 
-static void 
+static void
 _draw_tiled(struct state *st, int color)
 {
   int a, c, d, x, y, z, m1, m2, lr, nl, w, h;
 _draw_tiled(struct state *st, int color)
 {
   int a, c, d, x, y, z, m1, m2, lr, nl, w, h;
@@ -1223,26 +1222,26 @@ _draw_tiled(struct state *st, int color)
     if (st->dline[st->di].hv) {
       x = (st->dline[st->di].x+c)*st->lwid;
       y = st->dline[st->di].y*st->lwid;
     if (st->dline[st->di].hv) {
       x = (st->dline[st->di].x+c)*st->lwid;
       y = st->dline[st->di].y*st->lwid;
-      if (c) 
+      if (c)
         st->grid[z].dhr=st->di;
         st->grid[z].dhr=st->di;
-      if (c<st->dline[st->di].len) 
+      if (c<st->dline[st->di].len)
         st->grid[z].dhl=st->di;
     } else {
       x = st->dline[st->di].x*st->lwid;
       y = (st->dline[st->di].y+c)*st->lwid;
         st->grid[z].dhl=st->di;
     } else {
       x = st->dline[st->di].x*st->lwid;
       y = (st->dline[st->di].y+c)*st->lwid;
-      if (c) 
+      if (c)
         st->grid[z].dvd=st->di;
         st->grid[z].dvd=st->di;
-      if (c<st->dline[st->di].len) 
+      if (c<st->dline[st->di].len)
         st->grid[z].dvu=st->di;
     }
     d=0;
         st->grid[z].dvu=st->di;
     }
     d=0;
-    if (st->grid[z].dhl) 
+    if (st->grid[z].dhl)
       d+=8;
       d+=8;
-    if (st->grid[z].dhr) 
+    if (st->grid[z].dhr)
       d+=4;
       d+=4;
-    if (st->grid[z].dvu) 
+    if (st->grid[z].dvu)
       d+=2;
       d+=2;
-    if (st->grid[z].dvd) 
+    if (st->grid[z].dvd)
       d++;
     /* draw line base */
     switch (d) {
       d++;
     /* draw line base */
     switch (d) {
@@ -1255,13 +1254,13 @@ _draw_tiled(struct state *st, int color)
       case 11:
       case 15:
         h = ((d==1) || (d==5)) ? lr : nl;
       case 11:
       case 15:
         h = ((d==1) || (d==5)) ? lr : nl;
-        XSetForeground(st->display, st->fgc, 
+        XSetForeground(st->display, st->fgc,
           st->colors[color].pixel);
           st->colors[color].pixel);
-        XFillRectangle (st->display, st->window, st->fgc, 
+        XFillRectangle (st->display, st->window, st->fgc,
           x, y, m2, h);
           x, y, m2, h);
-        XSetForeground(st->display, st->fgc, 
+        XSetForeground(st->display, st->fgc,
            st->colors[color+3].pixel);
            st->colors[color+3].pixel);
-        XFillRectangle (st->display, st->window, st->fgc, 
+        XFillRectangle (st->display, st->window, st->fgc,
           x+m2, y, m1, h);
         break;
       case 4:
           x+m2, y, m1, h);
         break;
       case 4:
@@ -1272,13 +1271,13 @@ _draw_tiled(struct state *st, int color)
       case 13:
       case 14:
         w = (d==4) ? lr : nl;
       case 13:
       case 14:
         w = (d==4) ? lr : nl;
-        XSetForeground(st->display, st->fgc, 
+        XSetForeground(st->display, st->fgc,
           st->colors[color+1].pixel);
           st->colors[color+1].pixel);
-        XFillRectangle (st->display, st->window, st->fgc, 
+        XFillRectangle (st->display, st->window, st->fgc,
           x, y, w, m2);
           x, y, w, m2);
-        XSetForeground(st->display, st->fgc, 
+        XSetForeground(st->display, st->fgc,
            st->colors[color+2].pixel);
            st->colors[color+2].pixel);
-        XFillRectangle (st->display, st->window, st->fgc, 
+        XFillRectangle (st->display, st->window, st->fgc,
           x, y+m2, w, m1);
         break;
     }
           x, y+m2, w, m1);
         break;
     }
@@ -1339,7 +1338,7 @@ _draw_tiled(struct state *st, int color)
   }
 }
 
   }
 }
 
-static long 
+static long
 _mselapsed(struct state *st)
 {
   struct timeval t;
 _mselapsed(struct state *st)
 {
   struct timeval t;
@@ -1349,7 +1348,7 @@ _mselapsed(struct state *st)
   return ((long)t.tv_sec*1000000+t.tv_usec);
 }
 
   return ((long)t.tv_sec*1000000+t.tv_usec);
 }
 
-static void 
+static void
 _draw_lines(struct state *st)
 {
   int n, z, a, color, sh, di;
 _draw_lines(struct state *st)
 {
   int n, z, a, color, sh, di;
@@ -1366,7 +1365,7 @@ _draw_lines(struct state *st)
         st->dline[st->di].ndol=st->fdol[st->dline[st->di].obj];
         st->fdol[st->dline[st->di].obj]=st->di;
         for (sh=0; sh<st->lwid/2; sh++) {
         st->dline[st->di].ndol=st->fdol[st->dline[st->di].obj];
         st->fdol[st->dline[st->di].obj]=st->di;
         for (sh=0; sh<st->lwid/2; sh++) {
-          XSetForeground(st->display, st->fgc, 
+          XSetForeground(st->display, st->fgc,
             st->colors[color+sh].pixel);
           di=st->di;
           while(di>0) {
             st->colors[color+sh].pixel);
           di=st->di;
           while(di>0) {
@@ -1379,7 +1378,7 @@ _draw_lines(struct state *st)
         st->dline[st->di].ndol=st->fdol[st->dline[st->di].obj];
         st->fdol[st->dline[st->di].obj]=st->di;
         for (sh=0; sh<st->lwid/2; sh++) {
         st->dline[st->di].ndol=st->fdol[st->dline[st->di].obj];
         st->fdol[st->dline[st->di].obj]=st->di;
         for (sh=0; sh<st->lwid/2; sh++) {
-          XSetForeground(st->display, st->fgc, 
+          XSetForeground(st->display, st->fgc,
             st->colors[color+(st->lwid/2)-sh-1].pixel);
           di=st->di;
           while(di>0) {
             st->colors[color+(st->lwid/2)-sh-1].pixel);
           di=st->di;
           while(di>0) {
@@ -1403,14 +1402,14 @@ _draw_lines(struct state *st)
             _fill_outline(st, st->grid[z].dvu);
             _fill_outline(st, st->grid[z].dvd);
             if (st->dline[st->di].hv) {
             _fill_outline(st, st->grid[z].dvu);
             _fill_outline(st, st->grid[z].dvd);
             if (st->dline[st->di].hv) {
-              if (n) 
+              if (n)
                 st->grid[z].dhr=st->di;
                 st->grid[z].dhr=st->di;
-              if (n<st->dline[st->di].len) 
+              if (n<st->dline[st->di].len)
                 st->grid[z].dhl=st->di;
             } else {
                 st->grid[z].dhl=st->di;
             } else {
-              if (n) 
+              if (n)
                 st->grid[z].dvd=st->di;
                 st->grid[z].dvd=st->di;
-              if (n<st->dline[st->di].len) 
+              if (n<st->dline[st->di].len)
                 st->grid[z].dvu=st->di;
             }
             z+=a;
                 st->grid[z].dvu=st->di;
             }
             z+=a;
@@ -1427,25 +1426,25 @@ _draw_lines(struct state *st)
   }
 }
 
   }
 }
 
-static void 
+static void
 _erase_lines(struct state *st)
 {
   if (!st->ii)
     return;
   for (st->di=st->bi; st->di<_min(st->eli+1,st->bi+st->elpu); st->di++) {
     if (st->eline[st->di].hv) {
 _erase_lines(struct state *st)
 {
   if (!st->ii)
     return;
   for (st->di=st->bi; st->di<_min(st->eli+1,st->bi+st->elpu); st->di++) {
     if (st->eline[st->di].hv) {
-      XFillRectangle (st->display, st->window, st->bgc, 
-      st->eline[st->di].x*st->elwid, 
+      XFillRectangle (st->display, st->window, st->bgc,
+      st->eline[st->di].x*st->elwid,
       st->eline[st->di].y*st->elwid,
       (st->eline[st->di].len+1)*st->elwid, st->elwid);
     } else {
       st->eline[st->di].y*st->elwid,
       (st->eline[st->di].len+1)*st->elwid, st->elwid);
     } else {
-      XFillRectangle (st->display, st->window, st->bgc, 
-      st->eline[st->di].x*st->elwid, 
+      XFillRectangle (st->display, st->window, st->bgc,
+      st->eline[st->di].x*st->elwid,
       st->eline[st->di].y*st->elwid,
       st->elwid, (st->eline[st->di].len+1)*st->elwid);
     }
     if (st->di==st->eli) /* clear just in case */
       st->eline[st->di].y*st->elwid,
       st->elwid, (st->eline[st->di].len+1)*st->elwid);
     }
     if (st->di==st->eli) /* clear just in case */
-      XFillRectangle(st->display, st->window, st->bgc, 0, 0, 
+      XFillRectangle(st->display, st->window, st->bgc, 0, 0,
         st->xgwa.width, st->xgwa.height);
   }
   if (st->di>st->eli) {
         st->xgwa.width, st->xgwa.height);
   }
   if (st->di>st->eli) {
@@ -1493,7 +1492,7 @@ abstractile_init(Display *display, Window window)
 
   /* get screen size and create Graphics Contexts */
   XGetWindowAttributes (display, window, &st->xgwa);
 
   /* get screen size and create Graphics Contexts */
   XGetWindowAttributes (display, window, &st->xgwa);
-  gcv.foreground = get_pixel_resource(display, st->xgwa.colormap, 
+  gcv.foreground = get_pixel_resource(display, st->xgwa.colormap,
       "foreground", "Foreground");
   st->fgc = XCreateGC (display, window, GCForeground, &gcv);
   gcv.foreground = get_pixel_resource(display, st->xgwa.colormap,
       "foreground", "Foreground");
   st->fgc = XCreateGC (display, window, GCForeground, &gcv);
   gcv.foreground = get_pixel_resource(display, st->xgwa.colormap,
@@ -1513,12 +1512,12 @@ abstractile_init(Display *display, Window window)
   return st;
 }
 
   return st;
 }
 
-static unsigned long 
+static unsigned long
 abstractile_draw (Display *dpy, Window window, void *closure)
 {
   struct state *st = (struct state *) closure;
   int mse, usleep;
 abstractile_draw (Display *dpy, Window window, void *closure)
 {
   struct state *st = (struct state *) closure;
   int mse, usleep;
+
   gettimeofday(&st->time, NULL);
 
   /* If the window is too small, do nothing, sorry! */
   gettimeofday(&st->time, NULL);
 
   /* If the window is too small, do nothing, sorry! */
@@ -1538,9 +1537,9 @@ abstractile_draw (Display *dpy, Window window, void *closure)
   }
   mse=_mselapsed(st);
   usleep = ((!st->ii) && (st->mode==MODE_CREATE)) ?  0 :
   }
   mse=_mselapsed(st);
   usleep = ((!st->ii) && (st->mode==MODE_CREATE)) ?  0 :
-      (st->mode==MODE_CREATE) ?  st->sleep*1000000-mse : 
+      (st->mode==MODE_CREATE) ?  st->sleep*1000000-mse :
       /* speed=0-5, goal is 10,8,6,4,2,0 sec normal and 5,4,3,2,1,0 dialog */
       /* speed=0-5, goal is 10,8,6,4,2,0 sec normal and 5,4,3,2,1,0 dialog */
-      (5-st->speed)*(2-st->dialog)*100000/st->lpu-mse; 
+      (5-st->speed)*(2-st->dialog)*100000/st->lpu-mse;
   if (usleep>=0)
       return usleep;
   return 0;
   if (usleep>=0)
       return usleep;
   return 0;
index f69e0967f1354a29cb592eae9b2f16c4651f7e11..27af01303fec8266c7cafaf95f4cabac39a8d3f0 100644 (file)
@@ -211,7 +211,8 @@ anemone_init (Display *disp, Window window)
   st->ncolors = get_integer_resource (st->dpy, "colors", "Colors");
   st->ncolors += 3;
   st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
   st->ncolors = get_integer_resource (st->dpy, "colors", "Colors");
   st->ncolors += 3;
   st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
-  make_smooth_colormap (st->dpy, wa.visual, st->cmap, st->colors, &st->ncolors,
+  make_smooth_colormap (wa.screen, wa.visual, st->cmap,
+                        st->colors, &st->ncolors,
                         True, 0, True);
 
   st->gcDraw = XCreateGC(st->dpy, window, 0, &st->gcv);
                         True, 0, True);
 
   st->gcDraw = XCreateGC(st->dpy, window, 0, &st->gcv);
index 1f3a859d84de052d4f33ba0f78a911665e177625..50f35348566189649de37857af8a438fd25ddfda 100644 (file)
@@ -379,7 +379,8 @@ anemotaxis_init (Display *disp, Window win)
   st->ncolors = get_integer_resource (st->dpy, "colors", "Colors");
   st->ncolors++;
   st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
   st->ncolors = get_integer_resource (st->dpy, "colors", "Colors");
   st->ncolors++;
   st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
-  make_random_colormap (st->dpy, wa.visual, wa.colormap, st->colors, &st->ncolors,
+  make_random_colormap (wa.screen, wa.visual, wa.colormap,
+                        st->colors, &st->ncolors,
                         True, True, 0, True);
 
   st->delay = get_integer_resource(st->dpy, "delay", "Integer");
                         True, True, 0, True);
 
   st->delay = get_integer_resource(st->dpy, "delay", "Integer");
index 0e1508ff1ad514e1a0ca064ab9f58df78634df81..ef21995b2ce9cf85db2ab808f8a0aa9fff79cddf 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1998-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1998-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -1778,7 +1778,8 @@ apple2_reshape (Display *dpy, Window window, void *closure,
                  unsigned int w, unsigned int h)
 {
   struct state *st = (struct state *) closure;
                  unsigned int w, unsigned int h)
 {
   struct state *st = (struct state *) closure;
-  analogtv_reconfigure (st->sim->dec);
+  if (st->sim)
+    analogtv_reconfigure (st->sim->dec);
 }
 
 static Bool
 }
 
 static Bool
@@ -1786,7 +1787,8 @@ apple2_event (Display *dpy, Window window, void *closure, XEvent *event)
 {
   struct state *st = (struct state *) closure;
 
 {
   struct state *st = (struct state *) closure;
 
-  if (st->controller == terminal_controller &&
+  if (st->sim &&
+      st->controller == terminal_controller &&
       event->xany.type == KeyPress) {
     terminal_keypress_handler (dpy, event, st->sim->controller_data);
     return True;
       event->xany.type == KeyPress) {
     terminal_keypress_handler (dpy, event, st->sim->controller_data);
     return True;
index ea85f9ad15066faa8f282cbfd7ae1bfc8187eaf9..c841b001bc28e4db4c8064aeac25d7ccd736bb73 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -11,8 +11,8 @@
 
 /* Simulation of a pair of quasi-gravitational fields, maybe sorta kinda
    a little like the strong and weak electromagnetic forces.  Derived from
 
 /* Simulation of a pair of quasi-gravitational fields, maybe sorta kinda
    a little like the strong and weak electromagnetic forces.  Derived from
-   a Lispm screensaver by John Pezaris <pz@mit.edu>.  Mouse control and
-   viscosity added by "Philip Edward Cutone, III" <pc2d+@andrew.cmu.edu>.
+   a Lispm screensaver by John Pezaris <pz@mit.edu>.  Viscosity added by
+   Philip Edward Cutone, III <pc2d+@andrew.cmu.edu>.
 
    John sez:
 
 
    John sez:
 
@@ -135,12 +135,11 @@ struct state {
   int color_shift;
   int xlim, ylim;
   Bool no_erase_yet; /* for tail mode fix */
   int color_shift;
   int xlim, ylim;
   Bool no_erase_yet; /* for tail mode fix */
-
-  /*flip mods for mouse interaction*/
-  Bool mouse_p;
-  int mouse_x, mouse_y, mouse_mass, root_x, root_y;
   double viscosity;
 
   double viscosity;
 
+  int mouse_ball;      /* index of ball being dragged, or 0 if none. */
+  unsigned long mouse_pixel;
+
   enum object_mode mode;
   enum graph_mode graph_mode;
 
   enum object_mode mode;
   enum graph_mode graph_mode;
 
@@ -210,11 +209,6 @@ attraction_init (Display *dpy, Window window)
   st->color_shift = get_integer_resource (dpy, "colorShift", "Integer");
   if (st->color_shift <= 0) st->color_shift = 5;
 
   st->color_shift = get_integer_resource (dpy, "colorShift", "Integer");
   if (st->color_shift <= 0) st->color_shift = 5;
 
-  /*flip mods for mouse interaction*/
-  st->mouse_p = get_boolean_resource (dpy, "mouse", "Boolean");
-  st->mouse_mass = get_integer_resource (dpy, "mouseSize", "Integer");
-  st->mouse_mass =  st->mouse_mass *  st->mouse_mass *10;
-
   st->viscosity = get_float_resource (dpy, "viscosity", "Float");
 
   mode_str = get_string_resource (dpy, "mode", "Mode");
   st->viscosity = get_float_resource (dpy, "viscosity", "Float");
 
   mode_str = get_string_resource (dpy, "mode", "Mode");
@@ -281,14 +275,16 @@ attraction_init (Display *dpy, Window window)
              double S2 = 1.00;
              double V = frand(0.25) + 0.75;
              st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
              double S2 = 1.00;
              double V = frand(0.25) + 0.75;
              st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
-             make_color_ramp (dpy, cmap, H, S1, V, H, S2, V, st->colors, &st->ncolors,
+             make_color_ramp (xgwa.screen, xgwa.visual, cmap,
+                               H, S1, V, H, S2, V, st->colors, &st->ncolors,
                               False, True, False);
            }
          else
            {
              st->ncolors = st->npoints;
              st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
                               False, True, False);
            }
          else
            {
              st->ncolors = st->npoints;
              st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
-             make_random_colormap (dpy, xgwa.visual, cmap, st->colors, &st->ncolors,
+             make_random_colormap (xgwa.screen, xgwa.visual, cmap, 
+                                    st->colors, &st->ncolors,
                                    True, True, False, True);
            }
          break;
                                    True, True, False, True);
            }
          break;
@@ -298,7 +294,8 @@ attraction_init (Display *dpy, Window window)
        case spline_filled_mode:
        case tail_mode:
          st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
        case spline_filled_mode:
        case tail_mode:
          st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
-         make_smooth_colormap (dpy, xgwa.visual, cmap, st->colors, &st->ncolors,
+         make_smooth_colormap (xgwa.screen, xgwa.visual, cmap,
+                                st->colors, &st->ncolors,
                                True, False, True);
          break;
        default:
                                True, False, True);
          break;
        default:
@@ -313,6 +310,10 @@ attraction_init (Display *dpy, Window window)
       mono_p = True;
     }
 
       mono_p = True;
     }
 
+  st->mouse_pixel =
+    get_pixel_resource (dpy, cmap, "mouseForeground", "MouseForeground");
+  st->mouse_ball = -1;
+
   if (st->mode != ball_mode)
     {
       int size = (st->segments ? st->segments : 1);
   if (st->mode != ball_mode)
     {
       int size = (st->segments ? st->segments : 1);
@@ -459,28 +460,6 @@ compute_force (struct state *st, int i, double *dx_ret, double *dy_ret)
          *dy_ret += (frand (10.0) - 5.0);
        }
     }
          *dy_ret += (frand (10.0) - 5.0);
        }
     }
-
-  if (st->mouse_p)
-    {
-      x_dist = st->mouse_x - st->balls [i].x;
-      y_dist = st->mouse_y - st->balls [i].y;
-      dist2 = (x_dist * x_dist) + (y_dist * y_dist);
-      dist = sqrt (dist2);
-       
-      if (dist > 0.1) /* the balls are not overlapping */
-       {
-         double new_acc = ((st->mouse_mass / dist2) *
-                           ((dist < st->threshold) ? -1.0 : 1.0));
-         double new_acc_dist = new_acc / dist;
-         *dx_ret += new_acc_dist * x_dist;
-         *dy_ret += new_acc_dist * y_dist;
-       }
-      else
-       {               /* the balls are overlapping; move randomly */
-         *dx_ret += (frand (10.0) - 5.0);
-         *dy_ret += (frand (10.0) - 5.0);
-       }
-    }
 }
 
 
 }
 
 
@@ -621,15 +600,33 @@ draw_meter_speed (Display *dpy, Window window, struct state *st, int i)
   XDrawRectangle(dpy,window,st->draw_gc, x2,y,w2,h);
 }
 
   XDrawRectangle(dpy,window,st->draw_gc, x2,y,w2,h);
 }
 
+/* Returns the position of the mouse relative to the root window.
+ */
+static void
+query_mouse (Display *dpy, Window win, int *x, int *y)
+{
+  Window root1, child1;
+  int mouse_x, mouse_y, root_x, root_y;
+  unsigned int mask;
+  if (XQueryPointer (dpy, win, &root1, &child1,
+                     &root_x, &root_y, &mouse_x, &mouse_y, &mask))
+    {
+      *x = mouse_x;
+      *y = mouse_y;
+    }
+  else
+    {
+      *x = -9999;
+      *y = -9999;
+    }
+}
+
 static unsigned long
 attraction_draw (Display *dpy, Window window, void *closure)
 {
   struct state *st = (struct state *) closure;
   int last_point_stack_fp = st->point_stack_fp;
   
 static unsigned long
 attraction_draw (Display *dpy, Window window, void *closure)
 {
   struct state *st = (struct state *) closure;
   int last_point_stack_fp = st->point_stack_fp;
   
-  Window root1, child1;  /*flip mods for mouse interaction*/
-  unsigned int mask;
-
   int i, radius = st->global_size/2;
 
   st->total_ticks++;
   int i, radius = st->global_size/2;
 
   st->total_ticks++;
@@ -671,12 +668,6 @@ attraction_draw (Display *dpy, Window window, void *closure)
 
     }
 
 
     }
 
-  if (st->mouse_p)
-    {
-      XQueryPointer(dpy, window, &root1, &child1,
-                   &st->root_x, &st->root_y, &st->mouse_x, &st->mouse_y, &mask);
-    }
-
   /* compute the force of attraction/repulsion among all balls */
   for (i = 0; i < st->npoints; i++)
     compute_force (st, i, &st->balls[i].dx, &st->balls[i].dy);
   /* compute the force of attraction/repulsion among all balls */
   for (i = 0; i < st->npoints; i++)
     compute_force (st, i, &st->balls[i].dx, &st->balls[i].dy);
@@ -688,6 +679,7 @@ attraction_draw (Display *dpy, Window window, void *closure)
       double old_y = st->balls[i].y;
       double new_x, new_y;
       int size = st->balls[i].size;
       double old_y = st->balls[i].y;
       double new_x, new_y;
       int size = st->balls[i].size;
+
       st->balls[i].vx += st->balls[i].dx;
       st->balls[i].vy += st->balls[i].dy;
 
       st->balls[i].vx += st->balls[i].dx;
       st->balls[i].vy += st->balls[i].dy;
 
@@ -789,6 +781,21 @@ attraction_draw (Display *dpy, Window window, void *closure)
                 }
             }
         }
                 }
             }
         }
+
+      if (i == st->mouse_ball)
+        {
+          int x, y;
+          query_mouse (dpy, window, &x, &y);
+         if (st->mode == ball_mode)
+            {
+              x -= st->balls[i].size / 2;
+              y -= st->balls[i].size / 2;
+            }
+
+          st->balls[i].x = x;
+          st->balls[i].y = y;
+        }
+
       new_x = st->balls[i].x;
       new_y = st->balls[i].y;
 
       new_x = st->balls[i].x;
       new_y = st->balls[i].y;
 
@@ -813,7 +820,9 @@ attraction_draw (Display *dpy, Window window, void *closure)
                  st->balls[i].pixel_index = (st->ncolors * s);
                }
              XSetForeground (dpy, st->draw_gc,
                  st->balls[i].pixel_index = (st->ncolors * s);
                }
              XSetForeground (dpy, st->draw_gc,
-                             st->colors[st->balls[i].pixel_index].pixel);
+                              (i == st->mouse_ball
+                               ? st->mouse_pixel
+                               : st->colors[st->balls[i].pixel_index].pixel));
            }
        }
 
            }
        }
 
@@ -967,6 +976,53 @@ attraction_reshape (Display *dpy, Window window, void *closure,
 static Bool
 attraction_event (Display *dpy, Window window, void *closure, XEvent *event)
 {
 static Bool
 attraction_event (Display *dpy, Window window, void *closure, XEvent *event)
 {
+  struct state *st = (struct state *) closure;
+
+  if (event->xany.type == ButtonPress)
+    {
+      int i;
+      if (st->mouse_ball != -1)  /* second down-click?  drop the ball. */
+        {
+          st->mouse_ball = -1;
+          return True;
+        }
+      else
+        {
+          /* When trying to pick up a ball, first look for a click directly
+             inside the ball; but if we don't find it, expand the radius
+             outward until we find something nearby.
+           */
+          int x = event->xbutton.x;
+          int y = event->xbutton.y;
+          float max = 10 * (st->global_size ? st->global_size : MAX_SIZE);
+          float step = max / 100;
+          float r2;
+          for (r2 = step; r2 < max; r2 += step)
+            {
+              for (i = 0; i < st->npoints; i++)
+                {
+                  float d = ((st->balls[i].x - x) * (st->balls[i].x - x) +
+                             (st->balls[i].y - y) * (st->balls[i].y - y));
+                  float r = st->balls[i].size;
+                  if (r2 > r) r = r2;
+                  if (d < r*r)
+                    {
+                      st->mouse_ball = i;
+                      return True;
+                    }
+                }
+            }
+        }
+      return True;
+    }
+  else if (event->xany.type == ButtonRelease)   /* drop the ball */
+    {
+      st->mouse_ball = -1;
+      return True;
+    }
+
+
+
   return False;
 }
 
   return False;
 }
 
@@ -999,11 +1055,9 @@ static const char *attraction_defaults [] = {
   "*threshold: 200",
   "*delay:     10000",
   "*glow:      false",
   "*threshold: 200",
   "*delay:     10000",
   "*glow:      false",
-  "*mouseSize: 10",
   "*walls:     true",
   "*maxspeed:  true",
   "*cbounce:   true",
   "*walls:     true",
   "*maxspeed:  true",
   "*cbounce:   true",
-  "*mouse:     false",
   "*viscosity: 1.0",
   "*orbit:     false",
   "*colorShift:        3",
   "*viscosity: 1.0",
   "*orbit:     false",
   "*colorShift:        3",
@@ -1012,6 +1066,10 @@ static const char *attraction_defaults [] = {
   "*radius:    0",
   "*vx:                0",
   "*vy:                0",
   "*radius:    0",
   "*vx:                0",
   "*vy:                0",
+  "*mouseForeground: white",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
@@ -1029,10 +1087,7 @@ static XrmOptionDescRec attraction_options [] = {
   { "-vx",             ".vx",          XrmoptionSepArg, 0 },
   { "-vy",             ".vy",          XrmoptionSepArg, 0 },
   { "-vmult",          ".vMult",       XrmoptionSepArg, 0 },
   { "-vx",             ".vx",          XrmoptionSepArg, 0 },
   { "-vy",             ".vy",          XrmoptionSepArg, 0 },
   { "-vmult",          ".vMult",       XrmoptionSepArg, 0 },
-  { "-mouse-size",     ".mouseSize",   XrmoptionSepArg, 0 },
   { "-viscosity",      ".viscosity",   XrmoptionSepArg, 0 },
   { "-viscosity",      ".viscosity",   XrmoptionSepArg, 0 },
-  { "-mouse",          ".mouse",       XrmoptionNoArg, "true" },
-  { "-nomouse",                ".mouse",       XrmoptionNoArg, "false" },
   { "-glow",           ".glow",        XrmoptionNoArg, "true" },
   { "-noglow",         ".glow",        XrmoptionNoArg, "false" },
   { "-orbit",          ".orbit",       XrmoptionNoArg, "true" },
   { "-glow",           ".glow",        XrmoptionNoArg, "true" },
   { "-noglow",         ".glow",        XrmoptionNoArg, "false" },
   { "-orbit",          ".orbit",       XrmoptionNoArg, "true" },
index a0a9779a922a516b8ac32abab7043d70c43d3fff..66303553e15be428ac724591f8b2cf4d018a11b6 100644 (file)
@@ -23,7 +23,7 @@ attraction - interactions of opposing forces
 [\-size \fIint\fP] [\-segments \fIint\fP] [\-delay \fIusecs\fP]
 [\-color-shift \fIint\fP] [\-radius \fIint\fP]
 [\-vx \fIint\fP] [\-vy \fIint\fP] [\-glow] [\-noglow]
 [\-size \fIint\fP] [\-segments \fIint\fP] [\-delay \fIusecs\fP]
 [\-color-shift \fIint\fP] [\-radius \fIint\fP]
 [\-vx \fIint\fP] [\-vy \fIint\fP] [\-glow] [\-noglow]
-[\-orbit] [\-viscosity \fIfloat\fP] [\-mouse] [\-no-mouse] [\-mouse-size]
+[\-orbit] [\-viscosity \fIfloat\fP]
 [\-walls] [\-nowalls] [\-maxspeed] [\-nomaxspeed]
 [\-correct-bounce] [\-fast-bounce]
 [\-fps]
 [\-walls] [\-nowalls] [\-maxspeed] [\-nomaxspeed]
 [\-correct-bounce] [\-fast-bounce]
 [\-fps]
@@ -145,23 +145,10 @@ aren't interesting; lower values cause less motion.
 
 One interesting thing to try is
 .EX
 
 One interesting thing to try is
 .EX
-attraction -viscosity 0.8 -points 75 \\
-  -mouse -geometry =500x500
+attraction -viscosity 0.8 -points 300 -size 10 -geometry =500x500
 .EE
 Give it a few seconds to settle down into a stable clump, and then move
 .EE
 Give it a few seconds to settle down into a stable clump, and then move
-the mouse through it to make "waves".
-.TP 8
-.B \-mouse
-This will cause the mouse to be considered a control point; it will not be
-drawn, but it will influence the other points, so you can wave the mouse
-and influence the images being created.
-.TP 8
-.B \-no-mouse
-Turns off \fB\-mouse\fP.
-.TP 8
-.B \-mouse-size integer
-In \fB\-mouse\fP mode, this sets the mass of the mouse (analogously to the
-\fB\-size\fP parameter.)
+the drag the mouse through it to make "waves".
 .TP 8
 .B \-nowalls
 This will cause the balls to continue on past the edge of the
 .TP 8
 .B \-nowalls
 This will cause the balls to continue on past the edge of the
@@ -221,7 +208,7 @@ made about the suitability of this software for any purpose.  It is provided
 .SH AUTHOR
 Jamie Zawinski <jwz@jwz.org>, 13-aug-92.
 
 .SH AUTHOR
 Jamie Zawinski <jwz@jwz.org>, 13-aug-92.
 
-Viscosity and mouse support by Philip Edward Cutone, III.
+Viscosity support by Philip Edward Cutone, III.
 
 Walls, speed limit options, new bouncing, graphs, and tail mode fix by
 Matthew Strait. 31 March 2001
 
 Walls, speed limit options, new bouncing, graphs, and tail mode fix by
 Matthew Strait. 31 March 2001
index 1449e1153a8907de59e9f7f8e52ce8d4ff2ed499..080a277b77933cbd1178f353302eb26c868f84a1 100644 (file)
@@ -1129,6 +1129,9 @@ static const char *blaster_defaults [] = {
   "*move_stars_x: 2",
   "*move_stars_y: 1",
   "*move_stars_random: 0",
   "*move_stars_x: 2",
   "*move_stars_y: 1",
   "*move_stars_random: 0",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 82661ab028777bb665b17c06bdeaba7ee3e20eae..83f9bd4c8e5a29682ab0525be2c32cc9448a67c4 100644 (file)
@@ -416,6 +416,9 @@ static const char *blitspin_defaults [] = {
   "*duration:  120",
   "*bitmap:    (default)",
   "*geometry:  512x512",
   "*duration:  120",
   "*bitmap:    (default)",
   "*geometry:  512x512",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 081ba4851c57dc286b35fd16bce13c3a0e2c91ad..d7be5a0f61b23de742d9df45494eae79904d5299 100644 (file)
@@ -84,7 +84,8 @@ static const char sccsid[] = "@(#)bouboule.c  4.00 97/01/01 xlockmore";
                                        "*left3d:               blue    \n"                     \
                                        "*both3d:               magenta \n"                     \
                                        "*none3d:               black   \n"                     \
                                        "*left3d:               blue    \n"                     \
                                        "*both3d:               magenta \n"                     \
                                        "*none3d:               black   \n"                     \
-                                       "*fpsSolid:             true    \n"
+                                       "*fpsSolid:             true    \n"                     \
+                                       "*ignoreRotation: True  \n"
 
 # define SMOOTH_COLORS
 # define bouboule_handle_event 0
 
 # define SMOOTH_COLORS
 # define bouboule_handle_event 0
index 5daa72cb982f64eca9745a1a079a49140117eb93..3c811ca00b75b3b11c1b9216a476d1e1e94e0a86 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2005-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2005-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -70,7 +70,7 @@ reset_boxes (state *st)
   st->color_horiz_p = random() & 1;
 
   if (st->done_once && st->colors)
   st->color_horiz_p = random() & 1;
 
   if (st->done_once && st->colors)
-    free_colors (st->dpy, st->xgwa.colormap, st->colors, st->ncolors);
+    free_colors (st->xgwa.screen, st->xgwa.colormap, st->colors, st->ncolors);
 
   if (!st->done_once)
     {
 
   if (!st->done_once)
     {
@@ -121,7 +121,7 @@ reset_boxes (state *st)
     {
       st->ncolors = get_integer_resource (st->dpy, "colors", "Colors");  /* re-get */
       if (st->ncolors < 1) st->ncolors = 1;
     {
       st->ncolors = get_integer_resource (st->dpy, "colors", "Colors");  /* re-get */
       if (st->ncolors < 1) st->ncolors = 1;
-      make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                             st->colors, &st->ncolors, True, 0, False);
       if (st->ncolors < 1) abort();
       XClearWindow (st->dpy, st->window);
                             st->colors, &st->ncolors, True, 0, False);
       if (st->ncolors < 1) abort();
       XClearWindow (st->dpy, st->window);
@@ -531,6 +531,9 @@ static const char *boxfit_defaults [] = {
   "*peek:                 False",
   "*grabDesktopImages:     False",   /* HAVE_COCOA */
   "*chooseRandomImages:    True",    /* HAVE_COCOA */
   "*peek:                 False",
   "*grabDesktopImages:     False",   /* HAVE_COCOA */
   "*chooseRandomImages:    True",    /* HAVE_COCOA */
+#ifdef USE_IPHONE
+  "*ignoreRotation:       True",
+#endif
   0
 };
 
   0
 };
 
index 9ba52c1489275ea9c29b168cfc02705041b7f574..c73b89d785e039b4051394e480c4356498197f81 100644 (file)
@@ -38,6 +38,7 @@ static const char sccsid[] = "@(#)braid.c     5.00 2000/11/01 xlockmore";
                                   "*size: -7 \n" \
                                   "*ncolors: 64 \n" \
                                   "*fpsSolid: true \n" \
                                   "*size: -7 \n" \
                                   "*ncolors: 64 \n" \
                                   "*fpsSolid: true \n" \
+                                  "*ignoreRotation: True" \
 
 # define UNIFORM_COLORS
 # define braid_handle_event 0
 
 # define UNIFORM_COLORS
 # define braid_handle_event 0
index c65d46f0c507f73248e714d5a01a18b54d009e25..71754d14f6275e540fac45e1bafcc197249416dc 100644 (file)
@@ -30,6 +30,7 @@
 
 
 #include <math.h>
 
 
 #include <math.h>
+#include <stdint.h>
 #include "screenhack.h"
 
 #ifdef HAVE_XSHM_EXTENSION
 #include "screenhack.h"
 
 #ifdef HAVE_XSHM_EXTENSION
 /* #define VERBOSE */
 #define RANDOM() ((int) (random() & 0X7FFFFFFFL))
 
 /* #define VERBOSE */
 #define RANDOM() ((int) (random() & 0X7FFFFFFFL))
 
-typedef signed char            int8_;
-typedef unsigned char  uint8_;
-typedef short                  int16_;
-typedef unsigned short uint16_;
-typedef long                   int32_;
-typedef unsigned long  uint32_;
 typedef unsigned char  BOOL;
 
 
 typedef unsigned char  BOOL;
 
 
@@ -68,6 +63,9 @@ static const char *bumps_defaults [] = {
 #ifdef HAVE_XSHM_EXTENSION
   "*useSHM:            True",
 #endif /* HAVE_XSHM_EXTENSION */
 #ifdef HAVE_XSHM_EXTENSION
   "*useSHM:            True",
 #endif /* HAVE_XSHM_EXTENSION */
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
@@ -91,9 +89,9 @@ static XrmOptionDescRec bumps_options [] = {
  * a member of TBumps. */
 typedef struct
 {
  * a member of TBumps. */
 typedef struct
 {
-       uint8_ *aLightMap;
-       uint16_ nFalloffDiameter, nFalloffRadius;
-       uint16_ nLightDiameter, nLightRadius;
+       uint8_t *aLightMap;
+       uint16_t nFalloffDiameter, nFalloffRadius;
+       uint16_t nLightDiameter, nLightRadius;
        float nAccelX, nAccelY;
        float nAccelMax;
        float nVelocityX, nVelocityY;
        float nAccelX, nAccelY;
        float nAccelMax;
        float nVelocityX, nVelocityY;
@@ -112,17 +110,17 @@ typedef struct
         Pixmap source;
        GC GraphicsContext;
        XColor *xColors;
         Pixmap source;
        GC GraphicsContext;
        XColor *xColors;
-       uint32_ *aColors;
+       unsigned long *aColors;
        XImage *pXImage;
 #ifdef HAVE_XSHM_EXTENSION
        XShmSegmentInfo XShmInfo;
        Bool    bUseShm;
 #endif /* HAVE_XSHM_EXTENSION */
 
        XImage *pXImage;
 #ifdef HAVE_XSHM_EXTENSION
        XShmSegmentInfo XShmInfo;
        Bool    bUseShm;
 #endif /* HAVE_XSHM_EXTENSION */
 
-       uint8_ nColorCount;                             /* Number of colors used. */
-       uint8_ bytesPerPixel;
-       uint16_ iWinWidth, iWinHeight;
-       uint16_ *aBumpMap;                              /* The actual bump map. */
+       uint8_t nColorCount;                            /* Number of colors used. */
+       uint8_t bytesPerPixel;
+       uint16_t iWinWidth, iWinHeight;
+       uint16_t *aBumpMap;                             /* The actual bump map. */
        SSpotLight SpotLight;
 
         int delay;
        SSpotLight SpotLight;
 
         int delay;
@@ -142,37 +140,37 @@ static void SoftenBumpMap( SBumps * );
 
 
 /* This function pointer will point to the appropriate PutPixel*() function below. */
 
 
 /* This function pointer will point to the appropriate PutPixel*() function below. */
-static void (*MyPutPixel)( int8_ *, uint32_ );
+static void (*MyPutPixel)( int8_t *, uint32_t );
 
 
-static void PutPixel32( int8_ *pData, uint32_ pixel )
+static void PutPixel32( int8_t *pData, uint32_t pixel )
 {
 {
-       *(uint32_ *)pData = pixel;
+       *(uint32_t *)pData = pixel;
 }
 
 }
 
-static void PutPixel24( int8_ *pData, uint32_ pixel )
+static void PutPixel24( int8_t *pData, uint32_t pixel )
 {
        pData[ 2 ] = ( pixel & 0x00FF0000 ) >> 16;
        pData[ 1 ] = ( pixel & 0x0000FF00 ) >> 8;
        pData[ 0 ] = ( pixel & 0x000000FF );
 }
 
 {
        pData[ 2 ] = ( pixel & 0x00FF0000 ) >> 16;
        pData[ 1 ] = ( pixel & 0x0000FF00 ) >> 8;
        pData[ 0 ] = ( pixel & 0x000000FF );
 }
 
-static void PutPixel16( int8_ *pData, uint32_ pixel )
+static void PutPixel16( int8_t *pData, uint32_t pixel )
 {
 {
-       *(uint16_ *)pData = (uint16_)pixel;
+       *(uint16_t *)pData = (uint16_t)pixel;
 }
 
 }
 
-static void PutPixel8( int8_ *pData, uint32_ pixel )
+static void PutPixel8( int8_t *pData, uint32_t pixel )
 {
 {
-       *(uint8_ *)pData = (uint8_)pixel;
+       *(uint8_t *)pData = (uint8_t)pixel;
 }
 
 /* Creates the light map, which is a circular image... going from black around the edges
  * to white in the center. */
 }
 
 /* Creates the light map, which is a circular image... going from black around the edges
  * to white in the center. */
-static void CreateSpotLight( SSpotLight *pSpotLight, uint16_ iDiameter, uint16_ nColorCount )
+static void CreateSpotLight( SSpotLight *pSpotLight, uint16_t iDiameter, uint16_t nColorCount )
 {
        double nDist;
 {
        double nDist;
-       int16_ iDistX, iDistY;
-       uint8_ *pLOffset;
+       int16_t iDistX, iDistY;
+       uint8_t *pLOffset;
        
        pSpotLight->nFalloffDiameter = iDiameter;
        pSpotLight->nFalloffRadius = pSpotLight->nFalloffDiameter / 2;
        
        pSpotLight->nFalloffDiameter = iDiameter;
        pSpotLight->nFalloffRadius = pSpotLight->nFalloffDiameter / 2;
@@ -183,7 +181,7 @@ static void CreateSpotLight( SSpotLight *pSpotLight, uint16_ iDiameter, uint16_
        printf( "%s: Spot Light Diameter: %d\n", progclass, pSpotLight->nLightDiameter );
 #endif
 
        printf( "%s: Spot Light Diameter: %d\n", progclass, pSpotLight->nLightDiameter );
 #endif
 
-       pSpotLight->aLightMap = malloc( pSpotLight->nLightDiameter * pSpotLight->nLightDiameter * sizeof(uint8_) );
+       pSpotLight->aLightMap = malloc( pSpotLight->nLightDiameter * pSpotLight->nLightDiameter * sizeof(uint8_t) );
 
        pLOffset = pSpotLight->aLightMap;
        for( iDistY=-pSpotLight->nLightRadius; iDistY<pSpotLight->nLightRadius; ++iDistY )
 
        pLOffset = pSpotLight->aLightMap;
        for( iDistY=-pSpotLight->nLightRadius; iDistY<pSpotLight->nLightRadius; ++iDistY )
@@ -192,7 +190,7 @@ static void CreateSpotLight( SSpotLight *pSpotLight, uint16_ iDiameter, uint16_
                {
                        nDist = sqrt( pow( iDistX+0.5F, 2 ) + pow( iDistY+0.5F, 2 ) );
                        if( nDist / pSpotLight->nLightRadius <= 1.0f )
                {
                        nDist = sqrt( pow( iDistX+0.5F, 2 ) + pow( iDistY+0.5F, 2 ) );
                        if( nDist / pSpotLight->nLightRadius <= 1.0f )
-                               *pLOffset = (uint8_)(nColorCount - ( ( nDist / pSpotLight->nLightRadius ) * ( nColorCount - 1 ) ));
+                               *pLOffset = (uint8_t)(nColorCount - ( ( nDist / pSpotLight->nLightRadius ) * ( nColorCount - 1 ) ));
                        else
                                *pLOffset = 0;
 
                        else
                                *pLOffset = 0;
 
@@ -251,8 +249,8 @@ static void CreateBumps( SBumps *pBumps, Display *dpy, Window NewWin )
 {
        XWindowAttributes XWinAttribs;
        XGCValues GCValues;
 {
        XWindowAttributes XWinAttribs;
        XGCValues GCValues;
-       int32_ nGCFlags;
-       uint16_ iDiameter;
+       int32_t nGCFlags;
+       uint16_t iDiameter;
 
        /* Make size and velocity a function of window size, so it appears the same at 100x60 as it does in 3200x1200. */
        XGetWindowAttributes( dpy, NewWin, &XWinAttribs );
 
        /* Make size and velocity a function of window size, so it appears the same at 100x60 as it does in 3200x1200. */
        XGetWindowAttributes( dpy, NewWin, &XWinAttribs );
@@ -291,7 +289,7 @@ static void CreateBumps( SBumps *pBumps, Display *dpy, Window NewWin )
        {
                pBumps->pXImage = XCreateImage( pBumps->dpy, XWinAttribs.visual, XWinAttribs.depth, 
                                                                        ZPixmap, 0, NULL, iDiameter, iDiameter, BitmapPad( pBumps->dpy ), 0 );
        {
                pBumps->pXImage = XCreateImage( pBumps->dpy, XWinAttribs.visual, XWinAttribs.depth, 
                                                                        ZPixmap, 0, NULL, iDiameter, iDiameter, BitmapPad( pBumps->dpy ), 0 );
-               pBumps->pXImage->data = malloc( pBumps->pXImage->bytes_per_line * pBumps->pXImage->height * sizeof(int8_) );
+               pBumps->pXImage->data = malloc( pBumps->pXImage->bytes_per_line * pBumps->pXImage->height * sizeof(int8_t) );
        }
 
        /* For speed, access the XImage data directly using my own PutPixel routine. */
        }
 
        /* For speed, access the XImage data directly using my own PutPixel routine. */
@@ -347,7 +345,7 @@ static void SetPalette(Display *dpy, SBumps *pBumps, XWindowAttributes *pXWinAtt
        XColor BaseColor;
        XColor Color;
        char *sColor;                   /* Spotlight Color */
        XColor BaseColor;
        XColor Color;
        char *sColor;                   /* Spotlight Color */
-       int16_ iColor;
+       int16_t iColor;
        
        sColor = get_string_resource(dpy,  "color", "Color" );
 
        
        sColor = get_string_resource(dpy,  "color", "Color" );
 
@@ -374,7 +372,7 @@ static void SetPalette(Display *dpy, SBumps *pBumps, XWindowAttributes *pXWinAtt
        if( pBumps->nColorCount < 2 )   pBumps->nColorCount = 2;
        if( pBumps->nColorCount > 128 ) pBumps->nColorCount = 128;
 
        if( pBumps->nColorCount < 2 )   pBumps->nColorCount = 2;
        if( pBumps->nColorCount > 128 ) pBumps->nColorCount = 128;
 
-       pBumps->aColors = malloc( pBumps->nColorCount * sizeof(uint32_ ) );
+       pBumps->aColors = malloc( pBumps->nColorCount * sizeof(unsigned long) );
 
        /* Creates a phong shade:                 / BaseColor  \                               Index/ColorCount 
         *                                                      PhongShade = | ------------ | Index + ( 65535 - BaseColor )^ 
 
        /* Creates a phong shade:                 / BaseColor  \                               Index/ColorCount 
         *                                                      PhongShade = | ------------ | Index + ( 65535 - BaseColor )^ 
@@ -382,15 +380,15 @@ static void SetPalette(Display *dpy, SBumps *pBumps, XWindowAttributes *pXWinAtt
        pBumps->nColorCount--;
        for( iColor=0; iColor<=pBumps->nColorCount; iColor++ )
        {
        pBumps->nColorCount--;
        for( iColor=0; iColor<=pBumps->nColorCount; iColor++ )
        {
-               Color.red   = (uint16_)( ( ( BaseColor.red   / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.red,   iColor/(double)pBumps->nColorCount ) );
-               Color.green = (uint16_)( ( ( BaseColor.green / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.green, iColor/(double)pBumps->nColorCount ) );
-               Color.blue  = (uint16_)( ( ( BaseColor.blue  / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.blue,  iColor/(double)pBumps->nColorCount ) );
+               Color.red   = (uint16_t)( ( ( BaseColor.red   / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.red,   iColor/(double)pBumps->nColorCount ) );
+               Color.green = (uint16_t)( ( ( BaseColor.green / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.green, iColor/(double)pBumps->nColorCount ) );
+               Color.blue  = (uint16_t)( ( ( BaseColor.blue  / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.blue,  iColor/(double)pBumps->nColorCount ) );
 
                if( !XAllocColor( pBumps->dpy, pXWinAttribs->colormap, &Color ) )
                {
                        XFreeColors( pBumps->dpy, pXWinAttribs->colormap, pBumps->aColors, iColor, 0 );
                        free( pBumps->aColors );
 
                if( !XAllocColor( pBumps->dpy, pXWinAttribs->colormap, &Color ) )
                {
                        XFreeColors( pBumps->dpy, pXWinAttribs->colormap, pBumps->aColors, iColor, 0 );
                        free( pBumps->aColors );
-                       pBumps->aColors = malloc( pBumps->nColorCount * sizeof(uint32_) );
+                       pBumps->aColors = malloc( pBumps->nColorCount * sizeof(unsigned long) );
                        pBumps->nColorCount--;
                        iColor = -1;
                }
                        pBumps->nColorCount--;
                        iColor = -1;
                }
@@ -424,11 +422,11 @@ static void InitBumpMap_2(Display *dpy, SBumps *pBumps)
 {
        XImage *pScreenImage;
        XColor *pColor;
 {
        XImage *pScreenImage;
        XColor *pColor;
-       uint8_ nSoften;
-       uint16_ iWidth, iHeight;
-       uint32_ nAverager;
-       uint16_ *pBump;
-       uint16_ maxHeight;
+       uint8_t nSoften;
+       uint16_t iWidth, iHeight;
+       uint32_t nAverager;
+       uint16_t        *pBump;
+       uint16_t maxHeight;
        double softenMultiplier = 1.0f;
        BOOL bInvert = (BOOL)get_boolean_resource(dpy,  "invert", "Boolean" );
     XWindowAttributes XWinAttribs;
        double softenMultiplier = 1.0f;
        BOOL bInvert = (BOOL)get_boolean_resource(dpy,  "invert", "Boolean" );
     XWindowAttributes XWinAttribs;
@@ -446,7 +444,7 @@ static void InitBumpMap_2(Display *dpy, SBumps *pBumps)
        XClearWindow (pBumps->dpy, pBumps->Win);
        XSync (pBumps->dpy, 0);
 
        XClearWindow (pBumps->dpy, pBumps->Win);
        XSync (pBumps->dpy, 0);
 
-       pBumps->aBumpMap = malloc( pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_) );
+       pBumps->aBumpMap = malloc( pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_t) );
        
        nSoften = get_integer_resource(dpy,  "soften", "Integer" );
        while( nSoften-- )
        
        nSoften = get_integer_resource(dpy,  "soften", "Integer" );
        while( nSoften-- )
@@ -510,10 +508,10 @@ static void InitBumpMap_2(Display *dpy, SBumps *pBumps)
  */
 static void SoftenBumpMap( SBumps *pBumps )
 {
  */
 static void SoftenBumpMap( SBumps *pBumps )
 {
-       uint16_ *pOffset, *pTOffset;
-       uint32_ nHeight;
-       uint32_ iWidth, iHeight;
-       uint16_ *aTempBuffer = malloc( pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_) );
+       uint16_t *pOffset, *pTOffset;
+       uint32_t nHeight;
+       uint32_t iWidth, iHeight;
+       uint16_t *aTempBuffer = malloc( pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_t) );
 
        pOffset = pBumps->aBumpMap;
        pTOffset = aTempBuffer;
 
        pOffset = pBumps->aBumpMap;
        pTOffset = aTempBuffer;
@@ -539,7 +537,7 @@ static void SoftenBumpMap( SBumps *pBumps )
                }
        }                                               
 
                }
        }                                               
 
-       memcpy( pBumps->aBumpMap, aTempBuffer, pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_) );
+       memcpy( pBumps->aBumpMap, aTempBuffer, pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_t) );
        free( aTempBuffer );
 }
 
        free( aTempBuffer );
 }
 
@@ -547,14 +545,14 @@ static void SoftenBumpMap( SBumps *pBumps )
 /* This is where we slap down some pixels... */
 static void Execute( SBumps *pBumps )
 {
 /* This is where we slap down some pixels... */
 static void Execute( SBumps *pBumps )
 {
-       int32_ nLightXPos, nLightYPos;
-       int32_ iScreenX, iScreenY;
-       int32_ iLightX, iLightY;
-       uint16_ *pBOffset;
-       int8_ *pDOffset;
-       int32_ nX, nY;
-       uint16_ nColor;
-       int32_ nLightOffsetFar = pBumps->SpotLight.nFalloffDiameter - pBumps->SpotLight.nLightRadius;
+       int32_t nLightXPos, nLightYPos;
+       int32_t iScreenX, iScreenY;
+       int32_t iLightX, iLightY;
+       uint16_t *pBOffset;
+       int8_t *pDOffset;
+       int32_t nX, nY;
+       uint16_t nColor;
+       int32_t nLightOffsetFar = pBumps->SpotLight.nFalloffDiameter - pBumps->SpotLight.nLightRadius;
 
        CalcLightPos( pBumps );
        
 
        CalcLightPos( pBumps );
        
@@ -569,7 +567,7 @@ static void Execute( SBumps *pBumps )
 
     /* warning: pointer targets in assignment differ in signedness
        Should pDOffset be a int8?  I can't tell.  -jwz, 22-Jul-2003 */
 
     /* warning: pointer targets in assignment differ in signedness
        Should pDOffset be a int8?  I can't tell.  -jwz, 22-Jul-2003 */
-               pDOffset = (int8_ *) &pBumps->pXImage->data[ (iLightY+pBumps->SpotLight.nLightRadius) * pBumps->pXImage->bytes_per_line ];
+               pDOffset = (int8_t *) &pBumps->pXImage->data[ (iLightY+pBumps->SpotLight.nLightRadius) * pBumps->pXImage->bytes_per_line ];
                pBOffset = pBumps->aBumpMap + ( iScreenY * pBumps->iWinWidth ) + nLightXPos;
                for( iScreenX=nLightXPos, iLightX=-pBumps->SpotLight.nLightRadius; iLightX<nLightOffsetFar; ++iScreenX, ++iLightX, ++pBOffset, pDOffset+=pBumps->bytesPerPixel )
                {
                pBOffset = pBumps->aBumpMap + ( iScreenY * pBumps->iWinWidth ) + nLightXPos;
                for( iScreenX=nLightXPos, iLightX=-pBumps->SpotLight.nLightRadius; iLightX<nLightOffsetFar; ++iScreenX, ++iLightX, ++pBOffset, pDOffset+=pBumps->bytesPerPixel )
                {
@@ -659,7 +657,7 @@ bumps_init (Display *dpy, Window Win)
 
 #ifdef VERBOSE
        time_t Time = time( NULL );
 
 #ifdef VERBOSE
        time_t Time = time( NULL );
-       uint16_ iFrame = 0;
+       uint16_t iFrame = 0;
 #endif  /*  VERBOSE */
        
        CreateBumps( Bumps, dpy, Win );
 #endif  /*  VERBOSE */
        
        CreateBumps( Bumps, dpy, Win );
index 6f547bea4f51ed2b46849d14e64455081a86364a..d17bda5e895ad6a4aa3dd3191d8330007c9ce17c 100644 (file)
@@ -701,7 +701,8 @@ ccurve_init (Display *dpy, Window window)
     st->context = XCreateGC (st->dpy, st->window, GCForeground | GCBackground,
                         &values);
     st->color_count = MAXIMUM_COLOR_COUNT;
     st->context = XCreateGC (st->dpy, st->window, GCForeground | GCBackground,
                         &values);
     st->color_count = MAXIMUM_COLOR_COUNT;
-    make_color_loop (st->dpy, st->color_map,
+    make_color_loop (hack_attributes.screen, hack_attributes.visual,
+                     st->color_map,
                     0,   1, 1,
                     120, 1, 1,
                     240, 1, 1,
                     0,   1, 1,
                     120, 1, 1,
                     240, 1, 1,
@@ -842,6 +843,9 @@ static const char *ccurve_defaults [] =
     ".delay:      3",
     ".pause:      0.4",
     ".limit: 200000",
     ".delay:      3",
     ".pause:      0.4",
     ".limit: 200000",
+#ifdef USE_IPHONE
+    "*ignoreRotation: True",
+#endif
     0
 };
 
     0
 };
 
index e9cef13eb4ab77d8f9ef77c4c5b33312b05af796..0bf241c2285599b3b6591c7eb45fdd7c43a4c344 100644 (file)
@@ -838,6 +838,9 @@ static const char *celtic_defaults[] = {
     "*delay: 10000",
     "*delay2: 5",
     "*showGraph: False",
     "*delay: 10000",
     "*delay2: 5",
     "*showGraph: False",
+#ifdef USE_IPHONE
+    "*ignoreRotation: True",
+#endif
     0
 };
 
     0
 };
 
@@ -919,10 +922,10 @@ celtic_init (Display *d_arg, Window w_arg)
   else
     {
 #if 0
   else
     {
 #if 0
-      make_random_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                             st->colors, &st->ncolors, True, True, 0, True);
 #else
                             st->colors, &st->ncolors, True, True, 0, True);
 #else
-      make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                             st->colors, &st->ncolors, True, 0, True);
 #endif
       if (st->ncolors < 2)
                             st->colors, &st->ncolors, True, 0, True);
 #endif
       if (st->ncolors < 2)
@@ -979,7 +982,7 @@ celtic_draw (Display *dpy, Window window, void *closure)
     /* recolor each time */
     st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer");
     if (st->ncolors > 2)
     /* recolor each time */
     st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer");
     if (st->ncolors > 2)
-      make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                             st->colors, &st->ncolors, True, 0, True);
 
     st->eraser = erase_window (st->dpy, st->window, st->eraser);
                             st->colors, &st->ncolors, True, 0, True);
 
     st->eraser = erase_window (st->dpy, st->window, st->eraser);
index 911b99be27bd8d2c6581a5e5e59d8faed492bed8..4e848ef56619183dfac07b399e05ff390c49a643 100644 (file)
@@ -302,7 +302,8 @@ cloudlife_init (Display *dpy, Window window)
 
     if (st->cycle_colors) {
         st->colors = (XColor *) xrealloc(st->colors, sizeof(XColor) * (st->ncolors+1));
 
     if (st->cycle_colors) {
         st->colors = (XColor *) xrealloc(st->colors, sizeof(XColor) * (st->ncolors+1));
-        make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors,
+        make_smooth_colormap (st->xgwa.screen, st->xgwa.visual,
+                              st->xgwa.colormap, st->colors, &st->ncolors,
                               True, &tmp, True);
     }
 
                               True, &tmp, True);
     }
 
@@ -397,6 +398,9 @@ static const char *cloudlife_defaults[] = {
     "*maxAge:          64",
     "*initialDensity:  30",
     "*cellSize:                3",
     "*maxAge:          64",
     "*initialDensity:  30",
     "*cellSize:                3",
+#ifdef USE_IPHONE
+    "*ignoreRotation:   True",
+#endif
     0
 };
 
     0
 };
 
index ccd0e6dea562223f648e79b99ee524603156cfe4..c21080d89f56886aafd20ecfb94683e135b312ca 100644 (file)
@@ -55,6 +55,7 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALFTONE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALO.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HELIX.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALFTONE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALO.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HELIX.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HEXADROP.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HOPALONG.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERBALL.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERCUBE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HOPALONG.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERBALL.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERCUBE.C
index ccd0e6dea562223f648e79b99ee524603156cfe4..c21080d89f56886aafd20ecfb94683e135b312ca 100644 (file)
@@ -55,6 +55,7 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALFTONE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALO.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HELIX.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALFTONE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALO.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HELIX.C
+$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HEXADROP.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HOPALONG.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERBALL.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERCUBE.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HOPALONG.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERBALL.C
 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERCUBE.C
index 3c9a1f4e2a8952aa62759a0b439d1fc1dbb8ef20..aefbd9197c3ecf7b2a80396682873596523becce 100644 (file)
@@ -4,8 +4,8 @@
             a screen saver and locker for the X window system
                             by Jamie Zawinski
 
             a screen saver and locker for the X window system
                             by Jamie Zawinski
 
-                              version 5.21
-                               04-Feb-2013
+                              version 5.22
+                               16-Jul-2013
 
                      http://www.jwz.org/xscreensaver/
 
 
                      http://www.jwz.org/xscreensaver/
 
index b4fd4ddaf41a41347009db8c9e1e1549b441755b..46e065533734332accdfccd966a0e52c7fb8fece 100644 (file)
    <xscreensaver-text />
   </vgroup>
   <vgroup>
    <xscreensaver-text />
   </vgroup>
   <vgroup>
+   <number id="duration" type="slider" arg="-duration %"
+           _label="Duration" _low-label="10 seconds" _high-label="10 minutes"
+           low="10" high="600" default="60"/>
+
    <xscreensaver-image />
    <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
   </vgroup>
    <xscreensaver-image />
    <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
   </vgroup>
index 270ee242c7d569240c9ca46db8c14b156e5ffa69..7079e6aa10f22b783228de4fafa9526414fe6be2 100644 (file)
@@ -4,14 +4,19 @@
 
   <command arg="-root"/>
 
 
   <command arg="-root"/>
 
-  <number id="delay" type="slider" arg="-delay %"
-          _label="Frame rate" _low-label="Low" _high-label="High"
-          low="0" high="100000" default="10000"
-          convert="invert"/>
-
-  <number id="speed" type="slider" arg="-speed %"
-          _label="Speed" _low-label="Slow" _high-label="Fast"
-          low="0.1" high="10.0" default="1.0"/>
+  <hgroup>
+   <vgroup>
+    <number id="delay" type="slider" arg="-delay %"
+            _label="Frame rate" _low-label="Low" _high-label="High"
+            low="0" high="100000" default="10000"
+            convert="invert"/>
+   </vgroup>
+   <vgroup>
+    <number id="speed" type="slider" arg="-speed %"
+            _label="Speed" _low-label="Slow" _high-label="Fast"
+            low="0.1" high="10.0" default="1.0"/>
+   </vgroup>
+  </hgroup>
 
   <hgroup>
    <vgroup>
 
   <hgroup>
    <vgroup>
diff --git a/hacks/config/hexadrop.xml b/hacks/config/hexadrop.xml
new file mode 100644 (file)
index 0000000..d44ca84
--- /dev/null
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="hexadrop" _label="Hexadrop">
+
+  <command arg="-root"/>
+
+  <hgroup>
+   <vgroup>
+    <number id="delay" type="slider" arg="-delay %"
+            _label="Frame rate" _low-label="Low" _high-label="High"
+            low="0" high="50000" default="30000"
+            convert="invert"/>
+
+    <number id="speed" type="slider" arg="-speed %"
+            _label="Speed" _low-label="Slow" _high-label="Fast"
+             low="0.1" high="4.0" default="1.0"/>
+
+    <number id="size" type="slider" arg="-size %"
+            _label="Tile size" _low-label="Small" _high-label="Large"
+            low="5" high="50" default="15"
+            convert="invert"/>
+   </vgroup>
+
+   <vgroup>
+    <select id="sides">
+     <option id="0" _label="Random shape"/>
+     <option id="3" _label="Triangles"    arg-set="-sides 3"/>
+     <option id="4" _label="Squares"      arg-set="-sides 4"/>
+     <option id="6" _label="Hexagons"     arg-set="-sides 6"/>
+     <option id="5" _label="Octagons"     arg-set="-sides 8"/>
+    </select>
+
+    <select id="uniform">
+     <option id="r-uniform"  _label="Random speed"/>
+     <option id="uniform"    _label="Uniform speed"     arg-set="-uniform-speed"/>
+     <option id="no-uniform" _label="Non-uniform speed" arg-set="-no-uniform-speed"/>
+    </select>
+
+    <select id="lockstep">
+     <option id="r-lockstep"  _label="Random sync"/>
+     <option id="lockstep"    _label="Synchronized"     arg-set="-lockstep"/>
+     <option id="no-lockstep" _label="Non-synchronized" arg-set="-no-lockstep"/>
+    </select>
+
+    <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+   </vgroup>
+  </hgroup>
+
+  <_description>
+Draws a grid of hexagons or other shapes and drops them out.
+
+http://en.wikipedia.org/wiki/Tiling_by_regular_polygons
+
+Written by Jamie Zawinski; 2013.
+  </_description>
+</screensaver>
diff --git a/hacks/config/kaleidocycle.xml b/hacks/config/kaleidocycle.xml
new file mode 100644 (file)
index 0000000..7266e54
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="kaleidocycle" _label="Kaleidocycle" gl="yes">
+
+  <command arg="-root"/>
+
+  <number id="delay" type="slider" arg="-delay %"
+          _label="Frame rate" _low-label="Low" _high-label="High"
+          low="0" high="100000" default="30000"
+          convert="invert"/>
+
+  <number id="count" type="slider" arg="-count %"
+          _label="Count" _low-label="8" _high-label="64"
+          low="8" high="64" default="16"/>
+
+  <number id="speed" type="slider" arg="-speed %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0.1" high="8.0" default="1.0"/>
+
+  <boolean id="wander" _label="Wander" arg-set="-wander"/>
+
+  <select id="rotation">
+    <option id="no"  _label="Don't rotate"               arg-set="-spin 0"/>
+    <option id="x"   _label="Rotate around X axis"       arg-set="-spin X"/>
+    <option id="y"   _label="Rotate around Y axis"       arg-set="-spin Y"/>
+    <option id="z"   _label="Rotate around Z axis"/>
+    <option id="xy"  _label="Rotate around X and Y axes" arg-set="-spin XY"/>
+    <option id="xz"  _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
+    <option id="yz"  _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
+    <option id="xyz" _label="Rotate around all three axes" arg-set="-spin YZ"/>
+  </select>
+
+  <boolean id="wire"    _label="Wireframe"              arg-set="-wireframe"/>
+  <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+
+  <_description>
+Draw a ring composed of tetrahedra connected at the edges that twists
+and rotates toroidally.
+
+When a series of tetrahedra are joined at the edges in a loop, it is
+possible for them to rotate continously through the center without
+deforming.  This only works with an even number of tetrahedra, and
+there must be eight or more, or they don't fit.
+
+Written by Jamie Zawinski; 2013.
+  </_description>
+</screensaver>
index 3bc86190f2e2af5c469026971071c333870a9622..15a0025fc7bc755efbf4e41a95a1185c9819975f 100644 (file)
@@ -2,7 +2,7 @@
 
 <screensaver name="phosphor" _label="Phosphor">
 
 
 <screensaver name="phosphor" _label="Phosphor">
 
 <command arg="-root"/>
+ <command arg="-root"/>
 
  <hgroup>
   <vgroup>
 
  <hgroup>
   <vgroup>
diff --git a/hacks/config/quasicrystal.xml b/hacks/config/quasicrystal.xml
new file mode 100644 (file)
index 0000000..9fd78c8
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="quasicrystal" _label="QuasiCrystal" gl="yes">
+
+  <command arg="-root"/>
+
+  <hgroup>
+   <vgroup>
+    <number id="delay" type="slider" arg="-delay %"
+            _label="Frame rate" _low-label="Low" _high-label="High"
+            low="0" high="100000" default="30000"
+            convert="invert"/>
+
+    <number id="speed" type="slider" arg="-speed %"
+            _label="Speed" _low-label="Slow" _high-label="Fast"
+            low="0.1" high="5.0" default="1.0"/>
+   </vgroup>
+   <vgroup>
+    <number id="count" type="slider" arg="-count %"
+            _label="Density" _low-label="Low" _high-label="High"
+            low="7" high="37" default="17"/>
+
+    <number id="contrast" type="slider" arg="-contrast %"
+            _label="Contrast" _low-label="Low" _high-label="High"
+            low="0" high="100" default="30"/>
+   </vgroup>
+  </hgroup>
+
+  <hgroup>
+   <boolean id="wander"    _label="Displacement" arg-unset="-no-wander"/>
+   <boolean id="spin"      _label="Rotation"     arg-unset="-no-spin"/>
+   <boolean id="symmetric" _label="Symmetry"     arg-unset="-no-symmetry"/>
+   <boolean id="showfps"   _label="Show frame rate" arg-set="-fps"/>
+  </hgroup>
+
+  <_description>
+A quasicrystal is a structure that is ordered but aperiodic.
+Two-dimensional quasicrystals can be generated by adding a set of
+planes where x is the sine of y.  Different complex aperiodic plane
+tilings are produced depending on the period, position, and rotation
+of the component planes, and whether the rotation of the planes is
+evenly distributed around the circle (the "symmetry" option, above)
+or random.
+
+See also the "RD-Bomb", "CWaves" and "Penrose" screen savers.
+
+http://en.wikipedia.org/wiki/Quasicrystal
+
+Written by Jamie Zawinski; 2013.
+  </_description>
+</screensaver>
diff --git a/hacks/config/unknownpleasures.xml b/hacks/config/unknownpleasures.xml
new file mode 100644 (file)
index 0000000..655e5b4
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="unknownpleasures" _label="UnknownPleasures" gl="yes">
+
+  <command arg="-root"/>
+
+  <number id="delay" type="slider" arg="-delay %"
+          _label="Frame rate" _low-label="Low" _high-label="High"
+          low="0" high="100000" default="30000"
+          convert="invert"/>
+
+  <number id="speed" type="slider" arg="-speed %"
+          _label="Speed" _low-label="Slow" _high-label="Fast"
+          low="0.1" high="3.0" default="1.0"/>
+
+  <number id="count" type="slider" arg="-count %"
+          _label="Scanlines" _low-label="Few" _high-label="Many"
+          low="3" high="200" default="80"/>
+
+  <number id="resolution" type="slider" arg="-resolution %"
+          _label="Resolution" _low-label="Low" _high-label="High"
+          low="5" high="300" default="100"/>
+
+  <hgroup>
+   <boolean id="ortho" _label="Orthographic Projection" arg-unset="-no-ortho"/>
+   <boolean id="wire"    _label="Wireframe"              arg-set="-wireframe"/>
+   <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
+  </hgroup>
+
+  <_description>
+PSR B1919+21 (AKA CP 1919) was the first pulsar ever discovered:
+a spinning neutron star emitting a periodic lighthouse-like beacon.
+An illustration of the signal received from it was published in
+Scientific American in 1971, and later in The Cambridge Encyclopedia
+of Astronomy in 1977, where it was seen by Stephen Morris, the
+drummer of Joy Division, and was consequently appropriated by
+Peter Saville for the cover of the band's album "Unknown Pleasures".
+
+http://en.wikipedia.org/wiki/Pulsar
+http://en.wikipedia.org/wiki/PSR_B1919%2B21
+http://en.wikipedia.org/wiki/Unknown_Pleasures
+http://en.wikipedia.org/wiki/Peter_Saville_%28graphic_designer%29
+http://en.wikipedia.org/wiki/Joy_Division
+
+Written by Jamie Zawinski; 2013.
+  </_description>
+</screensaver>
index 62df14cda924e0d08202ed9a61b4b98e269d9a7b..6cc50daaa322e0677670b7c77c66387da6f7c9fd 100644 (file)
@@ -67,7 +67,7 @@ init_coral(struct state *st)
     if(!st->board) exit(1);
     cmap = xgwa.colormap;
     if( st->ncolors ) {
     if(!st->board) exit(1);
     cmap = xgwa.colormap;
     if( st->ncolors ) {
-        free_colors(st->dpy, cmap, st->colors, st->ncolors);
+        free_colors(xgwa.screen, cmap, st->colors, st->ncolors);
         st->ncolors = 0;
     }
     gcv.foreground = st->default_fg_pixel = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground");
         st->ncolors = 0;
     }
     gcv.foreground = st->default_fg_pixel = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground");
@@ -75,7 +75,8 @@ init_coral(struct state *st)
     gcv.foreground = get_pixel_resource (st->dpy, cmap, "background", "Background");
     st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv);
     st->ncolors = NCOLORSMAX;
     gcv.foreground = get_pixel_resource (st->dpy, cmap, "background", "Background");
     st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv);
     st->ncolors = NCOLORSMAX;
-    make_uniform_colormap(st->dpy, xgwa.visual, cmap, st->colors, &st->ncolors, True, &writeable, False);
+    make_uniform_colormap(xgwa.screen, xgwa.visual, cmap,
+                          st->colors, &st->ncolors, True, &writeable, False);
     if (st->ncolors <= 0) {
       st->ncolors = 2;
       st->colors[0].red = st->colors[0].green = st->colors[0].blue = 0;
     if (st->ncolors <= 0) {
       st->ncolors = 2;
       st->colors[0].red = st->colors[0].green = st->colors[0].blue = 0;
@@ -289,6 +290,9 @@ static const char *coral_defaults[] = {
   "*seeds:     20", /* too many for 640x480, too few for 1280x1024 */
   "*delay:     5",
   "*delay2:    20000",
   "*seeds:     20", /* too many for 640x480, too few for 1280x1024 */
   "*delay:     5",
   "*delay2:    20000",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 6f9fa76061320a06e908cc47a3a003eef3083f5d..ab3a6f7366e3ca853b6b2031f950dd212e105ef0 100644 (file)
@@ -216,21 +216,21 @@ setup_colormap (struct state *st, XColor **colors, int *n_colors)
   
   if (!strcmp (color_scheme, "random"))
     {
   
   if (!strcmp (color_scheme, "random"))
     {
-      make_random_colormap (st->dpy, st->wattr.visual,
+      make_random_colormap (st->wattr.screen, st->wattr.visual,
                            st->wattr.colormap,
                            *colors, n_colors,
                            True, True, &writable, True);
     }
   else if (!strcmp (color_scheme, "smooth"))
     {
                            st->wattr.colormap,
                            *colors, n_colors,
                            True, True, &writable, True);
     }
   else if (!strcmp (color_scheme, "smooth"))
     {
-      make_smooth_colormap (st->dpy, st->wattr.visual,
+      make_smooth_colormap (st->wattr.screen, st->wattr.visual,
                            st->wattr.colormap,
                            *colors, n_colors,
                            True, &writable, True);
     }
   else 
     {
                            st->wattr.colormap,
                            *colors, n_colors,
                            True, &writable, True);
     }
   else 
     {
-      make_uniform_colormap (st->dpy, st->wattr.visual,
+      make_uniform_colormap (st->wattr.screen, st->wattr.visual,
                             st->wattr.colormap,
                             *colors, n_colors, True,
                             &writable, True);
                             st->wattr.colormap,
                             *colors, n_colors, True,
                             &writable, True);
@@ -242,7 +242,7 @@ setup_colormap (struct state *st, XColor **colors, int *n_colors)
 static void
 free_colormap (struct state *st, XColor **colors, int n_colors)
 {
 static void
 free_colormap (struct state *st, XColor **colors, int n_colors)
 {
-  free_colors (st->dpy, st->wattr.colormap, *colors, n_colors);
+  free_colors (st->wattr.screen, st->wattr.colormap, *colors, n_colors);
   free (*colors);
 }
 
   free (*colors);
 }
 
index a1c501d84978099dd886ceb4dd11a3a531996ba0..3acd7caee386f3e211f6e9803ffdf16365d66d0e 100644 (file)
@@ -74,7 +74,8 @@ static const char sccsid[] = "@(#)crystal.c   4.12 98/09/10 xlockmore";
                                                 "*cycles:                200   \n" \
                                                 "*size:                  -15   \n" \
                                                 "*ncolors:               100   \n" \
                                                 "*cycles:                200   \n" \
                                                 "*size:                  -15   \n" \
                                                 "*ncolors:               100   \n" \
-                                                "*fpsSolid:              true  \n" \
+                                                "*fpsSolid:       True \n" \
+                                                "*ignoreRotation: True \n" \
 
 # define crystal_handle_event 0
 # include "xlockmore.h"                /* in xscreensaver distribution */
 
 # define crystal_handle_event 0
 # include "xlockmore.h"                /* in xscreensaver distribution */
@@ -582,7 +583,8 @@ draw_crystal(ModeInfo * mi)
 
 /* Rotate colours */
        if (cryst->cycle_p) {
 
 /* Rotate colours */
        if (cryst->cycle_p) {
-               rotate_colors(display, cryst->cmap, cryst->colors, cryst->ncolors,
+               rotate_colors(mi->xgwa.screen, cryst->cmap,
+                      cryst->colors, cryst->ncolors,
                              cryst->direction);
                if (!(LRAND() % 1000))
                        cryst->direction = -cryst->direction;
                              cryst->direction);
                if (!(LRAND() % 1000))
                        cryst->direction = -cryst->direction;
@@ -808,7 +810,8 @@ release_crystal(ModeInfo * mi)
                                MI_BG_PIXEL(mi) = cryst->bg;
 #endif
                                if (cryst->colors && cryst->ncolors && !cryst->no_colors)
                                MI_BG_PIXEL(mi) = cryst->bg;
 #endif
                                if (cryst->colors && cryst->ncolors && !cryst->no_colors)
-                                       free_colors(display, cryst->cmap, cryst->colors, cryst->ncolors);
+                                       free_colors(mi->xgwa.screen, cryst->cmap, cryst->colors,
+                                cryst->ncolors);
                                if (cryst->colors)
                                        (void) free((void *) cryst->colors);
 #if 0 /* #### wrong! -jwz */
                                if (cryst->colors)
                                        (void) free((void *) cryst->colors);
 #if 0 /* #### wrong! -jwz */
@@ -1175,7 +1178,8 @@ init_crystal(ModeInfo * mi)
        if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) {
 /* Set up colour map */
                if (cryst->colors && cryst->ncolors && !cryst->no_colors)
        if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) {
 /* Set up colour map */
                if (cryst->colors && cryst->ncolors && !cryst->no_colors)
-                       free_colors(display, cryst->cmap, cryst->colors, cryst->ncolors);
+                       free_colors(mi->xgwa.screen, cryst->cmap,
+                        cryst->colors, cryst->ncolors);
                if (cryst->colors)
                        (void) free((void *) cryst->colors);
                cryst->colors = 0;
                if (cryst->colors)
                        (void) free((void *) cryst->colors);
                cryst->colors = 0;
@@ -1204,14 +1208,20 @@ init_crystal(ModeInfo * mi)
                }
                if (!cryst->mono_p) {
                        if (!(LRAND() % 10))
                }
                if (!cryst->mono_p) {
                        if (!(LRAND() % 10))
-                               make_random_colormap(MI_DISPLAY(mi), MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors,
-                                               True, True, &cryst->cycle_p, True);
+                               make_random_colormap(mi->xgwa.screen, MI_VISUAL(mi),
+                                     cryst->cmap, cryst->colors,
+                                     &cryst->ncolors,
+                                     True, True, &cryst->cycle_p, True);
                        else if (!(LRAND() % 2))
                        else if (!(LRAND() % 2))
-                               make_uniform_colormap(MI_DISPLAY(mi), MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors,
-                                                     True, &cryst->cycle_p, True);
+                               make_uniform_colormap(mi->xgwa.screen, MI_VISUAL(mi),
+                                      cryst->cmap, cryst->colors,
+                                      &cryst->ncolors, True,
+                                      &cryst->cycle_p, True);
                        else
                        else
-                               make_smooth_colormap(MI_DISPLAY(mi), MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors,
-                                                    True, &cryst->cycle_p, True);
+                               make_smooth_colormap(mi->xgwa.screen, MI_VISUAL(mi),
+                                     cryst->cmap, cryst->colors,
+                                     &cryst->ncolors,
+                                     True, &cryst->cycle_p, True);
                }
 #if 0 /* #### wrong! -jwz */
                XInstallColormap(display, cryst->cmap);
                }
 #if 0 /* #### wrong! -jwz */
                XInstallColormap(display, cryst->cmap);
index 912ccc705628ec4e81895da0107f931dedf7e3bd..94c235574b1daef78240f2e3b5092624937ab30b 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2007 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2007-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -57,7 +57,7 @@ cwaves_init (Display *dpy, Window window)
   st->ncolors = get_integer_resource (dpy, "ncolors", "Integer");
   if (st->ncolors < 4) st->ncolors = 4;
   st->colors = (XColor *) malloc (sizeof(*st->colors) * (st->ncolors+1));
   st->ncolors = get_integer_resource (dpy, "ncolors", "Integer");
   if (st->ncolors < 4) st->ncolors = 4;
   st->colors = (XColor *) malloc (sizeof(*st->colors) * (st->ncolors+1));
-  make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+  make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                         st->colors, &st->ncolors,
                         True, 0, False);
 
                         st->colors, &st->ncolors,
                         True, 0, False);
 
@@ -170,7 +170,8 @@ cwaves_event (Display *dpy, Window window, void *closure, XEvent *event)
   state *st = (state *) closure;
   if (event->type == ButtonPress)
     {
   state *st = (state *) closure;
   if (event->type == ButtonPress)
     {
-      make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual,
+                            st->xgwa.colormap,
                             st->colors, &st->ncolors,
                             True, 0, False);
       return True;
                             st->colors, &st->ncolors,
                             True, 0, False);
       return True;
@@ -192,6 +193,9 @@ static const char *cwaves_defaults [] = {
   "*scale:                2",
   "*debug:                False",
   "*delay:                20000",
   "*scale:                2",
   "*debug:                False",
   "*delay:                20000",
+#ifdef USE_IPHONE
+  "*ignoreRotation:        True",
+#endif
   0
 };
 
   0
 };
 
index baf3be43562d6e8c0d1faad58ad6df254ac1d751..246a4f0ca149bbe3a8c3a704193e744e030931c4 100644 (file)
@@ -125,7 +125,8 @@ cynosure_init (Display *d, Window w)
   if (mono_p)
     ;
   else {
   if (mono_p)
     ;
   else {
-    make_smooth_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors,
+    make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
+                          st->colors, &st->ncolors,
                          True, 0, True);
     if (st->ncolors <= 2) {
       mono_p = True;
                          True, 0, True);
     if (st->ncolors <= 2) {
       mono_p = True;
@@ -418,6 +419,9 @@ static const char *cynosure_defaults [] = {
   "*sway:              30",
   "*tweak:             20",
   "*gridSize:          12",
   "*sway:              30",
   "*tweak:             20",
   "*gridSize:          12",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index 42f8149a1d2d02dc79b4c30819886fc17a286af0..d4927b6070b64fe1ed609c92d1e75d8562d2e8b6 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -332,8 +332,8 @@ decayscreen_reshape (Display *dpy, Window window, void *closure,
   XClearWindow (st->dpy, st->window);
   XCopyArea (st->dpy, st->saved, st->window, st->gc,
              0, 0, st->saved_w, st->saved_h,
   XClearWindow (st->dpy, st->window);
   XCopyArea (st->dpy, st->saved, st->window, st->gc,
              0, 0, st->saved_w, st->saved_h,
-             (w - st->saved_w) / 2,
-             (h - st->saved_h) / 2);
+             ((int)w - st->saved_w) / 2,
+             ((int)h - st->saved_h) / 2);
   st->sizex = w;
   st->sizey = h;
 }
   st->sizex = w;
   st->sizey = h;
 }
@@ -366,6 +366,9 @@ static const char *decayscreen_defaults [] = {
   "*delay:                     10000",
   "*mode:                      random",
   "*duration:                  120",
   "*delay:                     10000",
   "*mode:                      random",
   "*duration:                  120",
+#ifdef USE_IPHONE
+  "*ignoreRotation:             True",
+#endif
   0
 };
 
   0
 };
 
index 69085525a029f9ece95185a471c761628e6b7a95..27ada0502553f698aecf30e05c8b1e268e91dde1 100644 (file)
@@ -1,5 +1,4 @@
-/* xscreensaver, Copyright (c) 1997, 1998, 2002, 2006
- *  Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -54,16 +53,16 @@ struct state {
 
 /* copied from make_random_colormap in colors.c */
 static void
 
 /* copied from make_random_colormap in colors.c */
 static void
-make_mondrian_colormap (Display *dpy, Visual *visual, Colormap cmap,
+make_mondrian_colormap (Screen *screen, Visual *visual, Colormap cmap,
                      XColor *colors, int *ncolorsP,
                      Bool allocate_p,
                      Bool *writable_pP,
                      Bool verbose_p)
 {
                      XColor *colors, int *ncolorsP,
                      Bool allocate_p,
                      Bool *writable_pP,
                      Bool verbose_p)
 {
+  Display *dpy = DisplayOfScreen (screen);
   Bool wanted_writable = (allocate_p && writable_pP && *writable_pP);
   int ncolors = 8;
   int i;
   Bool wanted_writable = (allocate_p && writable_pP && *writable_pP);
   int ncolors = 8;
   int i;
-  Screen *screen = (dpy ? DefaultScreenOfDisplay(dpy) : 0); /* #### WRONG! */
 
   if (*ncolorsP <= 0) return;
 
 
   if (*ncolorsP <= 0) return;
 
@@ -104,7 +103,7 @@ make_mondrian_colormap (Display *dpy, Visual *visual, Colormap cmap,
       unsigned long *pixels = (unsigned long *)
        malloc(sizeof(*pixels) * (ncolors + 1));
 
       unsigned long *pixels = (unsigned long *)
        malloc(sizeof(*pixels) * (ncolors + 1));
 
-      allocate_writable_colors (dpy, cmap, pixels, &ncolors);
+      allocate_writable_colors (screen, cmap, pixels, &ncolors);
       if (ncolors > 0)
        for (i = 0; i < ncolors; i++)
          colors[i].pixel = pixels[i];
       if (ncolors > 0)
        for (i = 0; i < ncolors; i++)
          colors[i].pixel = pixels[i];
@@ -240,17 +239,20 @@ deco_init (Display *dpy, Window window)
       mondrian_set_sizes(st, st->xgwa.width, st->xgwa.height);
 
       /** set up red-yellow-blue-black-white colormap and fgc **/
       mondrian_set_sizes(st, st->xgwa.width, st->xgwa.height);
 
       /** set up red-yellow-blue-black-white colormap and fgc **/
-      make_mondrian_colormap(dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_mondrian_colormap(st->xgwa.screen, st->xgwa.visual,
+                             st->xgwa.colormap,
                             st->colors, &st->ncolors, True, 0, True);
 
       /** put white in several cells **/
       /** set min-height and min-width to about 10% of total w/h **/
   }
   else if (st->smoothColors)
                             st->colors, &st->ncolors, True, 0, True);
 
       /** put white in several cells **/
       /** set min-height and min-width to about 10% of total w/h **/
   }
   else if (st->smoothColors)
-      make_smooth_colormap (dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual,
+                            st->xgwa.colormap,
                            st->colors, &st->ncolors, True, 0, True);
   else
                            st->colors, &st->ncolors, True, 0, True);
   else
-      make_random_colormap (dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_random_colormap (st->xgwa.screen, st->xgwa.visual,
+                            st->xgwa.colormap,
                            st->colors, &st->ncolors, False, True, 0, True);
 
   gcv.line_width = st->old_line_width = st->line_width;
                            st->colors, &st->ncolors, False, True, 0, True);
 
   gcv.line_width = st->old_line_width = st->line_width;
@@ -311,6 +313,9 @@ static const char *deco_defaults [] = {
   "*goldenRatio:        False",
   "*smoothColors:       False",
   "*mondrian:           False",
   "*goldenRatio:        False",
   "*smoothColors:       False",
   "*mondrian:           False",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index 27ba04843921e9173582e17e64ca1e23bc19f203..06cfe1b9dc7373b3c4d1b15e4331930f8f6fcc04 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1999-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1999-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -62,7 +62,14 @@ draw_star (struct state *st, Drawable w, struct throbber *t)
   XPoint points[11];
   int x = t->x;
   int y = t->y;
   XPoint points[11];
   int x = t->x;
   int y = t->y;
-  int s = t->size / 0.383;  /* trial and error, I forget how to derive this */
+
+  /*
+    The following constant is really:
+      sqrt(5 - sqrt(5)) / sqrt(25 - 11 * sqrt(5))
+
+    Reference: http://mathworld.wolfram.com/Pentagram.html
+  */
+  int s = t->size * 2.6180339887498985;
   int s2 = t->size;
   double c = M_PI * 2;
   double o = -M_PI / 2;
   int s2 = t->size;
   double c = M_PI * 2;
   double o = -M_PI / 2;
@@ -312,7 +319,7 @@ deluxe_init (Display *dpy, Window window)
 #ifndef HAVE_COCOA
     COLOR:
 #endif
 #ifndef HAVE_COCOA
     COLOR:
 #endif
-      make_random_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+      make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                             st->colors, &st->ncolors, True, True, 0, True);
       if (st->ncolors < 2)
         goto MONO;
                             st->colors, &st->ncolors, True, True, 0, True);
       if (st->ncolors < 2)
         goto MONO;
@@ -431,6 +438,9 @@ static const char *deluxe_defaults [] = {
   "*useDBE:            True",
   "*useDBEClear:       True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
   "*useDBE:            True",
   "*useDBEClear:       True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index c9a15e25c711d51d47cf89c2d1f0a2cb042a351e..947134841ec64482f0c09ccb891418bd9085f842 100644 (file)
@@ -58,6 +58,7 @@ static const char sccsid[] = "@(#)demon.c     5.00 2000/11/01 xlockmore";
                                        "*size:    -7    \n" \
                                        "*ncolors: 64    \n" \
                                        "*fpsSolid: true    \n" \
                                        "*size:    -7    \n" \
                                        "*ncolors: 64    \n" \
                                        "*fpsSolid: true    \n" \
+                                   "*ignoreRotation: True  \n" \
 
 # define demon_handle_event 0
 # define UNIFORM_COLORS
 
 # define demon_handle_event 0
 # define UNIFORM_COLORS
index 1746f726c2e08653c9c0b79de3ccd92dfd5c2aea..a78690d033388921cb3c6ebfc34176bd001ba293 100644 (file)
@@ -38,6 +38,7 @@ static const char sccsid[] = "@(#)discrete.c  5.00 2000/11/01 xlockmore";
                                        "*cycles: 2500 \n" \
                                        "*ncolors: 100 \n" \
                                        "*fpsSolid: true \n" \
                                        "*cycles: 2500 \n" \
                                        "*ncolors: 100 \n" \
                                        "*fpsSolid: true \n" \
+                                   "*ignoreRotation: True \n" \
 
 # define SMOOTH_COLORS
 # define discrete_handle_event 0
 
 # define SMOOTH_COLORS
 # define discrete_handle_event 0
index b2411fc7327fb88ac7939afe33c2b404fa44ed7e..8173c43b96bcdc61a1ff92217abc3b2cc52e5003 100644 (file)
@@ -834,6 +834,9 @@ static const char *distort_defaults [] = {
 #ifdef HAVE_XSHM_EXTENSION
        "*useSHM:                       False",         /* xshm turns out not to help. */
 #endif /* HAVE_XSHM_EXTENSION */
 #ifdef HAVE_XSHM_EXTENSION
        "*useSHM:                       False",         /* xshm turns out not to help. */
 #endif /* HAVE_XSHM_EXTENSION */
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
        0
 };
 
        0
 };
 
index 711bc09e96991348213b0b49e5af500fcd4e42b8..3547ca5109c2d69638f7da29d90a8e0e31b64a5f 100644 (file)
@@ -36,6 +36,7 @@ static const char sccsid[] = "@(#)drift.c     5.00 2000/11/01 xlockmore";
                                  "*count: 30 \n" \
                                  "*ncolors: 200 \n" \
                                  "*fpsSolid: true \n" \
                                  "*count: 30 \n" \
                                  "*ncolors: 200 \n" \
                                  "*fpsSolid: true \n" \
+                                 "*ignoreRotation: True \n" \
 
 # define SMOOTH_COLORS
 # define drift_handle_event 0
 
 # define SMOOTH_COLORS
 # define drift_handle_event 0
index 004c0ea56a1a9d123efc4a1ebc0b7dc52e81230e..288999fa95bbf7220b50769c69d3d950a3600db3 100644 (file)
@@ -65,6 +65,9 @@ static const char *epicycle_defaults [] = {
   "*divisorPoisson: 0.4",
   "*sizeFactorMin: 1.05",
   "*sizeFactorMax: 2.05",
   "*divisorPoisson: 0.4",
   "*sizeFactorMin: 1.05",
   "*sizeFactorMax: 2.05",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
@@ -401,7 +404,7 @@ colour_init(struct state *st, XWindowAttributes *pxgwa)
    */
   if (st->colors)
     {
    */
   if (st->colors)
     {
-      free_colors(st->dpy, st->cmap, st->colors, st->ncolors);
+      free_colors(pxgwa->screen, st->cmap, st->colors, st->ncolors);
       st->colors = 0;
       st->ncolors = 0;
     }
       st->colors = 0;
       st->ncolors = 0;
     }
@@ -421,7 +424,8 @@ colour_init(struct state *st, XWindowAttributes *pxgwa)
       st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
       if (!st->colors) abort();
          
       st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1));
       if (!st->colors) abort();
          
-      make_smooth_colormap (st->dpy, pxgwa->visual, st->cmap, st->colors, &st->ncolors,
+      make_smooth_colormap (pxgwa->screen, pxgwa->visual, st->cmap,
+                            st->colors, &st->ncolors,
                            True, /* allocate */
                            False, /* not writable */
                            True); /* verbose (complain about failure) */
                            True, /* allocate */
                            False, /* not writable */
                            True); /* verbose (complain about failure) */
index 2a3700bf4053c5a1e8c9501126647302acc011f6..307bfd299fc9045a665d5d21d7e1adf5a224d4c5 100644 (file)
@@ -47,6 +47,7 @@ static const char sccsid[] = "@(#)euler2d.c   5.00 2000/11/01 xlockmore";
                                        "*cycles:  3000  \n" \
                                        "*ncolors: 64    \n" \
                                        "*fpsSolid: true    \n" \
                                        "*cycles:  3000  \n" \
                                        "*ncolors: 64    \n" \
                                        "*fpsSolid: true    \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define euler2d_handle_event 0
 # define SMOOTH_COLORS
 
 # define euler2d_handle_event 0
 # define SMOOTH_COLORS
index 9fa65f8f13f10acb2ff58f6304c194683d7c9d56..25fe734325770a3d29709aab4e14b48fd35dacb1 100644 (file)
@@ -35,6 +35,7 @@ static const char sccsid[] = "@(#)fadeplot.c  5.00 2000/11/01 xlockmore";
                                        "*cycles: 1500 \n" \
                                        "*ncolors: 64 \n" \
                                        "*fpsSolid: true \n" \
                                        "*cycles: 1500 \n" \
                                        "*ncolors: 64 \n" \
                                        "*fpsSolid: true \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define BRIGHT_COLORS
 # define UNIFORM_COLORS
 
 # define BRIGHT_COLORS
 # define UNIFORM_COLORS
index 18148a3e3dc052237483255e65bd621a6689c543..11bc5e5b478c3755443ed12437dcfe22da1ef17f 100644 (file)
@@ -45,7 +45,7 @@
 #define HEIGHT 632                /* 548     */
 #define SHELLCOUNT 4              /* FIXED NUMBER; for SSE optimization */
 #define PIXCOUNT 500              /* 500     */
 #define HEIGHT 632                /* 548     */
 #define SHELLCOUNT 4              /* FIXED NUMBER; for SSE optimization */
 #define PIXCOUNT 500              /* 500     */
-#define SHELL_LIFE_DEFAULT 3200   /* 3200    */
+#define SHELL_LIFE_DEFAULT 32     /* 32      */
 #define SHELL_LIFE_RATIO 6        /* 6       */
 #define POWDER 5.0                /* 5.0     */
 #define FTWEAK 12                 /* 12      */
 #define SHELL_LIFE_RATIO 6        /* 6       */
 #define POWDER 5.0                /* 5.0     */
 #define FTWEAK 12                 /* 12      */
@@ -709,6 +709,9 @@ fireworkx_init (Display *dpy, Window win)
        st->shoot          = get_boolean_resource(st->dpy, "shoot"   , "Boolean");
        st->verbose        = get_boolean_resource(st->dpy, "verbose" , "Boolean");
        st->max_shell_life = get_integer_resource(st->dpy, "maxlife" , "Integer");
        st->shoot          = get_boolean_resource(st->dpy, "shoot"   , "Boolean");
        st->verbose        = get_boolean_resource(st->dpy, "verbose" , "Boolean");
        st->max_shell_life = get_integer_resource(st->dpy, "maxlife" , "Integer");
+        /* transition from xscreensaver <= 5.20 */
+       if (st->max_shell_life > 100) st->max_shell_life = 100;
+
        st->delay          = get_integer_resource(st->dpy, "delay"   , "Integer");
 
        st->max_shell_life = pow(10.0,(st->max_shell_life/50.0)+2.7);
        st->delay          = get_integer_resource(st->dpy, "delay"   , "Integer");
 
        st->max_shell_life = pow(10.0,(st->max_shell_life/50.0)+2.7);
@@ -735,7 +738,8 @@ fireworkx_init (Display *dpy, Window win)
        {
                st->colors = (XColor *) calloc(sizeof(XColor),st->ncolors+1);
                writable = False;
        {
                st->colors = (XColor *) calloc(sizeof(XColor),st->ncolors+1);
                writable = False;
-               make_smooth_colormap(st->dpy, vi, cmap, st->colors, &st->ncolors,
+               make_smooth_colormap(xwa.screen, vi, cmap,
+                                     st->colors, &st->ncolors,
                                     False, &writable, True);
        }
        st->gc = XCreateGC(st->dpy, win, 0, &gcv);
                                     False, &writable, True);
        }
        st->gc = XCreateGC(st->dpy, win, 0, &gcv);
index eed6287cefd3a6141475b8100533527789d6fb8a..18db22daec2569cea20b43586151f509c4a7a6b7 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1993-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1993-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -151,7 +151,8 @@ flame_init (Display *dpy, Window window)
       st->ncolors = get_integer_resource (st->dpy, "colors", "Integer");
       if (st->ncolors <= 0) st->ncolors = 128;
       st->colors = (XColor *) malloc ((st->ncolors+1) * sizeof (*st->colors));
       st->ncolors = get_integer_resource (st->dpy, "colors", "Integer");
       if (st->ncolors <= 0) st->ncolors = 128;
       st->colors = (XColor *) malloc ((st->ncolors+1) * sizeof (*st->colors));
-      make_smooth_colormap (st->dpy, xgwa.visual, xgwa.colormap, st->colors, &st->ncolors,
+      make_smooth_colormap (xgwa.screen, xgwa.visual, xgwa.colormap,
+                            st->colors, &st->ncolors,
                            True, 0, True);
       if (st->ncolors <= 2)
        mono_p = True, st->ncolors = 0;
                            True, 0, True);
       if (st->ncolors <= 2)
        mono_p = True, st->ncolors = 0;
@@ -418,6 +419,9 @@ static const char *flame_defaults [] = {
   "*delay:     50000",
   "*delay2:    2000000",
   "*points:    10000",
   "*delay:     50000",
   "*delay2:    2000000",
   "*points:    10000",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 958f7bc1b37272f34699143ef2380e9c572e1044..6bab228740d4c38266dfa2fec6fe9b2691c60fbd 100644 (file)
@@ -328,6 +328,12 @@ fluidballs_init (Display *dpy, Window window)
   state->shake_p = get_boolean_resource (dpy, "shake", "Shake");
   state->shake_threshold = get_float_resource (dpy, "shakeThreshold",
                                                "ShakeThreshold");
   state->shake_p = get_boolean_resource (dpy, "shake", "Shake");
   state->shake_threshold = get_float_resource (dpy, "shakeThreshold",
                                                "ShakeThreshold");
+  state->time_tick = 999999;
+
+# ifdef USE_IPHONE     /* Always obey real-world gravity */
+  state->shake_p = False;
+# endif
+
 
   state->fps_p = get_boolean_resource (dpy, "doFPS", "DoFPS");
   if (state->fps_p)
 
   state->fps_p = get_boolean_resource (dpy, "doFPS", "DoFPS");
   if (state->fps_p)
@@ -443,6 +449,20 @@ check_wall_clock (b_state *state, float max_d)
 
       state->time_since_shake += (now.tv_sec - state->last_time.tv_sec);
 
 
       state->time_since_shake += (now.tv_sec - state->last_time.tv_sec);
 
+# ifdef USE_IPHONE     /* Always obey real-world gravity */
+      {
+        float a = fabs (fabs(state->accx) > fabs(state->accy)
+                        ? state->accx : state->accy);
+        switch ((int) current_device_rotation ()) {
+        case    0: case  360: state->accx =  0; state->accy =  a; break;
+        case  -90:            state->accx = -a; state->accy =  0; break;
+        case   90:            state->accx =  a; state->accy =  0; break;
+        case  180: case -180: state->accx =  0; state->accy = -a; break;
+        default: break;
+        }
+      }
+# endif /* USE_IPHONE */
+
       if (state->fps_p) 
        {
          float elapsed = ((now.tv_sec  + (now.tv_usec  / 1000000.0)) -
       if (state->fps_p) 
        {
          float elapsed = ((now.tv_sec  + (now.tv_usec  / 1000000.0)) -
@@ -715,17 +735,29 @@ fluidballs_event (Display *dpy, Window window, void *closure, XEvent *event)
           return True;
         }
       else
           return True;
         }
       else
-        for (i=1; i <= state->count; i++)
-          {
-            float d = ((state->px[i] - rx) * (state->px[i] - rx) +
-                       (state->py[i] - ry) * (state->py[i] - ry));
-            float r = state->r[i];
-            if (d < r*r)
+        {
+          /* When trying to pick up a ball, first look for a click directly
+             inside the ball; but if we don't find it, expand the radius
+             outward until we find something nearby.
+           */
+          float max = state->max_radius * 4;
+          float step = max / 10;
+          float r2;
+          for (r2 = step; r2 < max; r2 += step) {
+            for (i = 1; i <= state->count; i++)
               {
               {
-                state->mouse_ball = i;
-                return True;
+                float d = ((state->px[i] - rx) * (state->px[i] - rx) +
+                           (state->py[i] - ry) * (state->py[i] - ry));
+                float r = state->r[i];
+                if (r2 > r) r = r2;
+                if (d < r*r)
+                  {
+                    state->mouse_ball = i;
+                    return True;
+                  }
               }
           }
               }
           }
+        }
       return True;
     }
   else if (event->xany.type == ButtonRelease)   /* drop the ball */
       return True;
     }
   else if (event->xany.type == ButtonRelease)   /* drop the ball */
@@ -780,6 +812,9 @@ static const char *fluidballs_defaults [] = {
   "*useDBE:            True",
   "*useDBEClear:       True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
   "*useDBE:            True",
   "*useDBEClear:       True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+#ifdef USE_IPHONE
+  "*ignoreRotation:    True",
+#endif
   0
 };
 
   0
 };
 
index 43a0b5bf49500f609d58bbc90393bda0d5b5ae48..8003941336a38d3bf319f77191a20df49a887539 100644 (file)
@@ -45,6 +45,7 @@ static const char sccsid[] = "@(#)galaxy.c 4.04 97/07/28 xlockmore";
                                        "*cycles:  250   \n"   \
                                        "*ncolors:  64   \n" \
                                        "*fpsSolid:  true   \n" \
                                        "*cycles:  250   \n"   \
                                        "*ncolors:  64   \n" \
                                        "*fpsSolid:  true   \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define UNIFORM_COLORS
 # define galaxy_handle_event 0
 
 # define UNIFORM_COLORS
 # define galaxy_handle_event 0
index 815ca6c29d5ce01a321127d7307bb00837c58eee..03de047b892bbf166a1d3b39065bca68be80943b 100644 (file)
@@ -116,7 +116,8 @@ SRCS                = xscreensaver-gl-helper.c normals.c glxfonts.c fps-gl.c \
                  jigsaw.c photopile.c dropshadow.c rubikblocks.c surfaces.c \
                  hilbert.c companion.c companion_quad.c companion_disc.c \
                  companion_heart.c tronbit.c tronbit_idle1.c tronbit_idle2.c \
                  jigsaw.c photopile.c dropshadow.c rubikblocks.c surfaces.c \
                  hilbert.c companion.c companion_quad.c companion_disc.c \
                  companion_heart.c tronbit.c tronbit_idle1.c tronbit_idle2.c \
-                 tronbit_no.c tronbit_yes.c jwzgles.c
+                 tronbit_no.c tronbit_yes.c jwzgles.c kaleidocycle.c \
+                 quasicrystal.c unknownpleasures.c
 
 OBJS           = xscreensaver-gl-helper.o normals.o glxfonts.o fps-gl.o \
                  atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
 
 OBJS           = xscreensaver-gl-helper.o normals.o glxfonts.o fps-gl.o \
                  atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
@@ -155,7 +156,8 @@ OBJS                = xscreensaver-gl-helper.o normals.o glxfonts.o fps-gl.o \
                  jigsaw.o photopile.o dropshadow.o rubikblocks.o surfaces.o \
                  hilbert.o companion.o companion_quad.o companion_disc.o \
                  companion_heart.o tronbit.o tronbit_idle1.o tronbit_idle2.o \
                  jigsaw.o photopile.o dropshadow.o rubikblocks.o surfaces.o \
                  hilbert.o companion.o companion_quad.o companion_disc.o \
                  companion_heart.o tronbit.o tronbit_idle1.o tronbit_idle2.o \
-                 tronbit_no.o tronbit_yes.o jwzgles.o
+                 tronbit_no.o tronbit_yes.o jwzgles.o kaleidocycle.o \
+                 quasicrystal.o unknownpleasures.o
 
 GL_EXES                = cage gears moebius pipes sproingies stairs superquadrics \
                  morph3d rubik atlantis lament bubble3d glplanet pulsar \
 
 GL_EXES                = cage gears moebius pipes sproingies stairs superquadrics \
                  morph3d rubik atlantis lament bubble3d glplanet pulsar \
@@ -170,7 +172,8 @@ GL_EXES             = cage gears moebius pipes sproingies stairs superquadrics \
                  antmaze tangram crackberg glhanoi cube21 timetunnel \
                  juggler3d topblock glschool glcells voronoi moebiusgears \
                  lockward cubicgrid hypnowheel skytentacles jigsaw photopile \
                  antmaze tangram crackberg glhanoi cube21 timetunnel \
                  juggler3d topblock glschool glcells voronoi moebiusgears \
                  lockward cubicgrid hypnowheel skytentacles jigsaw photopile \
-                 rubikblocks surfaces hilbert companioncube tronbit
+                 rubikblocks surfaces hilbert companioncube tronbit \
+                 kaleidocycle quasicrystal unknownpleasures
 GLE_EXES       = extrusion
 SUID_EXES      = sonar
 GL_UTIL_EXES   = xscreensaver-gl-helper
 GLE_EXES       = extrusion
 SUID_EXES      = sonar
 GL_UTIL_EXES   = xscreensaver-gl-helper
@@ -225,7 +228,8 @@ GL_MEN              = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
                  voronoi.man moebiusgears.man lockward.man cubicgrid.man \
                  hypnowheel.man skytentacles.man sonar.man jigsaw.man \
                  photopile.man rubikblocks.man surfaces.man hilbert.man \
                  voronoi.man moebiusgears.man lockward.man cubicgrid.man \
                  hypnowheel.man skytentacles.man sonar.man jigsaw.man \
                  photopile.man rubikblocks.man surfaces.man hilbert.man \
-                 companioncube.man tronbit.man
+                 companioncube.man tronbit.man kaleidocycle.man \
+                 quasicrystal.man unknownpleasures.man
 MEN            = @GL_MEN@
 RETIRED_MEN    = glforestfire.man
 EXTRAS         = README Makefile.in dxf2gl.pl vrml2gl.pl wfront2gl.pl \
 MEN            = @GL_MEN@
 RETIRED_MEN    = glforestfire.man
 EXTRAS         = README Makefile.in dxf2gl.pl vrml2gl.pl wfront2gl.pl \
@@ -817,6 +821,17 @@ TBIT_OBJS=tronbit.o tronbit_idle1.o tronbit_idle2.o tronbit_no.o tronbit_yes.o\
 tronbit:                       $(TBIT_OBJS)
        $(CC_HACK) -o $@        $(TBIT_OBJS) $(HACK_LIBS)
 
 tronbit:                       $(TBIT_OBJS)
        $(CC_HACK) -o $@        $(TBIT_OBJS) $(HACK_LIBS)
 
+KALEIDOCYCLE_OBJS=kaleidocycle.o normals.o $(HACK_TRACK_OBJS)
+kaleidocycle:                  $(KALEIDOCYCLE_OBJS)
+       $(CC_HACK) -o $@        $(KALEIDOCYCLE_OBJS) $(HACK_LIBS)
+
+quasicrystal:  quasicrystal.o  $(HACK_TRACK_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+unknownpleasures: unknownpleasures.o   $(HACK_TRACK_OBJS)
+       $(CC_HACK) -o $@ $@.o   $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+
 ##############################################################################
 #
 # DO NOT DELETE: updated by make distdepend
 ##############################################################################
 #
 # DO NOT DELETE: updated by make distdepend
@@ -1960,6 +1975,24 @@ juggler3d.o: $(HACK_SRC)/xlockmoreI.h
 juggler3d.o: $(HACK_SRC)/xlockmore.h
 jwzgles.o: ../../config.h
 jwzgles.o: $(srcdir)/jwzglesI.h
 juggler3d.o: $(HACK_SRC)/xlockmore.h
 jwzgles.o: ../../config.h
 jwzgles.o: $(srcdir)/jwzglesI.h
+kaleidocycle.o: ../../config.h
+kaleidocycle.o: $(HACK_SRC)/fps.h
+kaleidocycle.o: $(srcdir)/gltrackball.h
+kaleidocycle.o: $(srcdir)/jwzglesI.h
+kaleidocycle.o: $(srcdir)/jwzgles.h
+kaleidocycle.o: $(srcdir)/normals.h
+kaleidocycle.o: $(srcdir)/rotator.h
+kaleidocycle.o: $(HACK_SRC)/screenhackI.h
+kaleidocycle.o: $(UTILS_SRC)/colors.h
+kaleidocycle.o: $(UTILS_SRC)/grabscreen.h
+kaleidocycle.o: $(UTILS_SRC)/hsv.h
+kaleidocycle.o: $(UTILS_SRC)/resources.h
+kaleidocycle.o: $(UTILS_SRC)/usleep.h
+kaleidocycle.o: $(UTILS_SRC)/visual.h
+kaleidocycle.o: $(UTILS_SRC)/xshm.h
+kaleidocycle.o: $(UTILS_SRC)/yarandom.h
+kaleidocycle.o: $(HACK_SRC)/xlockmoreI.h
+kaleidocycle.o: $(HACK_SRC)/xlockmore.h
 klein.o: ../../config.h
 klein.o: $(HACK_SRC)/fps.h
 klein.o: $(srcdir)/gltrackball.h
 klein.o: ../../config.h
 klein.o: $(HACK_SRC)/fps.h
 klein.o: $(srcdir)/gltrackball.h
@@ -2296,6 +2329,22 @@ pulsar.o: $(UTILS_SRC)/yarandom.h
 pulsar.o: $(HACK_SRC)/xlockmoreI.h
 pulsar.o: $(HACK_SRC)/xlockmore.h
 pulsar.o: $(srcdir)/xpm-ximage.h
 pulsar.o: $(HACK_SRC)/xlockmoreI.h
 pulsar.o: $(HACK_SRC)/xlockmore.h
 pulsar.o: $(srcdir)/xpm-ximage.h
+quasicrystal.o: ../../config.h
+quasicrystal.o: $(HACK_SRC)/fps.h
+quasicrystal.o: $(srcdir)/jwzglesI.h
+quasicrystal.o: $(srcdir)/jwzgles.h
+quasicrystal.o: $(srcdir)/rotator.h
+quasicrystal.o: $(HACK_SRC)/screenhackI.h
+quasicrystal.o: $(UTILS_SRC)/colors.h
+quasicrystal.o: $(UTILS_SRC)/grabscreen.h
+quasicrystal.o: $(UTILS_SRC)/hsv.h
+quasicrystal.o: $(UTILS_SRC)/resources.h
+quasicrystal.o: $(UTILS_SRC)/usleep.h
+quasicrystal.o: $(UTILS_SRC)/visual.h
+quasicrystal.o: $(UTILS_SRC)/xshm.h
+quasicrystal.o: $(UTILS_SRC)/yarandom.h
+quasicrystal.o: $(HACK_SRC)/xlockmoreI.h
+quasicrystal.o: $(HACK_SRC)/xlockmore.h
 queens.o: $(srcdir)/chessmodels.h
 queens.o: ../../config.h
 queens.o: $(HACK_SRC)/fps.h
 queens.o: $(srcdir)/chessmodels.h
 queens.o: ../../config.h
 queens.o: $(HACK_SRC)/fps.h
@@ -2840,6 +2889,22 @@ tunnel_draw.o: $(UTILS_SRC)/visual.h
 tunnel_draw.o: $(UTILS_SRC)/xshm.h
 tunnel_draw.o: $(UTILS_SRC)/yarandom.h
 tunnel_draw.o: $(HACK_SRC)/xlockmoreI.h
 tunnel_draw.o: $(UTILS_SRC)/xshm.h
 tunnel_draw.o: $(UTILS_SRC)/yarandom.h
 tunnel_draw.o: $(HACK_SRC)/xlockmoreI.h
+unknownpleasures.o: ../../config.h
+unknownpleasures.o: $(HACK_SRC)/fps.h
+unknownpleasures.o: $(srcdir)/gltrackball.h
+unknownpleasures.o: $(srcdir)/jwzglesI.h
+unknownpleasures.o: $(srcdir)/jwzgles.h
+unknownpleasures.o: $(HACK_SRC)/screenhackI.h
+unknownpleasures.o: $(UTILS_SRC)/colors.h
+unknownpleasures.o: $(UTILS_SRC)/grabscreen.h
+unknownpleasures.o: $(UTILS_SRC)/hsv.h
+unknownpleasures.o: $(UTILS_SRC)/resources.h
+unknownpleasures.o: $(UTILS_SRC)/usleep.h
+unknownpleasures.o: $(UTILS_SRC)/visual.h
+unknownpleasures.o: $(UTILS_SRC)/xshm.h
+unknownpleasures.o: $(UTILS_SRC)/yarandom.h
+unknownpleasures.o: $(HACK_SRC)/xlockmoreI.h
+unknownpleasures.o: $(HACK_SRC)/xlockmore.h
 voronoi.o: ../../config.h
 voronoi.o: $(HACK_SRC)/fps.h
 voronoi.o: $(srcdir)/jwzglesI.h
 voronoi.o: ../../config.h
 voronoi.o: $(HACK_SRC)/fps.h
 voronoi.o: $(srcdir)/jwzglesI.h
index d0c84ed083a67cb7ba459db2633e729bbd5be9ca..b9a290e3ba8716a606401b2d1df090e2cc615b61 100644 (file)
@@ -19,7 +19,6 @@
 
 
 #define DEFAULTS       "*delay:        30000       \n" \
 
 
 #define DEFAULTS       "*delay:        30000       \n" \
-                       "*count:        1           \n" \
                        "*showFPS:      False       \n" \
                        "*count:        3           \n" \
                        "*wireframe:    False       \n" \
                        "*showFPS:      False       \n" \
                        "*count:        3           \n" \
                        "*wireframe:    False       \n" \
index 8ae8143f0670b567d5db44e89e393ba53dd24a78..3f92a545323d2e93fa5b6680cf8a8cca36913a1b 100644 (file)
@@ -458,7 +458,7 @@ init_cube (ModeInfo *mi)
     H[2] = ((H[1] + shift) < 360) ? (H[1]+shift) : (H[1] + shift - 360);
     S[0] = S[1] = S[2] = 1.0;
     V[0] = V[1] = V[2] = 1.0;
     H[2] = ((H[1] + shift) < 360) ? (H[1]+shift) : (H[1] + shift - 360);
     S[0] = S[1] = S[2] = 1.0;
     V[0] = V[1] = V[2] = 1.0;
-    make_color_loop(0, 0,
+    make_color_loop(0, 0, 0,
                    H[0], S[0], V[0], 
                    H[1], S[1], V[1], 
                    H[2], S[2], V[2], 
                    H[0], S[0], V[0], 
                    H[1], S[1], V[1], 
                    H[2], S[2], V[2], 
index 1b192428deb070565135ed6ebe71cf54bb5f20b3..d6c5514830875f26af237260d669a24737e0b35c 100644 (file)
@@ -2305,10 +2305,7 @@ draw_logo (ModeInfo *mi)
   {
     GLfloat scale = 0;
     glScalef(3, 3, 3);
   {
     GLfloat scale = 0;
     glScalef(3, 3, 3);
-
-# ifdef USE_IPHONE
-    glScalef (0.7, 0.7, 0.7);  /* make room for the frame */
-# endif
+    glScalef (0.6, 0.6, 0.6);
 
     glColor3f(dc->color[0], dc->color[1], dc->color[2]);
 
 
     glColor3f(dc->color[0], dc->color[1], dc->color[2]);
 
index 8c44bff3983a777886742774909a8bc07954c901..9c37c8b8647ba8db0e2d16f587e4779018ea74f6 100644 (file)
@@ -284,13 +284,13 @@ static void make_tables(Engine *e)
   float f;
 
   f = ONEREV / (M_PI * 2);
   float f;
 
   f = ONEREV / (M_PI * 2);
-  for (i = 0 ; i <= TWOREV ; i++) {
+  for (i = 0 ; i < TWOREV ; i++) {
     e->sin_table[i] = sin(i/f);
   }
     e->sin_table[i] = sin(i/f);
   }
-  for (i = 0 ; i <= TWOREV ; i++) {
+  for (i = 0 ; i < TWOREV ; i++) {
     e->cos_table[i] = cos(i/f);
   }
     e->cos_table[i] = cos(i/f);
   }
-  for (i = 0 ; i <= TWOREV ; i++) {
+  for (i = 0 ; i < TWOREV ; i++) {
     e->tan_table[i] = tan(i/f);
   }
 }
     e->tan_table[i] = tan(i/f);
   }
 }
index 25ceb422112b234d6f848120b594efec2654b173..227327fcf4d81ea0b8b949b7692fb6286427ca54 100644 (file)
@@ -1,5 +1,5 @@
 /* font-ximage.c --- renders text to an XImage for use with OpenGL.
 /* font-ximage.c --- renders text to an XImage for use with OpenGL.
- * xscreensaver, Copyright (c) 2001, 2003 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 2001-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -134,6 +134,8 @@ text_to_ximage (Screen *screen, Visual *visual,
         overall.rbearing = MAX(overall.rbearing, o2.rbearing);
         lines++;
       }
         overall.rbearing = MAX(overall.rbearing, o2.rbearing);
         lines++;
       }
+    free (text);
+    text = 0;
 
     width = overall.lbearing + overall.rbearing + margin + margin + 1;
     height = ((f->ascent + f->descent) * lines) + margin + margin;
 
     width = overall.lbearing + overall.rbearing + margin + margin + 1;
     height = ((f->ascent + f->descent) * lines) + margin + margin;
index eb522a031b2b0b7e9f256c2b1a1e5001d25974f6..158a42347674a6f1e715ffaf038d787567757ded 100644 (file)
@@ -157,7 +157,7 @@ init_glschool(ModeInfo *mi)
        sc->nColors = 360;
        sc->context = init_GL(mi);
        sc->colors = (XColor *)calloc(sc->nColors, sizeof(XColor));
        sc->nColors = 360;
        sc->context = init_GL(mi);
        sc->colors = (XColor *)calloc(sc->nColors, sizeof(XColor));
-       make_color_ramp(0, 0,
+       make_color_ramp(0, 0, 0,
                                        0.0, 1.0, 1.0,
                                        359.0, 1.0, 1.0,
                                        sc->colors, &sc->nColors,
                                        0.0, 1.0, 1.0,
                                        359.0, 1.0, 1.0,
                                        sc->colors, &sc->nColors,
index 93d4c54263ef97e2610616d794013e10f0acbc5d..ee54cf91d2432f4a541774a742621d77286a54c4 100644 (file)
@@ -116,8 +116,8 @@ gltrackball_mousewheel (trackball_state *ts,
                         int button, int percent, int flip_p)
 {
   int up_p;
                         int button, int percent, int flip_p)
 {
   int up_p;
-  double move;
   int horizontal_p;
   int horizontal_p;
+  int mx, my, move, scale;
 
 #ifdef HAVE_COCOA
   flip_p = 0;      /* MacOS has already handled this. */
 
 #ifdef HAVE_COCOA
   flip_p = 0;      /* MacOS has already handled this. */
@@ -137,15 +137,14 @@ gltrackball_mousewheel (trackball_state *ts,
       up_p = !up_p;
     }
 
       up_p = !up_p;
     }
 
+  scale = mx = my = 1000;
   move = (up_p
   move = (up_p
-          ? 1.0 - (percent / 100.0)
-          : 1.0 + (percent / 100.0));
-
-  gltrackball_start (ts, 50, 50, 100, 100);
-  if (horizontal_p)
-    gltrackball_track (ts, 50*move, 50, 100, 100);
-  else
-    gltrackball_track (ts, 50, 50*move, 100, 100);
+          ? floor (scale * (1.0 - (percent / 100.0)))
+          : ceil  (scale * (1.0 + (percent / 100.0))));
+  if (horizontal_p) mx = move;
+  else              my = move;
+  gltrackball_start (ts, scale, scale, scale*2, scale*2);
+  gltrackball_track (ts, mx, my, scale*2, scale*2);
 }
 
 void
 }
 
 void
index f70b120ba1e1c2436cbdacfe3e7d6d4d2e7d774d..8fe0ebcbdaefafc8b525c2cd1f14469165d86d35 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2012-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -1027,6 +1027,7 @@ jwzgles_glTexCoord1f (GLfloat s)
 }
 
 
 }
 
 
+/* glColor: GLfloat */
 
 void
 jwzgles_glColor4fv (const GLfloat *v)
 
 void
 jwzgles_glColor4fv (const GLfloat *v)
@@ -1079,77 +1080,230 @@ jwzgles_glColor4f (GLfloat r, GLfloat g, GLfloat b, GLfloat a)
   jwzgles_glColor4fv (v);
 }
 
   jwzgles_glColor4fv (v);
 }
 
-
 void
 jwzgles_glColor3f (GLfloat r, GLfloat g, GLfloat b)
 {
   jwzgles_glColor4f (r, g, b, 1);
 }
 
 void
 jwzgles_glColor3f (GLfloat r, GLfloat g, GLfloat b)
 {
   jwzgles_glColor4f (r, g, b, 1);
 }
 
-
 void
 jwzgles_glColor3fv (const GLfloat *v)
 {
 void
 jwzgles_glColor3fv (const GLfloat *v)
 {
-  GLfloat vv[4];
-  vv[0] = v[0];
-  vv[1] = v[1];
-  vv[2] = v[2];
-  vv[3] = 1;
-  jwzgles_glColor4fv (vv);
+  jwzgles_glColor3f (v[0], v[1], v[2]);
 }
 
 
 }
 
 
+/* glColor: GLdouble */
+
 void
 void
-jwzgles_glColor4i (GLuint r, GLuint g, GLuint b, GLuint a)
+jwzgles_glColor4d (GLdouble r, GLdouble g, GLdouble b, GLdouble a)
 {
   jwzgles_glColor4f (r, g, b, a);
 }
 
 {
   jwzgles_glColor4f (r, g, b, a);
 }
 
+void
+jwzgles_glColor4dv (const GLdouble *v)
+{
+  jwzgles_glColor4d (v[0], v[1], v[2], v[3]);
+}
 
 void
 
 void
-jwzgles_glColor3i (GLuint r, GLuint g, GLuint b)
+jwzgles_glColor3d (GLdouble r, GLdouble g, GLdouble b)
 {
 {
-  jwzgles_glColor4f (r, g, b, 1);
+  jwzgles_glColor4d (r, g, b, 1.0);
+}
+
+void
+jwzgles_glColor3dv (const GLdouble *v)
+{
+  jwzgles_glColor3d (v[0], v[1], v[2]);
 }
 
 
 }
 
 
+/* glColor: GLint (INT_MIN - INT_MAX) */
+
+void
+jwzgles_glColor4i (GLint r, GLint g, GLint b, GLint a)
+{
+  /* -0x8000000 - 0x7FFFFFFF  =>  0.0 - 1.0 */
+  jwzgles_glColor4f (0.5 + (GLfloat) r / 0xFFFFFFFF,
+                     0.5 + (GLfloat) g / 0xFFFFFFFF, 
+                     0.5 + (GLfloat) b / 0xFFFFFFFF,
+                     0.5 + (GLfloat) a / 0xFFFFFFFF);
+}
+
 void
 jwzgles_glColor4iv (const GLint *v)
 {
 void
 jwzgles_glColor4iv (const GLint *v)
 {
-  GLfloat vv[4];
-  vv[0] = v[0];
-  vv[1] = v[1];
-  vv[2] = v[2];
-  vv[3] = v[3];
-  jwzgles_glColor4fv (vv);
+  jwzgles_glColor4i (v[0], v[1], v[2], v[3]);
 }
 
 
 }
 
 
+void
+jwzgles_glColor3i (GLint r, GLint g, GLint b)
+{
+  jwzgles_glColor4i (r, g, b, 0x7FFFFFFF);
+}
+
 void
 jwzgles_glColor3iv (const GLint *v)
 {
 void
 jwzgles_glColor3iv (const GLint *v)
 {
-  GLfloat vv[4];
-  vv[0] = v[0];
-  vv[1] = v[1];
-  vv[2] = v[2];
-  vv[3] = 1;
-  jwzgles_glColor4fv (vv);
+  jwzgles_glColor3i (v[0], v[1], v[2]);
+}
+
+
+/* glColor: GLuint (0 - UINT_MAX) */
+
+void
+jwzgles_glColor4ui (GLuint r, GLuint g, GLuint b, GLuint a)
+{
+  /* 0 - 0xFFFFFFFF  =>  0.0 - 1.0 */
+  jwzgles_glColor4f ((GLfloat) r / 0xFFFFFFFF,
+                     (GLfloat) g / 0xFFFFFFFF, 
+                     (GLfloat) b / 0xFFFFFFFF,
+                     (GLfloat) a / 0xFFFFFFFF);
+}
+
+void
+jwzgles_glColor4uiv (const GLuint *v)
+{
+  jwzgles_glColor4ui (v[0], v[1], v[2], v[3]);
+}
+
+void
+jwzgles_glColor3ui (GLuint r, GLuint g, GLuint b)
+{
+  jwzgles_glColor4ui (r, g, b, 0xFFFFFFFF);
+}
+
+void
+jwzgles_glColor3uiv (const GLuint *v)
+{
+  jwzgles_glColor3ui (v[0], v[1], v[2]);
+}
+
+
+/* glColor: GLshort (SHRT_MIN - SHRT_MAX) */
+
+void
+jwzgles_glColor4s (GLshort r, GLshort g, GLshort b, GLshort a)
+{
+  /* -0x8000 - 0x7FFF  =>  0.0 - 1.0 */
+  jwzgles_glColor4f (0.5 + (GLfloat) r / 0xFFFF,
+                     0.5 + (GLfloat) g / 0xFFFF,
+                     0.5 + (GLfloat) b / 0xFFFF,
+                     0.5 + (GLfloat) a / 0xFFFF);
+}
+
+void
+jwzgles_glColor4sv (const GLshort *v)
+{
+  jwzgles_glColor4s (v[0], v[1], v[2], v[3]);
+}
+
+void
+jwzgles_glColor3s (GLshort r, GLshort g, GLshort b)
+{
+  jwzgles_glColor4s (r, g, b, 0x7FFF);
+}
+
+void
+jwzgles_glColor3sv (const GLshort *v)
+{
+  jwzgles_glColor3s (v[0], v[1], v[2]);
 }
 
 
 }
 
 
+/* glColor: GLushort (0 - USHRT_MAX) */
+
+void
+jwzgles_glColor4us (GLushort r, GLushort g, GLushort b, GLushort a)
+{
+  /* 0 - 0xFFFF  =>  0.0 - 1.0 */
+  jwzgles_glColor4f ((GLfloat) r / 0xFFFF,
+                     (GLfloat) g / 0xFFFF,
+                     (GLfloat) b / 0xFFFF,
+                     (GLfloat) a / 0xFFFF);
+}
+
+void
+jwzgles_glColor4usv (const GLushort *v)
+{
+  jwzgles_glColor4us (v[0], v[1], v[2], v[3]);
+}
+
+void
+jwzgles_glColor3us (GLushort r, GLushort g, GLushort b)
+{
+  jwzgles_glColor4us (r, g, b, 0xFFFF);
+}
+
+void
+jwzgles_glColor3usv (const GLushort *v)
+{
+  jwzgles_glColor3us (v[0], v[1], v[2]);
+}
+
+
+/* glColor: GLbyte (-128 - 127) */
+
+void
+jwzgles_glColor4b (GLbyte r, GLbyte g, GLbyte b, GLbyte a)
+{
+  /* -128 - 127  =>  0.0 - 1.0 */
+  jwzgles_glColor4f (0.5 + (GLfloat) r / 255,
+                     0.5 + (GLfloat) g / 255,
+                     0.5 + (GLfloat) b / 255,
+                     0.5 + (GLfloat) a / 255);
+}
+
+void
+jwzgles_glColor4bv (const GLbyte *v)
+{
+  jwzgles_glColor4b (v[0], v[1], v[2], v[3]);
+}
+
+void
+jwzgles_glColor3b (GLbyte r, GLbyte g, GLbyte b)
+{
+  jwzgles_glColor4b (r, g, b, 127);
+}
+
+void
+jwzgles_glColor3bv (const GLbyte *v)
+{
+  jwzgles_glColor3b (v[0], v[1], v[2]);
+}
+
+
+/* glColor: GLubyte (0 - 255) */
+
 void
 jwzgles_glColor4ub (GLubyte r, GLubyte g, GLubyte b, GLubyte a)
 {
 void
 jwzgles_glColor4ub (GLubyte r, GLubyte g, GLubyte b, GLubyte a)
 {
-  jwzgles_glColor4f (r, g, b, a);
+  /* 0 - 255  =>  0.0 - 1.0 */
+  jwzgles_glColor4f (r / 255.0, g / 255.0, b / 255.0, a / 255.0);
 }
 
 }
 
+void
+jwzgles_glColor4ubv (const GLubyte *v)
+{
+  jwzgles_glColor4ub (v[0], v[1], v[2], v[3]);
+}
 
 void
 jwzgles_glColor3ub (GLubyte r, GLubyte g, GLubyte b)
 {
 
 void
 jwzgles_glColor3ub (GLubyte r, GLubyte g, GLubyte b)
 {
-  jwzgles_glColor4f (r, g, b, 1);
+  jwzgles_glColor4ub (r, g, b, 255);
 }
 
 }
 
+void
+jwzgles_glColor3ubv (const GLubyte *v)
+{
+  jwzgles_glColor3ub (v[0], v[1], v[2]);
+}
+
+
 
 void
 jwzgles_glMaterialfv (GLenum face, GLenum pname, const GLfloat *color)
 
 void
 jwzgles_glMaterialfv (GLenum face, GLenum pname, const GLfloat *color)
@@ -1758,10 +1912,10 @@ optimize_arrays (void)
   for (i = 0; i < L->count; i++)
     {
       list_fn *F = &L->fns[i];
   for (i = 0; i < L->count; i++)
     {
       list_fn *F = &L->fns[i];
-      int count;
+/*      int count; */
       if (! F->arrays)
         continue;
       if (! F->arrays)
         continue;
-      count = F->argv[2].i;  /* 3rd arg to glDrawArrays */
+/*      count = F->argv[2].i;*/  /* 3rd arg to glDrawArrays */
 
       for (j = 0; j < 4; j++)
         {
 
       for (j = 0; j < 4; j++)
         {
@@ -2252,7 +2406,6 @@ copy_array_data (draw_array *A, int count, const char *name)
      data multiple times.
    */
   int stride2, bytes, i, j;
      data multiple times.
    */
   int stride2, bytes, i, j;
-  const void *old;
   void *data2;
   const GLfloat *IF;
   GLfloat *OF;
   void *data2;
   const GLfloat *IF;
   GLfloat *OF;
@@ -2306,7 +2459,6 @@ copy_array_data (draw_array *A, int count, const char *name)
     break;
   }
 
     break;
   }
 
-  old = A->data;
   A->data = data2;
   A->bytes = bytes;
   A->stride = stride2;
   A->data = data2;
   A->bytes = bytes;
   A->stride = stride2;
@@ -3054,6 +3206,9 @@ jwzgles_glEnable (GLuint bit)
     }
   else
     {
     }
   else
     {
+      /* We implement 1D textures as 2D textures. */
+      if (bit == GL_TEXTURE_1D) bit = GL_TEXTURE_2D;
+
       if (! state->replaying_list)
         LOG2 ("direct %-12s %s", "glEnable", mode_desc(bit));
       glEnable (bit);  /* the real one */
       if (! state->replaying_list)
         LOG2 ("direct %-12s %s", "glEnable", mode_desc(bit));
       glEnable (bit);  /* the real one */
@@ -3095,6 +3250,9 @@ jwzgles_glDisable (GLuint bit)
     }
   else
     {
     }
   else
     {
+      /* We implement 1D textures as 2D textures. */
+      if (bit == GL_TEXTURE_1D) bit = GL_TEXTURE_2D;
+
       if (! state->replaying_list)
         LOG2 ("direct %-12s %s", "glDisable", mode_desc(bit));
       glDisable (bit);  /* the real one */
       if (! state->replaying_list)
         LOG2 ("direct %-12s %s", "glDisable", mode_desc(bit));
       glDisable (bit);  /* the real one */
@@ -3131,6 +3289,10 @@ jwzgles_glIsEnabled (GLuint bit)
   Assert (!state->compiling_verts, "glIsEnabled not allowed inside glBegin");
   Assert (!state->compiling_list,  "glIsEnabled not allowed inside glNewList");
   */
   Assert (!state->compiling_verts, "glIsEnabled not allowed inside glBegin");
   Assert (!state->compiling_list,  "glIsEnabled not allowed inside glNewList");
   */
+
+  /* We implement 1D textures as 2D textures. */
+  if (bit == GL_TEXTURE_1D) bit = GL_TEXTURE_2D;
+
   switch (bit) {
   case GL_TEXTURE_2D: return !!(state->enabled & ISENABLED_TEXTURE_2D);
   case GL_TEXTURE_GEN_S: return !!(state->enabled & ISENABLED_TEXTURE_GEN_S);
   switch (bit) {
   case GL_TEXTURE_2D: return !!(state->enabled & ISENABLED_TEXTURE_2D);
   case GL_TEXTURE_GEN_S: return !!(state->enabled & ISENABLED_TEXTURE_GEN_S);
index faa26efd9a69749b2885ec05f901ac3345576167..afe0b35ca91a17e720fc23ca066756e664d64b23 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2012-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -197,12 +197,34 @@ extern void jwzgles_glColor3f (GLfloat, GLfloat, GLfloat);
 extern void jwzgles_glColor4f (GLfloat, GLfloat, GLfloat, GLfloat);
 extern void jwzgles_glColor3fv (const GLfloat *);
 extern void jwzgles_glColor4fv (const GLfloat *);
 extern void jwzgles_glColor4f (GLfloat, GLfloat, GLfloat, GLfloat);
 extern void jwzgles_glColor3fv (const GLfloat *);
 extern void jwzgles_glColor4fv (const GLfloat *);
-extern void jwzgles_glColor4i (GLuint, GLuint, GLuint, GLuint);
-extern void jwzgles_glColor3i (GLuint, GLuint, GLuint);
+extern void jwzgles_glColor3s (GLshort, GLshort, GLshort);
+extern void jwzgles_glColor4s (GLshort, GLshort, GLshort, GLshort);
+extern void jwzgles_glColor3sv (const GLshort *);
+extern void jwzgles_glColor4sv (const GLshort *);
+extern void jwzgles_glColor3us (GLushort, GLushort, GLushort);
+extern void jwzgles_glColor4us (GLushort, GLushort, GLushort, GLushort);
+extern void jwzgles_glColor3usv (const GLushort *);
+extern void jwzgles_glColor4usv (const GLushort *);
+extern void jwzgles_glColor3d (GLdouble, GLdouble, GLdouble);
+extern void jwzgles_glColor4d (GLdouble, GLdouble, GLdouble, GLdouble);
+extern void jwzgles_glColor3dv (const GLdouble *);
+extern void jwzgles_glColor4dv (const GLdouble *);
+extern void jwzgles_glColor4i (GLint, GLint, GLint, GLint);
+extern void jwzgles_glColor3i (GLint, GLint, GLint);
 extern void jwzgles_glColor3iv (const GLint *);
 extern void jwzgles_glColor4iv (const GLint *);
 extern void jwzgles_glColor3iv (const GLint *);
 extern void jwzgles_glColor4iv (const GLint *);
+extern void jwzgles_glColor4ui (GLuint, GLuint, GLuint, GLuint);
+extern void jwzgles_glColor3ui (GLuint, GLuint, GLuint);
+extern void jwzgles_glColor3uiv (const GLuint *);
+extern void jwzgles_glColor4uiv (const GLuint *);
+extern void jwzgles_glColor4b (GLbyte, GLbyte, GLbyte, GLbyte);
+extern void jwzgles_glColor3b (GLbyte, GLbyte, GLbyte);
+extern void jwzgles_glColor4bv (const GLbyte *);
+extern void jwzgles_glColor3bv (const GLbyte *);
 extern void jwzgles_glColor4ub (GLubyte, GLubyte, GLubyte, GLubyte);
 extern void jwzgles_glColor3ub (GLubyte, GLubyte, GLubyte);
 extern void jwzgles_glColor4ub (GLubyte, GLubyte, GLubyte, GLubyte);
 extern void jwzgles_glColor3ub (GLubyte, GLubyte, GLubyte);
+extern void jwzgles_glColor4ubv (const GLubyte *);
+extern void jwzgles_glColor3ubv (const GLubyte *);
 extern void jwzgles_glMaterialf (GLuint, GLuint, GLfloat);
 extern void jwzgles_glMateriali (GLuint, GLuint, GLuint);
 extern void jwzgles_glMaterialfv (GLuint, GLuint, const GLfloat *);
 extern void jwzgles_glMaterialf (GLuint, GLuint, GLfloat);
 extern void jwzgles_glMateriali (GLuint, GLuint, GLuint);
 extern void jwzgles_glMaterialfv (GLuint, GLuint, const GLfloat *);
diff --git a/hacks/glx/kaleidocycle.c b/hacks/glx/kaleidocycle.c
new file mode 100644 (file)
index 0000000..025e45b
--- /dev/null
@@ -0,0 +1,566 @@
+/* kaleidocycle, Copyright (c) 2013 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ *
+ * A loop of rotating tetrahedra.  Created by jwz, July 2013.
+ * Inspired by, and some math borrowed from:
+ * http://www.kaleidocycles.de/pdf/kaleidocycles_theory.pdf
+ * http://intothecontinuum.tumblr.com/post/50873970770/an-even-number-of-at-least-8-regular-tetrahedra
+ */
+
+
+#define DEFAULTS       "*delay:        30000       \n" \
+                       "*count:        16          \n" \
+                       "*showFPS:      False       \n" \
+                       "*wireframe:    False       \n" \
+
+# define refresh_kaleidocycle 0
+# define release_kaleidocycle 0
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#include "xlockmore.h"
+#include "colors.h"
+#include "normals.h"
+#include "rotator.h"
+#include "gltrackball.h"
+#include <ctype.h>
+
+#ifdef USE_GL /* whole file */
+
+#define DEF_SPIN        "Z"
+#define DEF_WANDER      "False"
+#define DEF_SPEED       "1.0"
+
+typedef struct {
+  GLXContext *glx_context;
+  rotator *rot, *rot2;
+  trackball_state *trackball;
+  Bool button_down_p;
+
+  int min_count, max_count;
+  Bool startup_p;
+
+  int ncolors;
+  XColor *colors;
+  int ccolor;
+
+  GLfloat count;
+  GLfloat th, dth;
+
+  enum { STATIC, IN, OUT } mode, prev_mode;
+
+} kaleidocycle_configuration;
+
+static kaleidocycle_configuration *bps = NULL;
+
+static char *do_spin;
+static GLfloat speed;
+static Bool do_wander;
+
+static XrmOptionDescRec opts[] = {
+  { "-spin",   ".spin",   XrmoptionSepArg, 0 },
+  { "+spin",   ".spin",   XrmoptionNoArg, "" },
+  { "-wander", ".wander", XrmoptionNoArg, "True" },
+  { "+wander", ".wander", XrmoptionNoArg, "False" },
+  { "-speed",  ".speed",  XrmoptionSepArg, 0 },
+};
+
+static argtype vars[] = {
+  {&do_spin,   "spin",   "Spin",   DEF_SPIN,   t_String},
+  {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool},
+  {&speed,     "speed",  "Speed",  DEF_SPEED,  t_Float},
+};
+
+ENTRYPOINT ModeSpecOpt kaleidocycle_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+
+/* Window management, etc
+ */
+ENTRYPOINT void
+reshape_kaleidocycle (ModeInfo *mi, int width, int height)
+{
+  GLfloat h = (GLfloat) height / (GLfloat) width;
+
+  glViewport (0, 0, (GLint) width, (GLint) height);
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  gluPerspective (30.0, 1/h, 1.0, 100.0);
+
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  gluLookAt( 0.0, 0.0, 30.0,
+             0.0, 0.0, 0.0,
+             0.0, 1.0, 0.0);
+
+  glClear(GL_COLOR_BUFFER_BIT);
+}
+
+
+ENTRYPOINT Bool
+kaleidocycle_handle_event (ModeInfo *mi, XEvent *event)
+{
+  kaleidocycle_configuration *bp = &bps[MI_SCREEN(mi)];
+
+  if (event->xany.type == ButtonPress &&
+      event->xbutton.button == Button1)
+    {
+      bp->button_down_p = True;
+      gltrackball_start (bp->trackball,
+                         event->xbutton.x, event->xbutton.y,
+                         MI_WIDTH (mi), MI_HEIGHT (mi));
+      return True;
+    }
+  else if (event->xany.type == ButtonRelease &&
+           event->xbutton.button == Button1)
+    {
+      bp->button_down_p = False;
+      return True;
+    }
+  else if (event->xany.type == ButtonPress &&
+           (event->xbutton.button == Button4 ||
+            event->xbutton.button == Button5 ||
+            event->xbutton.button == Button6 ||
+            event->xbutton.button == Button7))
+    {
+      gltrackball_mousewheel (bp->trackball, event->xbutton.button, 5,
+                              !!event->xbutton.state);
+      return True;
+    }
+  else if (event->xany.type == MotionNotify &&
+           bp->button_down_p)
+    {
+      gltrackball_track (bp->trackball,
+                         event->xmotion.x, event->xmotion.y,
+                         MI_WIDTH (mi), MI_HEIGHT (mi));
+      return True;
+    }
+
+  return False;
+}
+
+
+
+ENTRYPOINT void 
+init_kaleidocycle (ModeInfo *mi)
+{
+  kaleidocycle_configuration *bp;
+  int wire = MI_IS_WIREFRAME(mi);
+  int i;
+
+  if (!bps) {
+    bps = (kaleidocycle_configuration *)
+      calloc (MI_NUM_SCREENS(mi), sizeof (kaleidocycle_configuration));
+    if (!bps) {
+      fprintf(stderr, "%s: out of memory\n", progname);
+      exit(1);
+    }
+  }
+
+  bp = &bps[MI_SCREEN(mi)];
+
+  bp->glx_context = init_GL(mi);
+
+  reshape_kaleidocycle (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+  glLineWidth (4);
+
+  if (!wire)
+    {
+      GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0};
+      GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};
+      GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0};
+      GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0};
+
+      glEnable(GL_LIGHTING);
+      glEnable(GL_LIGHT0);
+      glEnable(GL_DEPTH_TEST);
+      glEnable(GL_CULL_FACE);
+
+      glLightfv(GL_LIGHT0, GL_POSITION, pos);
+      glLightfv(GL_LIGHT0, GL_AMBIENT,  amb);
+      glLightfv(GL_LIGHT0, GL_DIFFUSE,  dif);
+      glLightfv(GL_LIGHT0, GL_SPECULAR, spc);
+
+      glEnable (GL_BLEND);
+      glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    }
+
+  {
+    Bool spinx = False, spiny = False, spinz = False;
+    double spin_speed   = 0.25;
+    double wander_speed = 0.005;
+    double spin_accel   = 0.2;
+    double twist_speed  = 0.25;
+    double twist_accel  = 1.0;
+
+    char *s = do_spin;
+    while (*s)
+      {
+        if      (*s == 'x' || *s == 'X') spinx = True;
+        else if (*s == 'y' || *s == 'Y') spiny = True;
+        else if (*s == 'z' || *s == 'Z') spinz = True;
+        else if (*s == '0') ;
+        else
+          {
+            fprintf (stderr,
+         "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n",
+                     progname, do_spin);
+            exit (1);
+          }
+        s++;
+      }
+
+    bp->rot = make_rotator (spinx ? spin_speed : 0,
+                            spiny ? spin_speed : 0,
+                            spinz ? spin_speed : 0,
+                            spin_accel,
+                            do_wander ? wander_speed : 0,
+                            False);
+    bp->rot2 = make_rotator (twist_speed, 0, 0, twist_accel, 0, True);
+
+    bp->trackball = gltrackball_init ();
+  }
+
+  if (MI_COUNT(mi) < 8) MI_COUNT(mi) = 8;
+  if (MI_COUNT(mi) & 1) MI_COUNT(mi)++;
+
+  bp->min_count = 8;
+  bp->max_count = 12 + MI_COUNT(mi) * 1.3;
+  if (bp->max_count & 1) bp->max_count++;
+  bp->startup_p = True;
+
+  bp->count = 0;
+  bp->mode = IN;
+  bp->prev_mode = IN;
+
+/*
+  bp->count = MI_COUNT(mi);
+  bp->mode = STATIC;
+*/
+
+  bp->ncolors = 512;
+  if (! bp->colors)
+    bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor));
+  make_uniform_colormap (0, 0, 0,
+                         bp->colors, &bp->ncolors,
+                         False, 0, False);
+
+  for (i = 0; i < bp->ncolors; i++)
+    {
+      /* make colors twice as bright */
+      bp->colors[i].red   = (bp->colors[i].red   >> 2) + 0x7FFF;
+      bp->colors[i].green = (bp->colors[i].green >> 2) + 0x7FFF;
+      bp->colors[i].blue  = (bp->colors[i].blue  >> 2) + 0x7FFF;
+    }
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+}
+
+
+
+/* t = toroidal rotation, a = radial position
+   colors = 4 colors, 4 channels each.
+ */
+static void
+draw_tetra (ModeInfo *mi, double t, double a, Bool reflect_p,
+            GLfloat *colors)
+{
+  int wire = MI_IS_WIREFRAME(mi);
+
+  XYZ v1, v2, v3, P, Q;
+  XYZ verts[4];
+  int i;
+
+  double scale;
+  double sint = sin(t);
+  double cost = cos(t);
+  double tana = tan(a);
+  double sint2 = sint * sint;
+  double tana2 = tana * tana;
+
+  v1.x = cost;
+  v1.y = 0;
+  v1.z = sint;
+
+  scale = 1 / sqrt (1 + sint2 * tana2);
+  v2.x = scale * -sint;
+  v2.y = scale * -sint * tana;
+  v2.z = scale * cost;
+
+  v3.x = scale * -sint2 * tana;
+  v3.y = scale;
+  v3.z = scale * cost * sint * tana;
+
+  P.x = v3.y / tana - v3.x;
+  P.y = 0;
+  P.z = -v3.z / 2;
+
+  Q.x = v3.y / tana;
+  Q.y = v3.y;
+  Q.z = v3.z / 2;
+
+  verts[0] = P;
+  verts[1] = P;
+  verts[2] = Q;
+  verts[3] = Q;
+
+  scale = sqrt(2) / 2;
+  verts[0].x = P.x - scale * v1.x;
+  verts[0].y = P.y - scale * v1.y;
+  verts[0].z = P.z - scale * v1.z;
+
+  verts[1].x = P.x + scale * v1.x;
+  verts[1].y = P.y + scale * v1.y;
+  verts[1].z = P.z + scale * v1.z;
+
+  verts[2].x = Q.x - scale * v2.x;
+  verts[2].y = Q.y - scale * v2.y;
+  verts[2].z = Q.z - scale * v2.z;
+
+  verts[3].x = Q.x + scale * v2.x;
+  verts[3].y = Q.y + scale * v2.y;
+  verts[3].z = Q.z + scale * v2.z;
+
+  for (i = 0; i < 4; i++)
+    {
+      Bool reflect2_p = ((i + (reflect_p != 0)) & 1);
+      XYZ a = verts[(i+1) % 4];
+      XYZ b = verts[(i+2) % 4];
+      XYZ c = verts[(i+3) % 4];
+      XYZ n = ((i & 1)
+               ? calc_normal (b, a, c)
+               : calc_normal (a, b, c));
+      if (wire)
+        glColor4fv (colors + (i * 4));
+      else
+        glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colors + (i * 4));
+
+      glFrontFace (reflect2_p ? GL_CW : GL_CCW);
+      glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES);
+      glNormal3f (n.x, n.y, n.z);
+      glVertex3f (a.x, a.y, a.z);
+      glVertex3f (b.x, b.y, b.z);
+      glVertex3f (c.x, c.y, c.z);
+      glEnd();
+    }
+}
+
+
+/* Reflect through the plane normal to the given vector.
+ */
+static void
+reflect (double x, double y, double z)
+{
+  GLfloat m[4][4];
+
+  m[0][0] = 1 - (2 * x * x);
+  m[1][0] = -2 * x * y;
+  m[2][0] = -2 * x * z;
+  m[3][0] = 0;
+
+  m[0][1] = -2 * x * y;
+  m[1][1] = 1 - (2 * y * y);
+  m[2][1] = -2 * y * z;
+  m[3][1] = 0;
+
+  m[0][2] = -2 * x * z;
+  m[1][2] = -2 * y * z;
+  m[2][2] = 1 - (2 * z * z);
+  m[3][2] = 0;
+
+  m[0][3] = 0;
+  m[1][3] = 0;
+  m[2][3] = 0;
+  m[3][3] = 1;
+
+  glMultMatrixf (&m[0][0]);
+}
+
+
+ENTRYPOINT void
+draw_kaleidocycle (ModeInfo *mi)
+{
+  kaleidocycle_configuration *bp = &bps[MI_SCREEN(mi)];
+  Display *dpy = MI_DISPLAY(mi);
+  Window window = MI_WINDOW(mi);
+  GLfloat colors[4*4];
+  GLfloat count;
+  double t, a;
+  int i;
+
+  GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0};
+  GLfloat bshiny   = 128.0;
+
+  if (!bp->glx_context)
+    return;
+
+  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context));
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+  mi->polygon_count = 0;
+
+  glShadeModel(GL_SMOOTH);
+  glEnable(GL_DEPTH_TEST);
+  glEnable(GL_NORMALIZE);
+  glEnable(GL_CULL_FACE);
+
+  glPushMatrix ();
+
+  {
+    double x, y, z;
+    get_position (bp->rot, &x, &y, &z, !bp->button_down_p);
+    glTranslatef((x - 0.5) * 5,
+                 (y - 0.5) * 5,
+                 (z - 0.5) * 10);
+
+    /* Do it twice because we don't track the device's orientation. */
+    glRotatef( current_device_rotation(), 0, 0, 1);
+    gltrackball_rotate (bp->trackball);
+    glRotatef(-current_device_rotation(), 0, 0, 1);
+
+    get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p);
+    glRotatef (x * 360, 1, 0, 0);
+    glRotatef (y * 360, 0, 1, 0);
+    glRotatef (z * 360, 0, 0, 1);
+
+    get_rotation (bp->rot2, &x, &y, &z, !bp->button_down_p);
+    bp->th = x * 360 * 10 * speed;
+
+    /* Make sure the twist is always in motion.  Without this, the rotator
+       sometimes stops, and for too long, and it's boring looking.
+     */
+    bp->th += speed * bp->dth++;
+    while (bp->dth > 360) bp->dth -= 360;
+    while (bp->th  > 360) bp->th  -= 360;
+  }
+
+  glMaterialfv (GL_FRONT, GL_SPECULAR,  bspec);
+  glMateriali  (GL_FRONT, GL_SHININESS, bshiny);
+
+
+  /* Evenly spread the colors of the faces, and cycle them together.
+   */
+  for (i = 0; i < 4; i++)
+    {
+      int o  = bp->ncolors / 4;
+      int c = (bp->ccolor + (o*i)) % bp->ncolors;
+      colors[i*4+0] = bp->colors[c].red   / 65536.0;
+      colors[i*4+1] = bp->colors[c].green / 65536.0;
+      colors[i*4+2] = bp->colors[c].blue  / 65536.0;
+      colors[i*4+3] = 1;
+    }
+  bp->ccolor++;
+  if (bp->ccolor >= bp->ncolors) bp->ccolor = 0;
+
+
+  count = (int) floor (bp->count);
+  while (count < 8) count++;
+  if (((int) floor (count)) & 1) count++;
+
+  a = 2 * M_PI / (bp->count < 8 ? 8 : bp->count);
+  t = bp->th / (180 / M_PI);
+
+  glScalef (3, 3, 3);
+  glScalef (a, a, a);
+  glRotatef (90, 0, 0, 1);
+/*  glRotatef (45, 0, 1, 0); */
+
+  for (i = 0; i <= (int) floor (bp->count); i++)
+    {
+      Bool flip_p = (i & 1);
+      glPushMatrix();
+      glRotatef ((i/2) * 4 * 180 / bp->count, 0, 0, 1);
+      if (flip_p) reflect (-sin(a), cos(a), 0);
+
+      if (bp->mode != STATIC && i >= (int) floor (bp->count))
+        {
+          /* Fractional bp->count means the last piece is in transition */
+          GLfloat scale = bp->count - (int) floor (bp->count);
+          GLfloat tick = 0.07 * speed;
+          GLfloat ocount = bp->count;
+          GLfloat alpha;
+
+          /* Fill in faster if we're starting up */
+          if (bp->count < MI_COUNT(mi))
+            tick *= 2;
+
+          glScalef (scale, scale, scale);
+
+          switch (bp->mode) {
+          case IN: break;
+          case OUT: tick = -tick; break;
+          case STATIC: tick = 0; break;
+          }
+
+          bp->count += tick;
+
+          if (bp->mode == IN
+              ? floor (ocount) != floor (bp->count)
+              : ceil  (ocount) != ceil  (bp->count))
+            {
+              if (bp->mode == IN)
+                bp->count = floor (ocount) + 1;
+              else
+                bp->count = ceil  (ocount) - 1;
+
+              if (((int) floor (bp->count)) & 1 ||
+                  (bp->mode == IN && 
+                   (bp->count < MI_COUNT(mi) &&
+                    bp->startup_p)))
+                {
+                  /* keep going if it's odd, or less than 8. */
+                  bp->count = round(bp->count);
+                }
+              else
+                {
+                  bp->mode = STATIC;
+                  bp->startup_p = False;
+                }
+            }
+
+          alpha = (scale * scale * scale * scale);
+          if (alpha < 0.4) alpha = 0.4;
+          colors[3] = colors[7] = colors[11] = colors[15] = alpha;
+        }
+
+      draw_tetra (mi, t, a, flip_p, colors);
+      mi->polygon_count += 4;
+
+      glPopMatrix();
+    }
+
+  if (bp->mode == STATIC && !(random() % 200)) {
+    if (bp->count <= bp->min_count)
+      bp->mode = IN;
+    else if (bp->count >= bp->max_count)
+      bp->mode = OUT;
+    else
+      bp->mode = bp->prev_mode;
+
+    bp->prev_mode = bp->mode;
+  }
+
+
+  mi->recursion_depth = ceil (bp->count);
+
+  glPopMatrix ();
+
+  if (mi->fps_p) do_fps (mi);
+  glFinish();
+
+  glXSwapBuffers(dpy, window);
+}
+
+XSCREENSAVER_MODULE ("Kaleidocycle", kaleidocycle)
+
+#endif /* USE_GL */
diff --git a/hacks/glx/kaleidocycle.man b/hacks/glx/kaleidocycle.man
new file mode 100644 (file)
index 0000000..874d82d
--- /dev/null
@@ -0,0 +1,96 @@
+.de EX         \"Begin example
+.ne 5
+.if n .sp 1
+.if t .sp .5
+.nf
+.in +.5i
+..
+.de EE
+.fi
+.in -.5i
+.if n .sp 1
+.if t .sp .5
+..
+.TH XScreenSaver 1 "25-Jul-98" "X Version 11"
+.SH NAME
+kaleidocycle - draws twistable rings of tetrahedra
+.SH SYNOPSIS
+.B kaleidocycle
+[\-display \fIhost:display.screen\fP] [\-window] [\-root]
+[\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP]
+[\-count \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-wander] [\-no-wander]
+[\-spin \fIaxes\fP]
+[\-no-spin]
+[\-wireframe]
+[\-fps]
+.SH DESCRIPTION
+The \fIkaleidocycle\fP program draws a ring composed of tetrahedra
+connected at the edges that twists and rotates toroidally.  Segments
+are occasionally inserted or removed.
+.SH OPTIONS
+.I kaleidocycle
+accepts the following options:
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-install
+Install a private colormap for the window.
+.TP 8
+.B \-visual \fIvisual\fP\fP
+Specify which visual to use.  Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-count \fInumber\fP
+The initial number of segments. Default 16.  Must be 8 or greater, and
+an even number.
+.TP 8
+.B \-speed \fInumber\fP
+Adjust the animation speed. 0.5 for half as fast, 2.0 for twice as fast.
+.TP 8
+.B \-wander
+Move the text around the screen.  This is the default.
+.TP 8
+.B \-no\-wander
+Keep the text centered on the screen.
+.TP 8
+.B \-spin
+Which axes around which the text should spin.  The default is "Z",
+meaning rotate the object the plane of the screen only.
+.TP 8
+.B \-no\-spin
+Don't spin the text at all: the same as \fB\-spin ""\fP.
+.TP 8
+.B \-wireframe
+Render in wireframe instead of solid.
+.TP 8
+.B \-fps
+Display the current frame rate, CPU load, and polygon count.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2001-2013 by Jamie Zawinski.
+Permission to use, copy, modify, distribute, and sell this software and
+its documentation for any purpose is hereby granted without fee,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.  No representations are made about the
+suitability of this software for any purpose.  It is provided "as is"
+without express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski <jwz@jwz.org>
diff --git a/hacks/glx/quasicrystal.c b/hacks/glx/quasicrystal.c
new file mode 100644 (file)
index 0000000..d01d1ed
--- /dev/null
@@ -0,0 +1,441 @@
+/* quasicrystal, Copyright (c) 2013 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ *
+ * Overlapping sine waves create interesting plane-tiling interference
+ * patterns.  Created by jwz, Jul 2013.  Inspired by
+ * http://mainisusuallyafunction.blogspot.com/2011/10/quasicrystals-as-sums-of-waves-in-plane.html
+ */
+
+
+#define DEFAULTS       "*delay:        30000       \n" \
+                       "*spin:         True        \n" \
+                       "*wander:       True        \n" \
+                       "*symmetric:    True        \n" \
+                       "*count:        17          \n" \
+                       "*contrast:     30          \n" \
+                       "*showFPS:      False       \n" \
+                       "*wireframe:    False       \n" \
+
+# define refresh_quasicrystal 0
+# define release_quasicrystal 0
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#include "xlockmore.h"
+#include "colors.h"
+#include "rotator.h"
+#include <ctype.h>
+
+#ifdef USE_GL /* whole file */
+
+#define DEF_SPEED  "1.0"
+
+typedef struct {
+  rotator *rot, *rot2;
+  GLuint texid;
+} plane;
+
+typedef struct {
+  GLXContext *glx_context;
+  Bool button_down_p;
+  Bool symmetric_p;
+  GLfloat contrast;
+  int count;
+  int ncolors, ccolor;
+  XColor *colors;
+  plane *planes;
+  int mousex, mousey;
+
+} quasicrystal_configuration;
+
+static quasicrystal_configuration *bps = NULL;
+
+static GLfloat speed;
+
+static XrmOptionDescRec opts[] = {
+  { "-spin",         ".spin",      XrmoptionNoArg, "True"  },
+  { "+spin",         ".spin",      XrmoptionNoArg, "False" },
+  { "-wander",       ".wander",    XrmoptionNoArg, "True"  },
+  { "+wander",       ".wander",    XrmoptionNoArg, "False" },
+  { "-symmetry",     ".symmetric", XrmoptionNoArg, "True"   },
+  { "-no-symmetry",  ".symmetric", XrmoptionNoArg, "False"  },
+  { "-speed",        ".speed",     XrmoptionSepArg, 0 },
+  { "-contrast",     ".contrast",  XrmoptionSepArg, 0 },
+};
+
+static argtype vars[] = {
+  {&speed,     "speed",  "Speed",  DEF_SPEED,  t_Float},
+};
+
+ENTRYPOINT ModeSpecOpt quasicrystal_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+
+/* Window management, etc
+ */
+ENTRYPOINT void
+reshape_quasicrystal (ModeInfo *mi, int width, int height)
+{
+  GLfloat h = (GLfloat) height / (GLfloat) width;
+
+  glViewport (0, 0, (GLint) width, (GLint) height);
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  glOrtho (0, 1, 1, 0, -1, 1);
+
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  glTranslatef (0.5, 0.5, 0);
+  glScalef (h, 1, 1);
+  if (width > height)
+    glScalef (1/h, 1/h, 1);
+  glTranslatef (-0.5, -0.5, 0);
+  glClear(GL_COLOR_BUFFER_BIT);
+}
+
+
+ENTRYPOINT Bool
+quasicrystal_handle_event (ModeInfo *mi, XEvent *event)
+{
+  quasicrystal_configuration *bp = &bps[MI_SCREEN(mi)];
+
+  if (event->xany.type == ButtonPress &&
+      event->xbutton.button == Button1)
+    {
+      bp->button_down_p = True;
+      bp->mousex = event->xbutton.x;
+      bp->mousey = event->xbutton.y;
+      return True;
+    }
+  else if (event->xany.type == ButtonRelease &&
+           event->xbutton.button == Button1)
+    {
+      bp->button_down_p = False;
+      return True;
+    }
+  else if (event->xany.type == MotionNotify &&
+           bp->button_down_p)
+    {
+      /* Dragging up and down tweaks contrast */
+
+      int dx = event->xmotion.x - bp->mousex;
+      int dy = event->xmotion.y - bp->mousey;
+
+      if (abs(dy) > abs(dx))
+        {
+          bp->contrast += dy / 40.0;
+          if (bp->contrast < 0)   bp->contrast = 0;
+          if (bp->contrast > 100) bp->contrast = 100;
+        }
+
+      bp->mousex = event->xmotion.x;
+      bp->mousey = event->xmotion.y;
+      return True;
+    }
+
+  return False;
+}
+
+
+
+ENTRYPOINT void 
+init_quasicrystal (ModeInfo *mi)
+{
+  quasicrystal_configuration *bp;
+  int wire = MI_IS_WIREFRAME(mi);
+  unsigned char *tex_data = 0;
+  int tex_width;
+  int i;
+
+  if (!bps) {
+    bps = (quasicrystal_configuration *)
+      calloc (MI_NUM_SCREENS(mi), sizeof (quasicrystal_configuration));
+    if (!bps) {
+      fprintf(stderr, "%s: out of memory\n", progname);
+      exit(1);
+    }
+  }
+
+  bp = &bps[MI_SCREEN(mi)];
+
+  bp->glx_context = init_GL(mi);
+
+  reshape_quasicrystal (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+  glDisable (GL_DEPTH_TEST);
+  glEnable (GL_CULL_FACE);
+
+  bp->count = MI_COUNT(mi);
+  if (bp->count < 1) bp->count = 1;
+
+  if (! wire)
+    {
+      unsigned char *o;
+      tex_width = 4096;
+      tex_data = (unsigned char *) calloc (4, tex_width);
+      o = tex_data;
+      for (i = 0; i < tex_width; i++)
+        {
+          unsigned char y = 255 * (1 + sin (i * M_PI * 2 / tex_width)) / 2;
+          *o++ = y;
+          *o++ = y;
+          *o++ = y;
+          *o++ = 255;
+        }
+    }
+
+  bp->symmetric_p =
+    get_boolean_resource (MI_DISPLAY (mi), "symmetry", "Symmetry");
+
+  bp->contrast = get_float_resource (MI_DISPLAY (mi), "contrast", "Contrast");
+  if (bp->contrast < 0 || bp->contrast > 100) 
+    {
+      fprintf (stderr, "%s: contrast must be between 0 and 100%%.\n", progname);
+      bp->contrast = 0;
+    }
+
+  {
+    Bool spinp   = get_boolean_resource (MI_DISPLAY (mi), "spin", "Spin");
+    Bool wanderp = get_boolean_resource (MI_DISPLAY (mi), "wander", "Wander");
+    double spin_speed   = 0.01;
+    double wander_speed = 0.0001;
+    double spin_accel   = 10.0;
+    double scale_speed  = 0.005;
+
+    bp->planes = (plane *) calloc (sizeof (*bp->planes), bp->count);
+
+    bp->ncolors = 256;  /* ncolors affects color-cycling speed */
+    bp->colors = (XColor *) calloc (bp->ncolors, sizeof(XColor));
+    make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors,
+                          False, 0, False);
+    bp->ccolor = 0;
+
+    for (i = 0;  i < bp->count; i++)
+      {
+        plane *p = &bp->planes[i];
+        p->rot = make_rotator (0, 0,
+                               spinp ? spin_speed : 0,
+                               spin_accel,
+                               wanderp ? wander_speed : 0,
+                               True);
+        p->rot2 = make_rotator (0, 0,
+                                0, 0,
+                               scale_speed,
+                               True);
+        if (! wire)
+          {
+            clear_gl_error();
+
+            glGenTextures (1, &p->texid);
+            glBindTexture (GL_TEXTURE_1D, p->texid);
+            glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
+            glTexImage1D (GL_TEXTURE_1D, 0, GL_RGBA,
+                          tex_width, 0,
+                          GL_RGBA,
+                          /* GL_UNSIGNED_BYTE, */
+                          GL_UNSIGNED_INT_8_8_8_8_REV,
+                          tex_data);
+            check_gl_error("texture");
+
+            glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+            glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+
+            glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+            glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+
+            glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+          }
+      }
+  }
+
+  if (tex_data) free (tex_data);
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+}
+
+
+ENTRYPOINT void
+draw_quasicrystal (ModeInfo *mi)
+{
+  quasicrystal_configuration *bp = &bps[MI_SCREEN(mi)];
+  Display *dpy = MI_DISPLAY(mi);
+  Window window = MI_WINDOW(mi);
+  int wire = MI_IS_WIREFRAME(mi);
+  double r, ps;
+  int i;
+
+  if (!bp->glx_context)
+    return;
+
+  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context));
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+  mi->polygon_count = 0;
+
+  glShadeModel(GL_FLAT);
+  glDisable(GL_DEPTH_TEST);
+  glDisable(GL_CULL_FACE);
+  glDisable (GL_LIGHTING);
+
+  glEnable (GL_BLEND);
+  glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+  glPushMatrix ();
+  glTranslatef (0.5, 0.5, 0);
+  glScalef (3, 3, 3);
+
+  if (wire) glScalef (0.2, 0.2, 0.2);
+
+  for (i = 0;  i < bp->count; i++)
+    {
+      plane *p = &bp->planes[i];
+      double x, y, z;
+      double scale = (wire ? 10 : 700.0 / bp->count);
+      double pscale;
+
+      glPushMatrix();
+
+      get_position (p->rot, &x, &y, &z, !bp->button_down_p);
+      glTranslatef((x - 0.5) * 0.3333,
+                   (y - 0.5) * 0.3333,
+                   0);
+
+      /* With -symmetry, keep the planes' scales in sync.
+         Otherwise, they scale independently.
+       */
+      if (bp->symmetric_p && i > 0)
+        pscale = ps;
+      else
+        {
+          get_position (p->rot2, &x, &y, &z, !bp->button_down_p);
+          pscale = 1 + (4 * z);
+          ps = pscale;
+        }
+
+      scale *= pscale;
+
+
+      /* With -symmetry, evenly distribute the planes' rotation.
+         Otherwise, they rotate independently.
+       */
+      if (bp->symmetric_p && i > 0)
+        z = r + (i * M_PI * 2 / bp->count);
+      else
+        {
+          get_rotation (p->rot, &x, &y, &z, !bp->button_down_p);
+          r = z;
+        }
+
+
+      glRotatef (z * 360, 0, 0, 1);
+      glTranslatef (-0.5, -0.5, 0);
+
+      glColor4f (1, 1, 1, (wire ? 0.5 : 1.0 / bp->count));
+
+      if (!wire)
+        {
+          glEnable (GL_TEXTURE_1D);
+          glBindTexture (GL_TEXTURE_1D, p->texid);
+        }
+
+      glBegin (wire ? GL_LINE_LOOP : GL_QUADS);
+      glNormal3f (0, 0, 1);
+      glTexCoord2f (-scale/2,  scale/2); glVertex3f (0, 1, 0);
+      glTexCoord2f ( scale/2,  scale/2); glVertex3f (1, 1, 0);
+      glTexCoord2f ( scale/2, -scale/2); glVertex3f (1, 0, 0);
+      glTexCoord2f (-scale/2, -scale/2); glVertex3f (0, 0, 0);
+      glEnd();
+
+      if (wire)
+        {
+          float j;
+          glDisable (GL_TEXTURE_1D);
+          glColor4f (1, 1, 1, 1.0 / bp->count);
+          for (j = 0; j < 1; j += (1 / scale))
+            {
+              glBegin (GL_LINES);
+              glVertex3f (j, 0, 0);
+              glVertex3f (j, 1, 0);
+              mi->polygon_count++;
+              glEnd();
+            }
+        }
+
+      glPopMatrix();
+
+      mi->polygon_count++;
+    }
+
+  /* Colorize the grayscale image. */
+  {
+    GLfloat c[4];
+    c[0] = bp->colors[bp->ccolor].red   / 65536.0;
+    c[1] = bp->colors[bp->ccolor].green / 65536.0;
+    c[2] = bp->colors[bp->ccolor].blue  / 65536.0;
+    c[3] = 1;
+
+    /* Brighten the colors. */
+    c[0] = (0.6666 + c[0]/3);
+    c[1] = (0.6666 + c[1]/3);
+    c[2] = (0.6666 + c[2]/3);
+
+    glBlendFunc (GL_DST_COLOR, GL_SRC_COLOR);
+    glDisable (GL_TEXTURE_1D);
+    glColor4fv (c);
+    glTranslatef (-0.5, -0.5, 0);
+    glBegin (GL_QUADS);
+    glVertex3f (0, 1, 0);
+    glVertex3f (1, 1, 0);
+    glVertex3f (1, 0, 0);
+    glVertex3f (0, 0, 0);
+    glEnd();
+    mi->polygon_count++;
+  }
+
+  /* Clip the colors to simulate contrast. */
+
+  if (bp->contrast > 0)
+    {
+      /* If c > 0, map 0 - 100 to 0.5 - 1.0, and use (s & ~d) */
+      GLfloat c = 1 - (bp->contrast / 2 / 100.0);
+      glDisable (GL_TEXTURE_1D);
+      glDisable (GL_BLEND);
+      glEnable (GL_COLOR_LOGIC_OP);
+      glLogicOp (GL_AND_REVERSE);
+      glColor4f (c, c, c, 1);
+      glBegin (GL_QUADS);
+      glVertex3f (0, 1, 0);
+      glVertex3f (1, 1, 0);
+      glVertex3f (1, 0, 0);
+      glVertex3f (0, 0, 0);
+      glEnd();
+      mi->polygon_count++;
+      glDisable (GL_COLOR_LOGIC_OP);
+    }
+
+  /* Rotate colors. */
+  bp->ccolor++;
+  if (bp->ccolor >= bp->ncolors)
+    bp->ccolor = 0;
+
+
+  glPopMatrix ();
+
+  if (mi->fps_p) do_fps (mi);
+  glFinish();
+
+  glXSwapBuffers(dpy, window);
+}
+
+XSCREENSAVER_MODULE ("QuasiCrystal", quasicrystal)
+
+#endif /* USE_GL */
diff --git a/hacks/glx/quasicrystal.man b/hacks/glx/quasicrystal.man
new file mode 100644 (file)
index 0000000..cbf9040
--- /dev/null
@@ -0,0 +1,84 @@
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+quasicrystal - aperiodic plane tilings.
+.SH SYNOPSIS
+.B quasicrystal
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-count \fInumber\fP]
+[\-contrast \fIpercent\fP]
+[\-no-wander]
+[\-no-spin]
+[\-asymmetric]
+[\-fps]
+.SH DESCRIPTION
+A quasicrystal is a structure that is ordered but aperiodic.
+Two-dimensional quasicrystals can be generated by adding a set of planes
+where x is the sine of y. Different complex aperiodic plane tilings are
+produced depending on the period, position, and rotation of the component
+planes, and whether the rotation of the planes is evenly distributed around
+the circle (the "symmetric" option, above) or random. See also the
+"RD-Bomb", "CWaves" and "Penrose" screen savers.
+http://en.wikipedia.org/wiki/Quasicrystal
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use.  Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds.  Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-speed \fInumber\fP
+Animation speed. 2 for twice as fast, 0.5 for half as fast.
+.TP 8
+.B \-contrast \fIcontrast\fP
+Contrast. Sort of.  Default 30%.
+.TP 8
+.B \-count \fInumber\fP
+How many planes to use. Default 17.
+.TP 8
+.B \-wander | \-no-wander
+Whether the planes should displace horizontally and vertically.
+.TP 8
+.B \-spin | \-no-spin
+Whether the planes should rotate.
+.TP 8
+.B \-asymmetric
+Allow each plane to rotate freely instead of being constrained to an
+even distribution around the circle.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2013 by Jamie Zawinski.  Permission to use, copy, modify, 
+distribute, and sell this software and its documentation for any purpose is 
+hereby granted without fee, provided that the above copyright notice appear 
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation.  No representations are made about the 
+suitability of this software for any purpose.  It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
index 022477598dc3e5857fbad4085bac605008284dfd..2529e2a3c572425e11ca538a44dd5257c11b8ba0 100644 (file)
@@ -899,6 +899,8 @@ ENTRYPOINT void init_tangram(ModeInfo * mi)
         gl_init(mi);
     }
 
         gl_init(mi);
     }
 
+    reshape_tangram (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
     wire = MI_IS_WIREFRAME(mi);
 
     tp->name_list = glGenLists(1);
     wire = MI_IS_WIREFRAME(mi);
 
     tp->name_list = glGenLists(1);
index f58755d1ab3833d7a0cd9b35d9fbb1cc45c4a396..2305a937769d1a9e637147ee156af168e5b2bc76 100644 (file)
@@ -1,4 +1,4 @@
-/* texfonts, Copyright (c) 2005-2012 Jamie Zawinski <jwz@jwz.org>
+/* texfonts, Copyright (c) 2005-2013 Jamie Zawinski <jwz@jwz.org>
  * Loads X11 fonts into textures for use with OpenGL.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * Loads X11 fonts into textures for use with OpenGL.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -440,7 +440,8 @@ print_texture_string (texture_font_data *data, const char *string)
         }
       else if (c == '\t')
         {
         }
       else if (c == '\t')
         {
-          x = ((x + tabs) / tabs) * tabs;  /* tab to tab stop */
+          if (tabs)
+            x = ((x + tabs) / tabs) * tabs;  /* tab to tab stop */
         }
 # ifdef DO_SUBSCRIPTS
       else if (c == '[' && (isdigit (string[i+1])))
         }
 # ifdef DO_SUBSCRIPTS
       else if (c == '[' && (isdigit (string[i+1])))
diff --git a/hacks/glx/unknownpleasures.c b/hacks/glx/unknownpleasures.c
new file mode 100644 (file)
index 0000000..b59cff6
--- /dev/null
@@ -0,0 +1,512 @@
+/* unknownpleasures, Copyright (c) 2013 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ *
+ * Translated from Mathematica code by Archery:
+ * http://intothecontinuum.tumblr.com/post/27443100682/in-july-1967-astronomers-at-the-cavendish
+ *
+ * Interestingly, the original image is copyright-free:
+ * http://adamcap.com/2011/05/19/history-of-joy-division-unknown-pleasures-album-art/
+ * http://en.wikipedia.org/wiki/Unknown_Pleasures
+ *
+ * TODO:
+ *
+ * - Performance is not great. Spending half our time in compute_line()
+ *   and half our time in glEnd().  It's a vast number of cos/pow calls,
+ *   and a vast number of polygons.  I'm not sure how much could be cached.
+ *
+ * - There's too low periodicity vertically on the screen.
+ *
+ * - There's too low periodicity in time.
+ *
+ * - Could take advantage of time periodicity for caching: just save every
+ *   poly for an N second loop.  That would be a huge amount of RAM though.
+ *
+ * - At low resolutions, GL_POLYGON_OFFSET_FILL seems to work poorly
+ *   and the lines get blocky.
+ */
+
+
+#define DEFAULTS       "*delay:        30000       \n" \
+                       "*count:        80          \n" \
+                       "*resolution:   100         \n" \
+                       "*ortho:        True        \n" \
+                       "*showFPS:      False       \n" \
+                       "*wireframe:    False       \n" \
+                       "*geometry:    =800x800"   "\n" \
+
+# define refresh_unk 0
+# define release_unk 0
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#include "xlockmore.h"
+#include "colors.h"
+#include "gltrackball.h"
+#include <ctype.h>
+
+#ifdef USE_GL /* whole file */
+
+#define DEF_SPEED  "1.0"
+
+
+typedef struct {
+  GLXContext *glx_context;
+  trackball_state *trackball;
+  Bool button_down_p;
+  Bool orthop;
+  GLfloat resolution;
+  int count;
+  GLfloat t;
+} unk_configuration;
+
+static unk_configuration *bps = NULL;
+
+static GLfloat speed;
+
+static XrmOptionDescRec opts[] = {
+  { "-speed",        ".speed",      XrmoptionSepArg, 0 },
+  { "-resolution",   ".resolution", XrmoptionSepArg, 0 },
+  { "-ortho",        ".ortho",      XrmoptionNoArg,  "True"  },
+  { "-no-ortho",     ".ortho",      XrmoptionNoArg,  "False" },
+};
+
+static argtype vars[] = {
+  {&speed, "speed",  "Speed",  DEF_SPEED,  t_Float},
+};
+
+ENTRYPOINT ModeSpecOpt unk_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+
+
+/* Window management, etc
+ */
+ENTRYPOINT void
+reshape_unk (ModeInfo *mi, int width, int height)
+{
+  unk_configuration *bp = &bps[MI_SCREEN(mi)];
+  GLfloat h = (GLfloat) height / (GLfloat) width;
+
+  glViewport (0, 0, (GLint) width, (GLint) height);
+
+  if (bp->orthop)
+    {
+      glMatrixMode(GL_PROJECTION);
+      glLoadIdentity();
+      gluPerspective (1.0, 1/h, 690, 710);
+
+      glMatrixMode(GL_MODELVIEW);
+      glLoadIdentity();
+      gluLookAt( 0, 0, 700,
+                 0, 0, 0,
+                 0, 1, 0);
+      if (width < height)
+        glScalef (1/h, 1/h, 1);
+      glTranslatef (0, -0.5, 0);
+    }
+  else
+    {
+      glMatrixMode(GL_PROJECTION);
+      glLoadIdentity();
+      gluPerspective (30.0, 1/h, 20.0, 40.0);
+
+      glMatrixMode(GL_MODELVIEW);
+      glLoadIdentity();
+      gluLookAt( 0.0, 0.0, 30.0,
+                 0.0, 0.0, 0.0,
+                 0.0, 1.0, 0.0);
+      if (width < height)
+        glScalef (1/h, 1/h, 1);
+    }
+
+  glClear(GL_COLOR_BUFFER_BIT);
+}
+
+
+ENTRYPOINT Bool
+unk_handle_event (ModeInfo *mi, XEvent *event)
+{
+  unk_configuration *bp = &bps[MI_SCREEN(mi)];
+
+  if (event->xany.type == ButtonPress &&
+      event->xbutton.button == Button1)
+    {
+      bp->button_down_p = True;
+      gltrackball_start (bp->trackball,
+                         event->xbutton.x, event->xbutton.y,
+                         MI_WIDTH (mi), MI_HEIGHT (mi));
+      return True;
+    }
+  else if (event->xany.type == ButtonRelease &&
+           event->xbutton.button == Button1)
+    {
+      bp->button_down_p = False;
+      return True;
+    }
+  else if (event->xany.type == ButtonPress &&
+           (event->xbutton.button == Button4 ||
+            event->xbutton.button == Button5 ||
+            event->xbutton.button == Button6 ||
+            event->xbutton.button == Button7))
+    {
+      int b = event->xbutton.button;
+      int speed = 1;
+      if (b == Button6 || b == Button7)
+        speed *= 3;
+      if (bp->orthop)
+        switch (b) {                           /* swap axes */
+        case Button4: b = Button6; break;
+        case Button5: b = Button7; break;
+        case Button6: b = Button4; break;
+        case Button7: b = Button5; break;
+        }
+      gltrackball_mousewheel (bp->trackball, b, speed, !!event->xbutton.state);
+      return True;
+    }
+  else if (event->xany.type == MotionNotify &&
+           bp->button_down_p)
+    {
+      gltrackball_track (bp->trackball,
+                         event->xmotion.x, event->xmotion.y,
+                         MI_WIDTH (mi), MI_HEIGHT (mi));
+      return True;
+    }
+  else if (event->xany.type == KeyPress)
+    {
+      KeySym keysym;
+      char c = 0;
+      XLookupString (&event->xkey, &c, 1, &keysym, 0);
+      if (c == ' ')
+        {
+          bp->orthop = !bp->orthop;
+          reshape_unk (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+          return True;
+        }
+      return False;
+    }
+
+  return False;
+}
+
+
+
+ENTRYPOINT void 
+init_unk (ModeInfo *mi)
+{
+  unk_configuration *bp;
+
+  if (!bps) {
+    bps = (unk_configuration *)
+      calloc (MI_NUM_SCREENS(mi), sizeof (unk_configuration));
+    if (!bps) {
+      fprintf(stderr, "%s: out of memory\n", progname);
+      exit(1);
+    }
+  }
+
+  bp = &bps[MI_SCREEN(mi)];
+
+  bp->glx_context = init_GL(mi);
+
+  bp->orthop = get_boolean_resource (MI_DISPLAY (mi), "ortho", "Ortho");
+  bp->resolution = get_float_resource (MI_DISPLAY (mi),
+                                       "resolution", "Resolution");
+  if (bp->resolution < 1) bp->resolution = 1;
+  if (bp->resolution > 300) bp->resolution = 300;
+
+  reshape_unk (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+  bp->count = MI_COUNT(mi);
+  if (bp->count < 1) bp->count = 1;
+
+  bp->trackball = gltrackball_init ();
+
+  if (MI_COUNT(mi) < 1) MI_COUNT(mi) = 1;
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+}
+
+
+
+static double
+R (double f)
+{
+  /* A simple, fast, deterministic PRNG.
+     ya_rand_init() is too slow for this, and the stream of numbers here
+     doesn't have to be high quality.
+   */
+#if 1
+  int seed0 = 1613287;
+
+# else
+  /* Kluge to let me pick a good seed factor by trial and error... */
+  static int seed0 = 0;
+  static int count = 0;
+  if (count++ > 150000000) seed0 = 0, count=0;
+  if (! seed0)
+    {
+      seed0 = (random() & 0xFFFFF);
+      fprintf(stderr, "seed0 = %8x %d\n", seed0, seed0);
+    }
+# endif
+
+  long seed = seed0 * f;
+  seed = 48271 * (seed % 44488) - 3399 * (seed / 44488);
+  f = (double) seed / 0x7FFFFFFF;
+
+  return f;
+}
+
+
+static void
+compute_line (ModeInfo *mi,
+              int xmin, int xmax, GLfloat xinc,
+              GLfloat res_scale,
+              int y,
+              GLfloat *points)
+{
+  unk_configuration *bp = &bps[MI_SCREEN(mi)];
+
+  GLfloat fx;
+  int lastx = -999999;
+
+  /* Compute the points on the line */
+
+  for (fx = xmin; fx < xmax; fx += xinc)
+    {
+      int x = fx;
+      int n;
+      GLfloat hsum = 0, vsum = 0;
+
+      if (x == lastx) continue;
+      lastx = x;
+
+      for (n = 1; n <= 30; n++)
+        {
+          /* This sum affects crinkliness of the lines */
+          hsum += (10 *
+                   sin (2 * M_PI
+                        * R (4 * y)
+                        + bp->t
+                        + R (2 * n * y)
+                        * 2 * M_PI)
+                   *  exp (-pow ((.3 * (x / res_scale) + 30
+                                  - 1 * 100 * R (2 * n * y)),
+                                 2)
+                           / 20.0));
+        }
+
+      for (n = 1; n <= 4; n++)
+        {
+          /* This sum affects amplitude of the peaks */
+          vsum += (3 * (1 + R (3 * n * y))
+                   * fabs (sin (bp->t + R (n * y)
+                                * 2 * M_PI))
+                   * exp (-pow (((x / res_scale) - 1 * 100 * R (n * y)),
+                                2)
+                          / 20.0));
+        }
+
+      /* Scale of this affects amplitude of the flat parts */
+      points[x - xmin] = (0.2 * sin (2 * M_PI * R (6 * y) + hsum) + vsum);
+    }
+
+}
+
+
+ENTRYPOINT void
+draw_unk (ModeInfo *mi)
+{
+  unk_configuration *bp = &bps[MI_SCREEN(mi)];
+  Display *dpy = MI_DISPLAY(mi);
+  Window window = MI_WINDOW(mi);
+  int wire = MI_IS_WIREFRAME(mi);
+  GLfloat aspect = 1.5;
+
+  GLfloat res_scale = 4;
+  int xmin = -50 * res_scale;
+  int xmax = 150 * res_scale;
+  GLfloat xinc = 100.0 / (bp->resolution / res_scale);
+  int ymin = 1;
+  int ytop = MI_COUNT(mi);
+  int yinc = 1;
+  int y;
+  GLfloat *points;
+
+  if (xinc < 0.25) xinc = 0.25;
+
+  if (!bp->glx_context)
+    return;
+
+  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context));
+
+  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+  mi->polygon_count = 0;
+
+  glShadeModel (GL_FLAT);
+  glEnable (GL_DEPTH_TEST);
+  glDisable (GL_CULL_FACE);
+
+  glPushMatrix ();
+
+  glRotatef(current_device_rotation(), 0, 0, 1);
+
+  gltrackball_rotate (bp->trackball);
+  glScalef (10, 10, 10);
+
+  glRotatef (-45, 1, 0, 0);
+  glTranslatef (-0.5, -0.5, 0);
+  if (bp->orthop)
+    glTranslatef (0, 0.05, 0);
+  else
+    glTranslatef (0, 0.15, 0);
+
+  points = (GLfloat *) malloc (sizeof(*points) * (xmax - xmin));
+
+  if (!bp->button_down_p)
+    {
+      double s = 6.3 / 19 / 3;
+# if 1
+      bp->t -= s * speed;
+      if (bp->t <= 0)
+        bp->t = s * 18 * 3;
+# else
+      bp->t += s;
+# endif
+    }
+
+  glLineWidth (2);
+
+  /* Lower the resolution to get a decent frame rate on iPhone 4s */
+  if (mi->xgwa.width <= 640 || mi->xgwa.height <= 640)
+    {
+      ytop *= 0.6;
+      xinc *= 3;
+    }
+
+# ifdef USE_IPHONE
+  /* Lower it even further for iPhone 3 */
+  if (mi->xgwa.width <= 480 || mi->xgwa.height <= 480)
+    {
+      ytop *= 0.8;
+      xinc *= 1.2;
+    }
+
+  /* Performance just sucks on iPad 3, even with a very high xinc. WTF? */
+/*
+  if (mi->xgwa.width >= 2048 || mi->xgwa.height >= 2048)
+    xinc *= 2;
+*/
+
+# endif /* USE_IPHONE */
+
+
+  /* Make the image fill the screen a little more fully */
+  if (mi->xgwa.width <= 640 || mi->xgwa.height <= 640)
+    {
+      glScalef (1.2, 1.2, 1.2);
+      glTranslatef (-0.08, 0, 0);
+    }
+
+  if (mi->xgwa.width <= 480 || mi->xgwa.height <= 480)
+    glLineWidth (1);
+
+
+  if (wire)
+    xinc *= 1.3;
+
+  /* Draw back mask */
+  {
+    GLfloat s = 0.99;
+    glDisable (GL_POLYGON_OFFSET_FILL);
+    glColor3f (0, 0, 0);
+    glPushMatrix();
+    glTranslatef (0, (1-aspect)/2, -0.005);
+    glScalef (1, aspect, 1);
+    glTranslatef (0.5, 0.5, 0);
+    glScalef (s, s, 1);
+    glBegin (GL_QUADS);
+    glVertex3f (-0.5, -0.5, 0);
+    glVertex3f ( 0.5, -0.5, 0);
+    glVertex3f ( 0.5,  0.5, 0);
+    glVertex3f (-0.5,  0.5, 0);
+    glEnd();
+    glPopMatrix();
+  }
+
+  if (! wire)
+    {
+      glEnable (GL_LINE_SMOOTH);
+      glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
+      glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
+      glEnable (GL_BLEND);
+
+      /* So the masking quads don't interfere with the lines */
+      glEnable (GL_POLYGON_OFFSET_FILL);
+      glPolygonOffset (1.0, 1.0);
+    }
+
+  for (y = ymin; y <= ytop; y += yinc)
+    {
+      /* Compute all the verts on the line */
+      compute_line (mi, xmin, xmax, xinc, res_scale, y, points);
+
+      /* Draw the line segments; then draw the black shielding quads. */
+      {
+        GLfloat yy = y / (GLfloat) ytop;
+        int linesp;
+
+        yy = (yy * aspect) - ((aspect - 1) / 2);
+
+        for (linesp = 0; linesp <= 1; linesp++)
+          {
+            GLfloat fx;
+            int lastx = -999999;
+
+            GLfloat c = (linesp || wire ? 1 : 0);
+            glColor3f (c, c, c);
+
+            glBegin (linesp
+                     ? GL_LINE_STRIP
+                     : wire ? GL_LINES : GL_QUAD_STRIP);
+            lastx = -999999;
+            for (fx = xmin; fx < xmax; fx += xinc)
+              {
+                int x = fx;
+                GLfloat xx = (x - xmin) / (GLfloat) (xmax - xmin);
+                GLfloat zz = points [x - xmin];
+
+                if (x == lastx) continue;
+                lastx = x;
+
+                zz /= 80;
+                glVertex3f (xx, yy, zz);
+                if (! linesp)
+                  glVertex3f (xx, yy, 0);
+                mi->polygon_count++;
+              }
+            glEnd ();
+          }
+      }
+    }
+
+  free (points);
+
+  glPopMatrix ();
+
+  if (mi->fps_p) do_fps (mi);
+  glFinish();
+
+  glXSwapBuffers(dpy, window);
+}
+
+XSCREENSAVER_MODULE_2 ("UnknownPleasures", unknownpleasures, unk)
+
+#endif /* USE_GL */
diff --git a/hacks/glx/unknownpleasures.man b/hacks/glx/unknownpleasures.man
new file mode 100644 (file)
index 0000000..422c81f
--- /dev/null
@@ -0,0 +1,74 @@
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+unknownpleasures - an animation of the signal from the pulsar PSR B1919+21.
+.SH SYNOPSIS
+.B unknownpleasures
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fIpercent\fP]
+[\-count \fIinteger\fP]
+[\-resolution \fIpercent\fP]
+[\-no-ortho]
+[\-fps]
+.SH DESCRIPTION
+PSR B1919+21 (AKA CP 1919) was the first pulsar ever discovered: a spinning
+neutron star emitting a periodic lighthouse-like beacon. An illustration of
+the signal received from it was published in Scientific American in 1971,
+and later in The Cambridge Encyclopedia of Astronomy in 1977, where it was
+seen by Stephen Morris, the drummer of Joy Division, and was consequently
+appropriated by Peter Saville for the cover of the band's album "Unknown
+Pleasures".
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use.  Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds.  Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-speed \fInumber\fP
+Animation speed. 2 for twice as fast, 0.5 for half as fast.
+.TP 8
+.B \-count \fInumber\fP
+Scanlines (vertical resolution).  Default: 80.
+.TP 8
+.B \-count \fInumber\fP
+Horizontal Resolution, Default: 100%.
+.TP 8
+.B \-ortho | \-no-ortho
+Whether to use an orthographic projection.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2013 by Jamie Zawinski.  Permission to use, copy, modify, 
+distribute, and sell this software and its documentation for any purpose is 
+hereby granted without fee, provided that the above copyright notice appear 
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation.  No representations are made about the 
+suitability of this software for any purpose.  It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
index 94578c238b4e148dd9c5ca66d9951aaa065acf76..cf600bc7312ed9b618d8f079c01eaef761dba26d 100644 (file)
@@ -1,5 +1,5 @@
 /* xpm-ximage.c --- converts XPM data to an XImage for use with OpenGL.
 /* xpm-ximage.c --- converts XPM data to an XImage for use with OpenGL.
- * xscreensaver, Copyright (c) 1998-2008 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1998-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -157,7 +157,9 @@ xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap,
             }
           row += stride;
         }
             }
           row += stride;
         }
-      gdk_pixbuf_unref (pb); /* #### does doing this free colors? */
+
+      /* #### are colors getting freed here? */
+      g_object_unref (pb);
 
       return image;
     }
 
       return image;
     }
index 02a5b11352ff3f439c59d2f98f1df59066e1bfba..f7229cce153fa7b4ee3cda37c1f1a636845d5406 100644 (file)
@@ -577,6 +577,9 @@ static const char *goop_defaults [] = {
   "*torque:            0.0075",
   "*elasticity:                0.9",
   "*maxVelocity:       0.5",
   "*torque:            0.0075",
   "*elasticity:                0.9",
   "*maxVelocity:       0.5",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index a6ea63126f995f20970e79978ba9c29caa90d5e5..38e97de8c9658c50d98737c719f109a7085d95e4 100644 (file)
@@ -33,6 +33,7 @@ static const char sccsid[] = "@(#)grav.c      5.00 2000/11/01 xlockmore";
                                        "*count: 12 \n" \
                                        "*ncolors: 64 \n" \
                                        "*fpsSolid: true \n" \
                                        "*count: 12 \n" \
                                        "*ncolors: 64 \n" \
                                        "*fpsSolid: true \n" \
+                                       "*ignoreRotation: True \n" \
 
 #define BRIGHT_COLORS
 # define grav_handle_event 0
 
 #define BRIGHT_COLORS
 # define grav_handle_event 0
index 2496cdf55fd258922d0c19c174a7ff2ad78528e5..5ef65b817e8d445516753e3918cc46282ac290bf 100644 (file)
@@ -257,6 +257,9 @@ static const char *greynetic_defaults [] = {
   "*fpsSolid:  true",
   "*delay:     10000",
   "*grey:      false",
   "*fpsSolid:  true",
   "*delay:     10000",
   "*grey:      false",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 5cd78b504991fbbf379269055b3e26a92432fefb..84503c1fc77ee07d90109429886b1664e79d4d3a 100644 (file)
@@ -191,7 +191,7 @@ halftone_init (Display *dpy, Window window)
   halftone->ncolors = get_integer_resource (dpy, "colors", "Colors");
   if (halftone->ncolors < 4) halftone->ncolors = 4;
   halftone->colors = (XColor *) calloc(halftone->ncolors, sizeof(XColor));
   halftone->ncolors = get_integer_resource (dpy, "colors", "Colors");
   if (halftone->ncolors < 4) halftone->ncolors = 4;
   halftone->colors = (XColor *) calloc(halftone->ncolors, sizeof(XColor));
-  make_smooth_colormap (dpy, attrs.visual, attrs.colormap,
+  make_smooth_colormap (attrs.screen, attrs.visual, attrs.colormap,
                         halftone->colors, &halftone->ncolors,
                         True, 0, False);
   halftone->color0 = 0;
                         halftone->colors, &halftone->ncolors,
                         True, 0, False);
   halftone->color0 = 0;
@@ -373,6 +373,9 @@ static const char *halftone_defaults [] = {
   "*sizeFactor:                1.5",
   "*colors:            200",
   "*cycleSpeed:                10",
   "*sizeFactor:                1.5",
   "*colors:            200",
   "*cycleSpeed:                10",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index 2b7e30fb79616a307fc67a50b7148d224e1a0e3e..40a55402a95b5491908cc6bdea686781dba9c4b5 100644 (file)
@@ -1,5 +1,4 @@
-/* xscreensaver, Copyright (c) 1993, 1995, 1996, 1997, 1998, 1999, 2003, 2006
- *  Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1993-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -139,10 +138,12 @@ halo_init (Display *dpy, Window window)
   if (mono_p)
     ;
   else if (random() % (cmode == seuss_mode ? 2 : 10))
   if (mono_p)
     ;
   else if (random() % (cmode == seuss_mode ? 2 : 10))
-    make_uniform_colormap (st->dpy, xgwa.visual, st->cmap, st->colors, &st->ncolors,
+    make_uniform_colormap (xgwa.screen, xgwa.visual, st->cmap,
+                           st->colors, &st->ncolors,
                           True, 0, True);
   else
                           True, 0, True);
   else
-    make_smooth_colormap (st->dpy, xgwa.visual, st->cmap, st->colors, &st->ncolors,
+    make_smooth_colormap (xgwa.screen, xgwa.visual, st->cmap,
+                          st->colors, &st->ncolors,
                          True, 0, True);
 
   if (st->ncolors <= 2) mono_p = True;
                          True, 0, True);
 
   if (st->ncolors <= 2) mono_p = True;
@@ -404,6 +405,9 @@ static const char *halo_defaults [] = {
   "*delay2:            20",
   "*increment:         0",
   "*animate:           False",
   "*delay2:            20",
   "*increment:         0",
   "*animate:           False",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index ea28f6909b94e70a3e22524b76d3875304822494..3b6f0f8c22b4e70b47049e1ffb57f688bc480176 100644 (file)
@@ -341,6 +341,9 @@ static const char *helix_defaults [] = {
   "*fpsSolid:  true",
   "*delay:      5",
   "*subdelay:  20000",
   "*fpsSolid:  true",
   "*delay:      5",
   "*subdelay:  20000",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
diff --git a/hacks/hexadrop.c b/hacks/hexadrop.c
new file mode 100644 (file)
index 0000000..dd8bfee
--- /dev/null
@@ -0,0 +1,408 @@
+/* xscreensaver, Copyright (c) 1999-2013 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.  No representations are made about the suitability of this
+ * software for any purpose.  It is provided "as is" without express or 
+ * implied warranty.
+ *
+ * Draws a grid of hexagons or other shapes and drops them out.
+ * Created 8-Jul-2013.
+ */
+
+#include <math.h>
+#include "screenhack.h"
+
+#define countof(x) (sizeof(x)/sizeof(*(x)))
+#define ABS(x) ((x)<0?-(x):(x))
+
+typedef struct {
+  int sides;
+  int cx, cy;
+  double th0, th, radius, i, speed;
+  int colors[2];
+  Bool initted_p;
+} cell;
+
+typedef struct {
+  Display *dpy;
+  Window window;
+  XWindowAttributes xgwa;
+
+  int ncells, cells_size, gw, gh;
+  cell *cells;
+
+  int delay;
+  double speed;
+  int sides;
+  Bool lockstep_p;
+  Bool uniform_p;
+  Bool initted_p;
+
+  int ncolors;
+  XColor *colors;
+  GC gc;
+
+} state;
+
+
+static void
+make_cells (state *st)
+{
+  int grid_size = get_integer_resource (st->dpy, "size", "Size");
+  cell *cells2;
+  int size, r, gw, gh, x, y, i;
+  double th = 0;
+
+  grid_size = get_integer_resource (st->dpy, "size", "Size");
+  if (grid_size < 5) grid_size = 5;
+
+  size = ((st->xgwa.width > st->xgwa.height
+           ? st->xgwa.width : st->xgwa.height)
+          / grid_size);
+  gw = st->xgwa.width  / size;
+  gh = st->xgwa.height / size;
+
+  switch (st->sides) {
+  case 8:
+    r  = size * 0.75;
+    th = M_PI / st->sides;
+    gw *= 1.25;
+    gh *= 1.25;
+    break;
+  case 6:
+    r  = size / sqrt(3);
+    th = M_PI / st->sides;
+    gh *= 1.2;
+    break;
+  case 3:
+    size *= 2;
+    r  = size / sqrt(3);
+    th = M_PI / st->sides / 2;
+    break;
+  case 4:
+    size /= 2;
+    r  = size * sqrt (2);
+    th = M_PI / st->sides;
+    break;
+  default:
+    abort();
+    break;
+  }
+
+  gw += 3;     /* leave a few extra columns off screen just in case */
+  gh += 3;
+
+  st->ncells = gw * gh;
+
+  if (st->initted_p && !st->cells) abort();
+  if (!st->initted_p && st->cells) abort();
+
+  cells2 = (cell *) calloc (st->ncells, sizeof(*cells2));
+  if (! cells2) abort();
+
+  if (st->cells)
+    {
+      for (y = 0; y < (st->gh < gh ? st->gh : gh); y++)
+        for (x = 0; x < (st->gw < gw ? st->gw : gw); x++)
+          cells2[y * gw + x] = st->cells [y * st->gw + x];
+      free (st->cells);
+      st->cells = 0;
+    }
+
+  st->cells = cells2;
+  st->gw = gw;
+  st->gh = gh;
+
+  i = 0;
+  for (y = 0; y < gh; y++)
+    for (x = 0; x < gw; x++)
+      {
+        cell *c = &st->cells[i];
+        c->sides = st->sides;
+        c->radius = r;
+        c->th = th;
+
+        switch (st->sides) {
+        case 8:
+          if (x & 1)
+            {
+              c->cx = x * size;
+              c->radius /= 2;
+              c->th = M_PI / 4;
+              c->sides = 4;
+              c->radius *= 1.1;
+            }
+          else
+            {
+              c->cx = x * size;
+              c->radius *= 1.02;
+              c->radius--;
+            }
+
+          if (y & 1)
+            c->cx -= size;
+
+          c->cy = y * size;
+
+         break;
+        case 6:
+          c->cx = x * size;
+          c->cy = y * size * sqrt(3)/2;
+          if (y & 1)
+            c->cx -= size * 0.5;
+          break;
+        case 4:
+          c->cx = x * size * 2;
+          c->cy = y * size * 2;
+          break;
+        case 3:
+          c->cx = x * size * 0.5;
+          c->cy = y * size * sqrt(3)/2;
+          if ((x & 1) ^ (y & 1))
+            {
+              c->th = th + M_PI;
+              c->cy -= (r * 0.5);
+            }
+          break;
+        default:
+          abort();
+        }
+
+        if (! c->initted_p)
+          {
+            c->speed = st->speed * (st->uniform_p ? 1 : (0.1 + frand(0.9)));
+            c->i = st->lockstep_p ? 0 : random() % r;
+            c->colors[0] = (st->lockstep_p ? 0 : random() % st->ncolors);
+            c->colors[1] = 0;
+            c->initted_p = True;
+          }
+
+        c->radius += 2;  /* Avoid rounding errors */
+
+        if (c->i > c->radius) c->i = c->radius;
+        if (c->colors[0] >= st->ncolors) c->colors[0] = st->ncolors-1;
+        if (c->colors[1] >= st->ncolors) c->colors[1] = st->ncolors-1;
+
+        i++;
+      }
+
+  st->initted_p = True;
+}
+
+
+static void
+draw_cell (state *st, cell *c)
+{
+  XPoint points[20];
+  int i, j;
+  for (j = 0; j <= 1; j++)
+    {
+      int r = (j == 0 ? c->radius : c->i);
+      for (i = 0; i < c->sides; i++)
+        {
+          double th = i * M_PI * 2 / c->sides;
+          points[i].x = c->cx + r * cos (th + c->th) + 0.5;
+          points[i].y = c->cy + r * sin (th + c->th) + 0.5;
+        }
+      XSetForeground (st->dpy, st->gc, st->colors[c->colors[j]].pixel);
+      XFillPolygon (st->dpy, st->window, st->gc, points, c->sides,
+                    Convex, CoordModeOrigin);
+    }
+
+  c->i -= c->speed;
+  if (c->i < 0)
+    {
+      c->i = c->radius;
+      c->colors[1] = c->colors[0];
+      if (c != &st->cells[0])
+        c->colors[0] = st->cells[0].colors[0];
+      else
+        c->colors[0] = random() % st->ncolors;
+    }
+}
+
+
+static void
+hexadrop_init_1 (Display *dpy, Window window, state *st)
+{
+  XGCValues gcv;
+  char *s1, *s2;
+
+  st->dpy = dpy;
+  st->window = window;
+  st->delay = get_integer_resource (st->dpy, "delay", "Integer");
+  st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer");
+  st->speed = get_float_resource (st->dpy, "speed", "Speed");
+  if (st->speed < 0) st->speed = 0;
+
+  XGetWindowAttributes (st->dpy, st->window, &st->xgwa);
+
+  if (st->ncolors < 2) st->ncolors = 2;
+
+  st->colors = (XColor *) calloc (sizeof(*st->colors), st->ncolors);
+
+  if (st->ncolors < 10)
+    make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
+                          st->colors, &st->ncolors, False, True, 0, True);
+  else
+    make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
+                          st->colors, &st->ncolors, True, 0, True);
+  XSetWindowBackground (dpy, window, st->colors[0].pixel);
+
+  s1 = get_string_resource (st->dpy, "uniform", "Uniform");
+  s2 = get_string_resource (st->dpy, "lockstep", "Lockstep");
+
+  if ((!s1 || !*s1 || !strcasecmp(s1, "maybe")) &&
+      (!s2 || !*s2 || !strcasecmp(s2, "maybe")))
+    {
+      /* When being random, don't do both. */
+      st->uniform_p = random() & 1;
+      st->lockstep_p = st->uniform_p ? 0 : random() & 1;
+    }
+  else 
+    {
+      if (!s1 || !*s1 || !strcasecmp(s1, "maybe"))
+        st->uniform_p = random() & 1;
+      else
+        st->uniform_p = get_boolean_resource (st->dpy, "uniform", "Uniform");
+
+      if (!s2 || !*s2 || !strcasecmp(s2, "maybe"))
+        st->lockstep_p = random() & 1;
+      else
+        st->lockstep_p = get_boolean_resource (st->dpy, "lockstep","Lockstep");
+    }
+
+
+  st->sides = get_integer_resource (st->dpy, "sides", "Sides");
+  if (! (st->sides == 0 || st->sides == 3 || st->sides == 4 || 
+         st->sides == 6 || st->sides == 8))
+    {
+      printf ("%s: invalid number of sides: %d\n", progname, st->sides);
+      st->sides = 0;
+    }
+
+  if (! st->sides)
+    {
+      static int defs[] = { 3, 3, 3,
+                            4,
+                            6, 6, 6, 6,
+                            8, 8, 8 };
+      st->sides = defs[random() % countof(defs)];
+    }
+
+  make_cells (st);
+  gcv.foreground = st->colors[0].pixel;
+  st->gc = XCreateGC (dpy, window, GCForeground, &gcv);
+}
+
+
+static void *
+hexadrop_init (Display *dpy, Window window)
+{
+  state *st = (state *) calloc (1, sizeof(*st));
+  hexadrop_init_1 (dpy, window, st);
+  return st;
+}
+
+
+
+static unsigned long
+hexadrop_draw (Display *dpy, Window window, void *closure)
+{
+  state *st = (state *) closure;
+  int i;
+
+  for (i = 0; i < st->ncells; i++)
+    draw_cell (st, &st->cells[i]);
+
+  return st->delay;
+}
+
+
+static void
+hexadrop_reshape (Display *dpy, Window window, void *closure, 
+                 unsigned int w, unsigned int h)
+{
+  state *st = (state *) closure;
+  XGetWindowAttributes (st->dpy, st->window, &st->xgwa);
+  make_cells (st);
+}
+
+
+static void
+hexadrop_free (Display *dpy, Window window, void *closure)
+{
+  state *st = (state *) closure;
+  if (st->colors)
+    {
+      free_colors (st->xgwa.screen, st->xgwa.colormap, st->colors, st->ncolors);
+      free (st->colors);
+      st->colors = 0;
+    }
+  if (st->cells) 
+    {
+      free (st->cells);
+      st->cells = 0;
+    }
+  if (st->gc)
+    {
+      XFreeGC (st->dpy, st->gc);
+      st->gc = 0;
+    }
+}
+
+
+static Bool
+hexadrop_event (Display *dpy, Window window, void *closure, XEvent *event)
+{
+  state *st = (state *) closure;
+
+  if (event->type == ButtonPress || event->type == KeyPress)
+    {
+      cell *c = st->cells;
+      st->cells = 0;
+      hexadrop_free (st->dpy, st->window, st);
+      free (st->cells);
+      st->cells = c;
+      hexadrop_init_1 (st->dpy, st->window, st);
+      return True;
+    }
+
+  return False;
+}
+
+
+static const char *hexadrop_defaults [] = {
+  ".background:                black",
+  ".foreground:                white",
+  "*fpsSolid:          true",
+  "*delay:             30000",
+  "*sides:             0",
+  "*size:              15",
+  "*speed:             1.0",
+  "*ncolors:           128",
+  "*uniform:           Maybe",
+  "*lockstep:          Maybe",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
+  0
+};
+
+static XrmOptionDescRec hexadrop_options [] = {
+  { "-delay",          ".delay",       XrmoptionSepArg, 0 },
+  { "-sides",          ".sides",       XrmoptionSepArg, 0 },
+  { "-size",           ".size",        XrmoptionSepArg, 0 },
+  { "-speed",          ".speed",       XrmoptionSepArg, 0 },
+  { "-ncolors",                ".ncolors",     XrmoptionSepArg, 0 },
+  { "-uniform-speed",  ".uniform",     XrmoptionNoArg, "True"  },
+  { "-no-uniform-speed",".uniform",    XrmoptionNoArg, "False" },
+  { "-lockstep",       ".lockstep",    XrmoptionNoArg, "True"  },
+  { "-no-lockstep",    ".lockstep",    XrmoptionNoArg, "False" },
+  { 0, 0, 0, 0 }
+};
+
+XSCREENSAVER_MODULE ("Hexadrop", hexadrop)
diff --git a/hacks/hexadrop.man b/hacks/hexadrop.man
new file mode 100644 (file)
index 0000000..b4a5f84
--- /dev/null
@@ -0,0 +1,74 @@
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+hexadrop - shrinking hexagons.
+.SH SYNOPSIS
+.B hexadrop
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-size \fInumber\fP]
+[\-sides \fInumber\fP]
+[\-uniform-speed]
+[\-no-uniform-speed]
+[\-lockstep]
+[\-no-lockstep]
+[\-fps]
+.SH DESCRIPTION
+Draws a grid of hexagons or other shapes and drops them out.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use.  Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window.  This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds.  Default: 30000 (0.03 seconds.).
+.TP 8
+.B \-speed \fInumber\fP
+Speed. 0.5 for half as fast; 2.0 for twice as fast.
+.TP 8
+.B \-size \fInumber\fP
+How many tiles to fit horizontally on the screen.  Default 15.
+.TP 8
+.B \-sides \fInumber\fP
+Shape of the tiles. 3, 4, 6 or 8. Default: random.
+.TP 8
+.B \-uniform-speed | \-no-uniform-speed
+Whether each tile should drop at the same speed. Default: random.
+.TP 8
+.B \-lockstep | \-no-lockstep
+Whether each tile should drop at the same time. Default: random.
+.TP 8
+.B \-fps | \-no-fps
+Whether to show a frames-per-second display at the bottom of the screen.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2013 by Jamie Zawinski.  Permission to use, copy, modify, 
+distribute, and sell this software and its documentation for any purpose is 
+hereby granted without fee, provided that the above copyright notice appear 
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation.  No representations are made about the 
+suitability of this software for any purpose.  It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
index 09614458f5e46ca1e92f152f0ed504e93298f51e..10e2656d937b940e6603d636639a026362e7dd99 100644 (file)
@@ -57,6 +57,7 @@ static const char sccsid[] = "@(#)hop.c       5.00 2000/11/01 xlockmore";
                                        "*cycles: 2500 \n" \
                                        "*ncolors: 200 \n" \
                                        "*fpsSolid: true \n" \
                                        "*cycles: 2500 \n" \
                                        "*ncolors: 200 \n" \
                                        "*fpsSolid: true \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define SMOOTH_COLORS
 # define reshape_hop 0
 
 # define SMOOTH_COLORS
 # define reshape_hop 0
index 099b0d1c8c265282c2162ab0bffeaba0374e419f..d1f789c9869d5547db6221ae1c1363fb090f467c 100644 (file)
@@ -106,6 +106,9 @@ static const char *ifs_defaults [] = {
   "*doubleBuffer:      False",
 #else
   "*doubleBuffer:      True",
   "*doubleBuffer:      False",
 #else
   "*doubleBuffer:      True",
+#endif
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
 #endif
   0
 };
 #endif
   0
 };
@@ -435,7 +438,7 @@ ifs_init (Display *d_arg, Window w_arg)
   if (st->colours) free(st->colours);
   st->colours = (XColor *)calloc(st->ncolours, sizeof(XColor));
   if (!st->colours) exit(1);
   if (st->colours) free(st->colours);
   st->colours = (XColor *)calloc(st->ncolours, sizeof(XColor));
   if (!st->colours) exit(1);
-  make_smooth_colormap (st->dpy, xgwa.visual, xgwa.colormap, 
+  make_smooth_colormap (xgwa.screen, xgwa.visual, xgwa.colormap, 
                         st->colours, &st->ncolours,
                         True, 0, False);
 
                         st->colours, &st->ncolours,
                         True, 0, False);
 
index aeee0308526344d65c48482e31d6450bfea1b0f4..d7f0147f42a1b4f0d9f92003155d32701f24ed12 100644 (file)
@@ -1,4 +1,4 @@
-/* imsmap, Copyright (c) 1992-2008 Juergen Nickelsen and Jamie Zawinski.
+/* imsmap, Copyright (c) 1992-2013 Juergen Nickelsen and Jamie Zawinski.
  * Derived from code by Markus Schirmer, TU Berlin.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * Derived from code by Markus Schirmer, TU Berlin.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -162,7 +162,7 @@ init_map (struct state *st)
   if (mono_p)
     st->flip_xy = 0;
   else if (st->colors)
   if (mono_p)
     st->flip_xy = 0;
   else if (st->colors)
-    free_colors (st->dpy, st->cmap, st->colors, st->ncolors);
+    free_colors (st->xgwa.screen, st->cmap, st->colors, st->ncolors);
   st->colors = 0;
 
   st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer");
   st->colors = 0;
 
   st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer");
@@ -188,7 +188,7 @@ init_map (struct state *st)
     {
       st->colors = (XColor *) malloc (st->ncolors * sizeof(*st->colors));
 
     {
       st->colors = (XColor *) malloc (st->ncolors * sizeof(*st->colors));
 
-      make_smooth_colormap (st->dpy, st->xgwa.visual, st->cmap,
+      make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->cmap,
                             st->colors, &st->ncolors,
                             True, 0, False);
       if (st->ncolors <= 2)
                             st->colors, &st->ncolors,
                             True, 0, False);
       if (st->ncolors <= 2)
@@ -401,6 +401,9 @@ static const char *imsmap_defaults [] = {
   "*iterations:        7",
   "*delay:     5",
   "*delay2:    20000",
   "*iterations:        7",
   "*delay:     5",
   "*delay2:    20000",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 6e48f3f277c28369e6ab188423885c37a18ca502..35879f9c3b2109c64bc37598f4cc909733960361 100644 (file)
@@ -85,6 +85,9 @@ static const char *interaggregate_defaults[] =
     "*baseOrbits: 75",
     "*baseOnCenter: False",
     "*drawCenters: False",
     "*baseOrbits: 75",
     "*baseOnCenter: False",
     "*drawCenters: False",
+#ifdef USE_IPHONE
+    "*ignoreRotation: True",
+#endif
     0
 };
 
     0
 };
 
index 6060798181928ddc2482e2a95a5e8a8fa95ea2a2..3a270abe17d86ec3a040bca5eff6dc9d6c234c61 100644 (file)
  * Last modified: Sun Aug 31 23:40:14 2003, 
  *              david slimp <rock808@DavidSlimp.com>
  *             added -hue option to specify base color hue
  * Last modified: Sun Aug 31 23:40:14 2003, 
  *              david slimp <rock808@DavidSlimp.com>
  *             added -hue option to specify base color hue
- *
- * TODO:
- *
- *    This really needs to be sped up.
- *
- *    I've tried making it use XPutPixel/XPutImage instead of XFillRectangle,
- *    but that doesn't seem to help (it's the same speed at gridsize=1, and
- *    it actually makes it slower at larger sizes.)
- *
- *    I played around with shared memory, but clearly I still don't know how
- *    to use the XSHM extension properly, because it doesn't work yet.
- *
- *    Hannu had put in code to use the double-buffering extension, but that
- *    code didn't work for me on Irix.  I don't think it would help anyway,
- *    since it's not the swapping of frames that is the bottleneck (or a source
- *    of visible flicker.)
- *
- *     -- jwz, 4-Jun-98
+ * Last modified: Wed May 15 00:04:43 2013,
+ *              Dave Odell <dmo2118@gmail.com>
+ *              Tuned performance; double-buffering is now off by default.
+ *              Made animation speed independant of FPS.
+ *              Added cleanup code, fixed a few glitches.
+ *              Added gratuitous #ifdefs.
  */
 
 #include <math.h>
  */
 
 #include <math.h>
+#include <errno.h>
 
 #include "screenhack.h"
 
 
 #include "screenhack.h"
 
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#else
+
+typedef unsigned int uint32_t;
+typedef unsigned short uint16_t;
+typedef unsigned char uint8_t;
+
+#endif
+
+/*
+Tested on an Intel(R) Pentium(R) 4 CPU 3.00GHz (family 15, model 6, 2 cores),
+1 GB PC2-4200, nouveau - Gallium 0.4 on NV44, X.Org version: 1.13.3. A very
+modest system by current standards.
+
+Does double-buffering make sense? (gridsize = 2)
+USE_XIMAGE is off: Yes (-db: 4.1 FPS, -no-db: 2.9 FPS)
+XPutImage in strips: No (-db: 35.9 FPS, -no-db: 38.7 FPS)
+XPutImage, whole image: No (-db: 32.3 FPS, -no-db: 33.7 FPS)
+MIT-SHM, whole image: Doesn't work anyway: (37.3 FPS)
+
+If gridsize = 1, XPutImage is slow when the XImage is one line at a time.
+XPutImage in strips: -db: 21.2 FPS, -no-db: 19.7 FPS
+XPutimage, whole image: -db: 23.2 FPS, -no-db: 23.4 FPS
+MIT-SHM: 26.0 FPS
+
+So XPutImage in strips is very slightly faster when gridsize >= 2, but
+quite a bit worse when gridsize = 1.
+*/
+
 /* I thought it would be faster this way, but it turns out not to be... -jwz */
 /* I thought it would be faster this way, but it turns out not to be... -jwz */
-#undef USE_XIMAGE
+/* It's a lot faster for me, though - D.O. */
+#define USE_XIMAGE
+
+/* i.e. make the XImage the size of the screen. This is much faster when
+ * gridsize = 1. (And SHM is turned off.) */
+#define USE_BIG_XIMAGE
+
+/* Numbers are wave_table size, measured in unsigned integers.
+ * FPS/radius = 50/radius = 800/radius = 1500/Big-O memory usage
+ *
+ * Use at most one of the following:
+ * Both off = regular sqrt() - 13.5 FPS, 50/800/1500. */
+
+/* #define USE_FAST_SQRT_HACKISH */ /* 17.8 FPS/2873/4921/5395/O(lg(radius)) */
+#define USE_FAST_SQRT_BIGTABLE2 /* 26.1 FPS/156/2242/5386/O(radius^2) */
 
 #ifndef USE_XIMAGE
 # undef HAVE_XSHM_EXTENSION  /* only applicable when using XImages */
 #endif /* USE_XIMAGE */
 
 
 #ifndef USE_XIMAGE
 # undef HAVE_XSHM_EXTENSION  /* only applicable when using XImages */
 #endif /* USE_XIMAGE */
 
-
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
 # include "xdbe.h"
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
 # include "xdbe.h"
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
@@ -82,7 +114,7 @@ static const char *interference_defaults [] = {
   "*gray:        false", /* color or grayscale */
   "*mono:        false", /* monochrome, not very much fun */
 
   "*gray:        false", /* color or grayscale */
   "*mono:        false", /* monochrome, not very much fun */
 
-  "*doubleBuffer: True",
+  "*doubleBuffer: False", /* doubleBuffer slows things down for me - D.O. */
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   "*useDBE:      True", /* use double buffering extension */
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   "*useDBE:      True", /* use double buffering extension */
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
@@ -90,6 +122,9 @@ static const char *interference_defaults [] = {
 #ifdef HAVE_XSHM_EXTENSION
   "*useSHM:      True", /* use shared memory extension */
 #endif /*  HAVE_XSHM_EXTENSION */
 #ifdef HAVE_XSHM_EXTENSION
   "*useSHM:      True", /* use shared memory extension */
 #endif /*  HAVE_XSHM_EXTENSION */
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
@@ -114,7 +149,7 @@ static XrmOptionDescRec interference_options [] = {
 };
 
 struct inter_source {
 };
 
 struct inter_source {
-  int x; 
+  int x;
   int y;
   double x_theta;
   double y_theta;
   int y;
   double x_theta;
   double y_theta;
@@ -122,7 +157,7 @@ struct inter_source {
 
 struct inter_context {
   /*
 
 struct inter_context {
   /*
-   * Display-related entries 
+   * Display-related entries
    */
   Display* dpy;
   Window   win;
    */
   Display* dpy;
   Window   win;
@@ -138,7 +173,7 @@ struct inter_context {
 #endif /* USE_XIMAGE */
 
 #ifdef HAVE_XSHM_EXTENSION
 #endif /* USE_XIMAGE */
 
 #ifdef HAVE_XSHM_EXTENSION
-  Bool use_shm;
+  Bool use_shm, shm_can_draw;
   XShmSegmentInfo shm_info;
 #endif /* HAVE_XSHM_EXTENSION */
 
   XShmSegmentInfo shm_info;
 #endif /* HAVE_XSHM_EXTENSION */
 
@@ -152,7 +187,6 @@ struct inter_context {
   int speed;
   int delay;
   int shift;
   int speed;
   int delay;
   int shift;
-  int radius;
 
   /*
    * Drawing-related entries
 
   /*
    * Drawing-related entries
@@ -160,13 +194,21 @@ struct inter_context {
   int w;
   int h;
   Colormap cmap;
   int w;
   int h;
   Colormap cmap;
+  Screen *screen;
   XColor* pal;
   XColor* pal;
+#ifndef USE_XIMAGE
   GC* gcs;
   GC* gcs;
+#endif
+  int radius; /* Not always the same as the X resource. */
+  double last_frame;
+#ifdef USE_XIMAGE
+  uint32_t* row;
+#endif
 
   /*
    * lookup tables
    */
 
   /*
    * lookup tables
    */
-  int* wave_height;
+  unsigned* wave_height;
     
   /*
    * Interference sources
     
   /*
    * Interference sources
@@ -181,6 +223,268 @@ struct inter_context {
 # define TARGET(c) ((c)->pix_buf ? (c)->pix_buf : (c)->win)
 #endif /* !HAVE_DOUBLE_BUFFER_EXTENSION */
 
 # define TARGET(c) ((c)->pix_buf ? (c)->pix_buf : (c)->win)
 #endif /* !HAVE_DOUBLE_BUFFER_EXTENSION */
 
+#ifdef USE_FAST_SQRT_HACKISH
+/* Based loosely on code from Wikipedia:
+ * https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Approximations_that_depend_on_IEEE_representation
+ */
+
+/* FAST_SQRT_EXTRA_BITS = 3: Smallest useful value
+ * = 5/6: A little bit of banding, wave_height table is on par with regular
+ *        sqrt() code.
+ * = 7: No apparent difference with original @ radius = 800.
+ * = 8: One more just to be comfortable.
+ */
+
+# define FAST_SQRT_EXTRA_BITS 8
+
+union int_float
+{
+  uint32_t i;
+  float f;
+};
+
+static unsigned fast_log2(unsigned x)
+{
+  union int_float u;
+  if(!x)
+    return x;
+  u.f = x;
+  return ((u.i - 0x3f800000) >> (23 - FAST_SQRT_EXTRA_BITS)) + 1;
+}
+
+static float fast_inv_log2(unsigned x)
+{
+  union int_float u;
+  if(!x)
+    return 0.0f;
+  u.i = ((x - 1) << (23 - FAST_SQRT_EXTRA_BITS)) + 0x3f800000;
+  return u.f;
+}
+
+#endif
+
+#ifdef USE_FAST_SQRT_BIGTABLE2
+
+/* I eyeballed these figures. They could be improved. - D.O. */
+
+# define FAST_SQRT_DISCARD_BITS1 4
+/* = 5: Dot in center is almost invisible at radius = 800. */
+/* = 4: Dot in center looks OK at radius = 50. */
+
+/* 156/2740/9029 */
+/* # define FAST_SQRT_DISCARD_BITS2 8 */
+/* # define FAST_SQRT_CUTOFF 64 * 64 */
+
+/* 156/2242/5386 */
+# define FAST_SQRT_DISCARD_BITS2 9
+# define FAST_SQRT_CUTOFF 128 * 128
+
+/*
+ * This is a little faster:
+ * 44.5 FPS, 19/5000/17578
+ *
+ * # define FAST_SQRT_DISCARD_BITS1 7
+ * # define FAST_SQRT_DISCARD_BITS2 7
+ * # define FAST_SQRT_CUTOFF 0
+ *
+ * For radius = 800, FAST_SQRT_DISCARD_BITS2 =
+ * = 9/10: Approximately the original table size, some banding near origins.
+ * = 7: wave_height is 20 KB, and just fits inside a 32K L1 cache.
+ * = 6: Nearly indistinguishable from original
+ */
+
+/*
+  FAST_TABLE(x) is equivalent to, but slightly faster than:
+  x < FAST_SQRT_CUTOFF ?
+    (x >> FAST_SQRT_DISCARD_BITS1) :
+    ((x - FAST_SQRT_CUTOFF) >> FAST_SQRT_DISCARD_BITS2) +
+      (FAST_SQRT_CUTOFF >> FAST_SQRT_DISCARD_BITS1);
+*/
+
+#define FAST_TABLE(x) \
+  ((x) < FAST_SQRT_CUTOFF ? \
+    ((x) >> FAST_SQRT_DISCARD_BITS1) : \
+    (((x) + \
+      ((FAST_SQRT_CUTOFF << (FAST_SQRT_DISCARD_BITS2 - \
+        FAST_SQRT_DISCARD_BITS1)) - FAST_SQRT_CUTOFF)) >> \
+      FAST_SQRT_DISCARD_BITS2))
+
+static double fast_inv_table(unsigned x)
+{
+  return x < (FAST_SQRT_CUTOFF >> FAST_SQRT_DISCARD_BITS1) ?
+    (x << FAST_SQRT_DISCARD_BITS1) :
+    ((x - (FAST_SQRT_CUTOFF >> FAST_SQRT_DISCARD_BITS1)) <<
+      FAST_SQRT_DISCARD_BITS2) + FAST_SQRT_CUTOFF;
+}
+
+#endif
+
+/* Also destroys c->row. */
+static void destroy_image(Display* dpy, struct inter_context* c)
+{
+#ifdef USE_XIMAGE
+  if(c->ximage) {
+# ifdef HAVE_XSHM_EXTENSION
+    if(c->use_shm) {
+      destroy_xshm_image(dpy, c->ximage, &c->shm_info);
+    } else
+# endif
+    {
+      /* Also frees c->ximage->data, which isn't allocated by XCreateImage. */
+      XDestroyImage(c->ximage);
+    }
+  }
+
+  free(c->row);
+#endif
+}
+
+static void inter_free(Display* dpy, struct inter_context* c)
+{
+#ifndef USE_XIMAGE
+  unsigned i;
+#endif
+
+  if(c->pix_buf)
+    XFreePixmap(dpy, c->pix_buf);
+
+  if(c->copy_gc)
+    XFreeGC(dpy, c->copy_gc);
+
+  destroy_image(dpy, c);
+
+  if(c->colors <= 2)
+    free(c->pal);
+  else
+    free_colors(c->screen, c->cmap, c->pal, c->colors);
+
+#ifndef USE_XIMAGE
+  for(i = 0; i != c->colors; ++i)
+    XFreeGC(dpy, c->gcs[i]);
+  free(c->gcs);
+#endif
+
+  free(c->wave_height);
+  free(c->source);
+}
+
+static void abort_no_mem(void)
+{
+  fprintf(stderr, "interference: %s\n", strerror(ENOMEM));
+  exit(1);
+}
+
+static void check_no_mem(Display* dpy, struct inter_context* c, void* ptr)
+{
+  if(!ptr) {
+    inter_free(dpy, c);
+    abort_no_mem();
+  }
+}
+
+/* On allocation error, c->row == NULL. */
+static void create_image(
+  Display* dpy, 
+  struct inter_context* c, 
+  const XWindowAttributes* xgwa)
+{
+#ifdef USE_XIMAGE
+  c->row = malloc((c->w / c->grid_size) * sizeof(uint32_t));
+  check_no_mem(dpy, c, c->row);
+
+# ifdef HAVE_XSHM_EXTENSION
+  /*
+   * interference used to put one row at a time to the X server. This changes
+   * today.
+   *
+   * XShmPutImage is asynchronous; the contents of the XImage must not be
+   * modified until the server has placed the data on the screen. Waiting for
+   * an XShmCompletionEvent after every line of pixels is a little nutty, so
+   * shared-memory XImages will cover the entire screen, and it only has to be
+   * sent once per frame.
+   *
+   * The non-SHM code, on the other hand is noticeably slower when
+   * gridsize = 1 with one row at a time. If, on the other hand, gridsize >= 2,
+   * there's a slight speed increase with one row at a time.
+   *
+   * This uses a lot more RAM than the single line approach. Users with only
+   * 4 MB of RAM may wish to disable USE_BIG_XIMAGE and specify -no-shm on the
+   * command line. Since this is 2013 and desktop computers are shipping with
+   * 8 GB of RAM, I doubt that this will be a major issue. - D.O.
+   */
+
+  if (c->use_shm)
+    {
+      c->ximage = create_xshm_image(dpy, xgwa->visual, xgwa->depth,
+                                    ZPixmap, 0, &c->shm_info,
+                                    xgwa->width, xgwa->height);
+      if (!c->ximage)
+        c->use_shm = False;
+      /* If create_xshm_image fails, it will not be attempted again. */
+
+      c->shm_can_draw = True;
+    }
+# endif /* HAVE_XSHM_EXTENSION */
+
+  if (!c->ximage)
+    {
+      c->ximage =
+        XCreateImage(dpy, xgwa->visual,
+                     xgwa->depth, ZPixmap, 0, 0, /* depth, fmt, offset, data */
+                     xgwa->width,                /* width */
+# ifdef USE_BIG_XIMAGE
+                     xgwa->height,               /* height */
+# else
+                     c->grid_size,               /* height */
+# endif
+                     8, 0);                      /* pad, bpl */
+
+      if(c->ximage)
+        {
+          c->ximage->data = (char *)
+            calloc(c->ximage->height, c->ximage->bytes_per_line);
+
+          if(!c->ximage->data)
+            {
+              free(c->ximage);
+              c->ximage = NULL;
+            }
+        }
+    }
+
+  if(!c->ximage)
+    {
+      free(c->row);
+      c->row = 0;
+    }
+
+  check_no_mem(dpy, c, c->row);
+#endif /* USE_XIMAGE */
+}
+
+static void create_pix_buf(Display* dpy, Window win, struct inter_context *c,
+                           const XWindowAttributes* xgwa)
+{
+#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+  if(c->back_buf)
+    return;
+#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+  c->pix_buf = XCreatePixmap(dpy, win, xgwa->width, xgwa->height, xgwa->depth);
+}
+
+static double float_time(void)
+{
+  struct timeval result;
+  gettimeofday(
+    &result
+#ifdef GETTIMEOFDAY_TWO_ARGS
+    , NULL
+#endif
+    );
+
+  return result.tv_usec * 1.0e-6 + result.tv_sec;
+}
+
 static void inter_init(Display* dpy, Window win, struct inter_context* c) 
 {
   XWindowAttributes xgwa;
 static void inter_init(Display* dpy, Window win, struct inter_context* c) 
 {
   XWindowAttributes xgwa;
@@ -188,10 +492,14 @@ static void inter_init(Display* dpy, Window win, struct inter_context* c)
   int i;
   int mono;
   int gray;
   int i;
   int mono;
   int gray;
+  int radius;
   XGCValues val;
   XGCValues val;
-  unsigned long valmask = 0;
   Bool dbuf = get_boolean_resource (dpy, "doubleBuffer", "Boolean");
 
   Bool dbuf = get_boolean_resource (dpy, "doubleBuffer", "Boolean");
 
+#ifndef USE_XIMAGE
+  unsigned long valmask = 0;
+#endif
+
 # ifdef HAVE_COCOA     /* Don't second-guess Quartz's double-buffering */
   dbuf = False;
 # endif
 # ifdef HAVE_COCOA     /* Don't second-guess Quartz's double-buffering */
   dbuf = False;
 # endif
@@ -203,29 +511,16 @@ static void inter_init(Display* dpy, Window win, struct inter_context* c)
 
   c->delay = get_integer_resource(dpy, "delay", "Integer");
 
 
   c->delay = get_integer_resource(dpy, "delay", "Integer");
 
-
   XGetWindowAttributes(c->dpy, c->win, &xgwa);
   c->w = xgwa.width;
   c->h = xgwa.height;
   c->cmap = xgwa.colormap;
   XGetWindowAttributes(c->dpy, c->win, &xgwa);
   c->w = xgwa.width;
   c->h = xgwa.height;
   c->cmap = xgwa.colormap;
+  c->screen = xgwa.screen;
 
 #ifdef HAVE_XSHM_EXTENSION
   c->use_shm = get_boolean_resource(dpy, "useSHM", "Boolean");
 #endif /*  HAVE_XSHM_EXTENSION */
 
 
 #ifdef HAVE_XSHM_EXTENSION
   c->use_shm = get_boolean_resource(dpy, "useSHM", "Boolean");
 #endif /*  HAVE_XSHM_EXTENSION */
 
-  if (dbuf)
-    {
-#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
-      c->back_buf = xdbe_get_backbuffer (c->dpy, c->win, XdbeUndefined);
-#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
-
-#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
-      if (!c->back_buf)
-#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
-        c->pix_buf = XCreatePixmap (dpy, win, xgwa.width, xgwa.height,
-                                    xgwa.depth);
-    }
-
   val.function = GXcopy;
   c->copy_gc = XCreateGC(c->dpy, TARGET(c), GCFunction, &val);
 
   val.function = GXcopy;
   c->copy_gc = XCreateGC(c->dpy, TARGET(c), GCFunction, &val);
 
@@ -250,39 +545,15 @@ static void inter_init(Display* dpy, Window win, struct inter_context* c)
     c->shift -= 360.0;
   while(c->shift <= -360.0)
     c->shift += 360.0;
     c->shift -= 360.0;
   while(c->shift <= -360.0)
     c->shift += 360.0;
-  c->radius = get_integer_resource(dpy, "radius", "Integer");;
-  if(c->radius < 1)
-    c->radius = 1;
-
-#ifdef USE_XIMAGE
+  radius = get_integer_resource(dpy, "radius", "Integer");;
+  if(radius < 1)
+    radius = 1;
 
 
-  c->ximage = 0;
-
-# ifdef HAVE_XSHM_EXTENSION
-  if (c->use_shm)
-    {
-      c->ximage = create_xshm_image(dpy, xgwa.visual, xgwa.depth,
-                                   ZPixmap, 0, &c->shm_info,
-                                   xgwa.width, c->grid_size);
-      if (!c->ximage)
-       c->use_shm = False;
-    }
-# endif /* HAVE_XSHM_EXTENSION */
-
-  if (!c->ximage)
-    {
-      c->ximage =
-       XCreateImage (dpy, xgwa.visual,
-                     xgwa.depth, ZPixmap, 0, 0, /* depth, fmt, offset, data */
-                     xgwa.width, c->grid_size,  /* width, height */
-                     8, 0);                     /* pad, bpl */
-      c->ximage->data = (unsigned char *)
-       calloc(c->ximage->height, c->ximage->bytes_per_line);
-    }
-#endif /* USE_XIMAGE */
+  create_image(dpy, c, &xgwa);
 
   if(!mono) {
     c->pal = calloc(c->colors, sizeof(XColor));
 
   if(!mono) {
     c->pal = calloc(c->colors, sizeof(XColor));
+    check_no_mem(dpy, c, c->pal);
 
     gray = get_boolean_resource(dpy, "gray", "Boolean");
     if(!gray) {
 
     gray = get_boolean_resource(dpy, "gray", "Boolean");
     if(!gray) {
@@ -297,7 +568,7 @@ static void inter_init(Display* dpy, Window win, struct inter_context* c)
       V[0] = 1.0; V[1] = 0.5; V[2] = 0.0;
     }
 
       V[0] = 1.0; V[1] = 0.5; V[2] = 0.0;
     }
 
-    make_color_loop(c->dpy, c->cmap, 
+    make_color_loop(c->screen, xgwa.visual, c->cmap, 
                    H[0], S[0], V[0], 
                    H[1], S[1], V[1], 
                    H[2], S[2], V[2], 
                    H[0], S[0], V[0], 
                    H[1], S[1], V[1], 
                    H[2], S[2], V[2], 
@@ -312,34 +583,77 @@ static void inter_init(Display* dpy, Window win, struct inter_context* c)
   if(mono) { /* DON'T else this with the previous if! */
     c->colors = 2;
     c->pal = calloc(2, sizeof(XColor));
   if(mono) { /* DON'T else this with the previous if! */
     c->colors = 2;
     c->pal = calloc(2, sizeof(XColor));
+    check_no_mem(dpy, c, c->pal);
     c->pal[0].pixel = BlackPixel(c->dpy, DefaultScreen(c->dpy));
     c->pal[1].pixel = WhitePixel(c->dpy, DefaultScreen(c->dpy));
     c->pal[0].pixel = BlackPixel(c->dpy, DefaultScreen(c->dpy));
     c->pal[1].pixel = WhitePixel(c->dpy, DefaultScreen(c->dpy));
-  }    
+  }
+
+#ifdef HAVE_XSHM_EXTENSION
+  if(c->use_shm)
+    dbuf = False;
+  /* Double-buffering doesn't work with MIT-SHM: XShmPutImage must draw to the
+   * window. Otherwise, XShmCompletion events will have the XAnyEvent::window
+   * field set to the back buffer, and XScreenSaver will ignore the event. */
+#endif
 
 
+  if (dbuf)
+    {
+#ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+      c->back_buf = xdbe_get_backbuffer (c->dpy, c->win, XdbeUndefined);
+#endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+
+      create_pix_buf(dpy, win, c, &xgwa);
+    }
+
+#ifndef USE_XIMAGE
   valmask = GCForeground;
   c->gcs = calloc(c->colors, sizeof(GC));
   valmask = GCForeground;
   c->gcs = calloc(c->colors, sizeof(GC));
+  check_no_mem(dpy, c, c->gcs);
   for(i = 0; i < c->colors; i++) {
     val.foreground = c->pal[i].pixel;    
     c->gcs[i] = XCreateGC(c->dpy, TARGET(c), valmask, &val);
   }
   for(i = 0; i < c->colors; i++) {
     val.foreground = c->pal[i].pixel;    
     c->gcs[i] = XCreateGC(c->dpy, TARGET(c), valmask, &val);
   }
+#endif
+
+#if defined USE_FAST_SQRT_HACKISH
+  c->radius = fast_log2(radius * radius);
+#elif defined USE_FAST_SQRT_BIGTABLE2
+  c->radius = radius * radius;
+  c->radius = FAST_TABLE(c->radius);
+#else
+  c->radius = radius;
+#endif
+
+  c->wave_height = calloc(c->radius, sizeof(unsigned));
+  check_no_mem(dpy, c, c->wave_height);
 
 
-  c->wave_height = calloc(c->radius, sizeof(int));
   for(i = 0; i < c->radius; i++) {
   for(i = 0; i < c->radius; i++) {
-    float max = 
+    float max, fi;
+#if defined USE_FAST_SQRT_HACKISH
+    fi = sqrt(fast_inv_log2(i));
+#elif defined USE_FAST_SQRT_BIGTABLE2
+    fi = sqrt(fast_inv_table(i));
+#else
+    fi = i;
+#endif
+    max = 
       ((float)c->colors) * 
       ((float)c->colors) * 
-      ((float)c->radius - (float)i) /
-      ((float)c->radius);
+      ((float)radius - fi) /
+      ((float)radius);
     c->wave_height[i] = 
     c->wave_height[i] = 
-      (int)
-      ((max + max*cos((double)i/50.0)) / 2.0);
+      (unsigned)
+      ((max + max*cos(fi/50.0)) / 2.0);
   }
 
   c->source = calloc(c->count, sizeof(struct inter_source));
   }
 
   c->source = calloc(c->count, sizeof(struct inter_source));
+  check_no_mem(dpy, c, c->source);
+
   for(i = 0; i < c->count; i++) {
     c->source[i].x_theta = frand(2.0)*3.14159;
     c->source[i].y_theta = frand(2.0)*3.14159;
   }
 
   for(i = 0; i < c->count; i++) {
     c->source[i].x_theta = frand(2.0)*3.14159;
     c->source[i].y_theta = frand(2.0)*3.14159;
   }
 
+  c->last_frame = float_time();
 }
 
 #define source_x(c, i) \
 }
 
 #define source_x(c, i) \
@@ -348,78 +662,201 @@ static void inter_init(Display* dpy, Window win, struct inter_context* c)
   (c->h/2 + ((int)(cos(c->source[i].y_theta)*((float)c->h/2.0))))
 
 /*
   (c->h/2 + ((int)(cos(c->source[i].y_theta)*((float)c->h/2.0))))
 
 /*
- * this is rather suboptimal. the sqrt() doesn't seem to be a big
- * performance hit, but all those separate XFillRectangle()'s are.
- * hell, it's just a quick hack anyway -- if someone wishes to tune
- * it, go ahead! 
+ * This is rather suboptimal. Calculating the distance per-pixel is going to
+ * be a lot slower than using now-ubiquitous SIMD CPU instructions to do four
+ * or eight pixels at a time. Plus, this could be almost trivially
+ * parallelized, what with all the multi-core hardware nowadays.
  */
 
  */
 
-static void do_inter(struct inter_context* c) 
+static unsigned long do_inter(struct inter_context* c)
 {
   int i, j, k;
 {
   int i, j, k;
-  int result;
+  unsigned result;
   int dist;
   int dist;
-  int g;
+  int g = c->grid_size;
+  unsigned w_div_g = c->w/g;
 
   int dx, dy;
 
   int dx, dy;
+  int px, py;
+
+#ifdef USE_XIMAGE
+  unsigned img_y = 0;
+  void *scanline = c->ximage->data;
+#endif
+
+  double now;
+  float elapsed;
+
+#if defined USE_XIMAGE && defined HAVE_XSHM_EXTENSION
+  /* Wait a little while for the XServer to become ready if necessary. */
+  if(c->use_shm && !c->shm_can_draw)
+    return 2000;
+#endif
+
+  now = float_time();
+  elapsed = (now - c->last_frame) * 10.0;
+
+  c->last_frame = now;
 
   for(i = 0; i < c->count; i++) {
 
   for(i = 0; i < c->count; i++) {
-    c->source[i].x_theta += (c->speed/1000.0);
+    c->source[i].x_theta += (elapsed*c->speed/1000.0);
     if(c->source[i].x_theta > 2.0*3.14159)
       c->source[i].x_theta -= 2.0*3.14159;
     if(c->source[i].x_theta > 2.0*3.14159)
       c->source[i].x_theta -= 2.0*3.14159;
-    c->source[i].y_theta += (c->speed/1000.0);
+    c->source[i].y_theta += (elapsed*c->speed/1000.0);
     if(c->source[i].y_theta > 2.0*3.14159)
       c->source[i].y_theta -= 2.0*3.14159;
     c->source[i].x = source_x(c, i);
     c->source[i].y = source_y(c, i);
   }
 
     if(c->source[i].y_theta > 2.0*3.14159)
       c->source[i].y_theta -= 2.0*3.14159;
     c->source[i].x = source_x(c, i);
     c->source[i].y = source_y(c, i);
   }
 
-  g = c->grid_size;
-
   for(j = 0; j < c->h/g; j++) {
   for(j = 0; j < c->h/g; j++) {
-    for(i = 0; i < c->w/g; i++) {
+    for(i = 0; i < w_div_g; i++) {
       result = 0;
       result = 0;
+      px = i*g + g/2;
+      py = j*g + g/2;
       for(k = 0; k < c->count; k++) {
       for(k = 0; k < c->count; k++) {
-       dx = i*g + g/2 - c->source[k].x;
-       dy = j*g + g/2 - c->source[k].y;
-       dist = sqrt(dx*dx + dy*dy); /* what's the performance penalty here? */
-       result += (dist >= c->radius ? 0 : c->wave_height[dist]);
+
+        dx = px - c->source[k].x;
+        dy = py - c->source[k].y;
+
+        /*
+         * Other possibilities for improving performance here:
+         * 1. Using octagon-based distance estimation
+         *    (Which causes giant octagons to appear.)
+         * 2. Square root approximation by reinterpret-casting IEEE floats to
+         *    integers.
+         *    (Which causes angles to appear when two waves interfere.)
+         */
+
+/*      int_float u;
+        u.f = dx*dx + dy*dy;
+        u.i = (1 << 29) + (u.i >> 1) - (1 << 22);
+        dist = u.f; */
+
+#if defined USE_FAST_SQRT_BIGTABLE2
+        dist = dx*dx + dy*dy;
+        dist = FAST_TABLE(dist);
+#elif defined USE_FAST_SQRT_HACKISH
+        dist = fast_log2(dx*dx + dy*dy);
+#else
+        dist = sqrt(dx*dx + dy*dy);
+#endif
+
+        result += (dist >= c->radius ? 0 : c->wave_height[dist]);
       }
       }
-      result %= c->colors;
 
 
-#ifdef USE_XIMAGE
-      /* Fill in these `gridsize' horizontal bits in the scanline */
-      for(k = 0; k < g; k++)
-       XPutPixel(c->ximage, (g*i)+k, 0, c->pal[result].pixel);
+      /* It's slightly faster to do a subtraction or two before calculating the
+       * modulus. - D.O. */
+      if(result >= c->colors)
+      {
+        result -= c->colors;
+        if(result >= c->colors)
+          result %= (unsigned)c->colors;
+      }
 
 
-#else  /* !USE_XIMAGE */
-      XFillRectangle(c->dpy, TARGET(c), c->gcs[result], g*i, g*j, g, g); 
-#endif /* !USE_XIMAGE */
+#ifdef USE_XIMAGE
+      c->row[i] = c->pal[result].pixel;
+#else
+      XFillRectangle(c->dpy, TARGET(c), c->gcs[result], g*i, g*j, g, g);
+#endif /* USE_XIMAGE */
     }
 
 #ifdef USE_XIMAGE
     }
 
 #ifdef USE_XIMAGE
+    /* Fill in these `gridsize' horizontal bits in the scanline */
+    if(c->ximage->bits_per_pixel == 32)
+    {
+      uint32_t *ptr = (uint32_t *)scanline;
+      for(i = 0; i < w_div_g; i++) {
+        for(k = 0; k < g; k++)
+          ptr[g*i+k] = c->row[i];
+      }
+    }
+    else if(c->ximage->bits_per_pixel == 24)
+    {
+      uint8_t *ptr = (uint8_t *)scanline;
+      for(i = 0; i < w_div_g; i++) {
+        for(k = 0; k < g; k++) {
+          uint32_t pixel = c->row[i];
+          /* Might not work on big-endian. */
+          ptr[0] = pixel;
+          ptr[1] = (pixel & 0x0000ff00) >> 8;
+          ptr[2] = (pixel & 0x00ff0000) >> 16;
+          ptr += 3;
+        }
+      }
+    }
+    else if(c->ximage->bits_per_pixel == 16)
+    {
+      uint16_t *ptr = (uint16_t *)scanline;
+      for(i = 0; i < w_div_g; i++) {
+        for(k = 0; k < g; k++)
+          ptr[g*i+k] = c->row[i];
+      }
+    }
+    else if(c->ximage->bits_per_pixel == 8)
+    {
+      uint8_t *ptr = (uint8_t *)scanline;
+      for(i = 0; i < w_div_g; i++) {
+        for(k = 0; k < g; k++)
+          ptr[g*i+k] = c->row[i];
+      }
+    }
+    else
+    {
+      for(i = 0; i < w_div_g; i++) {
+        for(k = 0; k < g; k++)
+          XPutPixel(c->ximage, (g*i)+k, img_y, c->row[i]);
+      }
+    }
 
     /* Only the first scanline of the image has been filled in; clone that
        scanline to the rest of the `gridsize' lines in the ximage */
     for(k = 0; k < (g-1); k++)
 
     /* Only the first scanline of the image has been filled in; clone that
        scanline to the rest of the `gridsize' lines in the ximage */
     for(k = 0; k < (g-1); k++)
-      memcpy(c->ximage->data + (c->ximage->bytes_per_line * (k + 1)),
-            c->ximage->data + (c->ximage->bytes_per_line * k),
-            c->ximage->bytes_per_line);
+      memcpy(c->ximage->data + (c->ximage->bytes_per_line * (img_y + k + 1)),
+             c->ximage->data + (c->ximage->bytes_per_line * img_y),
+             c->ximage->bytes_per_line);
 
 
+# ifndef USE_BIG_XIMAGE
     /* Move the bits for this horizontal stripe to the server. */
     /* Move the bits for this horizontal stripe to the server. */
-# ifdef HAVE_XSHM_EXTENSION
-    if (c->use_shm)
-      XShmPutImage(c->dpy, TARGET(c), c->copy_gc, c->ximage,
-                  0, 0, 0, g*j, c->ximage->width, c->ximage->height,
-                  False);
-    else
-# endif /*  HAVE_XSHM_EXTENSION */
+#  ifdef HAVE_XSHM_EXTENSION
+    if (!c->use_shm)
+#  endif /*  HAVE_XSHM_EXTENSION */
       XPutImage(c->dpy, TARGET(c), c->copy_gc, c->ximage,
       XPutImage(c->dpy, TARGET(c), c->copy_gc, c->ximage,
-               0, 0, 0, g*j, c->ximage->width, c->ximage->height);
+                0, 0, 0, g*j, c->ximage->width, c->ximage->height);
+# endif
+
+# if defined HAVE_XSHM_EXTENSION && !defined USE_BIG_XIMAGE
+    if (c->use_shm)
+# endif
+    {
+# if defined HAVE_XSHM_EXTENSION || defined USE_BIG_XIMAGE
+      scanline = (char *)scanline + c->ximage->bytes_per_line * g;
+      img_y += g;
+# endif
+    }
 
 #endif /* USE_XIMAGE */
   }
 
 
 #endif /* USE_XIMAGE */
   }
 
+#ifdef HAVE_XSHM_EXTENSION
+  if (c->use_shm)
+  {
+    XShmPutImage(c->dpy, c->win, c->copy_gc, c->ximage,
+                 0, 0, 0, 0, c->ximage->width, c->ximage->height,
+                 True);
+    c->shm_can_draw = False;
+  }
+#endif
+#if defined HAVE_XSHM_EXTENSION && defined USE_BIG_XIMAGE
+  else
+#endif
+#ifdef USE_BIG_XIMAGE
+  {
+    XPutImage(c->dpy, TARGET(c), c->copy_gc, c->ximage,
+              0, 0, 0, 0, c->ximage->width, c->ximage->height);
+  }
+#endif
+
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   if (c->back_buf)
     {
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   if (c->back_buf)
     {
@@ -435,12 +872,16 @@ static void do_inter(struct inter_context* c)
         XCopyArea (c->dpy, c->pix_buf, c->win, c->copy_gc,
                    0, 0, c->w, c->h, 0, 0);
       }
         XCopyArea (c->dpy, c->pix_buf, c->win, c->copy_gc,
                    0, 0, c->w, c->h, 0, 0);
       }
+
+  return c->delay;
 }
 
 static void *
 interference_init (Display *dpy, Window win)
 {
   struct inter_context *c = (struct inter_context *) calloc (1, sizeof(*c));
 }
 
 static void *
 interference_init (Display *dpy, Window win)
 {
   struct inter_context *c = (struct inter_context *) calloc (1, sizeof(*c));
+  if(!c)
+    abort_no_mem();
   inter_init(dpy, win, c);
   return c;
 }
   inter_init(dpy, win, c);
   return c;
 }
@@ -449,8 +890,7 @@ static unsigned long
 interference_draw (Display *dpy, Window win, void *closure)
 {
   struct inter_context *c = (struct inter_context *) closure;
 interference_draw (Display *dpy, Window win, void *closure)
 {
   struct inter_context *c = (struct inter_context *) closure;
-  do_inter(c);
-  return c->delay;
+  return do_inter(c);
 }
 
 static void
 }
 
 static void
@@ -458,19 +898,54 @@ interference_reshape (Display *dpy, Window window, void *closure,
                  unsigned int w, unsigned int h)
 {
   struct inter_context *c = (struct inter_context *) closure;
                  unsigned int w, unsigned int h)
 {
   struct inter_context *c = (struct inter_context *) closure;
+  XWindowAttributes xgwa;
+  Bool dbuf = (c->pix_buf
+# ifdef HAVE_DOUBLE_BUFFER_EXTENSION
+               || c->back_buf
+# endif
+               );
+
   c->w = w;
   c->h = h;
   c->w = w;
   c->h = h;
+
+#ifdef USE_XIMAGE
+  destroy_image(dpy, c);
+  c->ximage = 0;
+#endif
+
+  if(c->pix_buf)
+    XFreePixmap(dpy, c->pix_buf);
+  c->pix_buf = None;
+
+  XGetWindowAttributes(dpy, window, &xgwa);
+  xgwa.width = w;
+  xgwa.height = h;
+  create_image(dpy, c, &xgwa);
+  if(dbuf)
+    create_pix_buf(dpy, window, c, &xgwa);
 }
 
 static Bool
 interference_event (Display *dpy, Window window, void *closure, XEvent *event)
 {
 }
 
 static Bool
 interference_event (Display *dpy, Window window, void *closure, XEvent *event)
 {
+#if HAVE_XSHM_EXTENSION
+  struct inter_context *c = (struct inter_context *) closure;
+
+  if(c->use_shm && event->type == XShmGetEventBase(dpy) + ShmCompletion)
+  {
+    c->shm_can_draw = True;
+    return True;
+  }
+#endif
   return False;
 }
 
 static void
 interference_free (Display *dpy, Window window, void *closure)
 {
   return False;
 }
 
 static void
 interference_free (Display *dpy, Window window, void *closure)
 {
+  struct inter_context *c = (struct inter_context *) closure;
+  inter_free(dpy, c);
 }
 
 XSCREENSAVER_MODULE ("Interference", interference)
 }
 
 XSCREENSAVER_MODULE ("Interference", interference)
+
index ba5268ab26145df0b06441607a891974aae140cd..bcbd19ee3a6dc07f3b67553bdc8e46c7ad3bd670 100644 (file)
@@ -419,7 +419,7 @@ intermomentary_init (Display *dpy, Window window)
       bgs = fgs;
       bgv = fgv / 10.0;
 #endif
       bgs = fgs;
       bgv = fgv / 10.0;
 #endif
-      make_color_ramp (st->dpy, st->xgwa.colormap,
+      make_color_ramp (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                        bgh, bgs, bgv,
                        fgh, fgs, fgv,
                        st->colors, &st->ncolors,
                        bgh, bgs, bgv,
                        fgh, fgs, fgv,
                        st->colors, &st->ncolors,
@@ -554,6 +554,9 @@ static const char *intermomentary_defaults[] = {
     "*maxRiders: 40",
     "*maxRadius: 100",
     "*colors: 256",
     "*maxRiders: 40",
     "*maxRadius: 100",
     "*colors: 256",
+#ifdef USE_IPHONE
+    "*ignoreRotation: True",
+#endif
     0
 };
 
     0
 };
 
index fe7ad4366d3064868edf3950ffb82ec808f4ca72..d7066b0896e94d2dad8b8d8156423482292330ab 100644 (file)
@@ -38,11 +38,12 @@ static const char sccsid[] = "@(#)julia.c   4.03 97/04/10 xlockmore";
  */
 
 #ifdef STANDALONE
  */
 
 #ifdef STANDALONE
-# define DEFAULTS      "*count:                1000  \n"                       \
-                                       "*cycles:               20    \n"                       \
-                                       "*delay:                10000 \n"                       \
-                                       "*ncolors:              200   \n" \
-                                       "*fpsSolid:             true   \n" \
+# define DEFAULTS      "*count:                  1000   \n" \
+                                       "*cycles:                 20     \n" \
+                                       "*delay:                  10000  \n" \
+                                       "*ncolors:                200    \n" \
+                                       "*fpsSolid:               true   \n" \
+                                       "*ignoreRotation: True   \n" \
 
 # define UNIFORM_COLORS
 # include "xlockmore.h"                                /* in xscreensaver distribution */
 
 # define UNIFORM_COLORS
 # include "xlockmore.h"                                /* in xscreensaver distribution */
index 8c3f80b978ae9b903f51a55ed07a90268d2835ec..f260360d251397e1eb93ddae575443e687b72573 100644 (file)
@@ -100,6 +100,9 @@ static const char *kaleidescope_defaults [] = {
   "*greenrange:     20000",
   "*bluemin:        30000",
   "*bluerange:      20000",
   "*greenrange:     20000",
   "*bluemin:        30000",
   "*bluerange:      20000",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index b835f5bf9fa8f63896be7bd6df94858cec95cf5f..44df19b41a34cc48854bfef81ec67e5535f27e59 100644 (file)
@@ -55,6 +55,9 @@ static const char *kumppa_defaults [] ={
   "*random:            True",
   /* leave this off by default, since it slows things down.  -- jwz. */
   "*useDBE:            False",
   "*random:            True",
   /* leave this off by default, since it slows things down.  -- jwz. */
   "*useDBE:            False",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index 7a998738f73b2de0471bd6b9dfad443c3c0463fe..ad3e1b02cd211467c8c56c18afbdf245c1593743 100644 (file)
@@ -91,6 +91,7 @@ static const char sccsid[] = "@(#)loop.c      5.01 2000/03/15 xlockmore";
                                        "*size:    -12    \n" \
                                        "*ncolors: 15     \n" \
                                        "*fpsSolid: true     \n" \
                                        "*size:    -12    \n" \
                                        "*ncolors: 15     \n" \
                                        "*fpsSolid: true     \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define UNIFORM_COLORS
 # define loop_handle_event 0
 
 # define UNIFORM_COLORS
 # define loop_handle_event 0
index 8576386b2ae9c4aba0af4c135c21830fcef9ce89..fda3e811b8754b425f3344897f990f943c481ef2 100644 (file)
@@ -1588,6 +1588,9 @@ maze_draw (Display *dpy, Window window, void *closure)
         st->stop = 0;
         st->state = 1;
 
         st->stop = 0;
         st->state = 1;
 
+        if (st->solve_state && st->solve_state->running)
+          st->solve_state->running = 0;
+
         st->sync_p = ((random() % 4) != 0);
 
         size = get_integer_resource (st->dpy, "gridSize", "Dimension");
         st->sync_p = ((random() % 4) != 0);
 
         size = get_integer_resource (st->dpy, "gridSize", "Dimension");
index afaed3c99dd6e574eeb4ca7558d41865823db7f7..ddd07eed83c49609766691369d80a5d225eb108e 100644 (file)
@@ -86,7 +86,7 @@ memscroller_init (Display *dpy, Window window)
   {
     int ncolors = 255;
     XColor colors[256];
   {
     int ncolors = 255;
     XColor colors[256];
-    make_random_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap,
+    make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                           colors, &ncolors, True, True, 0, False);
   }
 
                           colors, &ncolors, True, True, 0, False);
   }
 
index 02d418ba395db7bbb60e7b42988f8283df2f4e84..b79dd95d94151550f4fd346a4753791a6e410008 100644 (file)
@@ -408,6 +408,9 @@ static const char *metaballs_defaults [] = {
   "*delay:    10000",
   "*radius:   100",
   "*delta:   3",
   "*delay:    10000",
   "*radius:   100",
   "*delta:   3",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 10797a5f2610ecbfb1b8f6b825f5cedcddb9b534..d55a9b85db7264ec07b166913a6f3011a13d1348 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1997-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -120,7 +120,7 @@ moire_init_1 (struct state *st)
 
       st->colors = (XColor *) malloc (sizeof (XColor) * (st->ncolors+2));
       memset(st->colors, 0, (sizeof (XColor) * (st->ncolors+2)));
 
       st->colors = (XColor *) malloc (sizeof (XColor) * (st->ncolors+2));
       memset(st->colors, 0, (sizeof (XColor) * (st->ncolors+2)));
-      make_color_ramp (st->dpy, xgwa.colormap,
+      make_color_ramp (xgwa.screen, xgwa.visual, xgwa.colormap,
                       fgh, fgs, fgv, bgh, bgs, bgv,
                       st->colors, &st->ncolors,
                       True, True, False);
                       fgh, fgs, fgv, bgh, bgs, bgv,
                       st->colors, &st->ncolors,
                       True, True, False);
@@ -259,6 +259,9 @@ static const char *moire_defaults [] = {
   "*useSHM:          True",
 #else
   "*useSHM:          False",
   "*useSHM:          True",
 #else
   "*useSHM:          False",
+#endif
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
 #endif
   0
 };
 #endif
   0
 };
index 441a371371bda38ba5c39d75cdfca3e1e16f6e2d..69bfe696089af92d48fd08ef122e4c3a606fb305 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1997, 1998, 2006 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -64,7 +64,8 @@ moire2_init_1 (struct state *st)
   if (mono_p)
     ;
   else
   if (mono_p)
     ;
   else
-    make_smooth_colormap (st->dpy, xgwa.visual, xgwa.colormap, st->colors, &st->ncolors,
+    make_smooth_colormap (xgwa.screen, xgwa.visual, xgwa.colormap,
+                          st->colors, &st->ncolors,
                          True, 0, True);
 
   st->bg_pixel = get_pixel_resource(st->dpy,
                          True, 0, True);
 
   st->bg_pixel = get_pixel_resource(st->dpy,
@@ -328,6 +329,9 @@ static const char *moire2_defaults [] = {
   "*thickness:         0",
   "*colors:            150",
   "*colorShift:                5",
   "*thickness:         0",
   "*colors:            150",
   "*colorShift:                5",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
 
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   /* Off by default, since it slows it down a lot, and the flicker isn't really
 
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   /* Off by default, since it slows it down a lot, and the flicker isn't really
index 2636375edf4bcab802c8ecafebdf9399884febfe..902a3e224baddedb990106a438d1d4069420d0bc 100644 (file)
@@ -437,6 +437,9 @@ static const char *munch_defaults [] = {
   "*simul:            5",
   "*clear:            65",
   "*xor:              True",
   "*simul:            5",
   "*clear:            65",
   "*xor:              True",
+#ifdef USE_IPHONE
+  "*ignoreRotation:   True",
+#endif
   0
 };
 
   0
 };
 
index d0de73c98dbd4769a496ede4d5a2754dd58530df..fe58ea1a5d1779c8b02157e357904ef1fa19277e 100644 (file)
@@ -799,7 +799,8 @@ static void setupColormap (struct state *st, XWindowAttributes *xgwa)
     colors[0].pixel = get_pixel_resource (st->dpy, xgwa->colormap,
                                           "background", "Background");
     
     colors[0].pixel = get_pixel_resource (st->dpy, xgwa->colormap,
                                           "background", "Background");
     
-    make_color_ramp (st->dpy, xgwa->colormap, h1, s1, v1, h2, s2, v2,
+    make_color_ramp (xgwa->screen, xgwa->visual, xgwa->colormap,
+                     h1, s1, v1, h2, s2, v2,
                     colors + 1, &st->colorCount, False, True, False);
 
     if (st->colorCount < 1)
                     colors + 1, &st->colorCount, False, True, False);
 
     if (st->colorCount < 1)
@@ -1324,6 +1325,9 @@ static const char *nerverot_defaults [] = {
     "*maxRadius:        25",
     "*maxNerveRadius:  0.7",
     "*nervousness:     0.3",
     "*maxRadius:        25",
     "*maxNerveRadius:  0.7",
     "*nervousness:     0.3",
+#ifdef USE_IPHONE
+    "*ignoreRotation:   True",
+#endif
     0
 };
 
     0
 };
 
index 23fb3a1d4d0b743a43fb2e82e5abf0a0649b2a52..57219beed680e98a8fd93d5f807ebe8474c54cd3 100644 (file)
@@ -1779,8 +1779,10 @@ ENTRYPOINT void
 reshape_pacman(ModeInfo * mi, int width, int height)
 {
     pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)];
 reshape_pacman(ModeInfo * mi, int width, int height)
 {
     pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)];
-    pp->width = width;
+    pp->width  = width;
     pp->height = height;
     pp->height = height;
+    pp->xb = (pp->width  - pp->ncols * pp->xs) >> 1;
+    pp->yb = (pp->height - pp->nrows * pp->ys) >> 1;
     MI_CLEARWINDOW (mi);
     /* repopulate (mi); */
     drawlevel (mi);
     MI_CLEARWINDOW (mi);
     /* repopulate (mi); */
     drawlevel (mi);
index d617942cf4613c057aa03164052e9a7f5a79ebe7..f26b3bfe120b0e0681f7e833a57cfef0398e5869 100644 (file)
@@ -539,7 +539,7 @@ pacman_is_bonus_dot (pacmangamestruct *pp, int x, int y, int *idx)
 {
     int ret = False;
     int i;
 {
     int ret = False;
     int i;
-    for (i = 0; i <= NUM_BONUS_DOTS; i++) {
+    for (i = 0; i < NUM_BONUS_DOTS; i++) {
 /*     fprintf(stderr,"is bonus: passed x (%d, %d) bonus (%d, %d)\n",x,y,bonus_dots[i].x, bonus_dots[i].y); */
         if (x == pp->bonus_dots[i].x && y == pp->bonus_dots[i].y) {
             ret = True;
 /*     fprintf(stderr,"is bonus: passed x (%d, %d) bonus (%d, %d)\n",x,y,bonus_dots[i].x, bonus_dots[i].y); */
         if (x == pp->bonus_dots[i].x && y == pp->bonus_dots[i].y) {
             ret = True;
@@ -553,7 +553,7 @@ pacman_is_bonus_dot (pacmangamestruct *pp, int x, int y, int *idx)
 static void
 check_bonus_idx (int idx)
 {
 static void
 check_bonus_idx (int idx)
 {
-    assert (0 <= idx && idx <= NUM_BONUS_DOTS);
+    assert (0 <= idx && idx < NUM_BONUS_DOTS);
 }
 
 int
 }
 
 int
index 7495aaeba73a2f7ebb845256879c65fdf597a3d2..c38f6f0e7230d6eea1860b10086df1ddf0a2d5fb 100644 (file)
@@ -312,6 +312,9 @@ static const char *pedal_defaults [] = {
   "*fpsSolid:                  true",
   "*delay:                     5",
   "*maxlines:                  1000",
   "*fpsSolid:                  true",
   "*delay:                     5",
   "*maxlines:                  1000",
+#ifdef USE_IPHONE
+  "*ignoreRotation:             True",
+#endif
   0
 };
 
   0
 };
 
index 6b07d8ca65e722e6e462b91681167cf83b890ac8..6910e5f393c974e831958969be5b45549b6bfb24 100644 (file)
@@ -87,6 +87,7 @@ If one of these are hit penrose will reinitialize.
                                        "*size: 40 \n" \
                                        "*ncolors: 64 \n" \
                                        "*fpsSolid: true \n" \
                                        "*size: 40 \n" \
                                        "*ncolors: 64 \n" \
                                        "*fpsSolid: true \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define refresh_penrose 0
 # define penrose_handle_event 0
 
 # define refresh_penrose 0
 # define penrose_handle_event 0
index 860d0349e95e39cb28a293f2f77086e6641bba77..e08beee377b1d25e57aa497ce5ccad08b0219260 100644 (file)
@@ -141,7 +141,7 @@ static void setup_random_colormap (struct state *st, XWindowAttributes *xgwa)
     colors[0].pixel = get_pixel_resource (st->dpy, xgwa->colormap,
                                           "background", "Background");
     
     colors[0].pixel = get_pixel_resource (st->dpy, xgwa->colormap,
                                           "background", "Background");
     
-    make_random_colormap (st->dpy, xgwa->visual, xgwa->colormap,
+    make_random_colormap (xgwa->screen, xgwa->visual, xgwa->colormap,
                          colors+1, &ncolors, True, True, 0, True);
     if (ncolors < 1)
       {
                          colors+1, &ncolors, True, True, 0, True);
     if (ncolors < 1)
       {
@@ -732,6 +732,9 @@ static const char *petri_defaults [] = {
   "*originalcolors:    false",
   "*memThrottle:        22M",  /* don't malloc more than this much.
                                    Scale the pixels up if necessary. */
   "*originalcolors:    false",
   "*memThrottle:        22M",  /* don't malloc more than this much.
                                    Scale the pixels up if necessary. */
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
     0
 };
 
     0
 };
 
index b7ec540725121a6f030358500fb799e275f2e6ca..63df6dfeb1388ee71c5dd96402e46b896a535780 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1999-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1999-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -236,7 +236,8 @@ phosphor_init (Display *dpy, Window window)
     /* Now allocate a ramp of colors from the main color to the background. */
     rgb_to_hsv (start.red, start.green, start.blue, &h1, &s1, &v1);
     rgb_to_hsv (end.red, end.green, end.blue, &h2, &s2, &v2);
     /* Now allocate a ramp of colors from the main color to the background. */
     rgb_to_hsv (start.red, start.green, start.blue, &h1, &s1, &v1);
     rgb_to_hsv (end.red, end.green, end.blue, &h2, &s2, &v2);
-    make_color_ramp (state->dpy, state->xgwa.colormap,
+    make_color_ramp (state->xgwa.screen, state->xgwa.visual,
+                     state->xgwa.colormap,
                      h1, s1, v1,
                      h2, s2, v2,
                      colors, &ncolors,
                      h1, s1, v1,
                      h2, s2, v2,
                      colors, &ncolors,
index af01a99d32aa2f5746c35356be54ef0c82893cec..9cfbefdf70c283e581e10aeb9fa92dbae50d51df 100644 (file)
@@ -861,7 +861,9 @@ piecewise_init (Display *dd, Window ww)
       st->colors[0].pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground");
     }
   else {
       st->colors[0].pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground");
     }
   else {
-    make_color_loop(st->dpy, st->xgwa.colormap, 0, 1, 1, 120, 1, 1, 240, 1, 1, st->colors, &st->ncolors, True, False);
+    make_color_loop(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
+                    0, 1, 1, 120, 1, 1, 240, 1, 1,
+                    st->colors, &st->ncolors, True, False);
     if (st->ncolors < 2)
       goto MONO; 
     }
     if (st->ncolors < 2)
       goto MONO; 
     }
@@ -975,6 +977,9 @@ static const char *piecewise_defaults [] = {
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   "*useDBE:             True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
 #ifdef HAVE_DOUBLE_BUFFER_EXTENSION
   "*useDBE:             True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
   };
 
   0
   };
 
index c7b84a74a42146f5a3f9f6409bf42ba402e3551c..a3037d281c381e11ae6130b0cc39973356a7a03c 100644 (file)
@@ -54,6 +54,9 @@ static const char sccsid[] = "@(#)polyominoes.c 5.01 2000/12/18 xlockmore";
 static Bool identical;
 static Bool plain;
 
 static Bool identical;
 static Bool plain;
 
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
 static XrmOptionDescRec opts[] =
 {
   {"-identical", ".polyominoes.identical", XrmoptionNoArg, "on"},
 static XrmOptionDescRec opts[] =
 {
   {"-identical", ".polyominoes.identical", XrmoptionNoArg, "on"},
@@ -791,7 +794,7 @@ static void create_bitmaps(ModeInfo * mi, polyominoesstruct *sp)
   int x,y,n;
   char *data;
 
   int x,y,n;
   char *data;
 
-  for (n=0;n<256;n++) {
+  for (n=0;n<countof(sp->bitmaps);n++) {
 
 /* Avoid duplication of identical bitmaps. */
     if (IS_LEFT_UP(n) && (IS_LEFT(n) || IS_UP(n)))
 
 /* Avoid duplication of identical bitmaps. */
     if (IS_LEFT_UP(n) && (IS_LEFT(n) || IS_UP(n)))
@@ -1030,7 +1033,7 @@ static void free_bitmaps(polyominoesstruct *sp)
 {
   int n;
   
 {
   int n;
   
-  for (n=0;n<256;n++)
+  for (n=0;n<countof(sp->bitmaps);n++)
 /* Don't bother to free duplicates */
     if (IS_LEFT_UP(n) && (IS_LEFT(n) || IS_UP(n)))
       sp->bitmaps[n] = None;
 /* Don't bother to free duplicates */
     if (IS_LEFT_UP(n) && (IS_LEFT(n) || IS_UP(n)))
       sp->bitmaps[n] = None;
@@ -1500,7 +1503,7 @@ static void make_one_sided_pentomino(void)
   int i,j,t,u;
 
   j=0;
   int i,j,t,u;
 
   j=0;
-  for (i=0;i<18;i++) {
+  for (i=0;i<countof(pentomino);i++) {
     one_sided_pentomino[j] = pentomino[i];
     for (t=0;t<8;t++)
       if (one_sided_pentomino[j].transform_list[t]>=4) {
     one_sided_pentomino[j] = pentomino[i];
     for (t=0;t<8;t++)
       if (one_sided_pentomino[j].transform_list[t]>=4) {
@@ -1522,7 +1525,7 @@ static void make_one_sided_hexomino(void)
   int i,j,t,u;
 
   j=0;
   int i,j,t,u;
 
   j=0;
-  for (i=0;i<35;i++) {
+  for (i=0;i<countof(hexomino);i++) {
     one_sided_hexomino[j] = hexomino[i];
     for (t=0;t<8;t++)
       if (one_sided_hexomino[j].transform_list[t]>=4) {
     one_sided_hexomino[j] = hexomino[i];
     for (t=0;t<8;t++)
       if (one_sided_hexomino[j].transform_list[t]>=4) {
@@ -1567,9 +1570,10 @@ int set_pentomino_puzzle(polyominoesstruct *sp)
   }
 
   sp->nr_polyominoes = 12;
   }
 
   sp->nr_polyominoes = 12;
-  set_allocate(sp->polyomino,polyomino_type,12*sizeof(polyomino_type));
-  random_permutation(12,perm_poly);
-  for (p=0;p<12;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  random_permutation(sp->nr_polyominoes,perm_poly);
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],pentomino[perm_poly[p]],1);
   }
 
     copy_polyomino(sp->polyomino[p],pentomino[perm_poly[p]],1);
   }
 
@@ -1615,9 +1619,10 @@ int set_one_sided_pentomino_puzzle(polyominoesstruct *sp)
   }
 
   sp->nr_polyominoes = 18;
   }
 
   sp->nr_polyominoes = 18;
-  set_allocate(sp->polyomino,polyomino_type,18*sizeof(polyomino_type));
-  random_permutation(18,perm_poly);
-  for (p=0;p<18;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  random_permutation(sp->nr_polyominoes,perm_poly);
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],one_sided_pentomino[perm_poly[p]],1);
   }
 
     copy_polyomino(sp->polyomino[p],one_sided_pentomino[perm_poly[p]],1);
   }
 
@@ -1674,9 +1679,10 @@ int set_one_sided_hexomino_puzzle(polyominoesstruct *sp)
   }
 
   sp->nr_polyominoes = 60;
   }
 
   sp->nr_polyominoes = 60;
-  set_allocate(sp->polyomino,polyomino_type,60*sizeof(polyomino_type));
-  random_permutation(60,perm_poly);
-  for (p=0;p<60;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  random_permutation(sp->nr_polyominoes,perm_poly);
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],one_sided_hexomino[perm_poly[p]],1);
   }
 
     copy_polyomino(sp->polyomino[p],one_sided_hexomino[perm_poly[p]],1);
   }
 
@@ -1711,12 +1717,13 @@ int set_tetr_pentomino_puzzle(polyominoesstruct *sp)
   }
 
   sp->nr_polyominoes = 17;
   }
 
   sp->nr_polyominoes = 17;
-  set_allocate(sp->polyomino,polyomino_type,17*sizeof(polyomino_type));
-  random_permutation(17,perm_poly);
-  for (p=0;p<5;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  random_permutation(sp->nr_polyominoes,perm_poly);
+  for (p=0;p<countof(tetromino);p++) {
     copy_polyomino(sp->polyomino[perm_poly[p]],tetromino[p],1);
   }
     copy_polyomino(sp->polyomino[perm_poly[p]],tetromino[p],1);
   }
-  for (p=0;p<12;p++) {
+  for (p=0;p<countof(pentomino);p++) {
     copy_polyomino(sp->polyomino[perm_poly[p+5]],pentomino[p],1);
   }
 
     copy_polyomino(sp->polyomino[perm_poly[p+5]],pentomino[p],1);
   }
 
@@ -1760,10 +1767,10 @@ int set_pent_hexomino_puzzle(polyominoesstruct *sp)
   sp->nr_polyominoes = 47;
   set_allocate(sp->polyomino,polyomino_type,47*sizeof(polyomino_type));
   random_permutation(47,perm_poly);
   sp->nr_polyominoes = 47;
   set_allocate(sp->polyomino,polyomino_type,47*sizeof(polyomino_type));
   random_permutation(47,perm_poly);
-  for (p=0;p<12;p++) {
+  for (p=0;p<countof(pentomino);p++) {
     copy_polyomino(sp->polyomino[perm_poly[p]],pentomino[p],1);
   }
     copy_polyomino(sp->polyomino[perm_poly[p]],pentomino[p],1);
   }
-  for (p=0;p<35;p++) {
+  for (p=0;p<countof(hexomino);p++) {
     copy_polyomino(sp->polyomino[perm_poly[p+12]],hexomino[p],1);
   }
 
     copy_polyomino(sp->polyomino[perm_poly[p+12]],hexomino[p],1);
   }
 
@@ -1800,8 +1807,9 @@ int set_pentomino_puzzle1(polyominoesstruct *sp)
   sp->height =5;
 
   sp->nr_polyominoes = 10;
   sp->height =5;
 
   sp->nr_polyominoes = 10;
-  set_allocate(sp->polyomino,polyomino_type,10*sizeof(polyomino_type));
-  for (p=0;p<10;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],pentomino1,1);
   }
 
     copy_polyomino(sp->polyomino[p],pentomino1,1);
   }
 
@@ -1831,8 +1839,9 @@ int set_hexomino_puzzle1(polyominoesstruct *sp)
   sp->height =23;
 
   sp->nr_polyominoes = 92;
   sp->height =23;
 
   sp->nr_polyominoes = 92;
-  set_allocate(sp->polyomino,polyomino_type,92*sizeof(polyomino_type));
-  for (p=0;p<92;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],hexomino1,1);
   }
 
     copy_polyomino(sp->polyomino[p],hexomino1,1);
   }
 
@@ -1866,8 +1875,9 @@ int set_heptomino_puzzle1(polyominoesstruct *sp)
   sp->height =21;
 
   sp->nr_polyominoes = 78;
   sp->height =21;
 
   sp->nr_polyominoes = 78;
-  set_allocate(sp->polyomino,polyomino_type,78*sizeof(polyomino_type));
-  for (p=0;p<78;p+=2) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p+=2) {
     copy_polyomino(sp->polyomino[p],heptomino1,1);
     copy_polyomino(sp->polyomino[p+1],heptomino1,0);
   }
     copy_polyomino(sp->polyomino[p],heptomino1,1);
     copy_polyomino(sp->polyomino[p+1],heptomino1,0);
   }
@@ -1897,8 +1907,9 @@ int set_heptomino_puzzle2(polyominoesstruct *sp)
   sp->height =19;
 
   sp->nr_polyominoes = 76;
   sp->height =19;
 
   sp->nr_polyominoes = 76;
-  set_allocate(sp->polyomino,polyomino_type,76*sizeof(polyomino_type));
-  for (p=0;p<76;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],heptomino1,1);
   }
 
     copy_polyomino(sp->polyomino[p],heptomino1,1);
   }
 
@@ -1933,8 +1944,9 @@ int set_elevenomino_puzzle1(polyominoesstruct *sp)
   sp->height =22;
 
   sp->nr_polyominoes = 50;
   sp->height =22;
 
   sp->nr_polyominoes = 50;
-  set_allocate(sp->polyomino,polyomino_type,50*sizeof(polyomino_type));
-  for (p=0;p<50;p+=2) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p+=2) {
     copy_polyomino(sp->polyomino[p],elevenomino1,1);
     copy_polyomino(sp->polyomino[p+1],elevenomino1,0);
   }
     copy_polyomino(sp->polyomino[p],elevenomino1,1);
     copy_polyomino(sp->polyomino[p+1],elevenomino1,0);
   }
@@ -1970,8 +1982,9 @@ int set_dekomino_puzzle1(polyominoesstruct *sp)
   sp->height =30;
 
   sp->nr_polyominoes = 96;
   sp->height =30;
 
   sp->nr_polyominoes = 96;
-  set_allocate(sp->polyomino,polyomino_type,96*sizeof(polyomino_type));
-  for (p=0;p<96;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],dekomino1,1);
   }
 
     copy_polyomino(sp->polyomino[p],dekomino1,1);
   }
 
@@ -2004,8 +2017,9 @@ int set_octomino_puzzle1(polyominoesstruct *sp)
   sp->height =26;
 
   sp->nr_polyominoes = 312;
   sp->height =26;
 
   sp->nr_polyominoes = 312;
-  set_allocate(sp->polyomino,polyomino_type,312*sizeof(polyomino_type));
-  for (p=0;p<312;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],octomino1,1);
   }
 
     copy_polyomino(sp->polyomino[p],octomino1,1);
   }
 
@@ -2030,8 +2044,9 @@ int set_pentomino_puzzle2(polyominoesstruct *sp)
   sp->height =15;
 
   sp->nr_polyominoes = 45;
   sp->height =15;
 
   sp->nr_polyominoes = 45;
-  set_allocate(sp->polyomino,polyomino_type,45*sizeof(polyomino_type));
-  for (p=0;p<45;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],pentomino1,1);
   }
 
     copy_polyomino(sp->polyomino[p],pentomino1,1);
   }
 
@@ -2057,8 +2072,9 @@ int set_elevenomino_puzzle2(polyominoesstruct *sp)
   sp->height =33;
 
   sp->nr_polyominoes = 141;
   sp->height =33;
 
   sp->nr_polyominoes = 141;
-  set_allocate(sp->polyomino,polyomino_type,141*sizeof(polyomino_type));
-  for (p=0;p<141;p++) {
+  set_allocate(sp->polyomino,polyomino_type,
+               sp->nr_polyominoes*sizeof(polyomino_type));
+  for (p=0;p<sp->nr_polyominoes;p++) {
     copy_polyomino(sp->polyomino[p],elevenomino1,1);
   }
 
     copy_polyomino(sp->polyomino[p],elevenomino1,1);
   }
 
index 15cb61b4a6f36cc1219987811e3c74250f3ecb21..55d3db175e808e3e44577ccd90a123f006159770 100644 (file)
@@ -96,7 +96,7 @@ popsquares_init (Display *dpy, Window window)
 
   rgb_to_hsv (fg.red, fg.green, fg.blue, &h1, &s1, &v1);
   rgb_to_hsv (bg.red, bg.green, bg.blue, &h2, &s2, &v2);
 
   rgb_to_hsv (fg.red, fg.green, fg.blue, &h1, &s1, &v1);
   rgb_to_hsv (bg.red, bg.green, bg.blue, &h2, &s2, &v2);
-  make_color_ramp (st->dpy, st->xgwa.colormap,
+  make_color_ramp (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap,
                    h1, s1, v1,
                    h2, s2, v2,
                    st->colors, &st->ncolors,  /* would this be considered a value-result argument? */
                    h1, s1, v1,
                    h2, s2, v2,
                    st->colors, &st->ncolors,  /* would this be considered a value-result argument? */
@@ -246,6 +246,9 @@ static const char *popsquares_defaults [] = {
   "*useDBE: True",
   "*useDBEClear: True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
   "*useDBE: True",
   "*useDBEClear: True",
 #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index ad1e26e7a6ef951834ec60f72b8c2bb37d400f1c..04d0928009e09471495460f6e9218c3558180a6c 100644 (file)
@@ -592,6 +592,9 @@ static const char *qix_defaults [] = {
   "*transparent:true",
   "*gravity:   false",
   "*additive:  true",
   "*transparent:true",
   "*gravity:   false",
   "*additive:  true",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 0c074ea49f442e928539ab323da3f939e9af6383..3e9acbc50e3a5e95d0d892537fd70adab94af867 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski <jwz@jwz.org>
  *
  *  reaction/diffusion textures
  *  Copyright (c) 1997 Scott Draves spot@transmeta.com
  *
  *  reaction/diffusion textures
  *  Copyright (c) 1997 Scott Draves spot@transmeta.com
@@ -308,6 +308,9 @@ static const char *rd_defaults [] = {
   "*useSHM:    True",
 #else
   "*useSHM:    False",
   "*useSHM:    True",
 #else
   "*useSHM:    False",
+#endif
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
 #endif
   0
 };
 #endif
   0
 };
@@ -333,7 +336,8 @@ static void
 random_colors(struct state *st)
 {
   memset(st->colors, 0, st->ncolors*sizeof(*st->colors));
 random_colors(struct state *st)
 {
   memset(st->colors, 0, st->ncolors*sizeof(*st->colors));
-  make_smooth_colormap (st->dpy, st->visual, st->cmap, st->colors, &st->ncolors,
+  make_smooth_colormap (st->xgwa.screen, st->visual, st->cmap,
+                        st->colors, &st->ncolors,
                        True, 0, True);
   if (st->ncolors <= 2) {
     mono_p = True;
                        True, 0, True);
   if (st->ncolors <= 2) {
     mono_p = True;
index e030b1cd1d85f7cba8715e7f7b888803d000983d..bffd2c68014f79a0de17d903f40c9cc909388ff2 100644 (file)
@@ -62,6 +62,7 @@ struct state {
   XImage *orig_map, *buffer_map;
   int ctab[256];
   Colormap colormap;
   XImage *orig_map, *buffer_map;
   int ctab[256];
   Colormap colormap;
+  Screen *screen;
   int ncolors;
   int light;
 
   int ncolors;
   int light;
 
@@ -495,6 +496,7 @@ setup_X(struct state *st)
   XGetWindowAttributes(st->dpy, st->window, &xgwa);
   depth = xgwa.depth;
   st->colormap = xgwa.colormap;
   XGetWindowAttributes(st->dpy, st->window, &xgwa);
   depth = xgwa.depth;
   st->colormap = xgwa.colormap;
+  st->screen = xgwa.screen;
   st->bigwidth = xgwa.width;
   st->bigheight = xgwa.height;
   st->visual = xgwa.visual;
   st->bigwidth = xgwa.width;
   st->bigheight = xgwa.height;
   st->visual = xgwa.visual;
@@ -656,7 +658,8 @@ init_oily_colors(struct state *st)
 
   if (!mono_p) {
     colors = (XColor *)malloc(sizeof(*colors) * (st->ncolors+1));
 
   if (!mono_p) {
     colors = (XColor *)malloc(sizeof(*colors) * (st->ncolors+1));
-    make_smooth_colormap(st->dpy, st->visual, st->colormap, colors, &st->ncolors,
+    make_smooth_colormap(st->screen, st->visual, st->colormap,
+                         colors, &st->ncolors,
                          True, /* allocate */
                          False, /* not writable */
                          True); /* verbose (complain about failure) */
                          True, /* allocate */
                          False, /* not writable */
                          True); /* verbose (complain about failure) */
@@ -1104,6 +1107,9 @@ static const char *ripples_defaults[] =
   "*useSHM: True",
 #else
   "*useSHM: False",
   "*useSHM: True",
 #else
   "*useSHM: False",
+#endif
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
 #endif
   0
 };
 #endif
   0
 };
index f1c606337124b48eb2da67e042c5a7eefb041ad3..d44e75208fec0778b4443cd0437b6296262fda87 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -416,7 +416,8 @@ rocks_init (Display *d, Window w)
   XQueryColor(st->dpy, cmap, &st->colors[0]);
 
   st->ncolors--;
   XQueryColor(st->dpy, cmap, &st->colors[0]);
 
   st->ncolors--;
-  make_random_colormap(st->dpy, xgwa.visual, cmap, st->colors+1, &st->ncolors, True,
+  make_random_colormap(xgwa.screen, xgwa.visual, cmap,
+                       st->colors+1, &st->ncolors, True,
                       True, 0, True);
   st->ncolors++;
 
                       True, 0, True);
   st->ncolors++;
 
@@ -522,6 +523,9 @@ static const char *rocks_defaults [] = {
   "*left3d:    Blue",
   "*right3d:   Red",
   "*delta3d:   1.5",
   "*left3d:    Blue",
   "*right3d:   Red",
   "*delta3d:   1.5",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index b4f4aa89068b0aa722146b68bd373d3ed9115b0e..0d352696b71c1e51b5b5c0aa0370021c83e2c455 100644 (file)
@@ -188,6 +188,9 @@ static const char *rorschach_defaults [] = {
   "*iterations:        4000",
   "*offset:    7",
   "*delay:     5",
   "*iterations:        4000",
   "*offset:    7",
   "*delay:     5",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 610b952030c49c8d2eb6e9a84ab2798d23cccd2a..6298b34e0fd1ce8f3ab2a06202fa0e5245d08ddc 100644 (file)
@@ -461,6 +461,9 @@ static const char *rotzoomer_defaults[] = {
   "*numboxes: 2",
   "*delay: 10000",
   "*duration: 120",
   "*numboxes: 2",
   "*delay: 10000",
   "*duration: 120",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 52344a35a74a319f09fdbea2c9e8b0e787e6d2ed..089e76b44b9dfed76537cd3ae1a52062c2e59cb6 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -727,13 +727,17 @@ main (int argc, char **argv)
   {
     char *v = (char *) strdup(strchr(screensaver_id, ' '));
     char *s1, *s2, *s3, *s4;
   {
     char *v = (char *) strdup(strchr(screensaver_id, ' '));
     char *s1, *s2, *s3, *s4;
+    const char *ot = get_string_resource (dpy, "title", "Title");
     s1 = (char *) strchr(v,  ' '); s1++;
     s2 = (char *) strchr(s1, ' ');
     s3 = (char *) strchr(v,  '('); s3++;
     s4 = (char *) strchr(s3, ')');
     *s2 = 0;
     *s4 = 0;
     s1 = (char *) strchr(v,  ' '); s1++;
     s2 = (char *) strchr(s1, ' ');
     s3 = (char *) strchr(v,  '('); s3++;
     s4 = (char *) strchr(s3, ')');
     *s2 = 0;
     *s4 = 0;
-    sprintf (version, "%s: from the XScreenSaver %s distribution (%s.)",
+    if (ot && !*ot) ot = 0;
+    sprintf (version, "%.50s%s%s: from the XScreenSaver %s distribution (%s)",
+             (ot ? ot : ""),
+             (ot ? ": " : ""),
             progclass, s1, s3);
     free(v);
   }
             progclass, s1, s3);
     free(v);
   }
index 881740c9996ed97fc30fbadae4b5b3f838928c4b..64fa82c9772d7e28b3ba7a87d3f74e4fd00fd6e1 100644 (file)
@@ -52,6 +52,9 @@ static const char *shadebobs_defaults [] = {
   "*cycles:   10",
   "*ncolors:  64",    /* changing this doesn't work particularly well */
   "*delay:    10000",
   "*cycles:   10",
   "*ncolors:  64",    /* changing this doesn't work particularly well */
   "*delay:    10000",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 5e7eedae7aa321198355fa28422e956dea637d04..4f1aa34a3051557fabffb46355f19a108c8c2f51 100644 (file)
@@ -39,6 +39,7 @@ static const char sccsid[] = "@(#)sierpinski.c        5.00 2000/11/01 xlockmore";
                                        "*cycles: 100 \n" \
                                        "*ncolors: 64 \n" \
                                        "*fpsSolid: true \n" \
                                        "*cycles: 100 \n" \
                                        "*ncolors: 64 \n" \
                                        "*fpsSolid: true \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define BRIGHT_COLORS
 # define sierpinski_handle_event 0
 
 # define BRIGHT_COLORS
 # define sierpinski_handle_event 0
index 69aa10fc3723ea7a3a489ab7b7ae8bd0029b5430..23c990c296d13c66bc461a9847919b53e496623c 100644 (file)
@@ -469,6 +469,9 @@ static const char *slidescreen_defaults [] = {
   "*delay:                     50000",
   "*delay2:                    1000000",
   "*duration:                  120",
   "*delay:                     50000",
   "*delay2:                    1000000",
   "*duration:                  120",
+#ifdef USE_IPHONE
+  "*ignoreRotation:             True",
+#endif
   0
 };
 
   0
 };
 
index e0b0ea4fa72c268ce3b3e133816ce52891ae252a..989dbf86301758bc5d5dc39d9afbb783f1f07244 100644 (file)
@@ -31,7 +31,8 @@ static const char sccsid[] = "@(#)slip.c      5.00 2000/11/01 xlockmore";
                                        "*count: 35 \n" \
                                        "*cycles: 50 \n" \
                                        "*ncolors: 200 \n" \
                                        "*count: 35 \n" \
                                        "*cycles: 50 \n" \
                                        "*ncolors: 200 \n" \
-                                       "*fpsSolid:     true \n"
+                                       "*fpsSolid:     true \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define refresh_slip 0
 # define slip_handle_event 0
 
 # define refresh_slip 0
 # define slip_handle_event 0
index 5c67082dad498be231ed5cdbe16c411be053d737..81c468686760db0eb49c289fc04d204385d54ac0 100644 (file)
@@ -110,6 +110,8 @@ struct state {
 
     Pixmap dbuf, stars_mask;
     Colormap cmap;
 
     Pixmap dbuf, stars_mask;
     Colormap cmap;
+    Visual *visual;
+    Screen *screen;
     unsigned int default_fg_pixel;
     GC draw_gc, erase_gc, tunnelend_gc, stars_gc, stars_erase_gc;
 
     unsigned int default_fg_pixel;
     GC draw_gc, erase_gc, tunnelend_gc, stars_gc, stars_erase_gc;
 
@@ -1260,7 +1262,7 @@ speedmine_color_ramp (struct state *st, GC *gcs, XColor * colors,
                h1 = h2 = RAND(360);
        }
 
                h1 = h2 = RAND(360);
        }
 
-       make_color_ramp (st->dpy, st->cmap, 
+       make_color_ramp (st->screen, st->visual, st->cmap, 
                      h1, s1, v1, h2, s2, v2,
                                     colors, ncolors, False, True, False);
 
                      h1, s1, v1, h2, s2, v2,
                                     colors, ncolors, False, True, False);
 
@@ -1286,9 +1288,9 @@ change_colors (struct state *st)
        double s1, s2;
 
        if (st->psychedelic_flag) {
        double s1, s2;
 
        if (st->psychedelic_flag) {
-               free_colors (st->dpy, st->cmap, st->bonus_colors, st->nr_bonus_colors);
-               free_colors (st->dpy, st->cmap, st->wall_colors, st->nr_wall_colors);
-               free_colors (st->dpy, st->cmap, st->ground_colors, st->nr_ground_colors);
+               free_colors (st->screen, st->cmap, st->bonus_colors, st->nr_bonus_colors);
+               free_colors (st->screen, st->cmap, st->wall_colors, st->nr_wall_colors);
+               free_colors (st->screen, st->cmap, st->ground_colors, st->nr_ground_colors);
                s1 = 0.4; s2 = 0.9;
 
                st->ncolors = MAX_COLORS;
                s1 = 0.4; s2 = 0.9;
 
                st->ncolors = MAX_COLORS;
@@ -1296,8 +1298,8 @@ change_colors (struct state *st)
                                                          &st->ncolors, 0.0, 0.8, 0.0, 0.9);
                st->nr_ground_colors = st->ncolors;
        } else {
                                                          &st->ncolors, 0.0, 0.8, 0.0, 0.9);
                st->nr_ground_colors = st->ncolors;
        } else {
-               free_colors (st->dpy, st->cmap, st->bonus_colors, st->nr_bonus_colors);
-               free_colors (st->dpy, st->cmap, st->wall_colors, st->nr_wall_colors);
+               free_colors (st->screen, st->cmap, st->bonus_colors, st->nr_bonus_colors);
+               free_colors (st->screen, st->cmap, st->wall_colors, st->nr_wall_colors);
                st->ncolors = st->nr_ground_colors;
 
                s1 = 0.0; s2 = 0.6;
                st->ncolors = st->nr_ground_colors;
 
                s1 = 0.0; s2 = 0.6;
@@ -1371,7 +1373,8 @@ init_colors (struct state *st)
 
   rgb_to_hsv (dark.red, dark.green, dark.blue, &h1, &s1, &v1);
   rgb_to_hsv (light.red, light.green, light.blue, &h2, &s2, &v2);
 
   rgb_to_hsv (dark.red, dark.green, dark.blue, &h1, &s1, &v1);
   rgb_to_hsv (light.red, light.green, light.blue, &h2, &s2, &v2);
-  make_color_ramp (st->dpy, st->cmap, h1, s1, v1, h2, s2, v2,
+  make_color_ramp (st->screen, st->visual, st->cmap,
+                   h1, s1, v1, h2, s2, v2,
                                  st->ground_colors, &st->ncolors, False, True, False);
   st->nr_ground_colors = st->ncolors;
 
                                  st->ground_colors, &st->ncolors, False, True, False);
   st->nr_ground_colors = st->ncolors;
 
@@ -1432,6 +1435,8 @@ speedmine_init (Display *dpy, Window window)
 
   XGetWindowAttributes (st->dpy, st->window, &xgwa);
   st->cmap = xgwa.colormap;
 
   XGetWindowAttributes (st->dpy, st->window, &xgwa);
   st->cmap = xgwa.colormap;
+  st->visual = xgwa.visual;
+  st->screen = xgwa.screen;
   st->width = xgwa.width;
   st->height = xgwa.height;
 
   st->width = xgwa.width;
   st->height = xgwa.height;
 
index 014fff6543a525faaea2212f2ebd563db55c05bb..cbd33f2a2e43857e584ea76f18ac583ff5214377 100644 (file)
@@ -320,6 +320,9 @@ static const char *spotlight_defaults [] = {
   "*delay:                     10000",
   "*duration:                  120",
   "*radius:                    125",
   "*delay:                     10000",
   "*duration:                  120",
   "*radius:                    125",
+#ifdef USE_IPHONE
+  "*ignoreRotation:             True",
+#endif
   0
 };
 
   0
 };
 
index 2a0b0fd29bb61016afe8abe1ed8dddb8925c8f38..e261f59a8226a49566211748bf55945910a541ad 100644 (file)
@@ -156,7 +156,7 @@ squiral_init (Display *dpy, Window window)
     st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv);
     cmap = xgwa.colormap;
     if( st->ncolors ) {
     st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv);
     cmap = xgwa.colormap;
     if( st->ncolors ) {
-        free_colors(st->dpy, cmap, st->colors, st->ncolors);
+        free_colors(xgwa.screen, cmap, st->colors, st->ncolors);
         st->ncolors = 0;
     }
     if( mono_p ) {
         st->ncolors = 0;
     }
     if( mono_p ) {
@@ -166,7 +166,8 @@ squiral_init (Display *dpy, Window window)
       st->ncolors = get_integer_resource(st->dpy, "ncolors", "Integer");
       if (st->ncolors < 0 || st->ncolors > NCOLORSMAX)
         st->ncolors = NCOLORSMAX;
       st->ncolors = get_integer_resource(st->dpy, "ncolors", "Integer");
       if (st->ncolors < 0 || st->ncolors > NCOLORSMAX)
         st->ncolors = NCOLORSMAX;
-      make_uniform_colormap(st->dpy, xgwa.visual, cmap, st->colors, &st->ncolors, True,
+      make_uniform_colormap(xgwa.screen, xgwa.visual, cmap,
+                            st->colors, &st->ncolors, True,
          &writeable, False);
       if (st->ncolors <= 0) {
         st->ncolors = 1;
          &writeable, False);
       if (st->ncolors <= 0) {
         st->ncolors = 1;
@@ -260,6 +261,9 @@ static const char *squiral_defaults[] = {
   "*disorder:   0.005",
   "*cycle:      False",
   "*handedness: 0.5",
   "*disorder:   0.005",
   "*cycle:      False",
   "*handedness: 0.5",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 071dccb6f83819f4f60d37f6d911b5691cd74eed..6cfee31db8ddcb89a46fdb174cfd36c180056e53 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1997-2008 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -341,7 +341,7 @@ reset_starfish (struct state *st)
   if (st->done_once)
     {
       if (st->colors && st->ncolors)
   if (st->done_once)
     {
       if (st->colors && st->ncolors)
-       free_colors (st->dpy, st->cmap, st->colors, st->ncolors);
+       free_colors (xgwa.screen, st->cmap, st->colors, st->ncolors);
       if (st->colors)
        free (st->colors);
       st->colors = 0;
       if (st->colors)
        free (st->colors);
       st->colors = 0;
@@ -361,10 +361,12 @@ reset_starfish (struct state *st)
   if (mono_p)
     ;
   else if (random() % 3)
   if (mono_p)
     ;
   else if (random() % 3)
-    make_smooth_colormap (st->dpy, xgwa.visual, st->cmap, st->colors, &st->ncolors,
+    make_smooth_colormap (xgwa.screen, xgwa.visual, st->cmap,
+                          st->colors, &st->ncolors,
                          True, 0, True);
   else
                          True, 0, True);
   else
-    make_uniform_colormap (st->dpy, xgwa.visual, st->cmap, st->colors, &st->ncolors,
+    make_uniform_colormap (xgwa.screen, xgwa.visual, st->cmap,
+                           st->colors, &st->ncolors,
                           True, 0, True);
 
   if (st->ncolors < 2) st->ncolors = 2;
                           True, 0, True);
 
   if (st->ncolors < 2) st->ncolors = 2;
@@ -526,6 +528,9 @@ static const char *starfish_defaults [] = {
   "*duration:          30",
   "*delay2:            5",
   "*mode:              random",
   "*duration:          30",
   "*delay2:            5",
   "*mode:              random",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index 604f471b9af5d7e6125f55e10d3e066b15122d85..632d347a49c14af1d93fad503796a160272c9c76 100644 (file)
@@ -38,7 +38,8 @@ static const char sccsid[] = "@(#)strange.c   5.00 2000/11/01 xlockmore";
 # define MODE_strange
 # define DEFAULTS      "*delay: 10000 \n" \
                                        "*ncolors: 100 \n" \
 # define MODE_strange
 # define DEFAULTS      "*delay: 10000 \n" \
                                        "*ncolors: 100 \n" \
-                                       "*fpsSolid: True \n"
+                                       "*fpsSolid: True \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define SMOOTH_COLORS
 # define refresh_strange 0
 
 # define SMOOTH_COLORS
 # define refresh_strange 0
index 517c4977e9ec489ef4d72b95da2c93318d1d4d2a..82ea6d9ee81bedf4b2dc720de28e6ae64ad134d9 100644 (file)
@@ -720,6 +720,9 @@ static const char *substrate_defaults[] = {
     "*maxCracks: 100",
     "*sandGrains: 64",
     "*circlePercent: 33",
     "*maxCracks: 100",
     "*sandGrains: 64",
     "*circlePercent: 33",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
     0
 };
 
     0
 };
 
index ba959ac692045fc483901291d73a469433863312..efe2f8d1d89b3b57d87c35a0373792294d515c01 100644 (file)
@@ -35,6 +35,7 @@ static const char sccsid[] = "@(#)swirl.c     4.00 97/01/01 xlockmore";
                                        "*ncolors:              200     \n"                     \
                                        "*useSHM:               True    \n" \
                                        "*fpsSolid:             true    \n" \
                                        "*ncolors:              200     \n"                     \
                                        "*useSHM:               True    \n" \
                                        "*fpsSolid:             true    \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define SMOOTH_COLORS
 # define WRITABLE_COLORS
 
 # define SMOOTH_COLORS
 # define WRITABLE_COLORS
@@ -1352,7 +1353,7 @@ draw_swirl(ModeInfo * mi)
                if (swirl->drawing) {
 #ifdef STANDALONE
                  if (mi->writable_p)
                if (swirl->drawing) {
 #ifdef STANDALONE
                  if (mi->writable_p)
-                       rotate_colors(MI_DISPLAY(mi), MI_COLORMAP(mi),
+                       rotate_colors(mi->xgwa.screen, MI_COLORMAP(mi),
                                                  swirl->rgb_values, swirl->colours, 1);
 #else  /* !STANDALONE */
                        /* rotate the colours */
                                                  swirl->rgb_values, swirl->colours, 1);
 #else  /* !STANDALONE */
                        /* rotate the colours */
@@ -1374,7 +1375,7 @@ draw_swirl(ModeInfo * mi)
                } else {
 #ifdef STANDALONE
                  if (mi->writable_p)
                } else {
 #ifdef STANDALONE
                  if (mi->writable_p)
-                       rotate_colors(MI_DISPLAY(mi), MI_COLORMAP(mi),
+                       rotate_colors(mi->xgwa.screen, MI_COLORMAP(mi),
                                                  swirl->rgb_values, swirl->colours, 1);
 #else  /* !STANDALONE */
                        /* rotate the colours */
                                                  swirl->rgb_values, swirl->colours, 1);
 #else  /* !STANDALONE */
                        /* rotate the colours */
@@ -1412,10 +1413,9 @@ draw_swirl(ModeInfo * mi)
 #ifdef STANDALONE
                                        /* Pick a new colormap! */
                                        XClearWindow (MI_DISPLAY(mi), MI_WINDOW(mi));
 #ifdef STANDALONE
                                        /* Pick a new colormap! */
                                        XClearWindow (MI_DISPLAY(mi), MI_WINDOW(mi));
-                                       free_colors (MI_DISPLAY(mi), MI_COLORMAP(mi),
+                                       free_colors (mi->xgwa.screen, MI_COLORMAP(mi),
                                                                 mi->colors, mi->npixels);
                                                                 mi->colors, mi->npixels);
-                                       make_smooth_colormap (MI_DISPLAY(mi),
-                                                                                 MI_VISUAL(mi),
+                                       make_smooth_colormap (mi->xgwa.screen, MI_VISUAL(mi),
                                                                                  MI_COLORMAP(mi),
                                                                                  mi->colors, &mi->npixels, True,
                                                                                  &mi->writable_p, True);
                                                                                  MI_COLORMAP(mi),
                                                                                  mi->colors, &mi->npixels, True,
                                                                                  &mi->writable_p, True);
index e7bbf6ddf360b24935a98aeee59750b3077ae945..cb5541de2e99b9bc12e3c697f558c7971a03e997 100644 (file)
@@ -36,6 +36,7 @@ static const char sccsid[] = "@(#)thornbird.c 5.00 2000/11/01 xlockmore";
                                         "*cycles:  400   \n" \
                                         "*ncolors: 64    \n" \
                                         "*fpsSolid: true    \n" \
                                         "*cycles:  400   \n" \
                                         "*ncolors: 64    \n" \
                                         "*fpsSolid: true    \n" \
+                                       "*ignoreRotation: True \n" \
 
 # define BRIGHT_COLORS
 # define thornbird_handle_event 0
 
 # define BRIGHT_COLORS
 # define thornbird_handle_event 0
index 1a93de257dd59fa4aba3d9e6cb363dec9d45e973..79fe819ce77b4c27f27ea573669bd0d28c9ce3c5 100644 (file)
@@ -298,11 +298,11 @@ draw_triangle (ModeInfo * mi)
                                XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
                                if (!mono_p)
                                  {
                                XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi));
                                if (!mono_p)
                                  {
-                                       free_colors(mi->dpy, mi->xgwa.colormap, mi->colors,
+                                       free_colors(mi->xgwa.screen, mi->xgwa.colormap, mi->colors,
                                                                mi->npixels);
                     mi->npixels = 
                       get_integer_resource (mi->dpy, "ncolors", "Integer");
                                                                mi->npixels);
                     mi->npixels = 
                       get_integer_resource (mi->dpy, "ncolors", "Integer");
-                                       make_smooth_colormap (mi->dpy,
+                                       make_smooth_colormap (mi->xgwa.screen,
                                                                                  mi->xgwa.visual, mi->xgwa.colormap,
                                                                                  mi->colors, &mi->npixels,
                                                                                  True, &mi->writable_p, True);
                                                                                  mi->xgwa.visual, mi->xgwa.colormap,
                                                                                  mi->colors, &mi->npixels,
                                                                                  True, &mi->writable_p, True);
index 16836543b7b2e97a809610f7b7ea27cc7f77c745..dda5ac8cf5081bfaf6c7598d52275cd73f009862 100644 (file)
@@ -61,6 +61,9 @@ static const char *truchet_defaults [] = {
   "*anim-delay:               100",
   "*anim-step-size:           3",
   "*randomize:               true",
   "*anim-delay:               100",
   "*anim-step-size:           3",
   "*randomize:               true",
+#ifdef USE_IPHONE
+  "*ignoreRotation:           True",
+#endif
    0
 };
 
    0
 };
 
index 7a606b129399a1adc38d4248cee83836cd4acee8..dec8fbe14b8b5ca91f0fa51fddaedeebeff97203 100644 (file)
@@ -766,6 +766,9 @@ static const char *twang_defaults [] = {
     "*useSHM: True",
 #else
     "*useSHM: False",
     "*useSHM: True",
 #else
     "*useSHM: False",
+#endif
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
 #endif
     0
 };
 #endif
     0
 };
index d1ef57198af245212cfc971fa17e2c4998507e67..c50785afda811afd6510ef267b9a2977ded15a6a 100644 (file)
@@ -209,9 +209,8 @@ static void
 randpal (struct state *st)
 {
   int ncolors = tailmax - 1;
 randpal (struct state *st)
 {
   int ncolors = tailmax - 1;
-  make_random_colormap (st->dpy,
-                       st->xgwa.visual,
-                       st->mycmap, &st->mycolors[1], &ncolors, True, True, 0, True);
+  make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->mycmap,
+                        &st->mycolors[1], &ncolors, True, True, 0, True);
   if (ncolors < tailmax - 1)
     {
       int c;
   if (ncolors < tailmax - 1)
     {
       int c;
@@ -1206,6 +1205,9 @@ static const char *vermiculate_defaults[] = {
   "*fpsSolid:  true",
   "*speed: 0",
   "*instring: ",
   "*fpsSolid:  true",
   "*speed: 0",
   "*instring: ",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 8fa8995ae043b9eec72b5473c8356b3c57b378c2..881b92cc0b479c10de751670b5e0a66cf5b3d895 100644 (file)
@@ -64,12 +64,13 @@ wander_init (Display *dpy, Window window)
     st->color_map = attributes.colormap;
     if (st->color_count)
     {
     st->color_map = attributes.colormap;
     if (st->color_count)
     {
-        free_colors (st->dpy, st->color_map, st->colors, st->color_count);
+        free_colors (attributes.screen, st->color_map,
+                     st->colors, st->color_count);
         st->color_count = 0;
     }
     st->context = XCreateGC (st->dpy, st->window, 0, &values);
     st->color_count = MAXIMUM_COLOR_COUNT;
         st->color_count = 0;
     }
     st->context = XCreateGC (st->dpy, st->window, 0, &values);
     st->color_count = MAXIMUM_COLOR_COUNT;
-    make_color_loop (st->dpy, st->color_map,
+    make_color_loop (attributes.screen, attributes.visual, st->color_map,
                     0,   1, 1,
                     120, 1, 1,
                     240, 1, 1,
                     0,   1, 1,
                     120, 1, 1,
                     240, 1, 1,
@@ -240,6 +241,9 @@ static const char *wander_defaults [] =
     ".reset:      2500000",
     ".circles:    False",
     ".size:       1",
     ".reset:      2500000",
     ".circles:    False",
     ".size:       1",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
     0
 };
 
     0
 };
 
index 566c4187fd87287080e7b0ad4b40d1846809cd05..843a1cfbbcf4f4e1a419183ac8cff2502a8ff16b 100644 (file)
@@ -489,6 +489,9 @@ static const char *whirlwindwarp_defaults [] = {
   "*points:    400",
   "*tails:     8",
   "*meters:    false",
   "*points:    400",
   "*tails:     8",
   "*meters:    false",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index e5eb9d554c251da78c72459142780bbd39af433c..5ae36ed0e2c6f7c1ef43a6758361086f53258bcb 100644 (file)
@@ -389,7 +389,9 @@ whirlygig_init (Display *dpy, Window window)
 
     {
       Bool writable_p = False;
 
     {
       Bool writable_p = False;
-    make_uniform_colormap (st->dpy, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, &writable_p, True);
+    make_uniform_colormap (st->xgwa.screen, st->xgwa.visual,
+                           st->xgwa.colormap, st->colors, &st->ncolors,
+                           True, &writable_p, True);
     }
 
     if (st->ba) XFillRectangle (st->dpy, st->ba, st->bgc, 0, 0, st->xgwa.width, st->xgwa.height);
     }
 
     if (st->ba) XFillRectangle (st->dpy, st->ba, st->bgc, 0, 0, st->xgwa.width, st->xgwa.height);
index 86a6dcd54a7c6de513a7fc2cbf531ae45b64c46e..4529d5d68b1f37eb0a61714af48287a5b7b845a8 100644 (file)
@@ -708,6 +708,9 @@ static const char *wormhole_defaults [] = {
   "*delay:     10000",
   "*zspeed:    10",
   "*stars:     20",
   "*delay:     10000",
   "*zspeed:    10",
   "*stars:     20",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 2785fb816a49964161c9cdee4b4ae719d3307bc9..0a3739b567b51af172a91b1e657d98c36b2045ae 100644 (file)
@@ -125,6 +125,10 @@ MakeImage(struct state *st)
 {
   XGCValues gcv;
 
 {
   XGCValues gcv;
 
+  /* #### This probably leaks SHM every time the window is resized. */
+  if (st->xim)
+    XDestroyImage (st->xim);
+
 #ifdef HAVE_XSHM_EXTENSION
   st->shared = True;
   st->xim = create_xshm_image (st->dpy, st->visual, st->depth, ZPixmap, NULL,
 #ifdef HAVE_XSHM_EXTENSION
   st->shared = True;
   st->xim = create_xshm_image (st->dpy, st->visual, st->depth, ZPixmap, NULL,
@@ -147,8 +151,8 @@ MakeImage(struct state *st)
         }
     }
 
         }
     }
 
-  st->gc = XCreateGC(st->dpy,st->window,0,&gcv);
-  if (!st->gc) exit (1);
+  if (! st->gc)
+    st->gc = XCreateGC(st->dpy,st->window,0,&gcv);
 }
 
 
 }
 
 
@@ -215,6 +219,8 @@ InitFlame(struct state *st)
 {
   st->fwidth  = st->width / 2;
   st->fheight = st->height / 2;
 {
   st->fwidth  = st->width / 2;
   st->fheight = st->height / 2;
+
+  if (st->flame) free (st->flame);
   st->flame   = (unsigned char *) malloc((st->fwidth + 2) * (st->fheight + 2)
                                      * sizeof(unsigned char));
 
   st->flame   = (unsigned char *) malloc((st->fwidth + 2) * (st->fheight + 2)
                                      * sizeof(unsigned char));
 
@@ -621,7 +627,7 @@ loadBitmap(struct state *st, int *w, int *h)
       unsigned char *result, *o;
       char *bits = (char *) malloc (sizeof(bob_bits));
       int x, y;
       unsigned char *result, *o;
       char *bits = (char *) malloc (sizeof(bob_bits));
       int x, y;
-      int scale = ((st->width > bob_width * 11) ? 2 : 1);
+      int scale = ((st->width > bob_width * 10) ? 2 : 1);
  
       memcpy (bits, bob_bits, sizeof(bob_bits));
       ximage = XCreateImage (st->dpy, st->visual, 1, XYBitmap, 0, bits,
  
       memcpy (bits, bob_bits, sizeof(bob_bits));
       ximage = XCreateImage (st->dpy, st->visual, 1, XYBitmap, 0, bits,
@@ -721,12 +727,6 @@ xflame_init (Display *dpy, Window win)
   InitColors(st);
   st->theim = loadBitmap(st, &st->theimx, &st->theimy);
 
   InitColors(st);
   st->theim = loadBitmap(st, &st->theimx, &st->theimy);
 
-  /* utils/xshm.c doesn't provide a way to free the shared-memory image, which
-     makes it hard for us to react to window resizing.  So, punt for now.  The
-     size of the window at startup is the size it will stay.
-  */
-  GetXInfo(st);
-
   MakeImage(st);
   InitFlame(st);
   FlameFill(st,0);
   MakeImage(st);
   InitFlame(st);
   FlameFill(st,0);
@@ -755,6 +755,12 @@ static void
 xflame_reshape (Display *dpy, Window window, void *closure, 
                  unsigned int w, unsigned int h)
 {
 xflame_reshape (Display *dpy, Window window, void *closure, 
                  unsigned int w, unsigned int h)
 {
+  struct state *st = (struct state *) closure;
+  GetXInfo(st);
+  MakeImage(st);
+  InitFlame(st);
+  FlameFill(st,0);
+  XClearWindow (dpy, window);
 }
 
 static Bool
 }
 
 static Bool
index 1765243cba111240466aa8045a2f238c39a49c66..da913c724fada1f2e238610feb61b911d21c13e2 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1997-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -126,13 +126,13 @@ xjack_init (Display *dpy, Window window)
 
   xjack_reshape (dpy, window, st, st->xgwa.width, st->xgwa.height);
 
 
   xjack_reshape (dpy, window, st, st->xgwa.width, st->xgwa.height);
 
-  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->left = 0xFF & (random() % ((st->columns / 2)+1));
+  st->right = st->left + (0xFF & (random() % (st->columns - st->left)
+                                  + 10));
+  if (st->right < st->left + 10) st->right = st->left + 10;
+  if (st->right > st->columns)   st->right = st->columns;
+
+  st->x = st->left;
   st->y = 0;
 
   if (st->xgwa.width > 200 && st->xgwa.height > 200)
   st->y = 0;
 
   if (st->xgwa.width > 200 && st->xgwa.height > 200)
@@ -250,6 +250,8 @@ xjack_draw (Display *dpy, Window window, void *closure)
       if (st->break_para)
         st->y++;
 
       if (st->break_para)
         st->y++;
 
+      st->break_para = 0;
+
       if (st->mode == 1 || st->mode == 2)
         {
           /* 1 = left margin goes southwest; 2 = southeast */
       if (st->mode == 1 || st->mode == 2)
         {
           /* 1 = left margin goes southwest; 2 = southeast */
@@ -282,14 +284,20 @@ xjack_draw (Display *dpy, Window window, void *closure)
 
       if (st->y >= st->rows-1) /* bottom of page */
         {
 
       if (st->y >= st->rows-1) /* bottom of page */
         {
+# if 0    /* Nah, this looks bad. */
+
           /* scroll by 1-5 lines */
           st->scrolling = (random() % 5 ? 0 : (0xFF & (random() % 5))) + 1;
           /* scroll by 1-5 lines */
           st->scrolling = (random() % 5 ? 0 : (0xFF & (random() % 5))) + 1;
+
           if (st->break_para)
             st->scrolling++;
 
           /* but sometimes scroll by a whole page */
           if (0 == (random() % 100))
             st->scrolling += st->rows;
           if (st->break_para)
             st->scrolling++;
 
           /* but sometimes scroll by a whole page */
           if (0 == (random() % 100))
             st->scrolling += st->rows;
+# else
+          st->scrolling = 1;
+# endif
 
           return xjack_scroll (st);
         }
 
           return xjack_scroll (st);
         }
@@ -349,7 +357,7 @@ xjack_draw (Display *dpy, Window window, void *closure)
         }
 
       if ((tolower(c) != tolower(*st->s))
         }
 
       if ((tolower(c) != tolower(*st->s))
-          ? (0 == (random() % 10))             /* backup to correct */
+          ? (0 == (random() % 10))     /* backup to correct */
           : (0 == (random() % 400)))   /* fail to advance */
         {
           st->x--;
           : (0 == (random() % 400)))   /* fail to advance */
         {
           st->x--;
@@ -420,6 +428,13 @@ xjack_draw (Display *dpy, Window window, void *closure)
               if (st->right > st->columns)
                 st->left -= (st->right - st->columns);
             }
               if (st->right > st->columns)
                 st->left -= (st->right - st->columns);
             }
+
+          if (st->right - st->left < 5)
+            st->left = st->right - 5;
+          if (st->left < 0)
+            st->left = 0;
+          if (st->right - st->left < 5)
+            st->right = st->left + 5;
         }
       st->s = source;
     }
         }
       st->s = source;
     }
index 0c0b2c921b007679fc003cb1711869c9b279f8d1..23c12b6dc33fb1d75f412609fe6a77dac461a6a3 100644 (file)
@@ -1,5 +1,5 @@
 /* xlockmore.c --- xscreensaver compatibility layer for xlockmore modules.
 /* xlockmore.c --- xscreensaver compatibility layer for xlockmore modules.
- * xscreensaver, Copyright (c) 1997-2011 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -382,18 +382,21 @@ xlockmore_init (Display *dpy, Window window,
       switch (mi->xlmft->desired_color_scheme)
         {
         case color_scheme_uniform:
       switch (mi->xlmft->desired_color_scheme)
         {
         case color_scheme_uniform:
-          make_uniform_colormap (dpy, mi->xgwa.visual, mi->xgwa.colormap,
+          make_uniform_colormap (mi->xgwa.screen, mi->xgwa.visual,
+                                 mi->xgwa.colormap,
                                  mi->colors, &mi->npixels,
                                  True, &mi->writable_p, True);
           break;
         case color_scheme_smooth:
                                  mi->colors, &mi->npixels,
                                  True, &mi->writable_p, True);
           break;
         case color_scheme_smooth:
-          make_smooth_colormap (dpy, mi->xgwa.visual, mi->xgwa.colormap,
+          make_smooth_colormap (mi->xgwa.screen, mi->xgwa.visual,
+                                mi->xgwa.colormap,
                                 mi->colors, &mi->npixels,
                                 True, &mi->writable_p, True);
           break;
         case color_scheme_bright:
         case color_scheme_default:
                                 mi->colors, &mi->npixels,
                                 True, &mi->writable_p, True);
           break;
         case color_scheme_bright:
         case color_scheme_default:
-          make_random_colormap (dpy, mi->xgwa.visual, mi->xgwa.colormap,
+          make_random_colormap (mi->xgwa.screen, mi->xgwa.visual,
+                                mi->xgwa.colormap,
                                 mi->colors, &mi->npixels,
                                 (mi->xlmft->desired_color_scheme ==
                                  color_scheme_bright),
                                 mi->colors, &mi->npixels,
                                 (mi->xlmft->desired_color_scheme ==
                                  color_scheme_bright),
index 02587f00b37d12dd7d1ccac1f1b360e17b16f69d..f12b354775e4ac75ad2dc8f45ca68d8672eef57b 100644 (file)
@@ -78,6 +78,9 @@ static const char *xlyap_defaults [] = {
   "*delay:              10000",
   "*linger:             5",
   "*colors:             200",
   "*delay:              10000",
   "*linger:             5",
   "*colors:             200",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
@@ -178,8 +181,8 @@ typedef double (*PFD)(double,double);
 /*#define BACKING_PIXMAP*/
 
 struct state {
 /*#define BACKING_PIXMAP*/
 
 struct state {
-  int screen;
   Display *dpy;
   Display *dpy;
+  Screen *screen;
   Visual *visual;
   Colormap cmap;
 
   Visual *visual;
   Colormap cmap;
 
@@ -552,15 +555,15 @@ init_color(struct state *st)
 {
   int i;
   if (st->ncolors)
 {
   int i;
   if (st->ncolors)
-    free_colors (st->dpy, st->cmap, st->colors, st->ncolors);
+    free_colors (st->screen, st->cmap, st->colors, st->ncolors);
   st->ncolors = st->maxcolor;
   st->ncolors = st->maxcolor;
-  make_smooth_colormap(st->dpy, st->visual, st->cmap,
+  make_smooth_colormap(st->screen, st->visual, st->cmap,
                        st->colors, &st->ncolors, True, NULL, True);
 
   for (i = 0; i < st->maxcolor; i++) {
     if (! st->Data_GC[i]) {
       XGCValues gcv;
                        st->colors, &st->ncolors, True, NULL, True);
 
   for (i = 0; i < st->maxcolor; i++) {
     if (! st->Data_GC[i]) {
       XGCValues gcv;
-      gcv.background = BlackPixel(st->dpy, st->screen);
+      gcv.background = BlackPixelOfScreen(st->screen);
       st->Data_GC[i] = XCreateGC(st->dpy, st->canvas, GCBackground, &gcv);
     }
     XSetForeground(st->dpy, st->Data_GC[i],
       st->Data_GC[i] = XCreateGC(st->dpy, st->canvas, GCBackground, &gcv);
     }
     XSetForeground(st->dpy, st->Data_GC[i],
@@ -1782,6 +1785,7 @@ xlyap_init (Display *d, Window window)
   st->width = xgwa.width;
   st->height = xgwa.height;
   st->visual = xgwa.visual;
   st->width = xgwa.width;
   st->height = xgwa.height;
   st->visual = xgwa.visual;
+  st->screen = xgwa.screen;
   st->cmap = xgwa.colormap;
 
   do_defaults(st);
   st->cmap = xgwa.colormap;
 
   do_defaults(st);
@@ -1799,14 +1803,13 @@ xlyap_init (Display *d, Window window)
   if (builtin >= 0)
     do_preset (st, builtin);
 
   if (builtin >= 0)
     do_preset (st, builtin);
 
-  st->screen = DefaultScreen(st->dpy);
-  st->background = BlackPixel(st->dpy, st->screen);
+  st->background = BlackPixelOfScreen(st->screen);
   setupmem(st);
   init_data(st);
   if (!mono_p)
     st->foreground = st->startcolor;
   else
   setupmem(st);
   init_data(st);
   if (!mono_p)
     st->foreground = st->startcolor;
   else
-    st->foreground = WhitePixel(st->dpy, st->screen);
+    st->foreground = WhitePixelOfScreen(st->screen);
 
   /*
    * Create the window to display the Lyapunov exponents
 
   /*
    * Create the window to display the Lyapunov exponents
index 2e2ba16201b6994a36429394452b6f6a4a3cab1d..c0090711fa52d579ce0bacc16fc6c08c20349941 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
 #!/usr/bin/perl -w
-# Copyright Â© 2002, 2005 Jamie Zawinski <jwz@jwz.org>
+# Copyright Â© 2002-2013 Jamie Zawinski <jwz@jwz.org>
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
@@ -24,7 +24,7 @@ use strict;
 use Text::Wrap;
 
 my $progname = $0; $progname =~ s@.*/@@g;
 use Text::Wrap;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.3 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.4 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 
 
 my $verbose = 0;
 
@@ -60,7 +60,7 @@ my $man_suffix = (".SH ENVIRONMENT\n" .
                   ".BR X (1),\n" .
                   ".BR xscreensaver (1)\n" .
                   ".SH COPYRIGHT\n" .
                   ".BR X (1),\n" .
                   ".BR xscreensaver (1)\n" .
                   ".SH COPYRIGHT\n" .
-                  "Copyright \\(co 2002 by %AUTHOR%.  " .
+                  "Copyright \\(co %YEAR% by %AUTHOR%.  " .
                   "Permission to use, copy, modify, \n" .
                   "distribute, and sell this software and its " .
                   "documentation for any purpose is \n" .
                   "Permission to use, copy, modify, \n" .
                   "distribute, and sell this software and its " .
                   "documentation for any purpose is \n" .
@@ -118,6 +118,7 @@ sub xml2man($) {
                          
     my $carg = $arg;
     my $boolp = m/^<boolean/;
                          
     my $carg = $arg;
     my $boolp = m/^<boolean/;
+    my $novalsp = 0;
 
     if ($arg && $arg =~ m/^-no(-.*)/) {
       $arg = "$1 | \\$arg";
 
     if ($arg && $arg =~ m/^-no(-.*)/) {
       $arg = "$1 | \\$arg";
@@ -146,8 +147,12 @@ sub xml2man($) {
       $label = "Render in wireframe instead of solid.";
     } elsif ($carg =~ m/^-delay/ && $hi && $hi >= 10000) {
       $label = "Per-frame delay, in microseconds.";
       $label = "Render in wireframe instead of solid.";
     } elsif ($carg =~ m/^-delay/ && $hi && $hi >= 10000) {
       $label = "Per-frame delay, in microseconds.";
-      $def = sprintf ("%d (%0.2f seconds.)", $def, ($def/1000000.0));
+      $def = sprintf ("%d (%0.2f seconds)", $def, ($def/1000000.0));
       $low = $hi = undef;
       $low = $hi = undef;
+    } elsif ($carg eq '-speed \fInumber\fP') {
+      $label = "Animation speed.  2.0 means twice as fast, " .
+               "0.5 means half as fast.";
+      $novalsp = 1;
     } elsif ($boolp) {
       $label .= ".  Boolean.";
     } elsif ($label) {
     } elsif ($boolp) {
       $label .= ".  Boolean.";
     } elsif ($label) {
@@ -164,8 +169,10 @@ sub xml2man($) {
 
       $args .= "[\\$carg]\n";
 
 
       $args .= "[\\$carg]\n";
 
-      $label .= "  $low - $hi." if (defined($low) && defined($hi));
-      $label .= "  Default: $def." if (defined ($def));
+      if (! $novalsp) {
+        $label .= "  $low - $hi." if (defined($low) && defined($hi));
+        $label .= "  Default: $def." if (defined ($def));
+      }
       $label = wrap ("", "", $label);
 
       $body .= ".TP 8\n.B \\$arg\n$label";
       $label = wrap ("", "", $label);
 
       $body .= ".TP 8\n.B \\$arg\n$label";
@@ -192,6 +199,8 @@ sub xml2man($) {
     $author = "UNKNOWN";
   }
 
     $author = "UNKNOWN";
   }
 
+  $desc =~ s@http://en\.wikipedia\.org/[^\s]+@@gs;
+
   $desc = wrap ("", "", $desc);
 
   $body = (".TH XScreenSaver 1 \"\" \"X Version 11\"\n" .
   $desc = wrap ("", "", $desc);
 
   $body = (".TH XScreenSaver 1 \"\" \"X Version 11\"\n" .
@@ -208,7 +217,11 @@ sub xml2man($) {
            $body .
            $man_suffix);
 
            $body .
            $man_suffix);
 
+  my $year = $1 if ($author =~ s/; (\d{4})$//s);
+  $year = (localtime)[5] + 1900 unless $year;
+
   $body =~ s/%AUTHOR%/$author/g;
   $body =~ s/%AUTHOR%/$author/g;
+  $body =~ s/%YEAR%/$year/g;
 
 #print $body; exit 0;
 
 
 #print $body; exit 0;
 
index f3b8184800ee07973e504d548b565e148eb867d0..d36055de7608386a99912173d7309626dc4fb647 100644 (file)
@@ -63,6 +63,9 @@ static const char *xrayswarm_defaults [] ={
        ".background:           black",
        "*delay:                20000",
        "*fpsSolid:             true",
        ".background:           black",
        "*delay:                20000",
        "*fpsSolid:             true",
+#ifdef USE_IPHONE
+        "*ignoreRotation:       True",
+#endif
        0
 };
 
        0
 };
 
index 17ef55343f339c457d66ee7a1fe341dcdb73bd80..3c241fc36fdc7ee36051931a3bcf4b3f379b3017 100644 (file)
@@ -315,6 +315,9 @@ static const char *xspirograph_defaults [] = {
   "*subdelay:          20000",
   "*layers:            2",
   "*alwaysfinish:      false",
   "*subdelay:          20000",
   "*layers:            2",
   "*alwaysfinish:      false",
+#ifdef USE_IPHONE
+  "*ignoreRotation:     True",
+#endif
   0
 };
 
   0
 };
 
index 73b27b05f3e417f25f1eca51fbd34c7c1a85fbb4..439b8a1f04d62f59f6a7f949a31995bed3adbb21 100644 (file)
@@ -249,6 +249,9 @@ static const char *zoom_defaults[] = {
   "*pixspacey:   2",
   "*lensoffsetx: 5",
   "*lensoffsety: 5",
   "*pixspacey:   2",
   "*lensoffsetx: 5",
   "*lensoffsety: 5",
+#ifdef USE_IPHONE
+  "*ignoreRotation: True",
+#endif
   0
 };
 
   0
 };
 
index 11f9de0a6fa2a9c06bcaa5316961a899ade1bffc..c43c5e57099270ec075a390ec30c430bf071c2a8 100644 (file)
@@ -1,4 +1,4 @@
-# Auto-generated: Mon Feb  4 22:38:23 PST 2013
+# Auto-generated: Tue Jul 16 02:23:37 PDT 2013
 driver/demo-Gtk-conf.c
 driver/demo-Gtk-support.c
 driver/demo-Gtk-widgets.c
 driver/demo-Gtk-conf.c
 driver/demo-Gtk-support.c
 driver/demo-Gtk-widgets.c
@@ -101,6 +101,7 @@ hacks/config/greynetic.xml
 hacks/config/halftone.xml
 hacks/config/halo.xml
 hacks/config/helix.xml
 hacks/config/halftone.xml
 hacks/config/halo.xml
 hacks/config/helix.xml
+hacks/config/hexadrop.xml
 hacks/config/hilbert.xml
 hacks/config/hopalong.xml
 hacks/config/hyperball.xml
 hacks/config/hilbert.xml
 hacks/config/hopalong.xml
 hacks/config/hyperball.xml
@@ -118,6 +119,7 @@ hacks/config/juggle.xml
 hacks/config/juggler3d.xml
 hacks/config/julia.xml
 hacks/config/kaleidescope.xml
 hacks/config/juggler3d.xml
 hacks/config/julia.xml
 hacks/config/kaleidescope.xml
+hacks/config/kaleidocycle.xml
 hacks/config/klein.xml
 hacks/config/kumppa.xml
 hacks/config/lament.xml
 hacks/config/klein.xml
 hacks/config/kumppa.xml
 hacks/config/lament.xml
@@ -167,6 +169,7 @@ hacks/config/providence.xml
 hacks/config/pulsar.xml
 hacks/config/pyro.xml
 hacks/config/qix.xml
 hacks/config/pulsar.xml
 hacks/config/pyro.xml
 hacks/config/qix.xml
+hacks/config/quasicrystal.xml
 hacks/config/queens.xml
 hacks/config/rd-bomb.xml
 hacks/config/rdbomb.xml
 hacks/config/queens.xml
 hacks/config/rd-bomb.xml
 hacks/config/rdbomb.xml
@@ -210,6 +213,7 @@ hacks/config/triangle.xml
 hacks/config/tronbit.xml
 hacks/config/truchet.xml
 hacks/config/twang.xml
 hacks/config/tronbit.xml
 hacks/config/truchet.xml
 hacks/config/twang.xml
+hacks/config/unknownpleasures.xml
 hacks/config/vermiculate.xml
 hacks/config/vidwhacker.xml
 hacks/config/vines.xml
 hacks/config/vermiculate.xml
 hacks/config/vidwhacker.xml
 hacks/config/vines.xml
index 462a850a042aeeebaf8b3f0cb76b86fa3e743dd1..d858b2affaecda1890e8157c86ca12a1bc370143 100644 (file)
--- a/setup.com
+++ b/setup.com
@@ -50,6 +50,7 @@ $ greynetic   :== $'mydir'greynetic
 $ halftone     :== $'mydir'halftone
 $ halo         :== $'mydir'halo
 $ helix                :== $'mydir'helix
 $ halftone     :== $'mydir'halftone
 $ halo         :== $'mydir'halo
 $ helix                :== $'mydir'helix
+$ hexadrop     :== $'mydir'hexadrop
 $ hopalong     :== $'mydir'hopalong
 $ ifs          :== $'mydir'ifs
 $ imsmap       :== $'mydir'imsmap
 $ hopalong     :== $'mydir'hopalong
 $ ifs          :== $'mydir'ifs
 $ imsmap       :== $'mydir'imsmap
index e06359c72db811738959df9bc1f733e359485a4d..e6abd4861bdcd85e1a422fbc9745c6c0f58a106c 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1997, 2002 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -22,8 +22,9 @@
 extern char *progname;
 
 void
 extern char *progname;
 
 void
-free_colors(Display *dpy, Colormap cmap, XColor *colors, int ncolors)
+free_colors (Screen *screen, Colormap cmap, XColor *colors, int ncolors)
 {
 {
+  Display *dpy = screen ? DisplayOfScreen (screen) : 0;
   int i;
   if (ncolors > 0)
     {
   int i;
   if (ncolors > 0)
     {
@@ -38,9 +39,10 @@ free_colors(Display *dpy, Colormap cmap, XColor *colors, int ncolors)
 
 
 void
 
 
 void
-allocate_writable_colors (Display *dpy, Colormap cmap,
+allocate_writable_colors (Screen *screen, Colormap cmap,
                          unsigned long *pixels, int *ncolorsP)
 {
                          unsigned long *pixels, int *ncolorsP)
 {
+  Display *dpy = screen ? DisplayOfScreen (screen) : 0;
   int desired = *ncolorsP;
   int got = 0;
   int requested = desired;
   int desired = *ncolorsP;
   int got = 0;
   int requested = desired;
@@ -94,25 +96,31 @@ complain (int wanted_colors, int got_colors,
 
 
 void
 
 
 void
-make_color_ramp (Display *dpy, Colormap cmap,
+make_color_ramp (Screen *screen, Visual *visual, Colormap cmap,
                 int h1, double s1, double v1,   /* 0-360, 0-1.0, 0-1.0 */
                 int h2, double s2, double v2,   /* 0-360, 0-1.0, 0-1.0 */
                 XColor *colors, int *ncolorsP,
                 Bool closed_p,
                 Bool allocate_p,
                 int h1, double s1, double v1,   /* 0-360, 0-1.0, 0-1.0 */
                 int h2, double s2, double v2,   /* 0-360, 0-1.0, 0-1.0 */
                 XColor *colors, int *ncolorsP,
                 Bool closed_p,
                 Bool allocate_p,
-                Bool writable_p)
+                Bool *writable_pP)
 {
 {
+  Display *dpy = screen ? DisplayOfScreen (screen) : 0;
   Bool verbose_p = True;  /* argh. */
   int i;
   int total_ncolors = *ncolorsP;
   int ncolors, wanted;
   Bool verbose_p = True;  /* argh. */
   int i;
   int total_ncolors = *ncolorsP;
   int ncolors, wanted;
-  Bool wanted_writable = (allocate_p && writable_p);
+  Bool wanted_writable = (allocate_p && writable_pP && *writable_pP);
   double dh, ds, dv;           /* deltas */
 
   wanted = total_ncolors;
   if (closed_p)
     wanted = (wanted / 2) + 1;
 
   double dh, ds, dv;           /* deltas */
 
   wanted = total_ncolors;
   if (closed_p)
     wanted = (wanted / 2) + 1;
 
+  /* If this visual doesn't support writable cells, don't bother trying.
+   */
+  if (wanted_writable && !has_writable_cells(screen, visual))
+    *writable_pP = False;
+
  AGAIN:
   ncolors = total_ncolors;
 
  AGAIN:
   ncolors = total_ncolors;
 
@@ -144,7 +152,7 @@ make_color_ramp (Display *dpy, Colormap cmap,
   if (!allocate_p)
     return;
 
   if (!allocate_p)
     return;
 
-  if (writable_p)
+  if (writable_pP && *writable_pP)
     {
       unsigned long *pixels = (unsigned long *)
        malloc(sizeof(*pixels) * ((*ncolorsP) + 1));
     {
       unsigned long *pixels = (unsigned long *)
        malloc(sizeof(*pixels) * ((*ncolorsP) + 1));
@@ -175,7 +183,7 @@ make_color_ramp (Display *dpy, Colormap cmap,
            }
          else
            {
            }
          else
            {
-             free_colors (dpy, cmap, colors, i);
+             free_colors (screen, cmap, colors, i);
              goto FAIL;
            }
        }
              goto FAIL;
            }
        }
@@ -204,7 +212,8 @@ make_color_ramp (Display *dpy, Colormap cmap,
   if (verbose_p &&
       /* don't warn if we got 0 writable colors -- probably TrueColor. */
       (ncolors != 0 || !wanted_writable))
   if (verbose_p &&
       /* don't warn if we got 0 writable colors -- probably TrueColor. */
       (ncolors != 0 || !wanted_writable))
-    complain (wanted, ncolors, wanted_writable, wanted_writable && writable_p);
+    complain (wanted, ncolors, wanted_writable, 
+              (wanted_writable && writable_pP && *writable_pP));
 }
 
 
 }
 
 
@@ -212,12 +221,13 @@ make_color_ramp (Display *dpy, Colormap cmap,
 
 
 static void
 
 
 static void
-make_color_path (Display *dpy, Colormap cmap,
+make_color_path (Screen *screen, Visual *visual, Colormap cmap,
                 int npoints, int *h, double *s, double *v,
                 XColor *colors, int *ncolorsP,
                 Bool allocate_p,
                 int npoints, int *h, double *s, double *v,
                 XColor *colors, int *ncolorsP,
                 Bool allocate_p,
-                Bool writable_p)
+                Bool *writable_pP)
 {
 {
+  Display *dpy = screen ? DisplayOfScreen (screen) : 0;
   int i, j, k;
   int total_ncolors = *ncolorsP;
 
   int i, j, k;
   int total_ncolors = *ncolorsP;
 
@@ -233,11 +243,11 @@ make_color_path (Display *dpy, Colormap cmap,
     }
   else if (npoints == 2)       /* using make_color_ramp() will be faster */
     {
     }
   else if (npoints == 2)       /* using make_color_ramp() will be faster */
     {
-      make_color_ramp (dpy, cmap,
+      make_color_ramp (screen, visual, cmap,
                       h[0], s[0], v[0], h[1], s[1], v[1],
                       colors, ncolorsP,
                       True,  /* closed_p */
                       h[0], s[0], v[0], h[1], s[1], v[1],
                       colors, ncolorsP,
                       True,  /* closed_p */
-                      allocate_p, writable_p);
+                      allocate_p, writable_pP);
       return;
     }
   else if (npoints >= MAXPOINTS)
       return;
     }
   else if (npoints >= MAXPOINTS)
@@ -381,7 +391,7 @@ make_color_path (Display *dpy, Colormap cmap,
   if (!allocate_p)
     return;
 
   if (!allocate_p)
     return;
 
-  if (writable_p)
+  if (writable_pP && *writable_pP)
     {
       unsigned long *pixels = (unsigned long *)
        malloc(sizeof(*pixels) * ((*ncolorsP) + 1));
     {
       unsigned long *pixels = (unsigned long *)
        malloc(sizeof(*pixels) * ((*ncolorsP) + 1));
@@ -412,7 +422,7 @@ make_color_path (Display *dpy, Colormap cmap,
            }
          else
            {
            }
          else
            {
-             free_colors (dpy, cmap, colors, i);
+             free_colors (screen, cmap, colors, i);
              goto FAIL;
            }
        }
              goto FAIL;
            }
        }
@@ -438,28 +448,36 @@ make_color_path (Display *dpy, Colormap cmap,
 
 
 void
 
 
 void
-make_color_loop (Display *dpy, Colormap cmap,
+make_color_loop (Screen *screen, Visual *visual, Colormap cmap,
                 int h0, double s0, double v0,   /* 0-360, 0-1.0, 0-1.0 */
                 int h1, double s1, double v1,   /* 0-360, 0-1.0, 0-1.0 */
                 int h2, double s2, double v2,   /* 0-360, 0-1.0, 0-1.0 */
                 XColor *colors, int *ncolorsP,
                 Bool allocate_p,
                 int h0, double s0, double v0,   /* 0-360, 0-1.0, 0-1.0 */
                 int h1, double s1, double v1,   /* 0-360, 0-1.0, 0-1.0 */
                 int h2, double s2, double v2,   /* 0-360, 0-1.0, 0-1.0 */
                 XColor *colors, int *ncolorsP,
                 Bool allocate_p,
-                Bool writable_p)
+                Bool *writable_pP)
 {
 {
+  Bool wanted_writable = (allocate_p && writable_pP && *writable_pP);
+
   int h[3];
   double s[3], v[3];
   h[0] = h0; h[1] = h1; h[2] = h2;
   s[0] = s0; s[1] = s1; s[2] = s2;
   v[0] = v0; v[1] = v1; v[2] = v2;
   int h[3];
   double s[3], v[3];
   h[0] = h0; h[1] = h1; h[2] = h2;
   s[0] = s0; s[1] = s1; s[2] = s2;
   v[0] = v0; v[1] = v1; v[2] = v2;
-  make_color_path(dpy, cmap,
-                 3, h, s, v,
-                 colors, ncolorsP,
-                 allocate_p, writable_p);
+
+  /* If this visual doesn't support writable cells, don't bother trying.
+   */
+  if (wanted_writable && !has_writable_cells(screen, visual))
+    *writable_pP = False;
+
+  make_color_path (screen, visual, cmap,
+                   3, h, s, v,
+                   colors, ncolorsP,
+                   allocate_p, writable_pP);
 }
 
 
 void
 }
 
 
 void
-make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap,
+make_smooth_colormap (Screen *screen, Visual *visual, Colormap cmap,
                      XColor *colors, int *ncolorsP,
                      Bool allocate_p,
                      Bool *writable_pP,
                      XColor *colors, int *ncolorsP,
                      Bool allocate_p,
                      Bool *writable_pP,
@@ -474,7 +492,6 @@ make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap,
   double v[MAXPOINTS];
   double total_s = 0;
   double total_v = 0;
   double v[MAXPOINTS];
   double total_s = 0;
   double total_v = 0;
-  Screen *screen = (dpy ? DefaultScreenOfDisplay(dpy) : 0); /* #### WRONG! */
   int loop = 0;
 
   if (*ncolorsP <= 0) return;
   int loop = 0;
 
   if (*ncolorsP <= 0) return;
@@ -532,8 +549,8 @@ make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap,
     *writable_pP = False;
 
  RETRY_NON_WRITABLE:
     *writable_pP = False;
 
  RETRY_NON_WRITABLE:
-  make_color_path (dpy, cmap, npoints, h, s, v, colors, &ncolors,
-                  allocate_p, (writable_pP && *writable_pP));
+  make_color_path (screen, visual, cmap, npoints, h, s, v, colors, &ncolors,
+                  allocate_p, writable_pP);
 
   /* If we tried for writable cells and got none, try for non-writable. */
   if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP)
 
   /* If we tried for writable cells and got none, try for non-writable. */
   if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP)
@@ -551,7 +568,7 @@ make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap,
 
 
 void
 
 
 void
-make_uniform_colormap (Display *dpy, Visual *visual, Colormap cmap,
+make_uniform_colormap (Screen *screen, Visual *visual, Colormap cmap,
                       XColor *colors, int *ncolorsP,
                       Bool allocate_p,
                       Bool *writable_pP,
                       XColor *colors, int *ncolorsP,
                       Bool allocate_p,
                       Bool *writable_pP,
@@ -559,7 +576,6 @@ make_uniform_colormap (Display *dpy, Visual *visual, Colormap cmap,
 {
   int ncolors = *ncolorsP;
   Bool wanted_writable = (allocate_p && writable_pP && *writable_pP);
 {
   int ncolors = *ncolorsP;
   Bool wanted_writable = (allocate_p && writable_pP && *writable_pP);
-  Screen *screen = (dpy ? DefaultScreenOfDisplay(dpy) : 0); /* #### WRONG! */
 
   double S = ((double) (random() % 34) + 66) / 100.0;  /* range 66%-100% */
   double V = ((double) (random() % 34) + 66) / 100.0;  /* range 66%-100% */
 
   double S = ((double) (random() % 34) + 66) / 100.0;  /* range 66%-100% */
   double V = ((double) (random() % 34) + 66) / 100.0;  /* range 66%-100% */
@@ -571,12 +587,11 @@ make_uniform_colormap (Display *dpy, Visual *visual, Colormap cmap,
     *writable_pP = False;
 
  RETRY_NON_WRITABLE:
     *writable_pP = False;
 
  RETRY_NON_WRITABLE:
-  make_color_ramp(dpy, cmap,
+  make_color_ramp(screen, visual, cmap,
                  0,   S, V,
                  359, S, V,
                  colors, &ncolors,
                  0,   S, V,
                  359, S, V,
                  colors, &ncolors,
-                 False, allocate_p,
-                  (writable_pP && *writable_pP));
+                 False, allocate_p, writable_pP);
 
   /* If we tried for writable cells and got none, try for non-writable. */
   if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP)
 
   /* If we tried for writable cells and got none, try for non-writable. */
   if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP)
@@ -595,17 +610,17 @@ make_uniform_colormap (Display *dpy, Visual *visual, Colormap cmap,
 
 
 void
 
 
 void
-make_random_colormap (Display *dpy, Visual *visual, Colormap cmap,
+make_random_colormap (Screen *screen, Visual *visual, Colormap cmap,
                      XColor *colors, int *ncolorsP,
                      Bool bright_p,
                      Bool allocate_p,
                      Bool *writable_pP,
                      Bool verbose_p)
 {
                      XColor *colors, int *ncolorsP,
                      Bool bright_p,
                      Bool allocate_p,
                      Bool *writable_pP,
                      Bool verbose_p)
 {
+  Display *dpy = screen ? DisplayOfScreen (screen) : 0;
   Bool wanted_writable = (allocate_p && writable_pP && *writable_pP);
   int ncolors = *ncolorsP;
   int i;
   Bool wanted_writable = (allocate_p && writable_pP && *writable_pP);
   int ncolors = *ncolorsP;
   int i;
-  Screen *screen = (dpy ? DefaultScreenOfDisplay(dpy) : 0); /* #### WRONG! */
 
   if (*ncolorsP <= 0) return;
 
 
   if (*ncolorsP <= 0) return;
 
@@ -613,6 +628,7 @@ make_random_colormap (Display *dpy, Visual *visual, Colormap cmap,
   if (wanted_writable && !has_writable_cells(screen, visual))
     *writable_pP = False;
 
   if (wanted_writable && !has_writable_cells(screen, visual))
     *writable_pP = False;
 
+ RETRY_ALL:
   for (i = 0; i < ncolors; i++)
     {
       colors[i].flags = DoRed|DoGreen|DoBlue;
   for (i = 0; i < ncolors; i++)
     {
       colors[i].flags = DoRed|DoGreen|DoBlue;
@@ -632,6 +648,19 @@ make_random_colormap (Display *dpy, Visual *visual, Colormap cmap,
        }
     }
 
        }
     }
 
+  /* If there are a small number of colors, make sure at least the first
+     two contrast well.
+  */
+  if (!bright_p && ncolors <= 4)
+    {
+      int h0, h1;
+      double s0, s1, v0, v1;
+      rgb_to_hsv (colors[0].red, colors[0].green, colors[0].blue, &h0,&s0,&v0);
+      rgb_to_hsv (colors[1].red, colors[1].green, colors[1].blue, &h1,&s1,&v1);
+      if (fabs (v1-v0) < 0.5)
+        goto RETRY_ALL;
+    }
+
   if (!allocate_p)
     return;
 
   if (!allocate_p)
     return;
 
@@ -641,7 +670,7 @@ make_random_colormap (Display *dpy, Visual *visual, Colormap cmap,
       unsigned long *pixels = (unsigned long *)
        malloc(sizeof(*pixels) * (ncolors + 1));
 
       unsigned long *pixels = (unsigned long *)
        malloc(sizeof(*pixels) * (ncolors + 1));
 
-      allocate_writable_colors (dpy, cmap, pixels, &ncolors);
+      allocate_writable_colors (screen, cmap, pixels, &ncolors);
       if (ncolors > 0)
        for (i = 0; i < ncolors; i++)
          colors[i].pixel = pixels[i];
       if (ncolors > 0)
        for (i = 0; i < ncolors; i++)
          colors[i].pixel = pixels[i];
@@ -679,12 +708,14 @@ make_random_colormap (Display *dpy, Visual *visual, Colormap cmap,
 
 
 void
 
 
 void
-rotate_colors (Display *dpy, Colormap cmap,
+rotate_colors (Screen *screen, Colormap cmap,
               XColor *colors, int ncolors, int distance)
 {
               XColor *colors, int ncolors, int distance)
 {
+  Display *dpy = screen ? DisplayOfScreen (screen) : 0;
   int i;
   int i;
-  XColor *colors2 = (XColor *) malloc(sizeof(*colors2) * ncolors);
+  XColor *colors2;
   if (ncolors < 2) return;
   if (ncolors < 2) return;
+  colors2 = (XColor *) malloc(sizeof(*colors2) * ncolors);
   distance = distance % ncolors;
   for (i = 0; i < ncolors; i++)
     {
   distance = distance % ncolors;
   for (i = 0; i < ncolors; i++)
     {
index 61421cf5c37f26b60071a423470e9aa5eb5ee47c..526a38a09b16061de07c19ea80a00997279f163e 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992, 1997 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -14,7 +14,7 @@
 
 /* Like XFreeColors, but works on `XColor *' instead of `unsigned long *'
  */
 
 /* Like XFreeColors, but works on `XColor *' instead of `unsigned long *'
  */
-extern void free_colors (Display *, Colormap, XColor *, int ncolors);
+extern void free_colors (Screen *, Colormap, XColor *, int ncolors);
 
 
 /* Allocates writable, non-contiguous color cells.  The number requested is
 
 
 /* Allocates writable, non-contiguous color cells.  The number requested is
@@ -22,7 +22,7 @@ extern void free_colors (Display *, Colormap, XColor *, int ncolors);
    (Unlike XAllocColorCells(), this will allocate as many as it can, instead
    of failing if they can't all be allocated.)
  */
    (Unlike XAllocColorCells(), this will allocate as many as it can, instead
    of failing if they can't all be allocated.)
  */
-extern void allocate_writable_colors (Display *dpy, Colormap cmap,
+extern void allocate_writable_colors (Screen *, Colormap,
                                      unsigned long *pixels, int *ncolorsP);
 
 
                                      unsigned long *pixels, int *ncolorsP);
 
 
@@ -38,14 +38,16 @@ extern void allocate_writable_colors (Display *dpy, Colormap cmap,
 
    If writable_p is true, writable color cells will be allocated;
    otherwise, read-only cells will be allocated.
 
    If writable_p is true, writable color cells will be allocated;
    otherwise, read-only cells will be allocated.
+
+   If allocate_p is false, screen and cmap are unused (OpenGL usage).
  */
  */
-extern void make_color_ramp (Display *dpy, Colormap cmap,
+extern void make_color_ramp (Screen *, Visual *, Colormap,
                             int h1, double s1, double v1,
                             int h2, double s2, double v2,
                             XColor *colors, int *ncolorsP,
                             Bool closed_p,
                             Bool allocate_p,
                             int h1, double s1, double v1,
                             int h2, double s2, double v2,
                             XColor *colors, int *ncolorsP,
                             Bool closed_p,
                             Bool allocate_p,
-                            Bool writable_p);
+                            Bool *writable_pP);
 
 /* Generates a sequence of colors evenly spaced around the triangle
    indicated by the thee HSV coordinates.
 
 /* Generates a sequence of colors evenly spaced around the triangle
    indicated by the thee HSV coordinates.
@@ -56,14 +58,16 @@ extern void make_color_ramp (Display *dpy, Colormap cmap,
 
    If writable_p is true, writable color cells will be allocated;
    otherwise, read-only cells will be allocated.
 
    If writable_p is true, writable color cells will be allocated;
    otherwise, read-only cells will be allocated.
+
+   If allocate_p is false, screen, visual and cmap are unused (OpenGL usage).
  */
  */
-extern void make_color_loop (Display *, Colormap,
+extern void make_color_loop (Screen *, Visual *, Colormap,
                             int h1, double s1, double v1,
                             int h2, double s2, double v2,
                             int h3, double s3, double v3,
                             XColor *colors, int *ncolorsP,
                             Bool allocate_p,
                             int h1, double s1, double v1,
                             int h2, double s2, double v2,
                             int h3, double s3, double v3,
                             XColor *colors, int *ncolorsP,
                             Bool allocate_p,
-                            Bool writable_p);
+                            Bool *writable_pP);
 
 
 /* Allocates a hopefully-interesting colormap, which will be a closed loop
 
 
 /* Allocates a hopefully-interesting colormap, which will be a closed loop
@@ -78,9 +82,10 @@ extern void make_color_loop (Display *, Colormap,
    otherwise, read-only cells will be allocated.  If no writable cells
    cannot be allocated, we will try to allocate unwritable cells
    instead, and print a message on stderr to that effect (if verbose_p).
    otherwise, read-only cells will be allocated.  If no writable cells
    cannot be allocated, we will try to allocate unwritable cells
    instead, and print a message on stderr to that effect (if verbose_p).
+
+   If allocate_p is false, screen, visual and cmap are unused (OpenGL usage).
  */
  */
-extern void make_smooth_colormap (Display *dpy, Visual *visual,
-                                 Colormap cmap,
+extern void make_smooth_colormap (Screen *, Visual *, Colormap,
                                  XColor *colors, int *ncolorsP,
                                  Bool allocate_p,
                                  Bool *writable_pP,
                                  XColor *colors, int *ncolorsP,
                                  Bool allocate_p,
                                  Bool *writable_pP,
@@ -99,9 +104,10 @@ extern void make_smooth_colormap (Display *dpy, Visual *visual,
    otherwise, read-only cells will be allocated.  If no writable cells
    cannot be allocated, we will try to allocate unwritable cells
    instead, and print a message on stderr to that effect (if verbose_p).
    otherwise, read-only cells will be allocated.  If no writable cells
    cannot be allocated, we will try to allocate unwritable cells
    instead, and print a message on stderr to that effect (if verbose_p).
+
+   If allocate_p is false, screen, visual and cmap are unused (OpenGL usage).
  */
  */
-extern void make_uniform_colormap (Display *dpy, Visual *visual,
-                                  Colormap cmap,
+extern void make_uniform_colormap (Screen *, Visual *, Colormap,
                                   XColor *colors, int *ncolorsP,
                                   Bool allocate_p,
                                   Bool *writable_pP,
                                   XColor *colors, int *ncolorsP,
                                   Bool allocate_p,
                                   Bool *writable_pP,
@@ -120,9 +126,10 @@ extern void make_uniform_colormap (Display *dpy, Visual *visual,
    otherwise, read-only cells will be allocated.  If no writable cells
    cannot be allocated, we will try to allocate unwritable cells
    instead, and print a message on stderr to that effect (if verbose_p).
    otherwise, read-only cells will be allocated.  If no writable cells
    cannot be allocated, we will try to allocate unwritable cells
    instead, and print a message on stderr to that effect (if verbose_p).
+
+   If allocate_p is false, screen, visual and cmap are unused (OpenGL usage).
  */
  */
-extern void make_random_colormap (Display *dpy, Visual *visual,
-                                 Colormap cmap,
+extern void make_random_colormap (Screen *, Visual *, Colormap,
                                  XColor *colors, int *ncolorsP,
                                  Bool bright_p,
                                  Bool allocate_p,
                                  XColor *colors, int *ncolorsP,
                                  Bool bright_p,
                                  Bool allocate_p,
@@ -134,7 +141,7 @@ extern void make_random_colormap (Display *dpy, Visual *visual,
    of writable color cells, this rotates the contents of the array by
    `distance' steps, moving the colors of cell N to cell (N - distance).
  */
    of writable color cells, this rotates the contents of the array by
    `distance' steps, moving the colors of cell N to cell (N - distance).
  */
-extern void rotate_colors (Display *, Colormap,
+extern void rotate_colors (Screen *, Colormap,
                           XColor *, int ncolors, int distance);
 
 #endif /* __COLORS_H__ */
                           XColor *, int ncolors, int distance);
 
 #endif /* __COLORS_H__ */
index 58d506efd888ac9a3b7c7a06fdbd91aacad72ab5..082f1f167a7e5a62dafda935e156b4a9da99e510 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2012 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -619,6 +619,19 @@ pipe_cb (XtPointer closure, int *source, XtInputId *id)
     geom.height = h;
   }
 
     geom.height = h;
   }
 
+  /* Take the extension off of the file name. */
+  /* Duplicated in driver/xscreensaver-getimage.c. */
+  if (buf && *buf)
+    {
+      char *slash = strrchr (buf, '/');
+      char *dot = strrchr ((slash ? slash : buf), '.');
+      if (dot) *dot = 0;
+      /* Replace slashes with newlines */
+      /* while (dot = strchr(buf, '/')) *dot = '\n'; */
+      /* Replace slashes with spaces */
+      while ((dot = strchr(buf, '/'))) *dot = ' ';
+    }
+
   if (absfile) free (absfile);
   clo2->callback (clo2->screen, clo2->xwindow, clo2->drawable, buf, &geom,
                   clo2->closure);
   if (absfile) free (absfile);
   clo2->callback (clo2->screen, clo2->xwindow, clo2->drawable, buf, &geom,
                   clo2->closure);
@@ -810,6 +823,7 @@ load_random_image_1 (Screen *screen, Window window, Drawable drawable,
     /* If we got here, we loaded synchronously even though they wanted async.
      */
     callback (screen, window, drawable, name_ret_2, &geom_ret_2, closure);
     /* If we got here, we loaded synchronously even though they wanted async.
      */
     callback (screen, window, drawable, name_ret_2, &geom_ret_2, closure);
+    if (name_ret_2) free (name_ret_2);
   }
 }
 
   }
 }
 
index 00a96de4c91ef70a45be0ff207ec2194412db8fc..23f40aad9b98122db39454075c5eafffd79c4106 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1992-2006 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -477,7 +477,7 @@ copy_default_colormap_contents (Screen *screen,
   XQueryColors (dpy, from_cmap, old_colors, max_cells);
 
   got_cells = max_cells;
   XQueryColors (dpy, from_cmap, old_colors, max_cells);
 
   got_cells = max_cells;
-  allocate_writable_colors (dpy, to_cmap, pixels, &got_cells);
+  allocate_writable_colors (screen, to_cmap, pixels, &got_cells);
 
   if (grab_verbose_p && got_cells != max_cells)
     fprintf(stderr, "%s: got only %d of %d cells\n", progname,
 
   if (grab_verbose_p && got_cells != max_cells)
     fprintf(stderr, "%s: got only %d of %d cells\n", progname,
index 247eca89efc723ac05c7455e855ffaab1a91c317..8fe3eac64a28a8c1efbe89e7bb23f2e3384f2eb9 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2001-2006 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2001-2013 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -190,17 +190,23 @@ minixpm_to_ximage (Display *dpy, Visual *visual, Colormap colormap, int depth,
   ximage = XCreateImage (dpy, visual, depth,
                          (depth == 1 ? XYBitmap : ZPixmap),
                          0, 0, w, h, 8, 0);
   ximage = XCreateImage (dpy, visual, depth,
                          (depth == 1 ? XYBitmap : ZPixmap),
                          0, 0, w, h, 8, 0);
-  if (! ximage) return 0;
+  if (! ximage)
+    {
+      if (pixels) free (pixels);
+      return 0;
+    }
 
   ximage->bitmap_bit_order =
     ximage->byte_order =
     (bigendian() ? MSBFirst : LSBFirst);
 
   ximage->data = (char *) calloc (ximage->height, ximage->bytes_per_line);
 
   ximage->bitmap_bit_order =
     ximage->byte_order =
     (bigendian() ? MSBFirst : LSBFirst);
 
   ximage->data = (char *) calloc (ximage->height, ximage->bytes_per_line);
-  if (!ximage->data) {
-    XDestroyImage (ximage);
-    return 0;
-  }
+  if (!ximage->data)
+    {
+      XDestroyImage (ximage);
+      if (pixels) free (pixels);
+      return 0;
+    }
 
   w8 = (w + 7) / 8;
   if (mask_ret)
 
   w8 = (w + 7) / 8;
   if (mask_ret)
index d2d447771ae6a98469b18b6a3af6161f83a4ec81..1a73ea61b3edb0df1b526758a9e22123d9b1dc7f 100644 (file)
@@ -66,7 +66,7 @@ make_spline (unsigned int size)
 static void
 grow_spline_points (spline *s)
 {
 static void
 grow_spline_points (spline *s)
 {
-  s->allocated_points *= 2;
+  s->allocated_points = 10 + (s->allocated_points * 1.3);
   s->points =
     (XPoint*)realloc (s->points, s->allocated_points * sizeof (XPoint));
   if (!s->points) abort();
   s->points =
     (XPoint*)realloc (s->points, s->allocated_points * sizeof (XPoint));
   if (!s->points) abort();
index d902a784a3b4c4bce5696a9c9d866363d4bea766..e1c7e1cd1eec8369238af60d1493bf6553efc647 100644 (file)
@@ -1,2 +1,2 @@
 static const char screensaver_id[] =
 static const char screensaver_id[] =
-       "@(#)xscreensaver 5.21 (04-Feb-2013), by Jamie Zawinski (jwz@jwz.org)";
+       "@(#)xscreensaver 5.22 (16-Jul-2013), by Jamie Zawinski (jwz@jwz.org)";
index aa9fefc387be1809a2e106c4aec7e1f1c240f5ee..5145ce1af1dbefd7696a3fba0e78ed3a6b78a46e 100644 (file)
@@ -1,5 +1,5 @@
 %define        name xscreensaver
 %define        name xscreensaver
-%define        version 5.21
+%define        version 5.22
 
 Summary:       X screen saver and locker
 Name:          %{name}
 
 Summary:       X screen saver and locker
 Name:          %{name}
index 89eeb852e7fb16883a6231740a3f334f046c491c..0d64f2395494d380f3d54f1779b85a14deed4cba 100644 (file)
@@ -48,7 +48,7 @@
                                AF77798F09B6604C00EA3033 /* PBXTargetDependency */,
                                AF77798D09B6604C00EA3033 /* PBXTargetDependency */,
                                AF77798B09B6604C00EA3033 /* PBXTargetDependency */,
                                AF77798F09B6604C00EA3033 /* PBXTargetDependency */,
                                AF77798D09B6604C00EA3033 /* PBXTargetDependency */,
                                AF77798B09B6604C00EA3033 /* PBXTargetDependency */,
-                               AF2D4F8B13E91108002AA818 /* PBXTargetDependency */,
+                               AFBFE785178648E600432B21 /* PBXTargetDependency */,
                                AF77798909B6604C00EA3033 /* PBXTargetDependency */,
                                AF77798709B6604B00EA3033 /* PBXTargetDependency */,
                                AF77798509B6604B00EA3033 /* PBXTargetDependency */,
                                AF77798909B6604C00EA3033 /* PBXTargetDependency */,
                                AF77798709B6604B00EA3033 /* PBXTargetDependency */,
                                AF77798509B6604B00EA3033 /* PBXTargetDependency */,
@@ -79,6 +79,7 @@
                                AF77795109B6604900EA3033 /* PBXTargetDependency */,
                                AF77794F09B6604900EA3033 /* PBXTargetDependency */,
                                AF77794D09B6604900EA3033 /* PBXTargetDependency */,
                                AF77795109B6604900EA3033 /* PBXTargetDependency */,
                                AF77794F09B6604900EA3033 /* PBXTargetDependency */,
                                AF77794D09B6604900EA3033 /* PBXTargetDependency */,
+                               AFB591C3178B821E00EA4005 /* PBXTargetDependency */,
                                AF77794709B6604900EA3033 /* PBXTargetDependency */,
                                AF77794509B6604900EA3033 /* PBXTargetDependency */,
                                AF77794309B6604900EA3033 /* PBXTargetDependency */,
                                AF77794709B6604900EA3033 /* PBXTargetDependency */,
                                AF77794509B6604900EA3033 /* PBXTargetDependency */,
                                AF77794309B6604900EA3033 /* PBXTargetDependency */,
                                AF77792109B6604800EA3033 /* PBXTargetDependency */,
                                AF77791F09B6604800EA3033 /* PBXTargetDependency */,
                                AF77791D09B6604800EA3033 /* PBXTargetDependency */,
                                AF77792109B6604800EA3033 /* PBXTargetDependency */,
                                AF77791F09B6604800EA3033 /* PBXTargetDependency */,
                                AF77791D09B6604800EA3033 /* PBXTargetDependency */,
-                               AF2D4F8D13E9111D002AA818 /* PBXTargetDependency */,
+                               AFBFE787178648F500432B21 /* PBXTargetDependency */,
                                AF77791B09B6604700EA3033 /* PBXTargetDependency */,
                                AF77791909B6604700EA3033 /* PBXTargetDependency */,
                                AF77791709B6604700EA3033 /* PBXTargetDependency */,
                                AF77791B09B6604700EA3033 /* PBXTargetDependency */,
                                AF77791909B6604700EA3033 /* PBXTargetDependency */,
                                AF77791709B6604700EA3033 /* PBXTargetDependency */,
                                AF777A1509B660B300EA3033 /* PBXTargetDependency */,
                                AF35E8A30E63825600691F2F /* PBXTargetDependency */,
                                AF777A1309B660B300EA3033 /* PBXTargetDependency */,
                                AF777A1509B660B300EA3033 /* PBXTargetDependency */,
                                AF35E8A30E63825600691F2F /* PBXTargetDependency */,
                                AF777A1309B660B300EA3033 /* PBXTargetDependency */,
+                               AFBFE7421786407000432B21 /* PBXTargetDependency */,
                                AF777A1109B660B300EA3033 /* PBXTargetDependency */,
                                AF777A0F09B660B200EA3033 /* PBXTargetDependency */,
                                AF777A0D09B660B200EA3033 /* PBXTargetDependency */,
                                AF777A1109B660B300EA3033 /* PBXTargetDependency */,
                                AF777A0F09B660B200EA3033 /* PBXTargetDependency */,
                                AF777A0D09B660B200EA3033 /* PBXTargetDependency */,
                                AF7779F909B660B100EA3033 /* PBXTargetDependency */,
                                AF7779F709B660B100EA3033 /* PBXTargetDependency */,
                                AF7779F509B660B100EA3033 /* PBXTargetDependency */,
                                AF7779F909B660B100EA3033 /* PBXTargetDependency */,
                                AF7779F709B660B100EA3033 /* PBXTargetDependency */,
                                AF7779F509B660B100EA3033 /* PBXTargetDependency */,
+                               AFBFE7401786405E00432B21 /* PBXTargetDependency */,
                                AF7779F309B660B000EA3033 /* PBXTargetDependency */,
                                AF7779F109B660B000EA3033 /* PBXTargetDependency */,
                                AF32D9F90F3AD0D90080F535 /* PBXTargetDependency */,
                                AF7779F309B660B000EA3033 /* PBXTargetDependency */,
                                AF7779F109B660B000EA3033 /* PBXTargetDependency */,
                                AF32D9F90F3AD0D90080F535 /* PBXTargetDependency */,
                                AF7779DD09B660AF00EA3033 /* PBXTargetDependency */,
                                AF998EF70A083E1D0051049D /* PBXTargetDependency */,
                                AF4F10F2143450C300E34F3F /* PBXTargetDependency */,
                                AF7779DD09B660AF00EA3033 /* PBXTargetDependency */,
                                AF998EF70A083E1D0051049D /* PBXTargetDependency */,
                                AF4F10F2143450C300E34F3F /* PBXTargetDependency */,
+                               AFDA65AA178A54690070D24B /* PBXTargetDependency */,
                                AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */,
                        );
                        name = "All Savers (OpenGL)";
                                AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */,
                        );
                        name = "All Savers (OpenGL)";
                AF1FD721158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF1FD722158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
                AF1FD723158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF1FD721158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF1FD722158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
                AF1FD723158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
-               AF1FD724158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
-               AF1FD725158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
-               AF1FD726158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
                AF1FD727158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF1FD728158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AF1FD729158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF1FD727158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF1FD728158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AF1FD729158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF1FD7F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF1FD7F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
                AF1FD7F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF1FD7F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF1FD7F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
                AF1FD7F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
-               AF1FD7F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
-               AF1FD7F5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
-               AF1FD7F6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
                AF1FD7F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF1FD7F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AF1FD7F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF1FD7F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
                AF1FD7F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
                AF1FD7F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
                AF2C31EB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31EC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31ED15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31EB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31EC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31ED15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
-               AF2C31EE15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31EF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31F015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31F115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31EF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31F015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C31F115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C321F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C321F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
-               AF2C322215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C322515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
                AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
-               AF2D4D8413E902F5002AA818 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; };
                AF2D4D8613E902F5002AA818 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; };
                AF2D4D8713E902F5002AA818 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
                AF2D4D8613E902F5002AA818 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; };
                AF2D4D8713E902F5002AA818 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
-               AF2D4DBD13E90372002AA818 /* Phosphor.saver in Copy Plugins */ = {isa = PBXBuildFile; fileRef = AF7776F609B63ABF00EA3033 /* Phosphor.saver */; };
-               AF2D4F7113E91093002AA818 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; };
                AF2D4F7513E91093002AA818 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; };
                AF2D4F7613E91093002AA818 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
                AF2D4F7513E91093002AA818 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; };
                AF2D4F7613E91093002AA818 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
-               AF2D4FA913E9115E002AA818 /* Apple2.saver in Copy Plugins */ = {isa = PBXBuildFile; fileRef = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; };
-               AF2D522613E954A0002AA818 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; };
                AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; };
                AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; };
                AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; };
                AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; };
                AF3581C61431D47B00E09C51 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF3581C71431D47B00E09C51 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; };
                AF3581C81431D47B00E09C51 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; };
                AF3581C61431D47B00E09C51 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF3581C71431D47B00E09C51 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; };
                AF3581C81431D47B00E09C51 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; };
-               AF3581DA1431D5FC00E09C51 /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; };
-               AF3581DB1431D5FC00E09C51 /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; };
                AF3581DC1431D5FC00E09C51 /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; };
                AF3581DC1431D5FC00E09C51 /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; };
-               AF3581DD1431D5FC00E09C51 /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; };
-               AF3581DE1431D5FC00E09C51 /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; };
                AF3581DF1431D5FC00E09C51 /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; };
                AF3581DF1431D5FC00E09C51 /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; };
-               AF3581E01431D5FC00E09C51 /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; };
-               AF3581E11431D5FC00E09C51 /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; };
                AF3581E21431D5FC00E09C51 /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; };
                AF3581E21431D5FC00E09C51 /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; };
-               AF3581E31431D5FC00E09C51 /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; };
-               AF3581E41431D5FC00E09C51 /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; };
                AF3581E51431D5FC00E09C51 /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; };
                AF3581E81431D61D00E09C51 /* companioncube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3581E61431D61D00E09C51 /* companioncube.xml */; };
                AF3581FF143330F900E09C51 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; };
                AF3581E51431D5FC00E09C51 /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; };
                AF3581E81431D61D00E09C51 /* companioncube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3581E61431D61D00E09C51 /* companioncube.xml */; };
                AF3581FF143330F900E09C51 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; };
                AF4FF4C10D52CBDE00666F98 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; };
                AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; };
                AF4FF4C10D52CBDE00666F98 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; };
                AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; };
-               AF51FD3315845CC900E5741F /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; };
                AF51FD3415845CD500E5741F /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; };
                AF51FD3515845D1400E5741F /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; };
                AF51FD3615845F9900E5741F /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; };
                AF51FD3715845F9F00E5741F /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; };
                AF51FD3415845CD500E5741F /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; };
                AF51FD3515845D1400E5741F /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; };
                AF51FD3615845F9900E5741F /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; };
                AF51FD3715845F9F00E5741F /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; };
-               AF51FD3815845FC300E5741F /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; };
                AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; };
                AF51FD3A15845FD300E5741F /* iSaverRunner29.png in Resources */ = {isa = PBXBuildFile; fileRef = AF01295A157D5C2C00C396E1 /* iSaverRunner29.png */; };
                AF51FD3B15845FD800E5741F /* iSaverRunner29.png in Resources */ = {isa = PBXBuildFile; fileRef = AF01295A157D5C2C00C396E1 /* iSaverRunner29.png */; };
                AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; };
                AF51FD3A15845FD300E5741F /* iSaverRunner29.png in Resources */ = {isa = PBXBuildFile; fileRef = AF01295A157D5C2C00C396E1 /* iSaverRunner29.png */; };
                AF51FD3B15845FD800E5741F /* iSaverRunner29.png in Resources */ = {isa = PBXBuildFile; fileRef = AF01295A157D5C2C00C396E1 /* iSaverRunner29.png */; };
                AF6427BE09A2DF47000F4CD4 /* bubbles-default.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */; };
                AF6427BF09A2DF47000F4CD4 /* bubbles.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BC09A2DF47000F4CD4 /* bubbles.c */; };
                AF69640B0E4FE3470085DBCE /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; };
                AF6427BE09A2DF47000F4CD4 /* bubbles-default.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */; };
                AF6427BF09A2DF47000F4CD4 /* bubbles.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BC09A2DF47000F4CD4 /* bubbles.c */; };
                AF69640B0E4FE3470085DBCE /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; };
-               AF6D7ED4158567240080DDC4 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; };
-               AF6D7ED7158567420080DDC4 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; };
-               AF6D7ED81585674C0080DDC4 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; };
+               AF7511051782B5B900380EA1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
+               AF7511081782B5B900380EA1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
+               AF7511091782B5B900380EA1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AF75110A1782B5B900380EA1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
+               AF75110B1782B5B900380EA1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AF75110C1782B5B900380EA1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AF7511151782B64300380EA1 /* kaleidocycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7511141782B64300380EA1 /* kaleidocycle.c */; };
                AF7776EA09B63ABF00EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF77770209B63B3900EA3033 /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; };
                AF77770409B63B5F00EA3033 /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; };
                AF7776EA09B63ABF00EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF77770209B63B3900EA3033 /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; };
                AF77770409B63B5F00EA3033 /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; };
                AF78D179142DD8F3002AAF77 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; };
                AF78D17B142DD8F3002AAF77 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF78D17C142DD8F3002AAF77 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; };
                AF78D179142DD8F3002AAF77 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; };
                AF78D17B142DD8F3002AAF77 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF78D17C142DD8F3002AAF77 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; };
-               AF78D18B142DD96E002AAF77 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; };
-               AF78D18C142DD96E002AAF77 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; };
                AF78D18D142DD96E002AAF77 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; };
                AF78D191142DD99B002AAF77 /* hilbert.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF78D18E142DD99A002AAF77 /* hilbert.xml */; };
                AF794F6A099748450059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AF78D18D142DD96E002AAF77 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; };
                AF78D191142DD99B002AAF77 /* hilbert.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF78D18E142DD99A002AAF77 /* hilbert.xml */; };
                AF794F6A099748450059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFA5638F0993980D00F3E977 /* timetunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5638E0993980D00F3E977 /* timetunnel.c */; };
                AFA563B8099398F700F3E977 /* juggler3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D10988A468000655EE /* juggler3d.xml */; };
                AFA563BA0993991300F3E977 /* juggler3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563B90993991300F3E977 /* juggler3d.c */; };
                AFA5638F0993980D00F3E977 /* timetunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5638E0993980D00F3E977 /* timetunnel.c */; };
                AFA563B8099398F700F3E977 /* juggler3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D10988A468000655EE /* juggler3d.xml */; };
                AFA563BA0993991300F3E977 /* juggler3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563B90993991300F3E977 /* juggler3d.c */; };
+               AFAA6B2B1773863000DE720C /* iSaverRunner29t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF7E080315932A1600D81407 /* iSaverRunner29t.png */; };
+               AFAA6B2C1773866200DE720C /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AFC6BBC1161CE07E0084EDB1 /* Default-568h@2x.png */; };
+               AFAA6B2D1773870700DE720C /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; };
+               AFAA6B2E1773870700DE720C /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; };
+               AFAA6B2F1773871900DE720C /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; };
+               AFAA6B301773876900DE720C /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; };
+               AFAA6B311773876E00DE720C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; };
+               AFAA6B321773877300DE720C /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; };
+               AFAA6B331773877800DE720C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; };
+               AFAA6B341773877C00DE720C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; };
+               AFAA6B351773878000DE720C /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; };
+               AFAA6B361773878400DE720C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; };
+               AFAA6B391773923900DE720C /* iSaverRunner29t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF7E080315932A1600D81407 /* iSaverRunner29t.png */; };
+               AFAA6B3A1773923D00DE720C /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AFC6BBC1161CE07E0084EDB1 /* Default-568h@2x.png */; };
+               AFAA6B3B1773926C00DE720C /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; };
+               AFAA6B3D177392DD00DE720C /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; };
+               AFAA6B3E177392E000DE720C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; };
+               AFAA6B3F177392E400DE720C /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; };
+               AFAA6B40177392E800DE720C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; };
+               AFAA6B41177392EC00DE720C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; };
+               AFAA6B42177392F000DE720C /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; };
+               AFAA6B43177392F600DE720C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; };
+               AFAA6B451773F07800DE720C /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; };
+               AFAA6B461773F30500DE720C /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; };
+               AFAA6B471773F35600DE720C /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; };
                AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAD462209D5F4DA00AB5F95 /* grabclient.c */; };
                AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAD462209D5F4DA00AB5F95 /* grabclient.c */; };
+               AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
+               AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
+               AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AFB591B2178B812C00EA4005 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
+               AFB591B3178B812C00EA4005 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AFB591B4178B812C00EA4005 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AFB591BE178B81E600EA4005 /* hexadrop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB591BC178B81E600EA4005 /* hexadrop.xml */; };
+               AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB591BC178B81E600EA4005 /* hexadrop.xml */; };
+               AFB591C0178B81E600EA4005 /* hexadrop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB591BD178B81E600EA4005 /* hexadrop.c */; };
+               AFB591C1178B81E600EA4005 /* hexadrop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB591BD178B81E600EA4005 /* hexadrop.c */; };
+               AFB8A69B1782BA34004EDB85 /* kaleidocycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */; };
+               AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */; };
+               AFB8A69D1782BFA6004EDB85 /* kaleidocycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7511141782B64300380EA1 /* kaleidocycle.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; };
                AFBF893E0E41D930006A2D66 /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF893C0E41D930006A2D66 /* fps.c */; };
                AFBF893F0E41D930006A2D66 /* fps.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF893D0E41D930006A2D66 /* fps.h */; };
                AFBF89AF0E423FC3006A2D66 /* fps-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF89AE0E423FC3006A2D66 /* fps-gl.c */; };
                AFBF89B20E424036006A2D66 /* fpsI.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF89B10E424036006A2D66 /* fpsI.h */; };
                AFBF893E0E41D930006A2D66 /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF893C0E41D930006A2D66 /* fps.c */; };
                AFBF893F0E41D930006A2D66 /* fps.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF893D0E41D930006A2D66 /* fps.h */; };
                AFBF89AF0E423FC3006A2D66 /* fps-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF89AE0E423FC3006A2D66 /* fps-gl.c */; };
                AFBF89B20E424036006A2D66 /* fpsI.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF89B10E424036006A2D66 /* fpsI.h */; };
+               AFBFE74F178642DC00432B21 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; };
+               AFBFE750178642DC00432B21 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; };
+               AFBFE752178642DC00432B21 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; };
+               AFBFE753178642DC00432B21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
+               AFBFE754178642DC00432B21 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; };
+               AFBFE756178642DC00432B21 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AFBFE757178642DC00432B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
+               AFBFE758178642DC00432B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AFBFE759178642DC00432B21 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AFBFE765178643B200432B21 /* Apple2.saver in Resources */ = {isa = PBXBuildFile; fileRef = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; };
+               AFBFE76F178647FE00432B21 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; };
+               AFBFE770178647FE00432B21 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; };
+               AFBFE772178647FE00432B21 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; };
+               AFBFE773178647FE00432B21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
+               AFBFE774178647FE00432B21 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; };
+               AFBFE776178647FE00432B21 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AFBFE777178647FE00432B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
+               AFBFE778178647FE00432B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AFBFE779178647FE00432B21 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AFBFE7831786483B00432B21 /* Phosphor.saver in Resources */ = {isa = PBXBuildFile; fileRef = AF7776F609B63ABF00EA3033 /* Phosphor.saver */; };
+               AFBFE78B17895CD000432B21 /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; };
                AFC211950E4E30C800D87B6E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; };
                AFC6BBC2161CE07E0084EDB1 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AFC6BBC1161CE07E0084EDB1 /* Default-568h@2x.png */; };
                AFC7592D158D8E8B00C5458E /* textclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592B158D8E8B00C5458E /* textclient.c */; };
                AFC211950E4E30C800D87B6E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; };
                AFC6BBC2161CE07E0084EDB1 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AFC6BBC1161CE07E0084EDB1 /* Default-568h@2x.png */; };
                AFC7592D158D8E8B00C5458E /* textclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592B158D8E8B00C5458E /* textclient.c */; };
                AFD573630997411200BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFD573700997418D00BA26F7 /* strange.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591D0988A469000655EE /* strange.xml */; };
                AFD57372099741A200BA26F7 /* strange.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD57371099741A200BA26F7 /* strange.c */; };
                AFD573630997411200BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFD573700997418D00BA26F7 /* strange.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591D0988A469000655EE /* strange.xml */; };
                AFD57372099741A200BA26F7 /* strange.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD57371099741A200BA26F7 /* strange.c */; };
+               AFDA6595178A52B70070D24B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
+               AFDA6597178A52B70070D24B /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
+               AFDA6598178A52B70070D24B /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AFDA6599178A52B70070D24B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
+               AFDA659A178A52B70070D24B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AFDA659B178A52B70070D24B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AFDA65A5178A541A0070D24B /* unknownpleasures.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFDA65A3178A541A0070D24B /* unknownpleasures.xml */; };
+               AFDA65A6178A541A0070D24B /* unknownpleasures.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFDA65A3178A541A0070D24B /* unknownpleasures.xml */; };
+               AFDA65A7178A541A0070D24B /* unknownpleasures.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA65A4178A541A0070D24B /* unknownpleasures.c */; };
+               AFDA65A8178A541A0070D24B /* unknownpleasures.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA65A4178A541A0070D24B /* unknownpleasures.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; };
                AFE2A45C0E2E904600ADB298 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; };
                AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; };
                AFE2A45C0E2E904600ADB298 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; };
                AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; };
                AFEB9C3D15900558003974F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; };
                AFEB9C401590056A003974F3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; };
                AFEB9C411590056A003974F3 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; };
                AFEB9C3D15900558003974F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; };
                AFEB9C401590056A003974F3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; };
                AFEB9C411590056A003974F3 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; };
+               AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
+               AFF2868817860E830050A578 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; };
+               AFF2868917860E830050A578 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; };
+               AFF2868A17860E830050A578 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; };
+               AFF2868B17860E830050A578 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+               AFF2868C17860E830050A578 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; };
+               AFF28696178611720050A578 /* quasicrystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF28694178611720050A578 /* quasicrystal.xml */; };
+               AFF28697178611720050A578 /* quasicrystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF28694178611720050A578 /* quasicrystal.xml */; };
+               AFF28698178611720050A578 /* quasicrystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF28695178611720050A578 /* quasicrystal.c */; };
+               AFF28699178611720050A578 /* quasicrystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF28695178611720050A578 /* quasicrystal.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; };
                AFF4633C0C4403E400EE6509 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFF4634A0C44044F00EE6509 /* cwaves.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463490C44044E00EE6509 /* cwaves.c */; };
                AFF4634C0C44046500EE6509 /* cwaves.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF4634B0C44046500EE6509 /* cwaves.xml */; };
                AFF4633C0C4403E400EE6509 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; };
                AFF4634A0C44044F00EE6509 /* cwaves.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463490C44044E00EE6509 /* cwaves.c */; };
                AFF4634C0C44046500EE6509 /* cwaves.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF4634B0C44046500EE6509 /* cwaves.xml */; };
                        remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
                        remoteInfo = jwxyz;
                };
                        remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
                        remoteInfo = jwxyz;
                };
-               AF2D4F8A13E91108002AA818 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF2D4F6A13E91093002AA818;
-                       remoteInfo = Apple2App;
-               };
-               AF2D4F8C13E9111D002AA818 /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = AF2D4D7F13E902F5002AA818;
-                       remoteInfo = PhosphorApp;
-               };
                AF2D4F8E13E91127002AA818 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                AF2D4F8E13E91127002AA818 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFD570C90996B9F800BA26F7;
                        remoteInfo = Ant;
                };
                        remoteGlobalIDString = AFD570C90996B9F800BA26F7;
                        remoteInfo = Ant;
                };
+               AF7511011782B5B900380EA1 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
                AF7776E609B63ABF00EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                AF7776E609B63ABF00EA3033 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFD571B50996D9DC00BA26F7;
                        remoteInfo = Juggle;
                };
                        remoteGlobalIDString = AFD571B50996D9DC00BA26F7;
                        remoteInfo = Juggle;
                };
+               AFB591A9178B812C00EA4005 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
+               AFB591C2178B821E00EA4005 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFB591A7178B812C00EA4005;
+                       remoteInfo = Hexadrop;
+               };
+               AFBFE73F1786405E00432B21 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFF2867F17860E830050A578;
+                       remoteInfo = QuasiCrystal;
+               };
+               AFBFE7411786407000432B21 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF7510FF1782B5B900380EA1;
+                       remoteInfo = Kaleidocycle;
+               };
+               AFBFE74D178642DC00432B21 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
+               AFBFE7631786438900432B21 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF9D4DEC09B5BB19006E59CF;
+                       remoteInfo = Apple2;
+               };
+               AFBFE76B178647FE00432B21 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
+               AFBFE7801786482B00432B21 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF7776E409B63ABF00EA3033;
+                       remoteInfo = Phosphor;
+               };
+               AFBFE784178648E600432B21 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFBFE74B178642DC00432B21;
+                       remoteInfo = "Apple2-OSX";
+               };
+               AFBFE786178648F500432B21 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFBFE767178647FE00432B21;
+                       remoteInfo = "Phosphor-OSX";
+               };
                AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
                        remoteInfo = jwxyz;
                };
                        remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
                        remoteInfo = jwxyz;
                };
+               AFDA6590178A52B70070D24B /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
+               AFDA65A9178A54690070D24B /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AFDA658E178A52B70070D24B;
+                       remoteInfo = "Unknown Pleasures";
+               };
                AFE2A4580E2E904600ADB298 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                AFE2A4580E2E904600ADB298 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                        remoteGlobalIDString = AFE6A41B0CDD7FAA002805BF;
                        remoteInfo = Abstractile;
                };
                        remoteGlobalIDString = AFE6A41B0CDD7FAA002805BF;
                        remoteInfo = Abstractile;
                };
+               AFF2868117860E830050A578 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = AF4808C0098C3B6C00FB32B8;
+                       remoteInfo = jwxyz;
+               };
                AFF463380C4403E400EE6509 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                AFF463380C4403E400EE6509 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
                };
 /* End PBXContainerItemProxy section */
 
                };
 /* End PBXContainerItemProxy section */
 
-/* Begin PBXCopyFilesBuildPhase section */
-               AF2D4DDE13E903F2002AA818 /* Copy Plugins */ = {
-                       isa = PBXCopyFilesBuildPhase;
-                       buildActionMask = 2147483647;
-                       dstPath = "";
-                       dstSubfolderSpec = 13;
-                       files = (
-                               AF2D4DBD13E90372002AA818 /* Phosphor.saver in Copy Plugins */,
-                       );
-                       name = "Copy Plugins";
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-               AF2D4F7213E91093002AA818 /* Copy Plugins */ = {
-                       isa = PBXCopyFilesBuildPhase;
-                       buildActionMask = 2147483647;
-                       dstPath = "";
-                       dstSubfolderSpec = 13;
-                       files = (
-                               AF2D4FA913E9115E002AA818 /* Apple2.saver in Copy Plugins */,
-                       );
-                       name = "Copy Plugins";
-                       runOnlyForDeploymentPostprocessing = 0;
-               };
-/* End PBXCopyFilesBuildPhase section */
-
 /* Begin PBXFileReference section */
                089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = OSX/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
                1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
 /* Begin PBXFileReference section */
                089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = OSX/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
                1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
                AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "bubbles-default.c"; path = "hacks/bubbles-default.c"; sourceTree = "<group>"; };
                AF6427BC09A2DF47000F4CD4 /* bubbles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bubbles.c; path = hacks/bubbles.c; sourceTree = "<group>"; };
                AF6427BD09A2DF47000F4CD4 /* bubbles.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bubbles.h; path = hacks/bubbles.h; sourceTree = "<group>"; };
                AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "bubbles-default.c"; path = "hacks/bubbles-default.c"; sourceTree = "<group>"; };
                AF6427BC09A2DF47000F4CD4 /* bubbles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bubbles.c; path = hacks/bubbles.c; sourceTree = "<group>"; };
                AF6427BD09A2DF47000F4CD4 /* bubbles.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bubbles.h; path = hacks/bubbles.h; sourceTree = "<group>"; };
+               AF7511121782B5B900380EA1 /* Kaleidocycle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kaleidocycle.saver; sourceTree = BUILT_PRODUCTS_DIR; };
+               AF7511141782B64300380EA1 /* kaleidocycle.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = kaleidocycle.c; path = hacks/glx/kaleidocycle.c; sourceTree = "<group>"; };
+               AF7511161782B66400380EA1 /* kaleidescope.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = kaleidescope.xml; sourceTree = "<group>"; };
                AF7776F609B63ABF00EA3033 /* Phosphor.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Phosphor.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF77770309B63B5F00EA3033 /* phosphor.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = phosphor.c; path = hacks/phosphor.c; sourceTree = "<group>"; };
                AF77772A09B6416100EA3033 /* Pacman.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pacman.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF7776F609B63ABF00EA3033 /* Phosphor.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Phosphor.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AF77770309B63B5F00EA3033 /* phosphor.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = phosphor.c; path = hacks/phosphor.c; sourceTree = "<group>"; };
                AF77772A09B6416100EA3033 /* Pacman.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pacman.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFA5638E0993980D00F3E977 /* timetunnel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = timetunnel.c; path = hacks/glx/timetunnel.c; sourceTree = "<group>"; };
                AFA563B6099398BB00F3E977 /* Juggler3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Juggler3D.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFA563B90993991300F3E977 /* juggler3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = juggler3d.c; path = hacks/glx/juggler3d.c; sourceTree = "<group>"; };
                AFA5638E0993980D00F3E977 /* timetunnel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = timetunnel.c; path = hacks/glx/timetunnel.c; sourceTree = "<group>"; };
                AFA563B6099398BB00F3E977 /* Juggler3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Juggler3D.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFA563B90993991300F3E977 /* juggler3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = juggler3d.c; path = hacks/glx/juggler3d.c; sourceTree = "<group>"; };
+               AFAA6B441773F07700DE720C /* ios-function-table.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "ios-function-table.m"; path = "OSX/ios-function-table.m"; sourceTree = "<group>"; };
                AFAD462209D5F4DA00AB5F95 /* grabclient.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = grabclient.c; path = utils/grabclient.c; sourceTree = "<group>"; };
                AFAD462209D5F4DA00AB5F95 /* grabclient.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = grabclient.c; path = utils/grabclient.c; sourceTree = "<group>"; };
+               AFB591BA178B812C00EA4005 /* Hexadrop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hexadrop.saver; sourceTree = BUILT_PRODUCTS_DIR; };
+               AFB591BC178B81E600EA4005 /* hexadrop.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hexadrop.xml; sourceTree = "<group>"; };
+               AFB591BD178B81E600EA4005 /* hexadrop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hexadrop.c; path = hacks/hexadrop.c; sourceTree = "<group>"; };
                AFB5A06B0981F4C600871B16 /* screenhack.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = screenhack.h; path = hacks/screenhack.h; sourceTree = "<group>"; };
                AFB5A0ED0981FF8B00871B16 /* usleep.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = usleep.c; path = utils/usleep.c; sourceTree = "<group>"; };
                AFB5A0EE0981FF8B00871B16 /* usleep.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = usleep.h; path = utils/usleep.h; sourceTree = "<group>"; };
                AFB5A06B0981F4C600871B16 /* screenhack.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = screenhack.h; path = hacks/screenhack.h; sourceTree = "<group>"; };
                AFB5A0ED0981FF8B00871B16 /* usleep.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = usleep.c; path = utils/usleep.c; sourceTree = "<group>"; };
                AFB5A0EE0981FF8B00871B16 /* usleep.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = usleep.h; path = utils/usleep.h; sourceTree = "<group>"; };
+               AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = kaleidocycle.xml; sourceTree = "<group>"; };
                AFBF893C0E41D930006A2D66 /* fps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fps.c; path = hacks/fps.c; sourceTree = "<group>"; };
                AFBF893D0E41D930006A2D66 /* fps.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fps.h; path = hacks/fps.h; sourceTree = "<group>"; };
                AFBF89AE0E423FC3006A2D66 /* fps-gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "fps-gl.c"; path = "hacks/glx/fps-gl.c"; sourceTree = "<group>"; };
                AFBF89B10E424036006A2D66 /* fpsI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fpsI.h; path = hacks/fpsI.h; sourceTree = "<group>"; };
                AFBF893C0E41D930006A2D66 /* fps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fps.c; path = hacks/fps.c; sourceTree = "<group>"; };
                AFBF893D0E41D930006A2D66 /* fps.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fps.h; path = hacks/fps.h; sourceTree = "<group>"; };
                AFBF89AE0E423FC3006A2D66 /* fps-gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "fps-gl.c"; path = "hacks/glx/fps-gl.c"; sourceTree = "<group>"; };
                AFBF89B10E424036006A2D66 /* fpsI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fpsI.h; path = hacks/fpsI.h; sourceTree = "<group>"; };
+               AFBFE75E178642DC00432B21 /* Apple2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Apple2.app; sourceTree = BUILT_PRODUCTS_DIR; };
+               AFBFE77E178647FE00432B21 /* Phosphor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Phosphor.app; sourceTree = BUILT_PRODUCTS_DIR; };
                AFC211930E4E30C800D87B6E /* teapot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = teapot.c; path = hacks/glx/teapot.c; sourceTree = "<group>"; };
                AFC211940E4E30C800D87B6E /* teapot.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = teapot.h; path = hacks/glx/teapot.h; sourceTree = "<group>"; };
                AFC254B909873AF9000655EE /* screenhackI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = screenhackI.h; path = hacks/screenhackI.h; sourceTree = "<group>"; };
                AFC211930E4E30C800D87B6E /* teapot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = teapot.c; path = hacks/glx/teapot.c; sourceTree = "<group>"; };
                AFC211940E4E30C800D87B6E /* teapot.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = teapot.h; path = hacks/glx/teapot.h; sourceTree = "<group>"; };
                AFC254B909873AF9000655EE /* screenhackI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = screenhackI.h; path = hacks/screenhackI.h; sourceTree = "<group>"; };
                AFD5730C099702C800BA26F7 /* julia.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = julia.c; path = hacks/julia.c; sourceTree = "<group>"; };
                AFD5736D0997411200BA26F7 /* Strange.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Strange.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFD57371099741A200BA26F7 /* strange.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = strange.c; path = hacks/strange.c; sourceTree = "<group>"; };
                AFD5730C099702C800BA26F7 /* julia.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = julia.c; path = hacks/julia.c; sourceTree = "<group>"; };
                AFD5736D0997411200BA26F7 /* Strange.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Strange.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFD57371099741A200BA26F7 /* strange.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = strange.c; path = hacks/strange.c; sourceTree = "<group>"; };
+               AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnknownPleasures.saver; sourceTree = BUILT_PRODUCTS_DIR; };
+               AFDA65A3178A541A0070D24B /* unknownpleasures.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = unknownpleasures.xml; sourceTree = "<group>"; };
+               AFDA65A4178A541A0070D24B /* unknownpleasures.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unknownpleasures.c; path = hacks/glx/unknownpleasures.c; sourceTree = "<group>"; };
                AFE1FD3F0981E32E00F7970E /* SaverRunner.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = SaverRunner.h; path = OSX/SaverRunner.h; sourceTree = "<group>"; };
                AFE1FD400981E32E00F7970E /* SaverRunner.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; name = SaverRunner.m; path = OSX/SaverRunner.m; sourceTree = "<group>"; };
                AFE1FD410981E32E00F7970E /* InvertedSlider.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = InvertedSlider.h; path = OSX/InvertedSlider.h; sourceTree = "<group>"; };
                AFE1FD3F0981E32E00F7970E /* SaverRunner.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = SaverRunner.h; path = OSX/SaverRunner.h; sourceTree = "<group>"; };
                AFE1FD400981E32E00F7970E /* SaverRunner.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; name = SaverRunner.m; path = OSX/SaverRunner.m; sourceTree = "<group>"; };
                AFE1FD410981E32E00F7970E /* InvertedSlider.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = InvertedSlider.h; path = OSX/InvertedSlider.h; sourceTree = "<group>"; };
                AFEB9C3C15900558003974F3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
                AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
                AFEB9C3F1590056A003974F3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
                AFEB9C3C15900558003974F3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
                AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
                AFEB9C3F1590056A003974F3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
+               AFF2869217860E830050A578 /* QuasiCrystal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = QuasiCrystal.saver; sourceTree = BUILT_PRODUCTS_DIR; };
+               AFF28694178611720050A578 /* quasicrystal.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = quasicrystal.xml; sourceTree = "<group>"; };
+               AFF28695178611720050A578 /* quasicrystal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quasicrystal.c; path = hacks/glx/quasicrystal.c; sourceTree = "<group>"; };
                AFF463470C4403E400EE6509 /* CWaves.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CWaves.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFF463490C44044E00EE6509 /* cwaves.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cwaves.c; path = hacks/cwaves.c; sourceTree = "<group>"; };
                AFF4634B0C44046500EE6509 /* cwaves.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cwaves.xml; sourceTree = "<group>"; };
                AFF463470C4403E400EE6509 /* CWaves.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CWaves.saver; sourceTree = BUILT_PRODUCTS_DIR; };
                AFF463490C44044E00EE6509 /* cwaves.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cwaves.c; path = hacks/cwaves.c; sourceTree = "<group>"; };
                AFF4634B0C44046500EE6509 /* cwaves.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cwaves.xml; sourceTree = "<group>"; };
                        buildActionMask = 2147483647;
                        files = (
                                AF1FD7F3158FF96500C40F17 /* libjwxyz.a in Frameworks */,
                        buildActionMask = 2147483647;
                        files = (
                                AF1FD7F3158FF96500C40F17 /* libjwxyz.a in Frameworks */,
-                               AF1FD7F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */,
-                               AF2C322215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */,
-                               AF1FD7F5158FF96500C40F17 /* Cocoa.framework in Frameworks */,
-                               AF1FD7F6158FF96500C40F17 /* Carbon.framework in Frameworks */,
+                               AFAA6B3D177392DD00DE720C /* OpenGLES.framework in Frameworks */,
+                               AFAA6B3E177392E000DE720C /* UIKit.framework in Frameworks */,
+                               AFAA6B3F177392E400DE720C /* AssetsLibrary.framework in Frameworks */,
+                               AFAA6B40177392E800DE720C /* Foundation.framework in Frameworks */,
+                               AFAA6B41177392EC00DE720C /* CoreGraphics.framework in Frameworks */,
+                               AFAA6B42177392F000DE720C /* CoreText.framework in Frameworks */,
+                               AFAA6B43177392F600DE720C /* QuartzCore.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        buildActionMask = 2147483647;
                        files = (
                                AF1FD723158FF96500C40F17 /* libjwxyz.a in Frameworks */,
                        buildActionMask = 2147483647;
                        files = (
                                AF1FD723158FF96500C40F17 /* libjwxyz.a in Frameworks */,
-                               AF1FD724158FF96500C40F17 /* ScreenSaver.framework in Frameworks */,
-                               AF2C31EE15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */,
-                               AF1FD725158FF96500C40F17 /* Cocoa.framework in Frameworks */,
-                               AF1FD726158FF96500C40F17 /* Carbon.framework in Frameworks */,
+                               AFAA6B301773876900DE720C /* OpenGLES.framework in Frameworks */,
+                               AFAA6B311773876E00DE720C /* UIKit.framework in Frameworks */,
+                               AFAA6B321773877300DE720C /* AssetsLibrary.framework in Frameworks */,
+                               AFAA6B331773877800DE720C /* Foundation.framework in Frameworks */,
+                               AFAA6B341773877C00DE720C /* CoreGraphics.framework in Frameworks */,
+                               AFAA6B351773878000DE720C /* CoreText.framework in Frameworks */,
+                               AFAA6B361773878400DE720C /* QuartzCore.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AF7511071782B5B900380EA1 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AF7511081782B5B900380EA1 /* libjwxyz.a in Frameworks */,
+                               AF7511091782B5B900380EA1 /* ScreenSaver.framework in Frameworks */,
+                               AF75110A1782B5B900380EA1 /* QuartzCore.framework in Frameworks */,
+                               AF75110B1782B5B900380EA1 /* Cocoa.framework in Frameworks */,
+                               AF75110C1782B5B900380EA1 /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AF7776EE09B63ABF00EA3033 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                AF7776EE09B63ABF00EA3033 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFB591AF178B812C00EA4005 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */,
+                               AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */,
+                               AFB591B2178B812C00EA4005 /* QuartzCore.framework in Frameworks */,
+                               AFB591B3178B812C00EA4005 /* Cocoa.framework in Frameworks */,
+                               AFB591B4178B812C00EA4005 /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               AFBFE755178642DC00432B21 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFBFE756178642DC00432B21 /* ScreenSaver.framework in Frameworks */,
+                               AFBFE757178642DC00432B21 /* QuartzCore.framework in Frameworks */,
+                               AFBFE758178642DC00432B21 /* Cocoa.framework in Frameworks */,
+                               AFBFE759178642DC00432B21 /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               AFBFE775178647FE00432B21 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFBFE776178647FE00432B21 /* ScreenSaver.framework in Frameworks */,
+                               AFBFE777178647FE00432B21 /* QuartzCore.framework in Frameworks */,
+                               AFBFE778178647FE00432B21 /* Cocoa.framework in Frameworks */,
+                               AFBFE779178647FE00432B21 /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFD51B240F063B4A00471C02 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                AFD51B240F063B4A00471C02 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFDA6596178A52B70070D24B /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFDA6597178A52B70070D24B /* libjwxyz.a in Frameworks */,
+                               AFDA6598178A52B70070D24B /* ScreenSaver.framework in Frameworks */,
+                               AFDA6599178A52B70070D24B /* QuartzCore.framework in Frameworks */,
+                               AFDA659A178A52B70070D24B /* Cocoa.framework in Frameworks */,
+                               AFDA659B178A52B70070D24B /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFE2A45E0E2E904600ADB298 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                AFE2A45E0E2E904600ADB298 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFF2868717860E830050A578 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFF2868817860E830050A578 /* libjwxyz.a in Frameworks */,
+                               AFF2868917860E830050A578 /* ScreenSaver.framework in Frameworks */,
+                               AFF2868A17860E830050A578 /* QuartzCore.framework in Frameworks */,
+                               AFF2868B17860E830050A578 /* Cocoa.framework in Frameworks */,
+                               AFF2868C17860E830050A578 /* Carbon.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFF4633E0C4403E400EE6509 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                AFF4633E0C4403E400EE6509 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                                AF3581D51431D47B00E09C51 /* CompanionCube.saver */,
                                AF358216143330F900E09C51 /* TronBit.saver */,
                                AF91898F158FC00A002B5D1E /* XScreenSaver.app */,
                                AF3581D51431D47B00E09C51 /* CompanionCube.saver */,
                                AF358216143330F900E09C51 /* TronBit.saver */,
                                AF91898F158FC00A002B5D1E /* XScreenSaver.app */,
+                               AF7511121782B5B900380EA1 /* Kaleidocycle.saver */,
+                               AFF2869217860E830050A578 /* QuasiCrystal.saver */,
+                               AFBFE75E178642DC00432B21 /* Apple2.app */,
+                               AFBFE77E178647FE00432B21 /* Phosphor.app */,
+                               AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */,
+                               AFB591BA178B812C00EA4005 /* Hexadrop.saver */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                        );
                        name = Products;
                        sourceTree = "<group>";
                                AF84AF1E15829AF000607E4C /* SaverListController.m */,
                                AFE1FD3F0981E32E00F7970E /* SaverRunner.h */,
                                AFE1FD400981E32E00F7970E /* SaverRunner.m */,
                                AF84AF1E15829AF000607E4C /* SaverListController.m */,
                                AFE1FD3F0981E32E00F7970E /* SaverRunner.h */,
                                AFE1FD400981E32E00F7970E /* SaverRunner.m */,
+                               AFAA6B441773F07700DE720C /* ios-function-table.m */,
                        );
                        name = SaverRunner;
                        sourceTree = "<group>";
                        );
                        name = SaverRunner;
                        sourceTree = "<group>";
                                AF477266099D5768001F091E /* halftone.c */,
                                AF480C29098E295D00FB32B8 /* halo.c */,
                                AF480C2F098E2A6700FB32B8 /* helix.c */,
                                AF477266099D5768001F091E /* halftone.c */,
                                AF480C29098E295D00FB32B8 /* halo.c */,
                                AF480C2F098E2A6700FB32B8 /* helix.c */,
+                               AFB591BD178B81E600EA4005 /* hexadrop.c */,
                                AF64262209A18E1E000F4CD4 /* hyperball.c */,
                                AF6425DF09A188FB000F4CD4 /* hypercube.c */,
                                AF47743A099D7CEA001F091E /* ifs.c */,
                                AF64262209A18E1E000F4CD4 /* hyperball.c */,
                                AF6425DF09A188FB000F4CD4 /* hypercube.c */,
                                AF47743A099D7CEA001F091E /* ifs.c */,
                                AF35EB250E6382BA00691F2F /* jigsaw.c */,
                                AFA55F210993620200F3E977 /* jigglypuff.c */,
                                AFA563B90993991300F3E977 /* juggler3d.c */,
                                AF35EB250E6382BA00691F2F /* jigsaw.c */,
                                AFA55F210993620200F3E977 /* jigglypuff.c */,
                                AFA563B90993991300F3E977 /* juggler3d.c */,
+                               AF7511141782B64300380EA1 /* kaleidocycle.c */,
                                AFA55F3F0993626E00F3E977 /* klein.c */,
                                AFA55A8E0993369100F3E977 /* lament.c */,
                                AFA55DDD09935DB600F3E977 /* lavalite.c */,
                                AFA55F3F0993626E00F3E977 /* klein.c */,
                                AFA55A8E0993369100F3E977 /* lament.c */,
                                AFA55DDD09935DB600F3E977 /* lavalite.c */,
                                AFA560C3099371D500F3E977 /* polytopes.c */,
                                AFA5621C099384F600F3E977 /* providence.c */,
                                AFA55B3F09933EC600F3E977 /* pulsar.c */,
                                AFA560C3099371D500F3E977 /* polytopes.c */,
                                AFA5621C099384F600F3E977 /* providence.c */,
                                AFA55B3F09933EC600F3E977 /* pulsar.c */,
+                               AFF28695178611720050A578 /* quasicrystal.c */,
                                AFA55E0609935EB800F3E977 /* queens.c */,
                                AFA559EA0993335C00F3E977 /* rubik.c */,
                                AF32D9FA0F3AD1200080F535 /* rubikblocks.c */,
                                AFA55E0609935EB800F3E977 /* queens.c */,
                                AFA559EA0993335C00F3E977 /* rubik.c */,
                                AF32D9FA0F3AD1200080F535 /* rubikblocks.c */,
                                AF998EF80A083E750051049D /* topblock.c */,
                                AF083A58099312B000277BE9 /* tunnel_draw.c */,
                                AF083A5D099312DB00277BE9 /* tunnel_draw.h */,
                                AF998EF80A083E750051049D /* topblock.c */,
                                AF083A58099312B000277BE9 /* tunnel_draw.c */,
                                AF083A5D099312DB00277BE9 /* tunnel_draw.h */,
+                               AFDA65A4178A541A0070D24B /* unknownpleasures.c */,
                                AF0DCA5F0C4CBB7300D76972 /* voronoi.c */,
                                AF0839AD09930C4900277BE9 /* whale.c */,
                        );
                                AF0DCA5F0C4CBB7300D76972 /* voronoi.c */,
                                AF0839AD09930C4900277BE9 /* whale.c */,
                        );
                                AFC258C20988A468000655EE /* halftone.xml */,
                                AFC258C30988A468000655EE /* halo.xml */,
                                AFC258C40988A468000655EE /* helix.xml */,
                                AFC258C20988A468000655EE /* halftone.xml */,
                                AFC258C30988A468000655EE /* halo.xml */,
                                AFC258C40988A468000655EE /* helix.xml */,
+                               AFB591BC178B81E600EA4005 /* hexadrop.xml */,
                                AF78D18E142DD99A002AAF77 /* hilbert.xml */,
                                AFC258C50988A468000655EE /* hopalong.xml */,
                                AFC258C60988A468000655EE /* hyperball.xml */,
                                AF78D18E142DD99A002AAF77 /* hilbert.xml */,
                                AFC258C50988A468000655EE /* hopalong.xml */,
                                AFC258C60988A468000655EE /* hyperball.xml */,
                                AFC258D10988A468000655EE /* juggler3d.xml */,
                                AFC258D20988A468000655EE /* julia.xml */,
                                AFC258D30988A468000655EE /* kaleidescope.xml */,
                                AFC258D10988A468000655EE /* juggler3d.xml */,
                                AFC258D20988A468000655EE /* julia.xml */,
                                AFC258D30988A468000655EE /* kaleidescope.xml */,
+                               AF7511161782B66400380EA1 /* kaleidescope.xml */,
+                               AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */,
                                AFC258D40988A468000655EE /* klein.xml */,
                                AFC258D50988A468000655EE /* kumppa.xml */,
                                AFC258D60988A468000655EE /* lament.xml */,
                                AFC258D40988A468000655EE /* klein.xml */,
                                AFC258D50988A468000655EE /* kumppa.xml */,
                                AFC258D60988A468000655EE /* lament.xml */,
                                AFC258FD0988A469000655EE /* pulsar.xml */,
                                AFC258FE0988A469000655EE /* pyro.xml */,
                                AFC258FF0988A469000655EE /* qix.xml */,
                                AFC258FD0988A469000655EE /* pulsar.xml */,
                                AFC258FE0988A469000655EE /* pyro.xml */,
                                AFC258FF0988A469000655EE /* qix.xml */,
+                               AFF28694178611720050A578 /* quasicrystal.xml */,
                                AFC259000988A469000655EE /* queens.xml */,
                                AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */,
                                AFC259030988A469000655EE /* ripples.xml */,
                                AFC259000988A469000655EE /* queens.xml */,
                                AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */,
                                AFC259030988A469000655EE /* ripples.xml */,
                                AFC259280988A469000655EE /* vermiculate.xml */,
                                AFC259290988A469000655EE /* vidwhacker.xml */,
                                AFC2592A0988A469000655EE /* vines.xml */,
                                AFC259280988A469000655EE /* vermiculate.xml */,
                                AFC259290988A469000655EE /* vidwhacker.xml */,
                                AFC2592A0988A469000655EE /* vines.xml */,
+                               AFDA65A3178A541A0070D24B /* unknownpleasures.xml */,
                                AF0DCA610C4CBB8E00D76972 /* voronoi.xml */,
                                AFC2592B0988A469000655EE /* wander.xml */,
                                AFC2592C0988A469000655EE /* webcollage.xml */,
                                AF0DCA610C4CBB8E00D76972 /* voronoi.xml */,
                                AFC2592B0988A469000655EE /* wander.xml */,
                                AFC2592C0988A469000655EE /* webcollage.xml */,
                        productReference = AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */;
                        productType = "com.apple.product-type.bundle";
                };
                        productReference = AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */;
                        productType = "com.apple.product-type.bundle";
                };
-               AF2D4D7F13E902F5002AA818 /* PhosphorApp */ = {
+               AF2D4D7F13E902F5002AA818 /* Phosphor-iOS */ = {
                        isa = PBXNativeTarget;
                        isa = PBXNativeTarget;
-                       buildConfigurationList = AF2D4D8C13E902F5002AA818 /* Build configuration list for PBXNativeTarget "PhosphorApp" */;
+                       buildConfigurationList = AF2D4D8C13E902F5002AA818 /* Build configuration list for PBXNativeTarget "Phosphor-iOS" */;
                        buildPhases = (
                                AF2D4D8213E902F5002AA818 /* Resources */,
                        buildPhases = (
                                AF2D4D8213E902F5002AA818 /* Resources */,
-                               AF2D4DDE13E903F2002AA818 /* Copy Plugins */,
                                AF2D4D8513E902F5002AA818 /* Sources */,
                                AF2D4D8813E902F5002AA818 /* Frameworks */,
                                AF2D51F413E94AC4002AA818 /* Run Update Info Plist */,
                                AF2D4D8513E902F5002AA818 /* Sources */,
                                AF2D4D8813E902F5002AA818 /* Frameworks */,
                                AF2D51F413E94AC4002AA818 /* Run Update Info Plist */,
                                AF2D4D8013E902F5002AA818 /* PBXTargetDependency */,
                                AF2D4D9E13E90347002AA818 /* PBXTargetDependency */,
                        );
                                AF2D4D8013E902F5002AA818 /* PBXTargetDependency */,
                                AF2D4D9E13E90347002AA818 /* PBXTargetDependency */,
                        );
-                       name = PhosphorApp;
+                       name = "Phosphor-iOS";
                        productName = PhosphorApp;
                        productReference = AF2D4D8F13E902F5002AA818 /* Phosphor.app */;
                        productType = "com.apple.product-type.application";
                };
                        productName = PhosphorApp;
                        productReference = AF2D4D8F13E902F5002AA818 /* Phosphor.app */;
                        productType = "com.apple.product-type.application";
                };
-               AF2D4F6A13E91093002AA818 /* Apple2App */ = {
+               AF2D4F6A13E91093002AA818 /* Apple2-iOS */ = {
                        isa = PBXNativeTarget;
                        isa = PBXNativeTarget;
-                       buildConfigurationList = AF2D4F7B13E91093002AA818 /* Build configuration list for PBXNativeTarget "Apple2App" */;
+                       buildConfigurationList = AF2D4F7B13E91093002AA818 /* Build configuration list for PBXNativeTarget "Apple2-iOS" */;
                        buildPhases = (
                                AF2D4F6F13E91093002AA818 /* Resources */,
                        buildPhases = (
                                AF2D4F6F13E91093002AA818 /* Resources */,
-                               AF2D4F7213E91093002AA818 /* Copy Plugins */,
                                AF2D4F7413E91093002AA818 /* Sources */,
                                AF2D4F7713E91093002AA818 /* Frameworks */,
                                AF2D51FD13E94B2D002AA818 /* Run Update Info Plist */,
                                AF2D4F7413E91093002AA818 /* Sources */,
                                AF2D4F7713E91093002AA818 /* Frameworks */,
                                AF2D51FD13E94B2D002AA818 /* Run Update Info Plist */,
                        buildRules = (
                        );
                        dependencies = (
                        buildRules = (
                        );
                        dependencies = (
-                               AF2D4F8F13E91127002AA818 /* PBXTargetDependency */,
                                AF2D4F6B13E91093002AA818 /* PBXTargetDependency */,
                                AF2D4F6B13E91093002AA818 /* PBXTargetDependency */,
+                               AF2D4F8F13E91127002AA818 /* PBXTargetDependency */,
                        );
                        );
-                       name = Apple2App;
+                       name = "Apple2-iOS";
                        productName = Apple2App;
                        productReference = AF2D4F7E13E91093002AA818 /* Apple2.app */;
                        productType = "com.apple.product-type.application";
                        productName = Apple2App;
                        productReference = AF2D4F7E13E91093002AA818 /* Apple2.app */;
                        productType = "com.apple.product-type.application";
                        productReference = AF6427B809A2DE36000F4CD4 /* Bubbles.saver */;
                        productType = "com.apple.product-type.bundle";
                };
                        productReference = AF6427B809A2DE36000F4CD4 /* Bubbles.saver */;
                        productType = "com.apple.product-type.bundle";
                };
+               AF7510FF1782B5B900380EA1 /* Kaleidocycle */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AF75110F1782B5B900380EA1 /* Build configuration list for PBXNativeTarget "Kaleidocycle" */;
+                       buildPhases = (
+                               AF7511021782B5B900380EA1 /* Resources */,
+                               AF7511041782B5B900380EA1 /* Sources */,
+                               AF7511071782B5B900380EA1 /* Frameworks */,
+                               AF75110D1782B5B900380EA1 /* Rez */,
+                               AF75110E1782B5B900380EA1 /* Run Update Info Plist */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AF7511001782B5B900380EA1 /* PBXTargetDependency */,
+                       );
+                       name = Kaleidocycle;
+                       productName = Voronoi;
+                       productReference = AF7511121782B5B900380EA1 /* Kaleidocycle.saver */;
+                       productType = "com.apple.product-type.bundle";
+               };
                AF7776E409B63ABF00EA3033 /* Phosphor */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */;
                AF7776E409B63ABF00EA3033 /* Phosphor */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */;
                        productReference = AFA563B6099398BB00F3E977 /* Juggler3D.saver */;
                        productType = "com.apple.product-type.bundle";
                };
                        productReference = AFA563B6099398BB00F3E977 /* Juggler3D.saver */;
                        productType = "com.apple.product-type.bundle";
                };
+               AFB591A7178B812C00EA4005 /* Hexadrop */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */;
+                       buildPhases = (
+                               AFB591AA178B812C00EA4005 /* Resources */,
+                               AFB591AC178B812C00EA4005 /* Sources */,
+                               AFB591AF178B812C00EA4005 /* Frameworks */,
+                               AFB591B5178B812C00EA4005 /* Rez */,
+                               AFB591B6178B812C00EA4005 /* Run Update Info Plist */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AFB591A8178B812C00EA4005 /* PBXTargetDependency */,
+                       );
+                       name = Hexadrop;
+                       productName = Attraction;
+                       productReference = AFB591BA178B812C00EA4005 /* Hexadrop.saver */;
+                       productType = "com.apple.product-type.bundle";
+               };
+               AFBFE74B178642DC00432B21 /* Apple2-OSX */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AFBFE75B178642DC00432B21 /* Build configuration list for PBXNativeTarget "Apple2-OSX" */;
+                       buildPhases = (
+                               AFBFE74E178642DC00432B21 /* Resources */,
+                               AFBFE751178642DC00432B21 /* Sources */,
+                               AFBFE755178642DC00432B21 /* Frameworks */,
+                               AFBFE78817894FFA00432B21 /* Copy Standalone Preferences XML File */,
+                               AFBFE75A178642DC00432B21 /* Run Update Info Plist */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AFBFE7641786438900432B21 /* PBXTargetDependency */,
+                               AFBFE74C178642DC00432B21 /* PBXTargetDependency */,
+                       );
+                       name = "Apple2-OSX";
+                       productName = SaverTester;
+                       productReference = AFBFE75E178642DC00432B21 /* Apple2.app */;
+                       productType = "com.apple.product-type.application";
+               };
+               AFBFE767178647FE00432B21 /* Phosphor-OSX */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AFBFE77B178647FE00432B21 /* Build configuration list for PBXNativeTarget "Phosphor-OSX" */;
+                       buildPhases = (
+                               AFBFE76C178647FE00432B21 /* Resources */,
+                               AFBFE771178647FE00432B21 /* Sources */,
+                               AFBFE775178647FE00432B21 /* Frameworks */,
+                               AFBFE78917895AAF00432B21 /* Copy Standalone Preferences XML File */,
+                               AFBFE77A178647FE00432B21 /* Run Update Info Plist */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AFBFE7811786482B00432B21 /* PBXTargetDependency */,
+                               AFBFE76A178647FE00432B21 /* PBXTargetDependency */,
+                       );
+                       name = "Phosphor-OSX";
+                       productName = SaverTester;
+                       productReference = AFBFE77E178647FE00432B21 /* Phosphor.app */;
+                       productType = "com.apple.product-type.application";
+               };
                AFD51B1B0F063B4A00471C02 /* Photopile */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */;
                AFD51B1B0F063B4A00471C02 /* Photopile */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */;
                        productReference = AFD5736D0997411200BA26F7 /* Strange.saver */;
                        productType = "com.apple.product-type.bundle";
                };
                        productReference = AFD5736D0997411200BA26F7 /* Strange.saver */;
                        productType = "com.apple.product-type.bundle";
                };
+               AFDA658E178A52B70070D24B /* Unknown Pleasures */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AFDA659E178A52B70070D24B /* Build configuration list for PBXNativeTarget "Unknown Pleasures" */;
+                       buildPhases = (
+                               AFDA6591178A52B70070D24B /* Resources */,
+                               AFDA6593178A52B70070D24B /* Sources */,
+                               AFDA6596178A52B70070D24B /* Frameworks */,
+                               AFDA659C178A52B70070D24B /* Rez */,
+                               AFDA659D178A52B70070D24B /* Run Update Info Plist */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AFDA658F178A52B70070D24B /* PBXTargetDependency */,
+                       );
+                       name = "Unknown Pleasures";
+                       productName = DangerBall;
+                       productReference = AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */;
+                       productType = "com.apple.product-type.bundle";
+               };
                AFE2A4560E2E904600ADB298 /* SkyTentacles */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */;
                AFE2A4560E2E904600ADB298 /* SkyTentacles */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */;
                        productReference = AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */;
                        productType = "com.apple.product-type.bundle";
                };
                        productReference = AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */;
                        productType = "com.apple.product-type.bundle";
                };
+               AFF2867F17860E830050A578 /* QuasiCrystal */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */;
+                       buildPhases = (
+                               AFF2868217860E830050A578 /* Resources */,
+                               AFF2868417860E830050A578 /* Sources */,
+                               AFF2868717860E830050A578 /* Frameworks */,
+                               AFF2868D17860E830050A578 /* Rez */,
+                               AFF2868E17860E830050A578 /* Run Update Info Plist */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               AFF2868017860E830050A578 /* PBXTargetDependency */,
+                       );
+                       name = QuasiCrystal;
+                       productName = DangerBall;
+                       productReference = AFF2869217860E830050A578 /* QuasiCrystal.saver */;
+                       productType = "com.apple.product-type.bundle";
+               };
                AFF463360C4403E400EE6509 /* CWaves */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */;
                AFF463360C4403E400EE6509 /* CWaves */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */;
                                AF47721E099D4F67001F091E /* Anemone */,
                                AF4773C1099D67B9001F091E /* Anemotaxis */,
                                AF9D4DEC09B5BB19006E59CF /* Apple2 */,
                                AF47721E099D4F67001F091E /* Anemone */,
                                AF4773C1099D67B9001F091E /* Anemotaxis */,
                                AF9D4DEC09B5BB19006E59CF /* Apple2 */,
-                               AF2D4F6A13E91093002AA818 /* Apple2App */,
+                               AF2D4F6A13E91093002AA818 /* Apple2-iOS */,
+                               AFBFE74B178642DC00432B21 /* Apple2-OSX */,
                                AF9770660989D2F6001F8B92 /* Attraction */,
                                AF975A86099C6BC300B05160 /* Barcode */,
                                AF47768F099DAA6F001F091E /* Blaster */,
                                AF9770660989D2F6001F8B92 /* Attraction */,
                                AF975A86099C6BC300B05160 /* Barcode */,
                                AF47768F099DAA6F001F091E /* Blaster */,
                                AF477253099D5717001F091E /* Halftone */,
                                AF975C12099C8C1500B05160 /* Halo */,
                                AF480C49098E301400FB32B8 /* Helix */,
                                AF477253099D5717001F091E /* Halftone */,
                                AF975C12099C8C1500B05160 /* Halo */,
                                AF480C49098E301400FB32B8 /* Helix */,
+                               AFB591A7178B812C00EA4005 /* Hexadrop */,
                                AF477426099D7C70001F091E /* IFS */,
                                AF97572D099C317000B05160 /* IMSMap */,
                                AF477752099DB61E001F091E /* Interaggregate */,
                                AF477426099D7C70001F091E /* IFS */,
                                AF97572D099C317000B05160 /* IMSMap */,
                                AF477752099DB61E001F091E /* Interaggregate */,
                                AF4778AB099DDB79001F091E /* Penetrate */,
                                AF477670099DA849001F091E /* Petri */,
                                AF7776E409B63ABF00EA3033 /* Phosphor */,
                                AF4778AB099DDB79001F091E /* Penetrate */,
                                AF477670099DA849001F091E /* Petri */,
                                AF7776E409B63ABF00EA3033 /* Phosphor */,
-                               AF2D4D7F13E902F5002AA818 /* PhosphorApp */,
+                               AF2D4D7F13E902F5002AA818 /* Phosphor-iOS */,
+                               AFBFE767178647FE00432B21 /* Phosphor-OSX */,
                                AF477283099D5926001F091E /* Piecewise */,
                                AF9D4CE709B5AA8E006E59CF /* Pong */,
                                AF47726B099D57B9001F091E /* PopSquares */,
                                AF477283099D5926001F091E /* Piecewise */,
                                AF9D4CE709B5AA8E006E59CF /* Pong */,
                                AF47726B099D57B9001F091E /* PopSquares */,
                                AFA55F06099361B700F3E977 /* JigglyPuff */,
                                AF35E88A0E63823600691F2F /* Jigsaw */,
                                AFA563A4099398BB00F3E977 /* Juggler3D */,
                                AFA55F06099361B700F3E977 /* JigglyPuff */,
                                AF35E88A0E63823600691F2F /* Jigsaw */,
                                AFA563A4099398BB00F3E977 /* Juggler3D */,
+                               AF7510FF1782B5B900380EA1 /* Kaleidocycle */,
                                AFA55F2A0993622F00F3E977 /* Klein */,
                                AFA55A790993364300F3E977 /* Lament */,
                                AFA55DC809935D7000F3E977 /* Lavalite */,
                                AFA55F2A0993622F00F3E977 /* Klein */,
                                AFA55A790993364300F3E977 /* Lament */,
                                AFA55DC809935D7000F3E977 /* Lavalite */,
                                AFA560AE0993718D00F3E977 /* Polytopes */,
                                AFA562060993849F00F3E977 /* Providence */,
                                AFA55B2509933E8D00F3E977 /* Pulsar */,
                                AFA560AE0993718D00F3E977 /* Polytopes */,
                                AFA562060993849F00F3E977 /* Providence */,
                                AFA55B2509933E8D00F3E977 /* Pulsar */,
+                               AFF2867F17860E830050A578 /* QuasiCrystal */,
                                AFA55DF009935E4900F3E977 /* Queens */,
                                AFA559CF0993330600F3E977 /* Rubik */,
                                AF32D9E00F3AD0B40080F535 /* RubikBlocks */,
                                AFA55DF009935E4900F3E977 /* Queens */,
                                AFA559CF0993330600F3E977 /* Rubik */,
                                AF32D9E00F3AD0B40080F535 /* RubikBlocks */,
                                AFA56379099397B300F3E977 /* TimeTunnel */,
                                AF998EDA0A083DB30051049D /* TopBlock */,
                                AF3581FB143330F900E09C51 /* TronBit */,
                                AFA56379099397B300F3E977 /* TimeTunnel */,
                                AF998EDA0A083DB30051049D /* TopBlock */,
                                AF3581FB143330F900E09C51 /* TronBit */,
+                               AFDA658E178A52B70070D24B /* Unknown Pleasures */,
                                AF0DCA420C4CBB0D00D76972 /* Voronoi */,
                                AF137D410F075C9B004DE3B2 /* Obsolete */,
                                AFA55CCC09934CE400F3E977 /* GLForestFire */,
                                AF0DCA420C4CBB0D00D76972 /* Voronoi */,
                                AF137D410F075C9B004DE3B2 /* Obsolete */,
                                AFA55CCC09934CE400F3E977 /* GLForestFire */,
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               AF2D4D8413E902F5002AA818 /* SaverRunner.nib in Resources */,
-                               AF2D522613E954A0002AA818 /* SaverRunner.icns in Resources */,
-                               AF51FD3415845CD500E5741F /* phosphor.xml in Resources */,
                                AF51FD3715845F9F00E5741F /* iSaverRunner.xib in Resources */,
                                AF51FD3715845F9F00E5741F /* iSaverRunner.xib in Resources */,
+                               AFAA6B3A1773923D00DE720C /* Default-568h@2x.png in Resources */,
                                AF51FD3B15845FD800E5741F /* iSaverRunner29.png in Resources */,
                                AF51FD3B15845FD800E5741F /* iSaverRunner29.png in Resources */,
+                               AFAA6B391773923900DE720C /* iSaverRunner29t.png in Resources */,
                                AF51FD3C15845FDB00E5741F /* iSaverRunner50.png in Resources */,
                                AF51FD3F15845FF700E5741F /* iSaverRunner57.png in Resources */,
                                AF51FD4015845FF900E5741F /* iSaverRunner72.png in Resources */,
                                AF51FD431584600300E5741F /* iSaverRunner114.png in Resources */,
                                AF51FD3C15845FDB00E5741F /* iSaverRunner50.png in Resources */,
                                AF51FD3F15845FF700E5741F /* iSaverRunner57.png in Resources */,
                                AF51FD4015845FF900E5741F /* iSaverRunner72.png in Resources */,
                                AF51FD431584600300E5741F /* iSaverRunner114.png in Resources */,
-                               AF6D7ED7158567420080DDC4 /* xscreensaver-text in Resources */,
+                               AF51FD3415845CD500E5741F /* phosphor.xml in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               AF2D4F7113E91093002AA818 /* SaverRunner.nib in Resources */,
-                               AF51FD3315845CC900E5741F /* apple2.xml in Resources */,
                                AF51FD3615845F9900E5741F /* iSaverRunner.xib in Resources */,
                                AF51FD3615845F9900E5741F /* iSaverRunner.xib in Resources */,
-                               AF51FD3815845FC300E5741F /* SaverRunner.icns in Resources */,
+                               AFAA6B2C1773866200DE720C /* Default-568h@2x.png in Resources */,
                                AF51FD3A15845FD300E5741F /* iSaverRunner29.png in Resources */,
                                AF51FD3A15845FD300E5741F /* iSaverRunner29.png in Resources */,
+                               AFAA6B2B1773863000DE720C /* iSaverRunner29t.png in Resources */,
                                AF51FD3D15845FDE00E5741F /* iSaverRunner50.png in Resources */,
                                AF51FD3E15845FE200E5741F /* iSaverRunner57.png in Resources */,
                                AF51FD4115845FFC00E5741F /* iSaverRunner72.png in Resources */,
                                AF51FD4215845FFF00E5741F /* iSaverRunner114.png in Resources */,
                                AF51FD3D15845FDE00E5741F /* iSaverRunner50.png in Resources */,
                                AF51FD3E15845FE200E5741F /* iSaverRunner57.png in Resources */,
                                AF51FD4115845FFC00E5741F /* iSaverRunner72.png in Resources */,
                                AF51FD4215845FFF00E5741F /* iSaverRunner114.png in Resources */,
-                               AF6D7ED4158567240080DDC4 /* xscreensaver-getimage-file in Resources */,
-                               AF6D7ED81585674C0080DDC4 /* xscreensaver-text in Resources */,
+                               AFBFE78B17895CD000432B21 /* apple2.xml in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AF7511021782B5B900380EA1 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFB8A69B1782BA34004EDB85 /* kaleidocycle.xml in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AF7776E709B63ABF00EA3033 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                AF7776E709B63ABF00EA3033 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */,
+                               AFC6BBC2161CE07E0084EDB1 /* Default-568h@2x.png in Resources */,
                                AF91897E158FC00A002B5D1E /* iSaverRunner29.png in Resources */,
                                AF7E080415932A1600D81407 /* iSaverRunner29t.png in Resources */,
                                AF91897F158FC00A002B5D1E /* iSaverRunner50.png in Resources */,
                                AF918980158FC00A002B5D1E /* iSaverRunner57.png in Resources */,
                                AF918981158FC00A002B5D1E /* iSaverRunner72.png in Resources */,
                                AF918982158FC00A002B5D1E /* iSaverRunner114.png in Resources */,
                                AF91897E158FC00A002B5D1E /* iSaverRunner29.png in Resources */,
                                AF7E080415932A1600D81407 /* iSaverRunner29t.png in Resources */,
                                AF91897F158FC00A002B5D1E /* iSaverRunner50.png in Resources */,
                                AF918980158FC00A002B5D1E /* iSaverRunner57.png in Resources */,
                                AF918981158FC00A002B5D1E /* iSaverRunner72.png in Resources */,
                                AF918982158FC00A002B5D1E /* iSaverRunner114.png in Resources */,
-                               AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */,
                                AF918AB4158FC53D002B5D1E /* abstractile.xml in Resources */,
                                AF918AB5158FC53D002B5D1E /* anemone.xml in Resources */,
                                AF918AB6158FC53D002B5D1E /* anemotaxis.xml in Resources */,
                                AF918AB4158FC53D002B5D1E /* abstractile.xml in Resources */,
                                AF918AB5158FC53D002B5D1E /* anemone.xml in Resources */,
                                AF918AB6158FC53D002B5D1E /* anemotaxis.xml in Resources */,
                                AF918B11158FC53D002B5D1E /* halftone.xml in Resources */,
                                AF918B12158FC53D002B5D1E /* halo.xml in Resources */,
                                AF918B13158FC53D002B5D1E /* helix.xml in Resources */,
                                AF918B11158FC53D002B5D1E /* halftone.xml in Resources */,
                                AF918B12158FC53D002B5D1E /* halo.xml in Resources */,
                                AF918B13158FC53D002B5D1E /* helix.xml in Resources */,
+                               AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */,
                                AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */,
                                AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */,
                                AF918B18158FC53D002B5D1E /* hypertorus.xml in Resources */,
                                AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */,
                                AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */,
                                AF918B18158FC53D002B5D1E /* hypertorus.xml in Resources */,
                                AF39483F15A1647A0000FFCD /* jigsaw.xml in Resources */,
                                AF918B22158FC53D002B5D1E /* juggler3d.xml in Resources */,
                                AF918B23158FC53D002B5D1E /* julia.xml in Resources */,
                                AF39483F15A1647A0000FFCD /* jigsaw.xml in Resources */,
                                AF918B22158FC53D002B5D1E /* juggler3d.xml in Resources */,
                                AF918B23158FC53D002B5D1E /* julia.xml in Resources */,
+                               AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */,
                                AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */,
                                AF918B25158FC53D002B5D1E /* klein.xml in Resources */,
                                AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */,
                                AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */,
                                AF918B25158FC53D002B5D1E /* klein.xml in Resources */,
                                AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */,
                                AF918B53158FC53E002B5D1E /* pulsar.xml in Resources */,
                                AF918B54158FC53E002B5D1E /* pyro.xml in Resources */,
                                AF918B55158FC53E002B5D1E /* qix.xml in Resources */,
                                AF918B53158FC53E002B5D1E /* pulsar.xml in Resources */,
                                AF918B54158FC53E002B5D1E /* pyro.xml in Resources */,
                                AF918B55158FC53E002B5D1E /* qix.xml in Resources */,
+                               AFF28697178611720050A578 /* quasicrystal.xml in Resources */,
                                AF918B56158FC53E002B5D1E /* queens.xml in Resources */,
                                AF918B57158FC53E002B5D1E /* rdbomb.xml in Resources */,
                                AF918B58158FC53E002B5D1E /* ripples.xml in Resources */,
                                AF918B56158FC53E002B5D1E /* queens.xml in Resources */,
                                AF918B57158FC53E002B5D1E /* rdbomb.xml in Resources */,
                                AF918B58158FC53E002B5D1E /* ripples.xml in Resources */,
                                AF918B7E158FC53E002B5D1E /* truchet.xml in Resources */,
                                AF918B7F158FC53E002B5D1E /* twang.xml in Resources */,
                                AF918B80158FC53E002B5D1E /* vermiculate.xml in Resources */,
                                AF918B7E158FC53E002B5D1E /* truchet.xml in Resources */,
                                AF918B7F158FC53E002B5D1E /* twang.xml in Resources */,
                                AF918B80158FC53E002B5D1E /* vermiculate.xml in Resources */,
+                               AFDA65A6178A541A0070D24B /* unknownpleasures.xml in Resources */,
                                AF918B83158FC53E002B5D1E /* voronoi.xml in Resources */,
                                AF918B84158FC53E002B5D1E /* wander.xml in Resources */,
                                AF918B86158FC53E002B5D1E /* whirlwindwarp.xml in Resources */,
                                AF918B83158FC53E002B5D1E /* voronoi.xml in Resources */,
                                AF918B84158FC53E002B5D1E /* wander.xml in Resources */,
                                AF918B86158FC53E002B5D1E /* whirlwindwarp.xml in Resources */,
                                AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */,
                                AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */,
                                AF918B91158FC554002B5D1E /* zoom.xml in Resources */,
                                AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */,
                                AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */,
                                AF918B91158FC554002B5D1E /* zoom.xml in Resources */,
-                               AFC6BBC2161CE07E0084EDB1 /* Default-568h@2x.png in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFB591AA178B812C00EA4005 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFB591BE178B81E600EA4005 /* hexadrop.xml in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               AFBFE74E178642DC00432B21 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFBFE765178643B200432B21 /* Apple2.saver in Resources */,
+                               AFBFE74F178642DC00432B21 /* SaverRunner.nib in Resources */,
+                               AFBFE750178642DC00432B21 /* SaverRunner.icns in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               AFBFE76C178647FE00432B21 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFBFE7831786483B00432B21 /* Phosphor.saver in Resources */,
+                               AFBFE76F178647FE00432B21 /* SaverRunner.nib in Resources */,
+                               AFBFE770178647FE00432B21 /* SaverRunner.icns in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFD51B1E0F063B4A00471C02 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                AFD51B1E0F063B4A00471C02 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFDA6591178A52B70070D24B /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFDA65A5178A541A0070D24B /* unknownpleasures.xml in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFE2A4590E2E904600ADB298 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                AFE2A4590E2E904600ADB298 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFF2868217860E830050A578 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFF28696178611720050A578 /* quasicrystal.xml in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFF463390C4403E400EE6509 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                AFF463390C4403E400EE6509 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AF75110D1782B5B900380EA1 /* Rez */ = {
+                       isa = PBXRezBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AF7776F209B63ABF00EA3033 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                AF7776F209B63ABF00EA3033 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFB591B5178B812C00EA4005 /* Rez */ = {
+                       isa = PBXRezBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFD51B2B0F063B4A00471C02 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                AFD51B2B0F063B4A00471C02 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFDA659C178A52B70070D24B /* Rez */ = {
+                       isa = PBXRezBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFE2A4650E2E904600ADB298 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                AFE2A4650E2E904600ADB298 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFF2868D17860E830050A578 /* Rez */ = {
+                       isa = PBXRezBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFF463420C4403E400EE6509 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                AFF463420C4403E400EE6509 /* Rez */ = {
                        isa = PBXRezBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q `/bin/ls -d $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/{Contents/,}PlugIns/*.saver 2>&-`\n$SOURCE_ROOT/OSX/update-info-plist.pl -q `/bin/ls -d $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX 2>&-`\n";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF2D51FD13E94B2D002AA818 /* Run Update Info Plist */ = {
                        showEnvVarsInLog = 0;
                };
                AF2D51FD13E94B2D002AA818 /* Run Update Info Plist */ = {
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q `/bin/ls -d $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/{Contents/,}PlugIns/*.saver 2>&-`\n$SOURCE_ROOT/OSX/update-info-plist.pl -q `/bin/ls -d $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX 2>&-`\n";
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                AF32D9F00F3AD0B40080F535 /* Run Update Info Plist */ = {
                        showEnvVarsInLog = 0;
                };
                AF32D9F00F3AD0B40080F535 /* Run Update Info Plist */ = {
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
+               AF75110E1782B5B900380EA1 /* Run Update Info Plist */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Run Update Info Plist";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
                AF78D185142DD8F3002AAF77 /* Run Update Info Plist */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                AF78D185142DD8F3002AAF77 /* Run Update Info Plist */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
+               AFB591B6178B812C00EA4005 /* Run Update Info Plist */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Run Update Info Plist";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
+               AFBFE75A178642DC00432B21 /* Run Update Info Plist */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Run Update Info Plist";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
+               AFBFE77A178647FE00432B21 /* Run Update Info Plist */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Run Update Info Plist";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
+               AFBFE78817894FFA00432B21 /* Copy Standalone Preferences XML File */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Copy Standalone Preferences XML File";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "SRC=$SRCROOT/OSX/$PRODUCT_NAME-app.xml\nDST=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/Contents/Resources\nNAME=`echo $PRODUCT_NAME.xml | tr A-Z a-z`\ncp -p $SRC $DST/$NAME\nln -sf ../../../$NAME $DST/$PRODUCT_NAME.saver/Contents/Resources/";
+               };
+               AFBFE78917895AAF00432B21 /* Copy Standalone Preferences XML File */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Copy Standalone Preferences XML File";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "SRC=$SRCROOT/OSX/$PRODUCT_NAME-app.xml\nDST=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/Contents/Resources\nNAME=`echo $PRODUCT_NAME.xml | tr A-Z a-z`\ncp -p $SRC $DST/$NAME\nln -sf ../../../$NAME $DST/$PRODUCT_NAME.saver/Contents/Resources/";
+               };
                AFCCCBB509C033DF00353F4D /* Run Update Info Plist */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                AFCCCBB509C033DF00353F4D /* Run Update Info Plist */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
+               AFDA659D178A52B70070D24B /* Run Update Info Plist */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Run Update Info Plist";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
                AFE2A4660E2E904600ADB298 /* Run Update Info Plist */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                AFE2A4660E2E904600ADB298 /* Run Update Info Plist */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
                        shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
                        showEnvVarsInLog = 0;
                };
+               AFF2868E17860E830050A578 /* Run Update Info Plist */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Run Update Info Plist";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "$SOURCE_ROOT/OSX/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX";
+                       showEnvVarsInLog = 0;
+               };
                AFF463430C4403E400EE6509 /* Run Update Info Plist */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                AFF463430C4403E400EE6509 /* Run Update Info Plist */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                                AF2D4D8613E902F5002AA818 /* SaverRunner.m in Sources */,
                                AF2D4D8713E902F5002AA818 /* main.m in Sources */,
                        files = (
                                AF2D4D8613E902F5002AA818 /* SaverRunner.m in Sources */,
                                AF2D4D8713E902F5002AA818 /* main.m in Sources */,
-                               AF78D18C142DD96E002AAF77 /* hilbert.c in Sources */,
-                               AF3581DB1431D5FC00E09C51 /* companion_disc.c in Sources */,
-                               AF3581DE1431D5FC00E09C51 /* companion_heart.c in Sources */,
-                               AF3581E11431D5FC00E09C51 /* companion_quad.c in Sources */,
-                               AF3581E41431D5FC00E09C51 /* companion.c in Sources */,
                                AF84AF1F15829AF000607E4C /* SaverListController.m in Sources */,
                                AF84AF1F15829AF000607E4C /* SaverListController.m in Sources */,
+                               AFAA6B461773F30500DE720C /* ios-function-table.m in Sources */,
+                               AFAA6B3B1773926C00DE720C /* phosphor.c in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        files = (
                                AF2D4F7513E91093002AA818 /* SaverRunner.m in Sources */,
                                AF2D4F7613E91093002AA818 /* main.m in Sources */,
                        files = (
                                AF2D4F7513E91093002AA818 /* SaverRunner.m in Sources */,
                                AF2D4F7613E91093002AA818 /* main.m in Sources */,
-                               AF78D18B142DD96E002AAF77 /* hilbert.c in Sources */,
-                               AF3581DA1431D5FC00E09C51 /* companion_disc.c in Sources */,
-                               AF3581DD1431D5FC00E09C51 /* companion_heart.c in Sources */,
-                               AF3581E01431D5FC00E09C51 /* companion_quad.c in Sources */,
-                               AF3581E31431D5FC00E09C51 /* companion.c in Sources */,
                                AF51FD3515845D1400E5741F /* SaverListController.m in Sources */,
                                AF51FD3515845D1400E5741F /* SaverListController.m in Sources */,
+                               AFAA6B471773F35600DE720C /* ios-function-table.m in Sources */,
+                               AFAA6B2F1773871900DE720C /* analogtv.c in Sources */,
+                               AFAA6B2D1773870700DE720C /* apple2-main.c in Sources */,
+                               AFAA6B2E1773870700DE720C /* apple2.c in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AF7511041782B5B900380EA1 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AF7511151782B64300380EA1 /* kaleidocycle.c in Sources */,
+                               AF7511051782B5B900380EA1 /* XScreenSaverSubclass.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AF7776E909B63ABF00EA3033 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                AF7776E909B63ABF00EA3033 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                                AF918A0A158FC38A002B5D1E /* flow.c in Sources */,
                                AF918A0C158FC38A002B5D1E /* galaxy.c in Sources */,
                                AF918A0D158FC38A002B5D1E /* grav.c in Sources */,
                                AF918A0A158FC38A002B5D1E /* flow.c in Sources */,
                                AF918A0C158FC38A002B5D1E /* galaxy.c in Sources */,
                                AF918A0D158FC38A002B5D1E /* grav.c in Sources */,
+                               AFB591C1178B81E600EA4005 /* hexadrop.c in Sources */,
                                AF918A0E158FC38A002B5D1E /* hopalong.c in Sources */,
                                AF918A11158FC38A002B5D1E /* julia.c in Sources */,
                                AF918A16158FC38A002B5D1E /* loop.c in Sources */,
                                AF918A0E158FC38A002B5D1E /* hopalong.c in Sources */,
                                AF918A11158FC38A002B5D1E /* julia.c in Sources */,
                                AF918A16158FC38A002B5D1E /* loop.c in Sources */,
                                AF918A6E158FC417002B5D1E /* jigglypuff.c in Sources */,
                                AF39483E15A164680000FFCD /* jigsaw.c in Sources */,
                                AF918A6F158FC417002B5D1E /* juggler3d.c in Sources */,
                                AF918A6E158FC417002B5D1E /* jigglypuff.c in Sources */,
                                AF39483E15A164680000FFCD /* jigsaw.c in Sources */,
                                AF918A6F158FC417002B5D1E /* juggler3d.c in Sources */,
+                               AFB8A69D1782BFA6004EDB85 /* kaleidocycle.c in Sources */,
                                AF918A70158FC417002B5D1E /* klein.c in Sources */,
                                AF918A71158FC417002B5D1E /* lament.c in Sources */,
                                AF918A72158FC417002B5D1E /* lavalite.c in Sources */,
                                AF918A70158FC417002B5D1E /* klein.c in Sources */,
                                AF918A71158FC417002B5D1E /* lament.c in Sources */,
                                AF918A72158FC417002B5D1E /* lavalite.c in Sources */,
                                AF918A82158FC417002B5D1E /* polytopes.c in Sources */,
                                AF918A83158FC417002B5D1E /* providence.c in Sources */,
                                AF918A84158FC417002B5D1E /* pulsar.c in Sources */,
                                AF918A82158FC417002B5D1E /* polytopes.c in Sources */,
                                AF918A83158FC417002B5D1E /* providence.c in Sources */,
                                AF918A84158FC417002B5D1E /* pulsar.c in Sources */,
+                               AFF28699178611720050A578 /* quasicrystal.c in Sources */,
                                AF918A85158FC417002B5D1E /* queens.c in Sources */,
                                AF918A86158FC417002B5D1E /* rubik.c in Sources */,
                                AF918A87158FC417002B5D1E /* rubikblocks.c in Sources */,
                                AF918A85158FC417002B5D1E /* queens.c in Sources */,
                                AF918A86158FC417002B5D1E /* rubik.c in Sources */,
                                AF918A87158FC417002B5D1E /* rubikblocks.c in Sources */,
                                AF9189ED158FC35D002B5D1E /* tronbit_no.c in Sources */,
                                AF9189EE158FC35D002B5D1E /* tronbit_yes.c in Sources */,
                                AF918AB1158FC47B002B5D1E /* tunnel_draw.c in Sources */,
                                AF9189ED158FC35D002B5D1E /* tronbit_no.c in Sources */,
                                AF9189EE158FC35D002B5D1E /* tronbit_yes.c in Sources */,
                                AF918AB1158FC47B002B5D1E /* tunnel_draw.c in Sources */,
+                               AFDA65A8178A541A0070D24B /* unknownpleasures.c in Sources */,
                                AF918AB2158FC47B002B5D1E /* voronoi.c in Sources */,
                                AF918AB3158FC47B002B5D1E /* whale.c in Sources */,
                                AF918AB2158FC47B002B5D1E /* voronoi.c in Sources */,
                                AF918AB3158FC47B002B5D1E /* whale.c in Sources */,
+                               AFAA6B451773F07800DE720C /* ios-function-table.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFB591AC178B812C00EA4005 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */,
+                               AFB591C0178B81E600EA4005 /* hexadrop.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               AFBFE751178642DC00432B21 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFBFE752178642DC00432B21 /* SaverRunner.m in Sources */,
+                               AFBFE753178642DC00432B21 /* main.m in Sources */,
+                               AFBFE754178642DC00432B21 /* SaverListController.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               AFBFE771178647FE00432B21 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFBFE772178647FE00432B21 /* SaverRunner.m in Sources */,
+                               AFBFE773178647FE00432B21 /* main.m in Sources */,
+                               AFBFE774178647FE00432B21 /* SaverListController.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFD51B210F063B4A00471C02 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                AFD51B210F063B4A00471C02 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFDA6593178A52B70070D24B /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFDA6595178A52B70070D24B /* XScreenSaverSubclass.m in Sources */,
+                               AFDA65A7178A541A0070D24B /* unknownpleasures.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFE2A45B0E2E904600ADB298 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                AFE2A45B0E2E904600ADB298 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               AFF2868417860E830050A578 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */,
+                               AFF28698178611720050A578 /* quasicrystal.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                AFF4633B0C4403E400EE6509 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                AFF4633B0C4403E400EE6509 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        targetProxy = AF2D4F6C13E91093002AA818 /* PBXContainerItemProxy */;
                };
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        targetProxy = AF2D4F6C13E91093002AA818 /* PBXContainerItemProxy */;
                };
-               AF2D4F8B13E91108002AA818 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF2D4F6A13E91093002AA818 /* Apple2App */;
-                       targetProxy = AF2D4F8A13E91108002AA818 /* PBXContainerItemProxy */;
-               };
-               AF2D4F8D13E9111D002AA818 /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = AF2D4D7F13E902F5002AA818 /* PhosphorApp */;
-                       targetProxy = AF2D4F8C13E9111D002AA818 /* PBXContainerItemProxy */;
-               };
                AF2D4F8F13E91127002AA818 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF9D4DEC09B5BB19006E59CF /* Apple2 */;
                AF2D4F8F13E91127002AA818 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF9D4DEC09B5BB19006E59CF /* Apple2 */;
                        target = AFD570C90996B9F800BA26F7 /* Ant */;
                        targetProxy = AF714E50105613580046AB1D /* PBXContainerItemProxy */;
                };
                        target = AFD570C90996B9F800BA26F7 /* Ant */;
                        targetProxy = AF714E50105613580046AB1D /* PBXContainerItemProxy */;
                };
+               AF7511001782B5B900380EA1 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AF7511011782B5B900380EA1 /* PBXContainerItemProxy */;
+               };
                AF7776E509B63ABF00EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                AF7776E509B63ABF00EA3033 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        target = AFD571B50996D9DC00BA26F7 /* Juggle */;
                        targetProxy = AFB581AF102F363300342B11 /* PBXContainerItemProxy */;
                };
                        target = AFD571B50996D9DC00BA26F7 /* Juggle */;
                        targetProxy = AFB581AF102F363300342B11 /* PBXContainerItemProxy */;
                };
+               AFB591A8178B812C00EA4005 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AFB591A9178B812C00EA4005 /* PBXContainerItemProxy */;
+               };
+               AFB591C3178B821E00EA4005 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFB591A7178B812C00EA4005 /* Hexadrop */;
+                       targetProxy = AFB591C2178B821E00EA4005 /* PBXContainerItemProxy */;
+               };
+               AFBFE7401786405E00432B21 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFF2867F17860E830050A578 /* QuasiCrystal */;
+                       targetProxy = AFBFE73F1786405E00432B21 /* PBXContainerItemProxy */;
+               };
+               AFBFE7421786407000432B21 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF7510FF1782B5B900380EA1 /* Kaleidocycle */;
+                       targetProxy = AFBFE7411786407000432B21 /* PBXContainerItemProxy */;
+               };
+               AFBFE74C178642DC00432B21 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AFBFE74D178642DC00432B21 /* PBXContainerItemProxy */;
+               };
+               AFBFE7641786438900432B21 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF9D4DEC09B5BB19006E59CF /* Apple2 */;
+                       targetProxy = AFBFE7631786438900432B21 /* PBXContainerItemProxy */;
+               };
+               AFBFE76A178647FE00432B21 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AFBFE76B178647FE00432B21 /* PBXContainerItemProxy */;
+               };
+               AFBFE7811786482B00432B21 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF7776E409B63ABF00EA3033 /* Phosphor */;
+                       targetProxy = AFBFE7801786482B00432B21 /* PBXContainerItemProxy */;
+               };
+               AFBFE785178648E600432B21 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFBFE74B178642DC00432B21 /* Apple2-OSX */;
+                       targetProxy = AFBFE784178648E600432B21 /* PBXContainerItemProxy */;
+               };
+               AFBFE787178648F500432B21 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFBFE767178647FE00432B21 /* Phosphor-OSX */;
+                       targetProxy = AFBFE786178648F500432B21 /* PBXContainerItemProxy */;
+               };
                AFCAD5F90992DFE00009617A /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF9771D60989DC4A001F8B92 /* SaverTester */;
                AFCAD5F90992DFE00009617A /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF9771D60989DC4A001F8B92 /* SaverTester */;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        targetProxy = AFD5735F0997411200BA26F7 /* PBXContainerItemProxy */;
                };
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        targetProxy = AFD5735F0997411200BA26F7 /* PBXContainerItemProxy */;
                };
+               AFDA658F178A52B70070D24B /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AFDA6590178A52B70070D24B /* PBXContainerItemProxy */;
+               };
+               AFDA65AA178A54690070D24B /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AFDA658E178A52B70070D24B /* Unknown Pleasures */;
+                       targetProxy = AFDA65A9178A54690070D24B /* PBXContainerItemProxy */;
+               };
                AFE2A4570E2E904600ADB298 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                AFE2A4570E2E904600ADB298 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                        target = AFE6A41B0CDD7FAA002805BF /* Abstractile */;
                        targetProxy = AFE6A42F0CDD7FEE002805BF /* PBXContainerItemProxy */;
                };
                        target = AFE6A41B0CDD7FAA002805BF /* Abstractile */;
                        targetProxy = AFE6A42F0CDD7FEE002805BF /* PBXContainerItemProxy */;
                };
+               AFF2868017860E830050A578 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
+                       targetProxy = AFF2868117860E830050A578 /* PBXContainerItemProxy */;
+               };
                AFF463370C4403E400EE6509 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                AFF463370C4403E400EE6509 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = AF4808C0098C3B6C00FB32B8 /* jwxyz */;
                AF0839A009930B6B00277BE9 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF0839A009930B6B00277BE9 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF0839A109930B6B00277BE9 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF0839A109930B6B00277BE9 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF083A46099311D700277BE9 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF083A46099311D700277BE9 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF083A47099311D700277BE9 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF083A47099311D700277BE9 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF0DC7BB0C4C73F600D76972 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF0DC7BB0C4C73F600D76972 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF0DC7BC0C4C73F600D76972 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF0DC7BC0C4C73F600D76972 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF0DCA540C4CBB0D00D76972 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF0DCA540C4CBB0D00D76972 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF0DCA550C4CBB0D00D76972 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF0DCA550C4CBB0D00D76972 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF137D420F075C9C004DE3B2 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF137D420F075C9C004DE3B2 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = Obsolete;
                        };
                        name = Debug;
                                PRODUCT_NAME = Obsolete;
                        };
                        name = Debug;
                AF137D430F075C9C004DE3B2 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF137D430F075C9C004DE3B2 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = Obsolete;
                        };
                        name = Release;
                                PRODUCT_NAME = Obsolete;
                        };
                        name = Release;
                AF1A17710D6D6EE3008AF328 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF1A17710D6D6EE3008AF328 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF1A17720D6D6EE3008AF328 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF1A17720D6D6EE3008AF328 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF2D4D8D13E902F5002AA818 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF2D4D8D13E902F5002AA818 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Jamie Zawinski (Y5M82TL69N)";
-                               COMBINE_HIDPI_IMAGES = YES;
-                               DEAD_CODE_STRIPPING = YES;
-                               "DEAD_CODE_STRIPPING[sdk=iphoneos*]" = NO;
-                               "DEAD_CODE_STRIPPING[sdk=iphonesimulator*]" = NO;
-                               "GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*]" = (
-                                       "USE_IPHONE=1",
-                                       "$(inherited)",
-                               );
-                               "GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = (
+                               GCC_PREPROCESSOR_DEFINITIONS = (
                                        "USE_IPHONE=1",
                                        "USE_IPHONE=1",
+                                       "PHOSPHOR_ONLY=1",
                                        "$(inherited)",
                                );
                                        "$(inherited)",
                                );
-                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
-                               INFOPLIST_FILE = OSX/SaverRunner.plist;
-                               "INFOPLIST_FILE[sdk=iphoneos*]" = OSX/iSaverRunner.plist;
-                               "INFOPLIST_FILE[sdk=iphonesimulator*]" = OSX/iSaverRunner.plist;
+                               INFOPLIST_FILE = OSX/iSaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                INSTALL_PATH = "$(HOME)/Applications";
-                               IPHONEOS_DEPLOYMENT_TARGET = 5.0;
-                               "OTHER_LDFLAGS[sdk=iphoneos*]" = (
-                                       "-ljwxyz",
-                                       "-framework",
-                                       OpenGLES,
-                                       "-framework",
-                                       Foundation,
-                                       "-framework",
-                                       UIKit,
-                                       "-framework",
-                                       CoreGraphics,
-                                       "-framework",
-                                       QuartzCore,
-                               );
-                               "OTHER_LDFLAGS[sdk=iphonesimulator*]" = (
-                                       "-ljwxyz",
-                                       "-framework",
-                                       OpenGLES,
-                                       "-framework",
-                                       Foundation,
-                                       "-framework",
-                                       UIKit,
-                                       "-framework",
-                                       CoreGraphics,
-                                       "-framework",
-                                       QuartzCore,
-                               );
                                PRODUCT_NAME = Phosphor;
                                PRODUCT_NAME = Phosphor;
-                               "PROVISIONING_PROFILE[sdk=iphoneos*]" = "AC8EDA6B-E061-4508-B2BA-129DD6D2AF72";
-                               TARGETED_DEVICE_FAMILY = "1,2";
+                               SDKROOT = iphoneos;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Debug;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Debug;
                AF2D4D8E13E902F5002AA818 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF2D4D8E13E902F5002AA818 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Jamie Zawinski (Y5M82TL69N)";
-                               COMBINE_HIDPI_IMAGES = YES;
-                               COPY_PHASE_STRIP = YES;
-                               DEAD_CODE_STRIPPING = YES;
-                               "DEAD_CODE_STRIPPING[sdk=iphoneos*]" = NO;
-                               "DEAD_CODE_STRIPPING[sdk=iphonesimulator*]" = NO;
-                               "GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*]" = (
-                                       "USE_IPHONE=1",
-                                       "$(inherited)",
-                               );
-                               "GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = (
+                               GCC_PREPROCESSOR_DEFINITIONS = (
                                        "USE_IPHONE=1",
                                        "USE_IPHONE=1",
+                                       "PHOSPHOR_ONLY=1",
                                        "$(inherited)",
                                );
                                        "$(inherited)",
                                );
-                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
-                               INFOPLIST_FILE = OSX/SaverRunner.plist;
-                               "INFOPLIST_FILE[sdk=iphoneos*]" = OSX/iSaverRunner.plist;
-                               "INFOPLIST_FILE[sdk=iphonesimulator*]" = OSX/iSaverRunner.plist;
+                               INFOPLIST_FILE = OSX/iSaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                INSTALL_PATH = "$(HOME)/Applications";
-                               IPHONEOS_DEPLOYMENT_TARGET = 5.0;
-                               "OTHER_LDFLAGS[sdk=iphoneos*]" = (
-                                       "-ljwxyz",
-                                       "-framework",
-                                       OpenGLES,
-                                       "-framework",
-                                       Foundation,
-                                       "-framework",
-                                       UIKit,
-                                       "-framework",
-                                       CoreGraphics,
-                                       "-framework",
-                                       QuartzCore,
-                               );
-                               "OTHER_LDFLAGS[sdk=iphonesimulator*]" = (
-                                       "-ljwxyz",
-                                       "-framework",
-                                       OpenGLES,
-                                       "-framework",
-                                       Foundation,
-                                       "-framework",
-                                       UIKit,
-                                       "-framework",
-                                       CoreGraphics,
-                                       "-framework",
-                                       QuartzCore,
-                               );
                                PRODUCT_NAME = Phosphor;
                                PRODUCT_NAME = Phosphor;
-                               "PROVISIONING_PROFILE[sdk=iphoneos*]" = "AC8EDA6B-E061-4508-B2BA-129DD6D2AF72";
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               VALIDATE_PRODUCT = YES;
+                               SDKROOT = iphoneos;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Release;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Release;
                AF2D4F7C13E91093002AA818 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF2D4F7C13E91093002AA818 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Jamie Zawinski (Y5M82TL69N)";
-                               COMBINE_HIDPI_IMAGES = YES;
-                               DEAD_CODE_STRIPPING = YES;
-                               "DEAD_CODE_STRIPPING[sdk=iphoneos*]" = NO;
-                               "DEAD_CODE_STRIPPING[sdk=iphonesimulator*]" = NO;
-                               "GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*]" = (
-                                       "USE_IPHONE=1",
-                                       "$(inherited)",
-                               );
-                               "GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = (
+                               GCC_PREPROCESSOR_DEFINITIONS = (
                                        "USE_IPHONE=1",
                                        "USE_IPHONE=1",
+                                       "APPLE2_ONLY=1",
                                        "$(inherited)",
                                );
                                        "$(inherited)",
                                );
-                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
-                               INFOPLIST_FILE = OSX/SaverRunner.plist;
-                               "INFOPLIST_FILE[sdk=iphoneos*]" = OSX/iSaverRunner.plist;
-                               "INFOPLIST_FILE[sdk=iphonesimulator*]" = OSX/iSaverRunner.plist;
+                               INFOPLIST_FILE = OSX/iSaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                INSTALL_PATH = "$(HOME)/Applications";
-                               IPHONEOS_DEPLOYMENT_TARGET = 5.0;
-                               "OTHER_LDFLAGS[sdk=iphoneos*]" = (
-                                       "-ljwxyz",
-                                       "-framework",
-                                       OpenGLES,
-                                       "-framework",
-                                       Foundation,
-                                       "-framework",
-                                       UIKit,
-                                       "-framework",
-                                       CoreGraphics,
-                                       "-framework",
-                                       QuartzCore,
-                               );
-                               "OTHER_LDFLAGS[sdk=iphonesimulator*]" = (
-                                       "-ljwxyz",
-                                       "-framework",
-                                       OpenGLES,
-                                       "-framework",
-                                       Foundation,
-                                       "-framework",
-                                       UIKit,
-                                       "-framework",
-                                       CoreGraphics,
-                                       "-framework",
-                                       QuartzCore,
-                               );
                                PRODUCT_NAME = Apple2;
                                PRODUCT_NAME = Apple2;
-                               "PROVISIONING_PROFILE[sdk=iphoneos*]" = "AC8EDA6B-E061-4508-B2BA-129DD6D2AF72";
-                               TARGETED_DEVICE_FAMILY = "1,2";
+                               SDKROOT = iphoneos;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Debug;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Debug;
                AF2D4F7D13E91093002AA818 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF2D4F7D13E91093002AA818 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Jamie Zawinski (Y5M82TL69N)";
-                               COMBINE_HIDPI_IMAGES = YES;
-                               COPY_PHASE_STRIP = YES;
-                               DEAD_CODE_STRIPPING = YES;
-                               "DEAD_CODE_STRIPPING[sdk=iphoneos*]" = NO;
-                               "DEAD_CODE_STRIPPING[sdk=iphonesimulator*]" = NO;
-                               "GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*]" = (
-                                       "USE_IPHONE=1",
-                                       "$(inherited)",
-                               );
-                               "GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*]" = (
+                               GCC_PREPROCESSOR_DEFINITIONS = (
                                        "USE_IPHONE=1",
                                        "USE_IPHONE=1",
+                                       "APPLE2_ONLY=1",
                                        "$(inherited)",
                                );
                                        "$(inherited)",
                                );
-                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
-                               INFOPLIST_FILE = OSX/SaverRunner.plist;
-                               "INFOPLIST_FILE[sdk=iphoneos*]" = OSX/iSaverRunner.plist;
-                               "INFOPLIST_FILE[sdk=iphonesimulator*]" = OSX/iSaverRunner.plist;
+                               INFOPLIST_FILE = OSX/iSaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                INSTALL_PATH = "$(HOME)/Applications";
-                               IPHONEOS_DEPLOYMENT_TARGET = 5.0;
-                               "OTHER_LDFLAGS[sdk=iphoneos*]" = (
-                                       "-ljwxyz",
-                                       "-framework",
-                                       OpenGLES,
-                                       "-framework",
-                                       Foundation,
-                                       "-framework",
-                                       UIKit,
-                                       "-framework",
-                                       CoreGraphics,
-                                       "-framework",
-                                       QuartzCore,
-                               );
-                               "OTHER_LDFLAGS[sdk=iphonesimulator*]" = (
-                                       "-ljwxyz",
-                                       "-framework",
-                                       OpenGLES,
-                                       "-framework",
-                                       Foundation,
-                                       "-framework",
-                                       UIKit,
-                                       "-framework",
-                                       CoreGraphics,
-                                       "-framework",
-                                       QuartzCore,
-                               );
                                PRODUCT_NAME = Apple2;
                                PRODUCT_NAME = Apple2;
-                               "PROVISIONING_PROFILE[sdk=iphoneos*]" = "AC8EDA6B-E061-4508-B2BA-129DD6D2AF72";
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               VALIDATE_PRODUCT = YES;
+                               SDKROOT = iphoneos;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Release;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Release;
                AF32D9F20F3AD0B40080F535 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF32D9F20F3AD0B40080F535 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF32D9F30F3AD0B40080F535 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF32D9F30F3AD0B40080F535 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF3581D31431D47B00E09C51 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF3581D31431D47B00E09C51 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF3581D41431D47B00E09C51 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF3581D41431D47B00E09C51 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF358214143330F900E09C51 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF358214143330F900E09C51 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF358215143330F900E09C51 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF358215143330F900E09C51 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF35E89E0E63823600691F2F /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF35E89E0E63823600691F2F /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF35E89F0E63823600691F2F /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF35E89F0E63823600691F2F /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF3C71570D624BF50030CC0D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF3C71570D624BF50030CC0D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF3C71580D624BF50030CC0D /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF3C71580D624BF50030CC0D /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF476FC4099D154F001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF476FC4099D154F001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF476FC5099D154F001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF476FC5099D154F001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF476FE9099D1686001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF476FE9099D1686001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF476FEA099D1686001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF476FEA099D1686001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF47705A099D4385001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF47705A099D4385001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF47705B099D4385001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47705B099D4385001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477177099D4786001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477177099D4786001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477178099D4786001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477178099D4786001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF47718D099D4803001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF47718D099D4803001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF47718E099D4803001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47718E099D4803001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4771B5099D4949001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4771B5099D4949001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4771B6099D4949001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4771B6099D4949001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4771E9099D4D9A001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4771E9099D4D9A001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4771EA099D4D9A001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4771EA099D4D9A001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477200099D4E63001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477200099D4E63001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477201099D4E63001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477201099D4E63001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477216099D4EE8001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477216099D4EE8001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477217099D4EE8001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477217099D4EE8001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF47722C099D4F67001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF47722C099D4F67001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                        };
                        name = Debug;
                };
                AF47722D099D4F67001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47722D099D4F67001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
-                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
                        };
                        name = Release;
                };
                AF477261099D5717001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477261099D5717001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477262099D5717001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477262099D5717001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477279099D57B9001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477279099D57B9001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF47727A099D57B9001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47727A099D57B9001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477291099D5926001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477291099D5926001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477292099D5926001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477292099D5926001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477390099D65A1001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477390099D65A1001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477391099D65A1001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477391099D65A1001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4773A8099D6648001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4773A8099D6648001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4773A9099D6648001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4773A9099D6648001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4773CF099D67B9001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4773CF099D67B9001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4773D0099D67B9001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4773D0099D67B9001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477410099D69E7001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477410099D69E7001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477411099D69E7001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477411099D69E7001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477435099D7C70001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477435099D7C70001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477436099D7C70001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477436099D7C70001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477450099D7D33001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477450099D7D33001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477451099D7D33001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477451099D7D33001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477491099D89E4001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477491099D89E4001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477492099D89E4001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477492099D89E4001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4774A7099D8A74001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4774A7099D8A74001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4774A8099D8A74001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4774A8099D8A74001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4774C2099D8B5F001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4774C2099D8B5F001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4774C3099D8B5F001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4774C3099D8B5F001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4774DC099D8BFF001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4774DC099D8BFF001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4774DD099D8BFF001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4774DD099D8BFF001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF47756B099D9A1A001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF47756B099D9A1A001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF47756C099D9A1A001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47756C099D9A1A001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477591099D9C28001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477591099D9C28001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477592099D9C28001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477592099D9C28001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4775AD099D9CF7001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4775AD099D9CF7001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4775AE099D9CF7001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4775AE099D9CF7001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4775E6099D9F69001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4775E6099D9F69001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4775E7099D9F69001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4775E7099D9F69001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477600099DA030001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477600099DA030001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477601099DA030001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477601099DA030001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477621099DA26C001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477621099DA26C001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477622099DA26C001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477622099DA26C001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477652099DA6D0001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477652099DA6D0001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477653099DA6D0001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477653099DA6D0001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477668099DA78E001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477668099DA78E001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477669099DA78E001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477669099DA78E001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF47767E099DA849001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF47767E099DA849001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF47767F099DA849001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47767F099DA849001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF47769D099DAA6F001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF47769D099DAA6F001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF47769E099DAA6F001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47769E099DAA6F001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4776B8099DABDD001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4776B8099DABDD001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4776B9099DABDD001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4776B9099DABDD001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4776CE099DAC8A001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4776CE099DAC8A001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4776CF099DAC8A001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4776CF099DAC8A001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4776E9099DADDF001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4776E9099DADDF001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4776EA099DADDF001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4776EA099DADDF001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4776FF099DAE7A001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4776FF099DAE7A001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477700099DAE7A001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477700099DAE7A001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF47771B099DAF9F001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF47771B099DAF9F001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF47771C099DAF9F001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47771C099DAF9F001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477731099DB044001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477731099DB044001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477732099DB044001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477732099DB044001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477760099DB61E001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477760099DB61E001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477761099DB61E001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477761099DB61E001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477782099DB965001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477782099DB965001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477783099DB965001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477783099DB965001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF47779E099DBA90001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF47779E099DBA90001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF47779F099DBA90001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF47779F099DBA90001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4777DF099DC183001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4777DF099DC183001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4777E0099DC183001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4777E0099DC183001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4778B9099DDB79001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4778B9099DDB79001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4778BA099DDB79001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4778BA099DDB79001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4778D5099DDCAE001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4778D5099DDCAE001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4778D6099DDCAE001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4778D6099DDCAE001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4778F6099DDDC8001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4778F6099DDDC8001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF4778F7099DDDC8001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4778F7099DDDC8001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477917099DE379001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477917099DE379001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477918099DE379001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477918099DE379001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF477938099DE4C7001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF477938099DE4C7001F091E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF477939099DE4C7001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF477939099DE4C7001F091E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4808C3098C3B8B00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4808C3098C3B8B00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ARCHS = (
-                                       "$(ARCHS_STANDARD_32_64_BIT)",
-                                       armv6,
-                                       armv7,
-                               );
-                               COMBINE_HIDPI_IMAGES = YES;
                                INSTALL_PATH = /usr/local/lib;
                                INSTALL_PATH = /usr/local/lib;
-                               SDKROOT = macosx;
-                               "SDKROOT[arch=armv6]" = iphoneos;
-                               "SDKROOT[arch=armv7]" = iphoneos;
                                SKIP_INSTALL = YES;
                                SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos";
                                SKIP_INSTALL = YES;
                                SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos";
-                               VALID_ARCHS = "i386 x86_64 armv7 armv7s";
+                               VALID_ARCHS = "i386 x86_64 armv6 armv7 armv7s";
                        };
                        name = Debug;
                };
                AF4808C4098C3B8B00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF4808C4098C3B8B00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ARCHS = (
-                                       "$(ARCHS_STANDARD_32_64_BIT)",
-                                       armv6,
-                                       armv7,
-                               );
-                               COMBINE_HIDPI_IMAGES = YES;
                                INSTALL_PATH = /usr/local/lib;
                                INSTALL_PATH = /usr/local/lib;
-                               SDKROOT = macosx;
-                               "SDKROOT[arch=armv6]" = iphoneos;
-                               "SDKROOT[arch=armv7]" = iphoneos;
                                SKIP_INSTALL = YES;
                                SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos";
                                SKIP_INSTALL = YES;
                                SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos";
-                               VALID_ARCHS = "i386 x86_64 armv7 armv7s";
+                               VALID_ARCHS = "i386 x86_64 armv6 armv7 armv7s";
                        };
                        name = Release;
                };
                AF480ABB098C66E300FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF480ABB098C66E300FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = "All Savers (XScreenSaver)";
                        };
                        name = Debug;
                                PRODUCT_NAME = "All Savers (XScreenSaver)";
                        };
                        name = Debug;
                AF480ABC098C66E300FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF480ABC098C66E300FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = "All Savers (XScreenSaver)";
                        };
                        name = Release;
                                PRODUCT_NAME = "All Savers (XScreenSaver)";
                        };
                        name = Release;
                AF480C56098E301400FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF480C56098E301400FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF480C57098E301400FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF480C57098E301400FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF480D65098EED6E00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF480D65098EED6E00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = "All Savers (XLockmore)";
                        };
                        name = Debug;
                                PRODUCT_NAME = "All Savers (XLockmore)";
                        };
                        name = Debug;
                AF480D66098EED6E00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF480D66098EED6E00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = "All Savers (XLockmore)";
                        };
                        name = Release;
                                PRODUCT_NAME = "All Savers (XLockmore)";
                        };
                        name = Release;
                AF480D68098EED6E00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF480D68098EED6E00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = "All Savers (OpenGL)";
                        };
                        name = Debug;
                                PRODUCT_NAME = "All Savers (OpenGL)";
                        };
                        name = Debug;
                AF480D69098EED6E00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF480D69098EED6E00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = "All Savers (OpenGL)";
                        };
                        name = Release;
                                PRODUCT_NAME = "All Savers (OpenGL)";
                        };
                        name = Release;
                AF480D6B098EED6E00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF480D6B098EED6E00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = "All Savers";
                        };
                        name = Debug;
                                PRODUCT_NAME = "All Savers";
                        };
                        name = Debug;
                AF480D6C098EED6E00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF480D6C098EED6E00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = "All Savers";
                        };
                        name = Release;
                                PRODUCT_NAME = "All Savers";
                        };
                        name = Release;
                AF480D7F098EEDDE00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF480D7F098EEDDE00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF480D80098EEDDE00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF480D80098EEDDE00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF4810F909909FBA00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF4810F909909FBA00FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
-                               GCC_PREPROCESSOR_DEFINITIONS = (
-                                       "HAVE_COCOA=1",
-                                       "GETTIMEOFDAY_TWO_ARGS=1",
-                                       "HAVE_UNISTD_H=1",
-                                       "STANDALONE=1",
-                                       "HAVE_GLBINDTEXTURE=1",
-                                       "HAVE_UNAME=1",
-                                       "HAVE_ICMP=1",
-                                       "HAVE_FORKPTY=1",
-                                       "HAVE_UTIL_H=1",
-                                       "$(GCC_PREPROCESSOR_DEFINITIONS)",
-                               );
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4810FA09909FBA00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4810FA09909FBA00FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
-                               GCC_PREPROCESSOR_DEFINITIONS = (
-                                       "HAVE_COCOA=1",
-                                       "GETTIMEOFDAY_TWO_ARGS=1",
-                                       "HAVE_UNISTD_H=1",
-                                       "STANDALONE=1",
-                                       "HAVE_GLBINDTEXTURE=1",
-                                       "HAVE_UNAME=1",
-                                       "HAVE_ICMP=1",
-                                       "HAVE_FORKPTY=1",
-                                       "HAVE_UTIL_H=1",
-                                       "$(GCC_PREPROCESSOR_DEFINITIONS)",
-                               );
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4812620990CE2700FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4812620990CE2700FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4812630990CE2700FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4812630990CE2700FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4812C40990D3D900FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4812C40990D3D900FB32B8 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4812C50990D3D900FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4812C50990D3D900FB32B8 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF48DF010A0C25E000F94CF9 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF48DF010A0C25E000F94CF9 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF48DF020A0C25E000F94CF9 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF48DF020A0C25E000F94CF9 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4A345B102A593600A81B2A /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4A345B102A593600A81B2A /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4A345C102A593600A81B2A /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4A345C102A593600A81B2A /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4FD6F80CE7A486005EE58E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4FD6F80CE7A486005EE58E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4FD6F90CE7A486005EE58E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4FD6F90CE7A486005EE58E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4FF4950D52CA0800666F98 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4FF4950D52CA0800666F98 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = m6502.h;
                        };
                        name = Debug;
                                PRODUCT_NAME = m6502.h;
                        };
                        name = Debug;
                AF4FF4960D52CA0800666F98 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4FF4960D52CA0800666F98 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = m6502.h;
                        };
                        name = Release;
                                PRODUCT_NAME = m6502.h;
                        };
                        name = Release;
                AF4FF4CC0D52CBDE00666F98 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4FF4CC0D52CBDE00666F98 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF4FF4CD0D52CBDE00666F98 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF4FF4CD0D52CBDE00666F98 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF642403099FF9C2000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF642403099FF9C2000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF642404099FF9C2000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF642404099FF9C2000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF6425DA09A18855000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF6425DA09A18855000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF6425DB09A18855000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF6425DB09A18855000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF6425FA09A189EC000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF6425FA09A189EC000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF6425FB09A189EC000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF6425FB09A189EC000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF64261D09A18D6C000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF64261D09A18D6C000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF64261E09A18D6C000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF64261E09A18D6C000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF64263A09A18F54000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF64263A09A18F54000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF64263B09A18F54000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF64263B09A18F54000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF64265D09A19229000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF64265D09A19229000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF64265E09A19229000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF64265E09A19229000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF64268909A194B0000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF64268909A194B0000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF64268A09A194B0000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF64268A09A194B0000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF64277F09A1D37A000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF64277F09A1D37A000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF64278009A1D37A000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF64278009A1D37A000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF6427B609A2DE36000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF6427B609A2DE36000F4CD4 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF6427B709A2DE36000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF6427B709A2DE36000F4CD4 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
+                       };
+                       name = Release;
+               };
+               AF7511101782B5B900380EA1 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                               "OTHER_LDFLAGS[sdk=macosx*]" = (
+                                       "-ljwxyz",
+                                       "-framework",
+                                       ScreenSaver,
+                                       "-framework",
+                                       Cocoa,
+                                       "-framework",
+                                       Carbon,
+                                       "-framework",
+                                       AGL,
+                                       "-framework",
+                                       OpenGL,
+                               );
+                               PRODUCT_NAME = Kaleidocycle;
+                       };
+                       name = Debug;
+               };
+               AF7511111782B5B900380EA1 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                               "OTHER_LDFLAGS[sdk=macosx*]" = (
+                                       "-ljwxyz",
+                                       "-framework",
+                                       ScreenSaver,
+                                       "-framework",
+                                       Cocoa,
+                                       "-framework",
+                                       Carbon,
+                                       "-framework",
+                                       AGL,
+                                       "-framework",
+                                       OpenGL,
+                               );
+                               PRODUCT_NAME = Kaleidocycle;
                        };
                        name = Release;
                };
                AF7776F409B63ABF00EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF7776F409B63ABF00EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF7776F509B63ABF00EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF7776F509B63ABF00EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF77772809B6416100EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF77772809B6416100EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF77772909B6416100EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF77772909B6416100EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF77774F09B6446500EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF77774F09B6446500EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77775009B6446500EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77775009B6446500EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77778609B6497800EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77778609B6497800EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77778709B6497800EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77778709B6497800EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF7777A009B64A5200EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF7777A009B64A5200EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF7777A109B64A5200EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF7777A109B64A5200EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF7777BA09B64B2600EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF7777BA09B64B2600EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF7777BB09B64B2600EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF7777BB09B64B2600EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF7777E209B64C6B00EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF7777E209B64C6B00EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF7777E309B64C6B00EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF7777E309B64C6B00EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF7777FC09B64E3100EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF7777FC09B64E3100EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF7777FD09B64E3100EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF7777FD09B64E3100EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77782309B6504400EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77782309B6504400EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77782409B6504400EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77782409B6504400EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77785609B6528100EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77785609B6528100EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77785709B6528100EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77785709B6528100EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77787209B6536000EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77787209B6536000EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77787309B6536000EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77787309B6536000EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF77788D09B6563500EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF77788D09B6563500EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF77788E09B6563500EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF77788E09B6563500EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF7778B309B659C800EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF7778B309B659C800EA3033 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF7778B409B659C800EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF7778B409B659C800EA3033 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF78D187142DD8F3002AAF77 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF78D187142DD8F3002AAF77 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF78D188142DD8F3002AAF77 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF78D188142DD8F3002AAF77 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF794F72099748450059A8B0 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF794F72099748450059A8B0 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF794F73099748450059A8B0 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF794F73099748450059A8B0 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF794F9C09974A320059A8B0 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF794F9C09974A320059A8B0 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF794F9D09974A320059A8B0 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF794F9D09974A320059A8B0 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF794FDB09974FA60059A8B0 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF794FDB09974FA60059A8B0 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF794FDC09974FA60059A8B0 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF794FDC09974FA60059A8B0 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF91898D158FC00A002B5D1E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF91898D158FC00A002B5D1E /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
-                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-                               CODE_SIGN_IDENTITY = "iPhone Developer";
-                               FRAMEWORK_SEARCH_PATHS = (
-                                       "$(inherited)",
-                                       "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Library/Frameworks\"",
-                               );
+                               BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}";
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        "USE_IPHONE=1",
                                        "$(inherited)",
                                );
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        "USE_IPHONE=1",
                                        "$(inherited)",
                                );
-                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_THUMB_SUPPORT = NO;
                                INFOPLIST_FILE = OSX/iSaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                INFOPLIST_FILE = OSX/iSaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
-                               IPHONEOS_DEPLOYMENT_TARGET = 4.3;
                                PRODUCT_NAME = XScreenSaver;
                                PRODUCT_NAME = XScreenSaver;
-                               PROVISIONING_PROFILE = "";
                                SDKROOT = iphoneos;
                                SDKROOT = iphoneos;
-                               "SDKROOT[arch=*]" = iphoneos;
-                               TARGETED_DEVICE_FAMILY = "1,2";
                                WRAPPER_EXTENSION = app;
                        };
                        name = Debug;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Debug;
                AF91898E158FC00A002B5D1E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF91898E158FC00A002B5D1E /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ALWAYS_SEARCH_USER_PATHS = NO;
-                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
-                               CODE_SIGN_IDENTITY = "iPhone Distribution: Jamie Zawinski";
-                               FRAMEWORK_SEARCH_PATHS = (
-                                       "$(inherited)",
-                                       "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Library/Frameworks\"",
-                               );
+                               BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}";
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        "USE_IPHONE=1",
                                        "$(inherited)",
                                );
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        "USE_IPHONE=1",
                                        "$(inherited)",
                                );
-                               GCC_THUMB_SUPPORT = NO;
                                INFOPLIST_FILE = OSX/iSaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                INFOPLIST_FILE = OSX/iSaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
-                               IPHONEOS_DEPLOYMENT_TARGET = 4.3;
                                PRODUCT_NAME = XScreenSaver;
                                PRODUCT_NAME = XScreenSaver;
-                               PROVISIONING_PROFILE = "6713E214-60AD-43CF-AFD3-825AEB87AA75";
                                SDKROOT = iphoneos;
                                SDKROOT = iphoneos;
-                               TARGETED_DEVICE_FAMILY = "1,2";
-                               VALIDATE_PRODUCT = YES;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Release;
                                WRAPPER_EXTENSION = app;
                        };
                        name = Release;
                AF97573B099C317000B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF97573B099C317000B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF97573C099C317000B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF97573C099C317000B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975783099C374A00B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975783099C374A00B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975784099C374A00B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975784099C374A00B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9757D0099C3E6300B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9757D0099C3E6300B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9757D1099C3E6300B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9757D1099C3E6300B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975816099C41D500B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975816099C41D500B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975817099C41D500B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975817099C41D500B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975873099C475900B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975873099C475900B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975874099C475900B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975874099C475900B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975A44099C681F00B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975A44099C681F00B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975A45099C681F00B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975A45099C681F00B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975A7A099C6AB200B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975A7A099C6AB200B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975A7B099C6AB200B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975A7B099C6AB200B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975A94099C6BC300B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975A94099C6BC300B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975A95099C6BC300B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975A95099C6BC300B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975AE5099C6EB100B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975AE5099C6EB100B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975AE6099C6EB100B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975AE6099C6EB100B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975B0A099C6FE400B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975B0A099C6FE400B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975B0B099C6FE400B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975B0B099C6FE400B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975C20099C8C1500B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975C20099C8C1500B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975C21099C8C1500B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975C21099C8C1500B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975C4C099C8DCF00B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975C4C099C8DCF00B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975C4D099C8DCF00B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975C4D099C8DCF00B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975C6C099C8F3F00B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975C6C099C8F3F00B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975C6D099C8F3F00B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975C6D099C8F3F00B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF975D61099CA0F000B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF975D61099CA0F000B05160 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF975D62099CA0F000B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF975D62099CA0F000B05160 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF976FBF0989CAA4001F8B92 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF976FBF0989CAA4001F8B92 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF976FC00989CAA4001F8B92 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF976FC00989CAA4001F8B92 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF97703E0989D1E6001F8B92 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF97703E0989D1E6001F8B92 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF97703F0989D1E6001F8B92 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF97703F0989D1E6001F8B92 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF97707B0989D2F6001F8B92 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF97707B0989D2F6001F8B92 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF97707C0989D2F6001F8B92 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF97707C0989D2F6001F8B92 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9771DB0989DC4B001F8B92 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9771DB0989DC4B001F8B92 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                INFOPLIST_FILE = OSX/SaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                WRAPPER_EXTENSION = app;
                                INFOPLIST_FILE = OSX/SaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                WRAPPER_EXTENSION = app;
                AF9771DC0989DC4B001F8B92 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF9771DC0989DC4B001F8B92 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                INFOPLIST_FILE = OSX/SaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                WRAPPER_EXTENSION = app;
                                INFOPLIST_FILE = OSX/SaverRunner.plist;
                                INSTALL_PATH = "$(HOME)/Applications";
                                WRAPPER_EXTENSION = app;
                AF998EEC0A083DB30051049D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF998EEC0A083DB30051049D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF998EED0A083DB30051049D /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF998EED0A083DB30051049D /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AF9D467409B5109C006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AF9D467409B5109C006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D467509B5109C006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D467509B5109C006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D475209B5300A006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D475209B5300A006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D475309B5300A006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D475309B5300A006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D476D09B53166006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D476D09B53166006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D476E09B53166006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D476E09B53166006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D48E909B53322006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D48E909B53322006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D48EA09B53322006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D48EA09B53322006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D490209B535DA006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D490209B535DA006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D490309B535DA006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D490309B535DA006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D493909B53CBA006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D493909B53CBA006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D493A09B53CBA006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D493A09B53CBA006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D496209B53FC9006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D496209B53FC9006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D496309B53FC9006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D496309B53FC9006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D497A09B5411D006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D497A09B5411D006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D497B09B5411D006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D497B09B5411D006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D49A509B544C2006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D49A509B544C2006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D49A609B544C2006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D49A609B544C2006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D4C7709B59F27006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D4C7709B59F27006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D4C7809B59F27006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D4C7809B59F27006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D4CF509B5AA8E006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D4CF509B5AA8E006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D4CF609B5AA8E006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D4CF609B5AA8E006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D4D8D09B5B2DC006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D4D8D09B5B2DC006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D4D8E09B5B2DC006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D4D8E09B5B2DC006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D4DBE09B5B71E006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D4DBE09B5B71E006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D4DBF09B5B71E006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D4DBF09B5B71E006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AF9D4DFC09B5BB19006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AF9D4DFC09B5BB19006E59CF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AF9D4DFD09B5BB19006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AF9D4DFD09B5BB19006E59CF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFA3393E0B058505002B0E7D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFA3393E0B058505002B0E7D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFA3393F0B058505002B0E7D /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFA3393F0B058505002B0E7D /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                        };
                        name = Release;
                };
                AFA33C080B058E67002B0E7D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA33C080B058E67002B0E7D /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = webcollage;
                        };
                        name = Debug;
                                PRODUCT_NAME = webcollage;
                        };
                        name = Debug;
                AFA33C090B058E67002B0E7D /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA33C090B058E67002B0E7D /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = webcollage;
                        };
                        name = Release;
                                PRODUCT_NAME = webcollage;
                        };
                        name = Release;
                AFA55958099330B000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55958099330B000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55959099330B000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55959099330B000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5597D0993317900F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5597D0993317900F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5597E0993317900F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5597E0993317900F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA559A20993322100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA559A20993322100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA559A30993322100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA559A30993322100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA559C50993328000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA559C50993328000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA559C60993328000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA559C60993328000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA559DF0993330600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA559DF0993330600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA559E00993330600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA559E00993330600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55A130993340300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55A130993340300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55A140993340300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55A140993340300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55A30099334A000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55A30099334A000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55A31099334A000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55A31099334A000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55A890993364300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55A890993364300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55A8A0993364300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55A8A0993364300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55ADF09933CEF00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55ADF09933CEF00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55AE009933CEF00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55AE009933CEF00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55B1C09933E0500F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55B1C09933E0500F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55B1D09933E0500F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55B1D09933E0500F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55B3509933E8D00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55B3509933E8D00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55B3609933E8D00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55B3609933E8D00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55B8909933F7200F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55B8909933F7200F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55B8A09933F7200F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55B8A09933F7200F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55BA109933FDA00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55BA109933FDA00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55BA209933FDA00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55BA209933FDA00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55BBB099340CE00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55BBB099340CE00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55BBC099340CE00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55BBC099340CE00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55BF40993429100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55BF40993429100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55BF50993429100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55BF50993429100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55C1E0993431300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55C1E0993431300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55C1F0993431300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55C1F0993431300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55C87099349A600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55C87099349A600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55C88099349A600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55C88099349A600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55CB909934BB200F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55CB909934BB200F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55CBA09934BB200F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55CBA09934BB200F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55CDC09934CE400F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55CDC09934CE400F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55CDD09934CE400F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55CDD09934CE400F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55D4C0993565300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55D4C0993565300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55D4D0993565300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55D4D0993565300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55D720993584B00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55D720993584B00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55D730993584B00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55D730993584B00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55D8F099358C400F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55D8F099358C400F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55D90099358C400F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55D90099358C400F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55DD809935D7000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55DD809935D7000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55DD909935D7000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55DD909935D7000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55E0109935E4900F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55E0109935E4900F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55E0209935E4900F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55E0209935E4900F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55E1D09935EDC00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55E1D09935EDC00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55E1E09935EDC00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55E1E09935EDC00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55E4009935F8E00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55E4009935F8E00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55E4109935F8E00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55E4109935F8E00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55E5E09935FF900F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55E5E09935FF900F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55E5F09935FF900F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55E5F09935FF900F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55EE1099360E300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55EE1099360E300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55EE2099360E300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55EE2099360E300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55F1C099361B700F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55F1C099361B700F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55F1D099361B700F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55F1D099361B700F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55F3A0993622F00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55F3A0993622F00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55F3B0993622F00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55F3B0993622F00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55F520993629000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55F520993629000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55F530993629000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55F530993629000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55F820993643600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55F820993643600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55F830993643600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55F830993643600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55FE309936BFA00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55FE309936BFA00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA55FE409936BFA00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA55FE409936BFA00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5600909936C6D00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5600909936C6D00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5600A09936C6D00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5600A09936C6D00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5602409936CC800F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5602409936CC800F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5602509936CC800F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5602509936CC800F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5604209936D5100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5604209936D5100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5604309936D5100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5604309936D5100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5605A09936E2100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5605A09936E2100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5605B09936E2100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5605B09936E2100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5607209936F3800F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5607209936F3800F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5607309936F3800F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5607309936F3800F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA560BE0993718D00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA560BE0993718D00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA560BF0993718D00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA560BF0993718D00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5610D0993781600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5610D0993781600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5610E0993781600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5610E0993781600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5611B099378EA00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5611B099378EA00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = molecules.h;
                        };
                        name = Debug;
                                PRODUCT_NAME = molecules.h;
                        };
                        name = Debug;
                AFA5611C099378EA00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5611C099378EA00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                PRODUCT_NAME = molecules.h;
                        };
                        name = Release;
                                PRODUCT_NAME = molecules.h;
                        };
                        name = Release;
                AFA5616809937C0D00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5616809937C0D00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5616909937C0D00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5616909937C0D00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5618B09937CF100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5618B09937CF100F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5618C09937CF100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5618C09937CF100F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA561AD09937D7E00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA561AD09937D7E00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA561AE09937D7E00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA561AE09937D7E00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA562170993849F00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA562170993849F00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA562180993849F00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA562180993849F00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5622F0993852500F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5622F0993852500F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA562300993852500F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA562300993852500F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA562CF099392C600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA562CF099392C600F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA562D0099392C600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA562D0099392C600F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA562EA099393C900F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA562EA099393C900F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA562EB099393C900F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA562EB099393C900F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA563020993943B00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA563020993943B00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA563030993943B00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA563030993943B00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA563240993951000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA563240993951000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA563250993951000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA563250993951000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA56341099395ED00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA56341099395ED00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA56342099395ED00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA56342099395ED00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA56361099396C000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA56361099396C000F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA56362099396C000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA56362099396C000F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA56389099397B300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA56389099397B300F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA5638A099397B300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA5638A099397B300F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA563B4099398BB00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA563B4099398BB00F3E977 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFA563B5099398BB00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFA563B5099398BB00F3E977 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                        };
                        name = Release;
                };
                        };
                        name = Release;
                };
+               AFB591B8178B812C00EA4005 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = Hexadrop;
+                       };
+                       name = Debug;
+               };
+               AFB591B9178B812C00EA4005 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = Hexadrop;
+                       };
+                       name = Release;
+               };
+               AFBFE75C178642DC00432B21 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               INFOPLIST_FILE = OSX/SaverRunner.plist;
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               "OTHER_CFLAGS[sdk=macosx*]" = "";
+                               PRODUCT_NAME = Apple2;
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Debug;
+               };
+               AFBFE75D178642DC00432B21 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               INFOPLIST_FILE = OSX/SaverRunner.plist;
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               "OTHER_CFLAGS[sdk=macosx*]" = "";
+                               PRODUCT_NAME = Apple2;
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Release;
+               };
+               AFBFE77C178647FE00432B21 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               INFOPLIST_FILE = OSX/SaverRunner.plist;
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               "OTHER_CFLAGS[sdk=macosx*]" = "";
+                               PRODUCT_NAME = Phosphor;
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Debug;
+               };
+               AFBFE77D178647FE00432B21 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               INFOPLIST_FILE = OSX/SaverRunner.plist;
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               "OTHER_CFLAGS[sdk=macosx*]" = "";
+                               PRODUCT_NAME = Phosphor;
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Release;
+               };
                AFD51B2E0F063B4A00471C02 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFD51B2E0F063B4A00471C02 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFD51B2F0F063B4A00471C02 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFD51B2F0F063B4A00471C02 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFD56E020996A03800BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFD56E020996A03800BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFD56E030996A03800BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFD56E030996A03800BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFD56EBC0996A72600BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFD56EBC0996A72600BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56EBD0996A72600BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56EBD0996A72600BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56EE80996A95700BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56EE80996A95700BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56EE90996A95700BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56EE90996A95700BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56F190996AAFA00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56F190996AAFA00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56F1A0996AAFA00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56F1A0996AAFA00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56F310996AB8A00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56F310996AB8A00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56F320996AB8A00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56F320996AB8A00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56F5D0996AEEE00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56F5D0996AEEE00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56F5E0996AEEE00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56F5E0996AEEE00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56F790996B01600BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56F790996B01600BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56F7A0996B01600BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56F7A0996B01600BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56F9A0996B09400BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56F9A0996B09400BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56F9B0996B09400BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56F9B0996B09400BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56FB10996B10F00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56FB10996B10F00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56FB20996B10F00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56FB20996B10F00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56FC70996B18F00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56FC70996B18F00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56FC80996B18F00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56FC80996B18F00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD56FDD0996B20900BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD56FDD0996B20900BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD56FDE0996B20900BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD56FDE0996B20900BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570060996B43800BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570060996B43800BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570070996B43800BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570070996B43800BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD5701D0996B4CC00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD5701D0996B4CC00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD5701E0996B4CC00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD5701E0996B4CC00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570340996B56D00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570340996B56D00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570350996B56D00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570350996B56D00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570510996B61600BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570510996B61600BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570520996B61600BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570520996B61600BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570670996B6A300BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570670996B6A300BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570680996B6A300BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570680996B6A300BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD5707D0996B72700BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD5707D0996B72700BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD5707E0996B72700BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD5707E0996B72700BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570930996B80300BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570930996B80300BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570940996B80300BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570940996B80300BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570A90996B88E00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570A90996B88E00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570AA0996B88E00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570AA0996B88E00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570BF0996B93000BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570BF0996B93000BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570C00996B93000BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570C00996B93000BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570D70996B9F800BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570D70996B9F800BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570D80996B9F800BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570D80996B9F800BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD570F80996BBBF00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD570F80996BBBF00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD570F90996BBBF00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD570F90996BBBF00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD571210996BE9300BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD571210996BE9300BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD571220996BE9300BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD571220996BE9300BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD5713A0996BF2E00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD5713A0996BF2E00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD5713B0996BF2E00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD5713B0996BF2E00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD571510996C01700BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD571510996C01700BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD571520996C01700BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD571520996C01700BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD571670996C0CE00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD571670996C0CE00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD571680996C0CE00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD571680996C0CE00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD571C30996D9DC00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD571C30996D9DC00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD571C40996D9DC00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD571C40996D9DC00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD572300996E4A300BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD572300996E4A300BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD572310996E4A300BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD572310996E4A300BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD5727B0996EE8500BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD5727B0996EE8500BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD5727C0996EE8500BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD5727C0996EE8500BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD572B30996F99600BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD572B30996F99600BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD572B40996F99600BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD572B40996F99600BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD572D00996FC0F00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD572D00996FC0F00BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD572D10996FC0F00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD572D10996FC0F00BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD57307099701C000BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD57307099701C000BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD57308099701C000BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD57308099701C000BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFD5736B0997411200BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFD5736B0997411200BA26F7 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFD5736C0997411200BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFD5736C0997411200BA26F7 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
+                       };
+                       name = Release;
+               };
+               AFDA659F178A52B70070D24B /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                               "OTHER_LDFLAGS[sdk=macosx*]" = (
+                                       "-ljwxyz",
+                                       "-framework",
+                                       ScreenSaver,
+                                       "-framework",
+                                       Cocoa,
+                                       "-framework",
+                                       Carbon,
+                                       "-framework",
+                                       AGL,
+                                       "-framework",
+                                       OpenGL,
+                               );
+                               PRODUCT_NAME = UnknownPleasures;
+                       };
+                       name = Debug;
+               };
+               AFDA65A0178A52B70070D24B /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                               "OTHER_LDFLAGS[sdk=macosx*]" = (
+                                       "-ljwxyz",
+                                       "-framework",
+                                       ScreenSaver,
+                                       "-framework",
+                                       Cocoa,
+                                       "-framework",
+                                       Carbon,
+                                       "-framework",
+                                       AGL,
+                                       "-framework",
+                                       OpenGL,
+                               );
+                               PRODUCT_NAME = UnknownPleasures;
                        };
                        name = Release;
                };
                AFE2A4680E2E904600ADB298 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFE2A4680E2E904600ADB298 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFE2A4690E2E904600ADB298 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFE2A4690E2E904600ADB298 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFE30BFA0E52B14700CCF4A5 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFE30BFA0E52B14700CCF4A5 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFE30BFB0E52B14700CCF4A5 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFE30BFB0E52B14700CCF4A5 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFE6A1950CDD7B2E002805BF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFE6A1950CDD7B2E002805BF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFE6A1960CDD7B2E002805BF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFE6A1960CDD7B2E002805BF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFE6A42B0CDD7FAA002805BF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFE6A42B0CDD7FAA002805BF /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFE6A42C0CDD7FAA002805BF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFE6A42C0CDD7FAA002805BF /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
+                       };
+                       name = Release;
+               };
+               AFF2869017860E830050A578 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                               "OTHER_LDFLAGS[sdk=macosx*]" = (
+                                       "-ljwxyz",
+                                       "-framework",
+                                       ScreenSaver,
+                                       "-framework",
+                                       Cocoa,
+                                       "-framework",
+                                       Carbon,
+                                       "-framework",
+                                       AGL,
+                                       "-framework",
+                                       OpenGL,
+                               );
+                               PRODUCT_NAME = QuasiCrystal;
+                       };
+                       name = Debug;
+               };
+               AFF2869117860E830050A578 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
+                                       "USE_GL=1",
+                                       "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
+                               );
+                               "OTHER_LDFLAGS[sdk=macosx*]" = (
+                                       "-ljwxyz",
+                                       "-framework",
+                                       ScreenSaver,
+                                       "-framework",
+                                       Cocoa,
+                                       "-framework",
+                                       Carbon,
+                                       "-framework",
+                                       AGL,
+                                       "-framework",
+                                       OpenGL,
+                               );
+                               PRODUCT_NAME = QuasiCrystal;
                        };
                        name = Release;
                };
                AFF463450C4403E400EE6509 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFF463450C4403E400EE6509 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Debug;
                };
                AFF463460C4403E400EE6509 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Debug;
                };
                AFF463460C4403E400EE6509 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                        };
                        name = Release;
                };
                AFF4636A0C440AEF00EE6509 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
                AFF4636A0C440AEF00EE6509 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                AFF4636B0C440AEF00EE6509 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                AFF4636B0C440AEF00EE6509 /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = (
                                        "USE_GL=1",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-                               GCC_ENABLE_OBJC_GC = supported;
-                               "GCC_ENABLE_OBJC_GC[sdk=iphoneos*][arch=*]" = unsupported;
-                               "GCC_ENABLE_OBJC_GC[sdk=iphonesimulator*][arch=*]" = unsupported;
+                               BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Developer";
+                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                GCC_PREFIX_HEADER = OSX/xscreensaver_Prefix.pch;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                GCC_PREFIX_HEADER = OSX/xscreensaver_Prefix.pch;
                                        "CLASS=XScreenSaver${EXECUTABLE_NAME}View",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                );
                                        "CLASS=XScreenSaver${EXECUTABLE_NAME}View",
                                        "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)",
                                );
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
                                GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
                                GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
                                GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
                                GCC_WARN_MISSING_PARENTHESES = YES;
                                GCC_WARN_SHADOW = NO;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
                                GCC_WARN_MISSING_PARENTHESES = YES;
                                GCC_WARN_SHADOW = NO;
                                GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
                                GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_LABEL = YES;
                                GCC_WARN_UNUSED_VALUE = YES;
                                GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_LABEL = YES;
                                GCC_WARN_UNUSED_VALUE = YES;
                                );
                                INFOPLIST_FILE = OSX/XScreenSaver.plist;
                                INSTALL_PATH = "$(HOME)/Library/Screen Savers";
                                );
                                INFOPLIST_FILE = OSX/XScreenSaver.plist;
                                INSTALL_PATH = "$(HOME)/Library/Screen Savers";
-                               MACOSX_DEPLOYMENT_TARGET = 10.5;
-                               "MACOSX_DEPLOYMENT_TARGET[sdk=iphoneos*][arch=*]" = "";
-                               "MACOSX_DEPLOYMENT_TARGET[sdk=iphonesimulator*][arch=*]" = "";
+                               IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+                               LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
+                               MACOSX_DEPLOYMENT_TARGET = 10.4;
+                               "OTHER_CFLAGS[sdk=macosx*]" = "-fobjc-gc";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SDKROOT = macosx;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SDKROOT = macosx;
+                               "SDKROOT[arch=arm*]" = iphoneos;
                                SYMROOT = OSX/build;
                                SYMROOT = OSX/build;
+                               TARGETED_DEVICE_FAMILY = "1,2";
                                USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)";
                                WARNING_CFLAGS = "-Wimplicit";
                                WRAPPER_EXTENSION = saver;
                                USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)";
                                WARNING_CFLAGS = "-Wimplicit";
                                WRAPPER_EXTENSION = saver;
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-                               GCC_ENABLE_OBJC_GC = supported;
-                               "GCC_ENABLE_OBJC_GC[sdk=iphoneos*][arch=*]" = unsupported;
-                               "GCC_ENABLE_OBJC_GC[sdk=iphonesimulator*][arch=*]" = unsupported;
+                               BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Jamie Zawinski";
+                               "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Distribution: Jamie Zawinski";
+                               COMBINE_HIDPI_IMAGES = YES;
                                GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                GCC_PREFIX_HEADER = OSX/xscreensaver_Prefix.pch;
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                GCC_PREFIX_HEADER = OSX/xscreensaver_Prefix.pch;
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                );
                                INFOPLIST_FILE = OSX/XScreenSaver.plist;
                                INSTALL_PATH = "$(HOME)/Library/Screen Savers";
                                );
                                INFOPLIST_FILE = OSX/XScreenSaver.plist;
                                INSTALL_PATH = "$(HOME)/Library/Screen Savers";
-                               MACOSX_DEPLOYMENT_TARGET = 10.5;
-                               "MACOSX_DEPLOYMENT_TARGET[sdk=iphoneos*][arch=*]" = "";
-                               "MACOSX_DEPLOYMENT_TARGET[sdk=iphonesimulator*][arch=*]" = "";
+                               IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+                               LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
+                               MACOSX_DEPLOYMENT_TARGET = 10.4;
+                               "OTHER_CFLAGS[sdk=macosx*]" = "-fobjc-gc";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SDKROOT = macosx;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SDKROOT = macosx;
+                               "SDKROOT[arch=arm*]" = iphoneos;
                                SYMROOT = OSX/build;
                                SYMROOT = OSX/build;
+                               TARGETED_DEVICE_FAMILY = "1,2";
                                USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)";
                                USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)";
+                               VALIDATE_PRODUCT = YES;
                                WARNING_CFLAGS = "-Wimplicit";
                                WRAPPER_EXTENSION = saver;
                        };
                                WARNING_CFLAGS = "-Wimplicit";
                                WRAPPER_EXTENSION = saver;
                        };
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               AF2D4D8C13E902F5002AA818 /* Build configuration list for PBXNativeTarget "PhosphorApp" */ = {
+               AF2D4D8C13E902F5002AA818 /* Build configuration list for PBXNativeTarget "Phosphor-iOS" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                                AF2D4D8D13E902F5002AA818 /* Debug */,
                        isa = XCConfigurationList;
                        buildConfigurations = (
                                AF2D4D8D13E902F5002AA818 /* Debug */,
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               AF2D4F7B13E91093002AA818 /* Build configuration list for PBXNativeTarget "Apple2App" */ = {
+               AF2D4F7B13E91093002AA818 /* Build configuration list for PBXNativeTarget "Apple2-iOS" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                                AF2D4F7C13E91093002AA818 /* Debug */,
                        isa = XCConfigurationList;
                        buildConfigurations = (
                                AF2D4F7C13E91093002AA818 /* Debug */,
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               AF75110F1782B5B900380EA1 /* Build configuration list for PBXNativeTarget "Kaleidocycle" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AF7511101782B5B900380EA1 /* Debug */,
+                               AF7511111782B5B900380EA1 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AFB591B8178B812C00EA4005 /* Debug */,
+                               AFB591B9178B812C00EA4005 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               AFBFE75B178642DC00432B21 /* Build configuration list for PBXNativeTarget "Apple2-OSX" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AFBFE75C178642DC00432B21 /* Debug */,
+                               AFBFE75D178642DC00432B21 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               AFBFE77B178647FE00432B21 /* Build configuration list for PBXNativeTarget "Phosphor-OSX" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AFBFE77C178647FE00432B21 /* Debug */,
+                               AFBFE77D178647FE00432B21 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               AFDA659E178A52B70070D24B /* Build configuration list for PBXNativeTarget "Unknown Pleasures" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AFDA659F178A52B70070D24B /* Debug */,
+                               AFDA65A0178A52B70070D24B /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               AFF2869017860E830050A578 /* Debug */,
+                               AFF2869117860E830050A578 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (