From d6b0217f2417bd19187f0ebc389d6c5c2233b11c Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Mon, 17 Oct 2016 09:25:55 -0400 Subject: [PATCH] From http://www.jwz.org/xscreensaver/xscreensaver-5.36.tar.gz -rw-r--r-- 1 zblaxell zblaxell 10600872 Oct 11 14:19 xscreensaver-5.36.tar.gz 0353cbe76cb5e8aa55d0142d8733bf2924772f95 xscreensaver-5.36.tar.gz --- OSX/Makefile | 38 +- OSX/README | 2 +- OSX/SaverRunner.h | 4 +- OSX/SaverRunner.m | 19 +- OSX/SaverRunner.plist | 10 +- OSX/Updater.plist | 10 +- OSX/XScreenSaver.plist | 6 +- OSX/XScreenSaverConfigSheet.m | 5 + OSX/XScreenSaverView.m | 39 +- OSX/bindist.rtf | 4 +- OSX/{iosgrabimage.m => grabclient-ios.m} | 5 +- OSX/{osxgrabscreen.m => grabclient-osx.m} | 27 +- OSX/iSaverRunner.plist | 13 +- OSX/installer.sh | 10 +- OSX/ios-function-table.m | 12 +- OSX/seticon.pl | 20 +- OSX/textclient-iOS.m | 71 - OSX/textclient-ios.m | 129 ++ OSX/update-info-plist.pl | 7 +- OSX/xscreensaver.xcodeproj/project.pbxproj | 1586 +++++++++++++- README | 18 +- README.hacking | 27 +- aclocal.m4 | 9 +- android/Makefile | 29 +- android/README | 3 + android/XScreenSaverDaydream.java.in | 26 - android/XScreenSaverSettings.java.in | 24 - android/grabscreen-android.c | 24 - android/project/build.gradle | 9 +- .../project/gradle/wrapper/gradle-wrapper.jar | Bin 49896 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 +- android/project/gradlew | 10 +- android/project/project.iml | 19 + .../project/xscreensaver/.idea/compiler.xml | 22 + android/project/xscreensaver/.idea/gradle.xml | 19 + android/project/xscreensaver/.idea/misc.xml | 14 + .../project/xscreensaver/.idea/modules.xml | 9 + .../project/xscreensaver/.idea/workspace.xml | 1863 +++++++++++++++++ android/project/xscreensaver/build.gradle | 3 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + android/project/xscreensaver/gradlew | 160 ++ android/project/xscreensaver/gradlew.bat | 90 + android/project/xscreensaver/jni/Android.mk | 227 +- android/project/xscreensaver/jni/xscreensaver | 1 - android/project/xscreensaver/local.properties | 11 + .../xscreensaver/XScreenSaverDaydream.java | 15 +- .../xscreensaver/XScreenSaverRenderer.java | 26 +- .../src/org/jwz/xscreensaver/jwxyz.java | 133 +- android/project/xscreensaver/xscreensaver.iml | 98 + config.h.in | 3 + configure | 37 +- configure.in | 12 + driver/Makefile.in | 1 - driver/XScreenSaver.ad.in | 11 +- driver/XScreenSaver_ad.h | 7 + driver/subprocs.c | 15 +- driver/xscreensaver-getimage.c | 4 +- driver/xscreensaver-text | 8 +- hacks/Makefile.in | 1 - hacks/analogtv.h | 4 +- hacks/asm6502.c | 2 +- hacks/check-configs.pl | 96 +- hacks/config/README | 4 +- hacks/config/cubestack.xml | 44 + hacks/config/cubetwist.xml | 46 + hacks/config/discoball.xml | 37 + hacks/config/glplanet.xml | 3 +- hacks/config/hexstrut.xml | 48 + hacks/config/photopile.xml | 2 +- hacks/config/rotzoomer.xml | 8 +- hacks/config/splodesic.xml | 32 + hacks/config/starwars.xml | 2 +- hacks/decayscreen.c | 1 + hacks/distort.c | 25 +- hacks/fontglide.c | 4 +- hacks/glx/Makefile.in | 108 +- hacks/glx/bouncingcow.c | 1 + hacks/glx/cubestack.c | 462 ++++ hacks/glx/cubestack.man | 72 + hacks/glx/cubetwist.c | 594 ++++++ hacks/glx/cubetwist.man | 80 + hacks/glx/discoball.c | 707 +++++++ hacks/glx/discoball.man | 72 + hacks/glx/dymaxionmap.c | 55 +- hacks/glx/extrusion.c | 7 +- hacks/glx/gleidescope.c | 8 +- hacks/glx/glplanet.c | 80 +- hacks/glx/grab-ximage.c | 6 +- hacks/glx/hexstrut.c | 512 +++++ hacks/glx/hexstrut.man | 77 + hacks/glx/hydrostat.c | 8 +- hacks/glx/lavalite.c | 1 + hacks/glx/molecules.sh | 2 +- hacks/glx/photopile.c | 54 +- hacks/glx/photopile.man | 2 +- hacks/glx/polyhedra.c | 28 +- hacks/glx/pulsar.c | 7 +- hacks/glx/sonar-icmp.c | 4 +- hacks/glx/splodesic.c | 640 ++++++ hacks/glx/splodesic.man | 69 + hacks/glx/starwars.h | 51 + hacks/glx/starwars.txt | 53 + hacks/glx/texfont.c | 2 +- hacks/glx/timetunnel.c | 4 +- hacks/glx/xpm-ximage.c | 54 +- hacks/images/m6502/greynetic.asm | 96 + hacks/images/m6502/life.asm | 127 ++ hacks/images/m6502/sflake.asm | 320 +++ hacks/images/m6502/sierpinski.asm | 24 + hacks/m6502.sh | 2 +- hacks/phosphor.c | 116 +- hacks/rotzoomer.c | 159 +- hacks/screenhackI.h | 1 - hacks/twang.c | 33 +- jwxyz/Makefile.in | 1 - jwxyz/jwxyz-android.c | 167 +- jwxyz/jwxyz-android.h | 7 +- jwxyz/jwxyz-cocoa.m | 7 + jwxyz/jwxyz-common.c | 11 + jwxyz/jwxyz-gl.c | 54 +- jwxyz/jwxyz.h | 14 +- jwxyz/jwxyz.m | 45 +- jwxyz/jwzgles.c | 6 +- po/POTFILES.in | 7 +- utils/Makefile.in | 1 - utils/grabclient.c | 6 +- utils/grabscreen.c | 30 +- utils/textclient-mobile.c | 4 +- utils/textclient.c | 125 +- utils/textclient.h | 2 - utils/version.h | 2 +- xscreensaver.spec | 2 +- 133 files changed, 9632 insertions(+), 931 deletions(-) rename OSX/{iosgrabimage.m => grabclient-ios.m} (95%) rename OSX/{osxgrabscreen.m => grabclient-osx.m} (93%) delete mode 100644 OSX/textclient-iOS.m create mode 100644 OSX/textclient-ios.m delete mode 100644 android/XScreenSaverDaydream.java.in delete mode 100644 android/XScreenSaverSettings.java.in delete mode 100644 android/grabscreen-android.c create mode 100644 android/project/project.iml create mode 100644 android/project/xscreensaver/.idea/compiler.xml create mode 100644 android/project/xscreensaver/.idea/gradle.xml create mode 100644 android/project/xscreensaver/.idea/misc.xml create mode 100644 android/project/xscreensaver/.idea/modules.xml create mode 100644 android/project/xscreensaver/.idea/workspace.xml create mode 100644 android/project/xscreensaver/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/project/xscreensaver/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/project/xscreensaver/gradlew create mode 100644 android/project/xscreensaver/gradlew.bat delete mode 120000 android/project/xscreensaver/jni/xscreensaver create mode 100644 android/project/xscreensaver/local.properties create mode 100644 android/project/xscreensaver/xscreensaver.iml create mode 100644 hacks/config/cubestack.xml create mode 100644 hacks/config/cubetwist.xml create mode 100644 hacks/config/discoball.xml create mode 100644 hacks/config/hexstrut.xml create mode 100644 hacks/config/splodesic.xml create mode 100644 hacks/glx/cubestack.c create mode 100644 hacks/glx/cubestack.man create mode 100644 hacks/glx/cubetwist.c create mode 100644 hacks/glx/cubetwist.man create mode 100644 hacks/glx/discoball.c create mode 100644 hacks/glx/discoball.man create mode 100644 hacks/glx/hexstrut.c create mode 100644 hacks/glx/hexstrut.man create mode 100644 hacks/glx/splodesic.c create mode 100644 hacks/glx/splodesic.man create mode 100644 hacks/images/m6502/greynetic.asm create mode 100644 hacks/images/m6502/life.asm create mode 100644 hacks/images/m6502/sflake.asm create mode 100644 hacks/images/m6502/sierpinski.asm diff --git a/OSX/Makefile b/OSX/Makefile index d8664552..4fd574ca 100644 --- a/OSX/Makefile +++ b/OSX/Makefile @@ -11,8 +11,7 @@ XCODE_APP = /Applications/Xcode.app TARGETS = All Savers ARCH = -arch i386 -arch x86_64 ONLY_ACTIVE_ARCH=NO -CERT = 'Jamie Zawinski' -CERT = 'iPhone Developer: Jamie Zawinski (Y5M82TL69N)' +CERT = 'Developer ID Installer: Jamie Zawinski (4627ATJELP)' PKGID = org.jwz.xscreensaver THUMBDIR = build/screenshots XCODEBUILD = $(XCODE_APP)/Contents/Developer/usr/bin/xcodebuild @@ -42,7 +41,6 @@ release:: distdepend $(XCODEBUILD) $(ARCH) -target "$(TARGETS)" -configuration Release build release:: check_versions -release:: sign Sparkle.framework: unzip ../archive/Sparkle.framework-2013-12-04.zip @@ -99,12 +97,6 @@ $(THUMBDIR)/%.png: fi -sign: - @for f in build/Release/*.app/Contents/*/*.saver \ - build/Release/*.{saver,app} ; do \ - codesign --deep -vfs $(CERT) $$f ; \ - done - check_versions: @\ SRC=../utils/version.h ; \ @@ -256,8 +248,9 @@ build/Release/installer.pkg: installer.rtf installer.xml installer.sh installer. \ DIST="installer.xml" ; \ STAGE="build/Release/pkg_stage" ; \ - PKG1="$@" ; \ - PKG2="$$STAGE/contents.pkg" ; \ + FINAL="$@" ; \ + UNSIGNED="$$STAGE/contents.pkg" ; \ + PRODUCT="$$STAGE/product_unsigned.pkg" ; \ SCRIPTS="$$STAGE/scripts" ; \ RES="$$STAGE/resources" ; \ \ @@ -270,14 +263,13 @@ build/Release/installer.pkg: installer.rtf installer.xml installer.sh installer. cp -p installer.rtf "$$RES/welcome.rtf" ; \ \ pkgbuild --identifier "$(PKGID)" --version "$$V" \ - --scripts "$$SCRIPTS" --nopayload "$$PKG2" ; \ - codesign -vfs $(CERT) "$$PKG2" ; \ - codesign -vd "$$PKG2" ; \ + --scripts "$$SCRIPTS" --nopayload "$$UNSIGNED" ; \ \ productbuild --distribution "$$DIST" --resources "$$RES" \ - --package-path "$$STAGE" --version "$$V" "$$PKG1" ; \ - codesign -vfs $(CERT) "$$PKG1" ; \ - codesign -vd "$$PKG1" ; \ + --package-path "$$STAGE" --version "$$V" "$$PRODUCT" ; \ + \ + productsign --sign $(CERT) "$$PRODUCT" "$$FINAL" ; \ + spctl --assess --verbose=4 --type install "$$FINAL" ; \ \ rm -rf "$$STAGE" ; \ @@ -348,12 +340,24 @@ dmg:: $(SETICON) -d ../../xdaliclock/OSX/daliclockSaver.icns \ "$$DST/DaliClock.saver" ; \ $(SETICON) -d XScreenSaverFolder.icns "$$DST" ; \ + $(SETICON) -d XScreenSaver.icns "$$DST"/*.saver ; \ + $(SETICON) -d SaverRunner.icns "$$DST"/*.app ; \ $(SETICON) -d XScreenSaverWebloc.icns "$$STAGE"/*.webloc ; \ $(SETICON) -d XScreenSaverPkg.icns "$$STAGE"/*.pkg ; \ mv "$$STAGE/bindist.webloc" "$$STAGE/Get the iPhone:iPad Version.webloc" ; \ + \ + set +x ; \ + echo "Checking signatures..." ; \ + spctl --assess --type install "$$PKG" ; \ + spctl --assess --type execute "$$SRC/XScreenSaverUpdater.app" ; \ + spctl --assess --type execute "$$DST/"*.app ; \ + spctl --assess --type install "$$DST/"*.saver ; \ + set -x ; \ + \ hdiutil makehybrid -quiet -ov -hfs -hfs-volume-name "$$VOLNAME" \ -hfs-openfolder "$$STAGE" "$$STAGE" -o "$$TMPDMG" ; \ rm -rf "$$STAGE" ; \ + \ hdiutil convert -quiet -ov -format UDBZ -imagekey zlib-level=9 \ "$$TMPDMG" -o "$$DMG" ; \ xattr -w com.apple.quarantine "0000;00000000;;" "$$DMG" ; \ diff --git a/OSX/README b/OSX/README index 555e8e25..acf589b2 100644 --- a/OSX/README +++ b/OSX/README @@ -18,7 +18,7 @@ ridiculously long list of steps! 3: Delete the dangerball.c and dangerball.xml files from Build Phases. 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 (maybe this automatic now?) + 6: - 7: Manage Schemes, rename "DangerBall Copy". 8: Move to the right place in the list. 9: Scheme / Run / Info: Executable: SaverTester.app. diff --git a/OSX/SaverRunner.h b/OSX/SaverRunner.h index bacfd386..73b83e9d 100644 --- a/OSX/SaverRunner.h +++ b/OSX/SaverRunner.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2006-2015 Jamie Zawinski +/* xscreensaver, Copyright (c) 2006-2016 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 @@ -67,6 +67,8 @@ @interface SaverRunner : NSObject # ifdef USE_IPHONE +# else + # endif { NSString *saverName; // the one currently loaded diff --git a/OSX/SaverRunner.m b/OSX/SaverRunner.m index ac010b9f..20ddd650 100644 --- a/OSX/SaverRunner.m +++ b/OSX/SaverRunner.m @@ -386,7 +386,10 @@ - (BOOL)shouldAutorotate /* Added in iOS 6 */ { - return YES; + return + NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0 ? + ![_saverView suppressRotationAnimation] : + YES; } @@ -1453,6 +1456,7 @@ FAIL: // or two windows for SaverTester.app. for (i = 0; i < window_count; i++) { NSWindow *win = [self makeWindow]; + [win setDelegate:self]; // Get the last-saved window position out of preferences. [win setFrameAutosaveName: [NSString stringWithFormat:@"XScreenSaverWindow%d", i]]; @@ -1460,6 +1464,7 @@ FAIL: [a addObject: win]; // This prevents clicks from being seen by savers. // [win setMovableByWindowBackground:YES]; + win.releasedWhenClosed = NO; [win release]; } # else // USE_IPHONE @@ -1596,6 +1601,18 @@ FAIL: return YES; } +/* When the window is about to close, stop its animation. + Without this, timers might fire after the window is dead. + */ +- (void)windowWillClose:(NSNotification *)notification +{ + NSWindow *win = [notification object]; + NSView *cv = win ? [win contentView] : 0; + ScreenSaverView *sv = cv ? find_saverView (cv) : 0; + if (sv && [sv isAnimating]) + [sv stopAnimation]; +} + # else // USE_IPHONE - (void)applicationWillResignActive:(UIApplication *)app diff --git a/OSX/SaverRunner.plist b/OSX/SaverRunner.plist index b3b74991..2384a81d 100644 --- a/OSX/SaverRunner.plist +++ b/OSX/SaverRunner.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleGetInfoString - 5.35 + 5.36 CFBundleIconFile SaverRunner CFBundleIdentifier @@ -15,21 +15,21 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 5.35 + 5.36 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 5.35 + 5.36 CFBundleSignature ???? CFBundleVersion - 5.35 + 5.36 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright - 5.35 + 5.36 NSMainNibFile SaverRunner NSPrincipalClass diff --git a/OSX/Updater.plist b/OSX/Updater.plist index 692f7a01..29f7f8d5 100644 --- a/OSX/Updater.plist +++ b/OSX/Updater.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleGetInfoString - 5.35 + 5.36 CFBundleIconFile SaverRunner CFBundleIdentifier @@ -17,23 +17,23 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 5.35 + 5.36 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 5.35 + 5.36 CFBundleSignature ???? CFBundleVersion - 5.35 + 5.36 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} LSUIElement NSHumanReadableCopyright - 5.35 + 5.36 NSMainNibFile Updater NSPrincipalClass diff --git a/OSX/XScreenSaver.plist b/OSX/XScreenSaver.plist index 9af74f5f..fc21ef71 100644 --- a/OSX/XScreenSaver.plist +++ b/OSX/XScreenSaver.plist @@ -15,13 +15,13 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 5.35 + 5.36 CFBundleSignature ???? CFBundleVersion - 5.35 + 5.36 LSMinimumSystemVersion - 10.4 + 10.8 NSMainNibFile SaverRunner NSPrincipalClass diff --git a/OSX/XScreenSaverConfigSheet.m b/OSX/XScreenSaverConfigSheet.m index 576c8ab3..51c13af4 100644 --- a/OSX/XScreenSaverConfigSheet.m +++ b/OSX/XScreenSaverConfigSheet.m @@ -712,6 +712,11 @@ static void layout_group (NSView *group, BOOL horiz_p); // Without the setAppliesImmediately:, when the saver restarts, it's still // got the old settings. -[XScreenSaverConfigSheet traverseTree] sets this // to NO; default is YES. + + // #### However: I'm told that when these are set to YES, then changes to + // 'textLiteral', 'textURL' and 'textProgram' are ignored, but 'textFile' + // works. In StarWars, at least... + [userDefaultsController setAppliesImmediately:YES]; [globalDefaultsController setAppliesImmediately:YES]; [userDefaultsController commitEditing]; diff --git a/OSX/XScreenSaverView.m b/OSX/XScreenSaverView.m index bc7f21a3..18f4a1aa 100644 --- a/OSX/XScreenSaverView.m +++ b/OSX/XScreenSaverView.m @@ -41,7 +41,12 @@ #ifndef MAC_OS_X_VERSION_10_6 # define MAC_OS_X_VERSION_10_6 1060 /* undefined in 10.4 SDK, grr */ #endif -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 /* 10.6 SDK */ +#ifndef MAC_OS_X_VERSION_10_12 +# define MAC_OS_X_VERSION_10_12 101200 +#endif +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 && \ + MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12) + /* 10.6 SDK or later, and earlier than 10.12 SDK */ # import # define DO_GC_HACKERY #endif @@ -433,6 +438,11 @@ add_default_options (const XrmOptionDescRec *opts, [self setBackgroundColor:[NSColor blackColor]]; # endif // USE_IPHONE +# ifdef JWXYZ_QUARTZ + // Colorspaces and CGContexts only happen with non-GL hacks. + colorspace = CGColorSpaceCreateDeviceRGB (); +# endif + return self; } @@ -997,7 +1007,7 @@ gl_check_ver (const struct gl_version *caps, gl_texture_target = GL_TEXTURE_2D; # endif - glBindTexture (gl_texture_target, &backbuffer_texture); + glBindTexture (gl_texture_target, backbuffer_texture); glTexParameteri (gl_texture_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // GL_LINEAR might make sense on Retina iPads. glTexParameteri (gl_texture_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); @@ -1140,25 +1150,6 @@ to_pow2 (size_t x) */ - (void) createBackbuffer:(CGSize)new_size { - // Colorspaces and CGContexts only happen with non-GL hacks. - if (colorspace) - CGColorSpaceRelease (colorspace); - - NSWindow *window = [self window]; - - if (window && xdpy) { - [self lockFocus]; - -# ifdef BACKBUFFER_OPENGL - // Was apparently faster until 10.9. - colorspace = CGColorSpaceCreateDeviceRGB (); -# endif // BACKBUFFER_OPENGL - - [self unlockFocus]; - } else { - colorspace = CGColorSpaceCreateDeviceRGB(); - } - CGSize osize = CGSizeZero; if (backbuffer) { osize.width = CGBitmapContextGetWidth(backbuffer); @@ -1475,7 +1466,8 @@ to_pow2 (size_t x) // landscape shape, swap width and height to keep the backbuffer // in portrait. // - if ([self ignoreRotation] && new_size.width > new_size.height) { + double rot = current_device_rotation(); + if ([self ignoreRotation] && (rot == 90 || rot == -90)) { CGFloat swap = new_size.width; new_size.width = new_size.height; new_size.height = swap; @@ -1486,6 +1478,7 @@ to_pow2 (size_t x) new_size.height *= s; # endif // USE_IPHONE + [self prepareContext]; [self setViewport]; // On first resize, xwindow->frame is 0x0. @@ -1493,8 +1486,6 @@ to_pow2 (size_t x) xwindow->frame.height == new_size.height) return; - [self prepareContext]; - # if defined(BACKBUFFER_OPENGL) && !defined(USE_IPHONE) [ogl_ctx update]; # endif // BACKBUFFER_OPENGL && !USE_IPHONE diff --git a/OSX/bindist.rtf b/OSX/bindist.rtf index a5ea639e..f9cb355b 100644 --- a/OSX/bindist.rtf +++ b/OSX/bindist.rtf @@ -16,8 +16,8 @@ \b0 by Jamie Zawinski\ and many others\ \ -version 5.35\ -24-May-2016\ +version 5.36\ +10-Oct-2016\ \ {\field{\*\fldinst{HYPERLINK "https://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 https://www.jwz.org/xscreensaver/}}\ \pard\pardeftab720 diff --git a/OSX/iosgrabimage.m b/OSX/grabclient-ios.m similarity index 95% rename from OSX/iosgrabimage.m rename to OSX/grabclient-ios.m index c861d736..e3e4a8e7 100644 --- a/OSX/iosgrabimage.m +++ b/OSX/grabclient-ios.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski +/* xscreensaver, Copyright (c) 1992-2016 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 @@ -73,7 +73,8 @@ ios_random_image_done (ios_loader_data *d, BOOL ok) scale: 1 orientation: orient]; if (img) - fn = [[rep filename] cStringUsingEncoding:NSUTF8StringEncoding]; + fn = [[[rep filename] stringByDeletingPathExtension] + cStringUsingEncoding:NSUTF8StringEncoding]; } } diff --git a/OSX/osxgrabscreen.m b/OSX/grabclient-osx.m similarity index 93% rename from OSX/osxgrabscreen.m rename to OSX/grabclient-osx.m index c7f4f15b..a0a949d7 100644 --- a/OSX/osxgrabscreen.m +++ b/OSX/grabclient-osx.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992-2012 Jamie Zawinski +/* xscreensaver, Copyright (c) 1992-2016 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 @@ -318,11 +318,34 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, we move ourselves temporarily below the login-window windows before capturing the image, we capture the real desktop as intended. + + Oct 2016: Surprise, this trick no longer works on MacOS 10.12. Sigh. */ // save our current level so we can restore it later int oldLevel = [[nsview window] level]; +# if 0 + { + FILE *f = fopen("/tmp/log.txt", "w"); + CFArrayRef L = CGWindowListCopyWindowInfo (kCGWindowListOptionOnScreenOnly, + kCGNullWindowID); + + fprintf(f, "# %d\n", [[nsview window] windowNumber]); + + int n = CFArrayGetCount(L); + for (int i = 0; i < n; i++) { + NSDictionary *dict = (NSDictionary *) CFArrayGetValueAtIndex(L, i); + fprintf(f, + "%d \"%s\"\n", + (int) [dict objectForKey:kCGWindowNumber], + [(NSString *) [dict objectForKey:kCGWindowOwnerName] + cStringUsingEncoding:[NSString defaultCStringEncoding]]); + } + fclose(f); + } +#endif + [[nsview window] setLevel:CGWindowLevelForKey(kCGPopUpMenuWindowLevelKey)]; // Grab a screen shot of those windows below this one @@ -440,7 +463,7 @@ osx_load_image_file (Screen *screen, Window xwindow, Drawable drawable, # else /* USE_IPHONE */ - /* This is handled differently: see grabclient.c and iosgrabimage.m. */ + /* This is handled differently: see grabclient.c and grabclient-ios.m. */ return False; # endif /* USE_IPHONE */ diff --git a/OSX/iSaverRunner.plist b/OSX/iSaverRunner.plist index e6276948..2f7a19a5 100644 --- a/OSX/iSaverRunner.plist +++ b/OSX/iSaverRunner.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleGetInfoString - 5.35 + 5.36 CFBundleIcons CFBundleIcons~ipad @@ -19,21 +19,21 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 5.35 + 5.36 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 5.35 + 5.36 CFBundleSignature ???? CFBundleVersion - 5.35 + 5.36 LSRequiresIPhoneOS NSHumanReadableCopyright - 5.35 + 5.36 NSMainNibFile iSaverRunner UIAppFonts @@ -65,5 +65,6 @@ UIViewControllerBasedStatusBarAppearance - + NSPhotoLibraryUsageDescription + XScreenSaver displays manipulated versions of your photos. diff --git a/OSX/installer.sh b/OSX/installer.sh index 05e1b23f..fa92beb3 100755 --- a/OSX/installer.sh +++ b/OSX/installer.sh @@ -1,5 +1,5 @@ #!/bin/sh -# XScreenSaver, Copyright © 2013-2014 Jamie Zawinski +# XScreenSaver, Copyright © 2013-2016 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 @@ -67,9 +67,11 @@ DST1="$DSTVOLUME/Library/Screen Savers" DST2="$DSTVOLUME/Applications" PU="$DSTVOLUME/$HOME/Library/Screen Savers" -# Because of Sparkle.framework weirdness, ".XScreenSaverUpdater.app" -# is in the DMG, and we remove the leading dot when installing it. -# Without this, auto-updates won't work right. +# Because of Sparkle.framework weirdness, "XScreenSaverUpdater.app" is +# in the DMG as a compressed tar file instead of an app, and we unpack +# it when installing. Without this, auto-updates won't work: If there's +# an .app there, Sparkle thinks that "XScreenSaverUpdater.app" is the +# thing it should be updating instead of "Install Everything.pkg". # UPDATER_SRC="XScreenSaver.updater" UPDATER_DST="XScreenSaverUpdater.app" diff --git a/OSX/ios-function-table.m b/OSX/ios-function-table.m index b66570d0..52b8340d 100644 --- a/OSX/ios-function-table.m +++ b/OSX/ios-function-table.m @@ -1,5 +1,5 @@ /* Generated file, do not edit. - Created: Thu May 5 22:34:31 2016 by build-fntable.pl 1.5. + Created: Sat Sep 3 00:49:37 2016 by build-fntable.pl 1.5. */ #import @@ -48,7 +48,9 @@ extern struct xscreensaver_function_table crystal_xscreensaver_function_table, cube21_xscreensaver_function_table, cubenetic_xscreensaver_function_table, + cubestack_xscreensaver_function_table, cubestorm_xscreensaver_function_table, + cubetwist_xscreensaver_function_table, cubicgrid_xscreensaver_function_table, cwaves_xscreensaver_function_table, cynosure_xscreensaver_function_table, @@ -57,6 +59,7 @@ extern struct xscreensaver_function_table deco_xscreensaver_function_table, deluxe_xscreensaver_function_table, demon_xscreensaver_function_table, + discoball_xscreensaver_function_table, discrete_xscreensaver_function_table, distort_xscreensaver_function_table, dnalogo_xscreensaver_function_table, @@ -103,6 +106,7 @@ extern struct xscreensaver_function_table halo_xscreensaver_function_table, helix_xscreensaver_function_table, hexadrop_xscreensaver_function_table, + hexstrut_xscreensaver_function_table, hilbert_xscreensaver_function_table, hopalong_xscreensaver_function_table, hydrostat_xscreensaver_function_table, @@ -183,6 +187,7 @@ extern struct xscreensaver_function_table speedmine_xscreensaver_function_table, spheremonics_xscreensaver_function_table, splitflap_xscreensaver_function_table, + splodesic_xscreensaver_function_table, spotlight_xscreensaver_function_table, sproingies_xscreensaver_function_table, squiral_xscreensaver_function_table, @@ -274,7 +279,9 @@ NSDictionary *make_function_table_dict(void) [NSValue valueWithPointer:&crystal_xscreensaver_function_table], @"crystal", [NSValue valueWithPointer:&cube21_xscreensaver_function_table], @"cube21", [NSValue valueWithPointer:&cubenetic_xscreensaver_function_table], @"cubenetic", + [NSValue valueWithPointer:&cubestack_xscreensaver_function_table], @"cubestack", [NSValue valueWithPointer:&cubestorm_xscreensaver_function_table], @"cubestorm", + [NSValue valueWithPointer:&cubetwist_xscreensaver_function_table], @"cubetwist", [NSValue valueWithPointer:&cubicgrid_xscreensaver_function_table], @"cubicgrid", [NSValue valueWithPointer:&cwaves_xscreensaver_function_table], @"cwaves", [NSValue valueWithPointer:&cynosure_xscreensaver_function_table], @"cynosure", @@ -283,6 +290,7 @@ NSDictionary *make_function_table_dict(void) [NSValue valueWithPointer:&deco_xscreensaver_function_table], @"deco", [NSValue valueWithPointer:&deluxe_xscreensaver_function_table], @"deluxe", [NSValue valueWithPointer:&demon_xscreensaver_function_table], @"demon", + [NSValue valueWithPointer:&discoball_xscreensaver_function_table], @"discoball", [NSValue valueWithPointer:&discrete_xscreensaver_function_table], @"discrete", [NSValue valueWithPointer:&distort_xscreensaver_function_table], @"distort", [NSValue valueWithPointer:&dnalogo_xscreensaver_function_table], @"dnalogo", @@ -329,6 +337,7 @@ NSDictionary *make_function_table_dict(void) [NSValue valueWithPointer:&halo_xscreensaver_function_table], @"halo", [NSValue valueWithPointer:&helix_xscreensaver_function_table], @"helix", [NSValue valueWithPointer:&hexadrop_xscreensaver_function_table], @"hexadrop", + [NSValue valueWithPointer:&hexstrut_xscreensaver_function_table], @"hexstrut", [NSValue valueWithPointer:&hilbert_xscreensaver_function_table], @"hilbert", [NSValue valueWithPointer:&hopalong_xscreensaver_function_table], @"hopalong", [NSValue valueWithPointer:&hydrostat_xscreensaver_function_table], @"hydrostat", @@ -409,6 +418,7 @@ NSDictionary *make_function_table_dict(void) [NSValue valueWithPointer:&speedmine_xscreensaver_function_table], @"speedmine", [NSValue valueWithPointer:&spheremonics_xscreensaver_function_table], @"spheremonics", [NSValue valueWithPointer:&splitflap_xscreensaver_function_table], @"splitflap", + [NSValue valueWithPointer:&splodesic_xscreensaver_function_table], @"splodesic", [NSValue valueWithPointer:&spotlight_xscreensaver_function_table], @"spotlight", [NSValue valueWithPointer:&sproingies_xscreensaver_function_table], @"sproingies", [NSValue valueWithPointer:&squiral_xscreensaver_function_table], @"squiral", diff --git a/OSX/seticon.pl b/OSX/seticon.pl index 69faf687..e62bb291 100755 --- a/OSX/seticon.pl +++ b/OSX/seticon.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2015 Dave Odell +# Copyright © 2015-2016 Dave Odell # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -18,7 +18,7 @@ use strict; use File::Temp; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.4 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.5 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; @@ -84,18 +84,20 @@ sub usage() { } sub main() { - my ($d, $src, $dst); + my ($src, @dst); while ($#ARGV >= 0) { $_ = shift @ARGV; if (m/^--?verbose$/s) { $verbose++; } elsif (m/^-v+$/s) { $verbose += length($_)-1; } - elsif (m/^-d$/s) { $d = 1; } - elsif (!defined($src)) { $src = $_; } - elsif (!defined($dst)) { $dst = $_; } - else { usage; } + elsif (m/^-d$/s) { $src = shift @ARGV; } + elsif (m/^-/s) { usage(); } + else { push @dst, $_; } + } + error ("no source") unless defined($src); + error ("no files") unless @dst; + foreach my $f (@dst) { + set_icon ($src, $f); } - usage() unless ($d && $src); - set_icon ($src, $dst); } main(); diff --git a/OSX/textclient-iOS.m b/OSX/textclient-iOS.m deleted file mode 100644 index 7e572919..00000000 --- a/OSX/textclient-iOS.m +++ /dev/null @@ -1,71 +0,0 @@ -/* xscreensaver, Copyright (c) 2012-2016 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. - * - * Loading URLs and returning the underlying text. - * - * This is necessary because iOS doesn't have Perl installed, so we can't - * run "xscreensaver-text" to do this. - */ - -#include "utils.h" - -#ifdef USE_IPHONE // whole file - -#include "textclient.h" - -char * -textclient_mobile_date_string (void) -{ - UIDevice *dd = [UIDevice currentDevice]; - NSString *name = [dd name]; // My iPhone - NSString *model = [dd model]; // iPad - // NSString *system = [dd systemName]; // iPhone OS - NSString *vers = [dd systemVersion]; // 5.0 - NSString *date = - [NSDateFormatter - localizedStringFromDate:[NSDate date] - dateStyle: NSDateFormatterMediumStyle - timeStyle: NSDateFormatterMediumStyle]; - NSString *nl = @"\n"; - - NSString *result = name; - result = [result stringByAppendingString: nl]; - result = [result stringByAppendingString: model]; - // result = [result stringByAppendingString: nl]; - // result = [result stringByAppendingString: system]; - result = [result stringByAppendingString: @" "]; - result = [result stringByAppendingString: vers]; - result = [result stringByAppendingString: nl]; - result = [result stringByAppendingString: nl]; - result = [result stringByAppendingString: date]; - result = [result stringByAppendingString: nl]; - result = [result stringByAppendingString: nl]; - return strdup ([result cStringUsingEncoding:NSISOLatin1StringEncoding]); -} - - -/* Returns the contents of the URL. */ -char * -textclient_mobile_url_string (Display *dpy, const char *url) -{ - NSURL *nsurl = - [NSURL URLWithString: - [NSString stringWithCString: url - encoding:NSISOLatin1StringEncoding]]; - NSString *body = - [NSString stringWithContentsOfURL: nsurl - encoding: NSUTF8StringEncoding - error: nil]; - return (body - ? strdup ([body cStringUsingEncoding:NSUTF8StringEncoding]) - : 0); -} - -#endif // USE_IPHONE -- whole file diff --git a/OSX/textclient-ios.m b/OSX/textclient-ios.m new file mode 100644 index 00000000..5db53114 --- /dev/null +++ b/OSX/textclient-ios.m @@ -0,0 +1,129 @@ +/* xscreensaver, Copyright (c) 2012-2016 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. + * + * Loading URLs and returning the underlying text. + * + * This is necessary because iOS doesn't have Perl installed, so we can't + * run "xscreensaver-text" to do this. + */ + +#include "utils.h" + +#ifdef USE_IPHONE // whole file + +#include "textclient.h" + +char * +textclient_mobile_date_string (void) +{ + UIDevice *dd = [UIDevice currentDevice]; + NSString *name = [dd name]; // My iPhone + NSString *model = [dd model]; // iPad + // NSString *system = [dd systemName]; // iPhone OS + NSString *vers = [dd systemVersion]; // 5.0 + NSString *date = + [NSDateFormatter + localizedStringFromDate:[NSDate date] + dateStyle: NSDateFormatterMediumStyle + timeStyle: NSDateFormatterMediumStyle]; + NSString *nl = @"\n"; + + NSString *result = name; + result = [result stringByAppendingString: nl]; + result = [result stringByAppendingString: model]; + // result = [result stringByAppendingString: nl]; + // result = [result stringByAppendingString: system]; + result = [result stringByAppendingString: @" "]; + result = [result stringByAppendingString: vers]; + result = [result stringByAppendingString: nl]; + result = [result stringByAppendingString: nl]; + result = [result stringByAppendingString: date]; + result = [result stringByAppendingString: nl]; + result = [result stringByAppendingString: nl]; + return strdup ([result cStringUsingEncoding:NSISOLatin1StringEncoding]); +} + + +@interface TextLoader : NSObject +@property (nonatomic, retain) NSURL *url; +@property (nonatomic, retain) NSString *result; +@end + +@implementation TextLoader +{ + NSURL *_url; + NSString *_result; +} + ++ (TextLoader *) sharedLoader +{ + static TextLoader *singleton = nil; + @synchronized(self) { + if (!singleton) + singleton = [[self alloc] init]; + } + return singleton; +} + +- (void) startLoading +{ + // NSLog(@"textclient thread loading %@", self.url); + self.result = [NSString stringWithContentsOfURL: self.url + encoding: NSUTF8StringEncoding + error: nil]; + // NSLog(@"textclient thread finished %@ (length %d)", self.url, + // (unsigned int) [self.result length]); +} + +@end + + + +/* Returns the contents of the URL. + Loads the URL in a background thread: if the URL has not yet loaded, + this will return NULL. Once the URL has completely loaded, the full + contents will be returned. Calling this again after that starts the + URL loading again. + */ +char * +textclient_mobile_url_string (Display *dpy, const char *url) +{ + TextLoader *loader = [TextLoader sharedLoader]; + NSString *result = [loader result]; + + // Since this is a singleton, it's possible that if hack #1 starts + // URL #1 loading and then quickly exits, and then hack #2 asks for + // URL #2, it might get URL #1 instead. Oh well, who cares. + + if (result) { // Thread finished + // NSLog(@"textclient finished %s (length %d)", url, + // (unsigned int) [result length]); + char *s = strdup ([result cStringUsingEncoding:NSUTF8StringEncoding]); + loader.url = nil; + loader.result = nil; + return s; + + } else if ([loader url]) { // Waiting on thread + // NSLog(@"textclient waiting..."); + return 0; + + } else { // Launch thread + // NSLog(@"textclient launching %s...", url); + loader.url = + [NSURL URLWithString: + [NSString stringWithCString: url + encoding:NSISOLatin1StringEncoding]]; + [NSThread detachNewThreadSelector: @selector(startLoading) + toTarget: loader withObject: nil]; + return 0; + } +} + +#endif // USE_IPHONE -- whole file diff --git a/OSX/update-info-plist.pl b/OSX/update-info-plist.pl index 2b7968c3..72040c56 100755 --- a/OSX/update-info-plist.pl +++ b/OSX/update-info-plist.pl @@ -27,7 +27,7 @@ use IO::Compress::Gzip qw(gzip $GzipError); my ($exec_dir, $progname) = ($0 =~ m@^(.*?)/([^/]+)$@); -my ($version) = ('$Revision: 1.45 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.46 $' =~ m/\s(\d[.\d]+)\s/s); $ENV{PATH} = "/usr/local/bin:$ENV{PATH}"; # for seticon $ENV{PATH} = "/opt/local/bin:$ENV{PATH}"; # for macports wget @@ -463,7 +463,10 @@ sub update($) { } } - set_icon ($app_dir); + # MacOS 10.12: codesign says "resource fork, Finder information, or + # similar detritus not allowed" if any bundle has an Icon\r file. + # set_icon ($app_dir); + set_thumb ($app_dir); # enable_gc ($app_dir); fix_coretext ($app_dir) diff --git a/OSX/xscreensaver.xcodeproj/project.pbxproj b/OSX/xscreensaver.xcodeproj/project.pbxproj index ae75ecf7..9e35b4f5 100644 --- a/OSX/xscreensaver.xcodeproj/project.pbxproj +++ b/OSX/xscreensaver.xcodeproj/project.pbxproj @@ -203,9 +203,12 @@ AF777A4909B660B500EA3033 /* PBXTargetDependency */, AF777A4709B660B500EA3033 /* PBXTargetDependency */, AF777A4509B660B500EA3033 /* PBXTargetDependency */, + AFEE108A1D15EBF900AAC8F7 /* PBXTargetDependency */, AF777A4309B660B500EA3033 /* PBXTargetDependency */, + AFEE106B1D13424C00AAC8F7 /* PBXTargetDependency */, AF4FF4D70D52CD0D00666F98 /* PBXTargetDependency */, AF777A4109B660B500EA3033 /* PBXTargetDependency */, + AF3938381D0FBF5300205406 /* PBXTargetDependency */, AF777A3F09B660B500EA3033 /* PBXTargetDependency */, AFEC23EB1CB6ED0800DE138F /* PBXTargetDependency */, AF777A3D09B660B500EA3033 /* PBXTargetDependency */, @@ -231,6 +234,7 @@ AF777A1D09B660B300EA3033 /* PBXTargetDependency */, AF777A1B09B660B300EA3033 /* PBXTargetDependency */, AF777A1909B660B300EA3033 /* PBXTargetDependency */, + AF1B0FC51D7AB5740011DBE4 /* PBXTargetDependency */, AF4F10F0143450C300E34F3F /* PBXTargetDependency */, AFC0E8C91CDC6125008CAFAC /* PBXTargetDependency */, AF777A1709B660B300EA3033 /* PBXTargetDependency */, @@ -270,6 +274,7 @@ AFE2A46F0E2E908E00ADB298 /* PBXTargetDependency */, AF7779EB09B660B000EA3033 /* PBXTargetDependency */, AFCF835C1AF5B683008BB7E1 /* PBXTargetDependency */, + AFEE10A91D17E32100AAC8F7 /* PBXTargetDependency */, AF7779E909B660B000EA3033 /* PBXTargetDependency */, AF7779E709B660B000EA3033 /* PBXTargetDependency */, AF7779E509B660B000EA3033 /* PBXTargetDependency */, @@ -379,6 +384,18 @@ AF1ADA1A1850186B00932759 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; AF1ADA1B18501B3D00932759 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AF1ADA1F18504A4F00932759 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AF1B0FAE1D7AB4740011DBE4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AF1B0FB01D7AB4740011DBE4 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AF1B0FB11D7AB4740011DBE4 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AF1B0FB21D7AB4740011DBE4 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AF1B0FB31D7AB4740011DBE4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AF1B0FB41D7AB4740011DBE4 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AF1B0FB51D7AB4740011DBE4 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AF1B0FB61D7AB4740011DBE4 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AF1B0FC01D7AB5330011DBE4 /* hexstrut.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */; }; + AF1B0FC11D7AB53A0011DBE4 /* hexstrut.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */; }; + AF1B0FC21D7AB54D0011DBE4 /* hexstrut.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */; }; + AF1B0FC31D7AB5500011DBE4 /* hexstrut.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF1FD713158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD714158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD715158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; @@ -1506,6 +1523,18 @@ AF35EB260E6382BA00691F2F /* jigsaw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35EB250E6382BA00691F2F /* jigsaw.c */; }; AF3633FC18530DD90086A439 /* sparkle_dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */; }; AF3633FD18530DD90086A439 /* Updater.m in Sources */ = {isa = PBXBuildFile; fileRef = AF3633FB18530DD90086A439 /* Updater.m */; }; + AF3938211D0FBD6A00205406 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AF3938231D0FBD6A00205406 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AF3938241D0FBD6A00205406 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AF3938251D0FBD6A00205406 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AF3938261D0FBD6A00205406 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AF3938271D0FBD6A00205406 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AF3938281D0FBD6A00205406 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AF3938291D0FBD6A00205406 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AF3938331D0FBF0100205406 /* discoball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3938321D0FBEC800205406 /* discoball.xml */; }; + AF3938341D0FBF1900205406 /* discoball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3938311D0FBEC800205406 /* discoball.c */; }; + AF3938351D0FBF1D00205406 /* discoball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3938311D0FBEC800205406 /* discoball.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AF3938361D0FBF2700205406 /* discoball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3938321D0FBEC800205406 /* discoball.xml */; }; AF39483E15A164680000FFCD /* jigsaw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35EB250E6382BA00691F2F /* jigsaw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF39483F15A1647A0000FFCD /* jigsaw.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CF0988A468000655EE /* jigsaw.xml */; }; AF39E289198A11F60064A58D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; @@ -1729,8 +1758,9 @@ AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; }; AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; }; AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; - AF561DF615969BC3007CA5ED /* iosgrabimage.m in Sources */ = {isa = PBXBuildFile; fileRef = AF561DF515969BC3007CA5ED /* iosgrabimage.m */; }; + AF561DF615969BC3007CA5ED /* grabclient-ios.m in Sources */ = {isa = PBXBuildFile; fileRef = AF561DF515969BC3007CA5ED /* grabclient-ios.m */; }; AF561DF815969C5B007CA5ED /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; + AF5BEEFD1D2AFE21002E6D51 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AF5C9AFD1A0CCE6E00B0147A /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF5C9B001A0CCE6E00B0147A /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF5C9B021A0CCE6E00B0147A /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; @@ -2762,7 +2792,7 @@ AF9D466D09B5109C006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D467909B5110B006E59CF /* decayscreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D467809B5110B006E59CF /* decayscreen.c */; }; AF9D467A09B51126006E59CF /* decayscreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258930988A468000655EE /* decayscreen.xml */; }; - AF9D468F09B51567006E59CF /* osxgrabscreen.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9D468E09B51567006E59CF /* osxgrabscreen.m */; }; + AF9D468F09B51567006E59CF /* grabclient-osx.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9D468E09B51567006E59CF /* grabclient-osx.m */; }; AF9D473809B52EE0006E59CF /* colorbars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D473609B52EE0006E59CF /* colorbars.c */; }; AF9D473909B52EE0006E59CF /* colorbars.h in Headers */ = {isa = PBXBuildFile; fileRef = AF9D473709B52EE0006E59CF /* colorbars.h */; }; AF9D474A09B5300A006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; @@ -3047,7 +3077,7 @@ AFC43E7C1C6AA78800C89999 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AFC7592D158D8E8B00C5458E /* textclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592B158D8E8B00C5458E /* textclient.c */; }; AFC7592E158D8E8B00C5458E /* textclient.h in Headers */ = {isa = PBXBuildFile; fileRef = AFC7592C158D8E8B00C5458E /* textclient.h */; }; - AFC75930158D9A7A00C5458E /* textclient-iOS.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592F158D9A7A00C5458E /* textclient-iOS.m */; }; + AFC75930158D9A7A00C5458E /* textclient-ios.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592F158D9A7A00C5458E /* textclient-ios.m */; }; AFCCCBB009BFE4B000353F4D /* rdbomb.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */; }; AFCCCBB309BFE51900353F4D /* thornbird.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259230988A469000655EE /* thornbird.xml */; }; AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77787609B653DC00EA3033 /* dnalogo.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; @@ -3231,6 +3261,42 @@ AFEC23E91CB6EC7F00DE138F /* dymaxionmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEC68371BD6CA85004C1B64 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AFEC68391BD6CDF9004C1B64 /* YearlReg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */; }; + AFEE10541D13406000AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AFEE10561D13406000AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AFEE10571D13406000AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AFEE10581D13406000AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AFEE10591D13406000AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AFEE105A1D13406000AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AFEE105B1D13406000AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AFEE105C1D13406000AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AFEE10661D1341F600AAC8F7 /* cubetwist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10641D1341E300AAC8F7 /* cubetwist.c */; }; + AFEE10671D1341FA00AAC8F7 /* cubetwist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10641D1341E300AAC8F7 /* cubetwist.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFEE10681D1341FE00AAC8F7 /* cubetwist.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10651D1341E300AAC8F7 /* cubetwist.xml */; }; + AFEE10691D13420700AAC8F7 /* cubetwist.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10651D1341E300AAC8F7 /* cubetwist.xml */; }; + AFEE10731D15EB0800AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AFEE10751D15EB0800AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AFEE10761D15EB0800AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AFEE10771D15EB0800AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AFEE10781D15EB0800AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AFEE10791D15EB0800AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AFEE107A1D15EB0800AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AFEE107B1D15EB0800AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AFEE10851D15EBB900AAC8F7 /* cubestack.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10831D15EBA600AAC8F7 /* cubestack.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFEE10861D15EBC800AAC8F7 /* cubestack.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10831D15EBA600AAC8F7 /* cubestack.c */; }; + AFEE10871D15EBD900AAC8F7 /* cubestack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10841D15EBA600AAC8F7 /* cubestack.xml */; }; + AFEE10881D15EBDC00AAC8F7 /* cubestack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10841D15EBA600AAC8F7 /* cubestack.xml */; }; + AFEE10921D17E20B00AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AFEE10941D17E20B00AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AFEE10951D17E20B00AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AFEE10961D17E20B00AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AFEE10971D17E20B00AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AFEE10981D17E20B00AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AFEE10991D17E20B00AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AFEE109A1D17E20B00AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AFEE10A41D17E2BA00AAC8F7 /* splodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10A21D17E2B300AAC8F7 /* splodesic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFEE10A51D17E2C500AAC8F7 /* splodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10A21D17E2B300AAC8F7 /* splodesic.c */; }; + AFEE10A61D17E2C900AAC8F7 /* splodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */; }; + AFEE10A71D17E2CD00AAC8F7 /* splodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */; }; AFF1BA0F19A96D8B0016A88D /* lament_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF1BA0E19A96D8B0016A88D /* lament_model.c */; }; AFF1BA1019A96D8B0016A88D /* lament_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF1BA0E19A96D8B0016A88D /* lament_model.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; @@ -3695,6 +3761,20 @@ remoteGlobalIDString = AF1A17610D6D6EE3008AF328; remoteInfo = LCDscrub; }; + AF1B0FA91D7AB4740011DBE4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AF1B0FC41D7AB5740011DBE4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF1B0FA71D7AB4740011DBE4; + remoteInfo = Hexstrut; + }; AF32D9E20F3AD0B40080F535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -3744,6 +3824,20 @@ remoteGlobalIDString = AF1AD9E118500F9F00932759; remoteInfo = XScreenSaverUpdater; }; + AF39381C1D0FBD6A00205406 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AF3938371D0FBF5300205406 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF39381A1D0FBD6A00205406; + remoteInfo = Discoball; + }; AF39E284198A11F60064A58D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -6985,6 +7079,48 @@ remoteGlobalIDString = AFEC23CD1CB6EAE100DE138F; remoteInfo = DymaxionMap; }; + AFEE104F1D13406000AAC8F7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AFEE106A1D13424C00AAC8F7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AFEE104D1D13406000AAC8F7; + remoteInfo = CubeTwist; + }; + AFEE106E1D15EB0700AAC8F7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AFEE10891D15EBF900AAC8F7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AFEE106C1D15EB0700AAC8F7; + remoteInfo = CubeStack; + }; + AFEE108D1D17E20B00AAC8F7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AFEE10A81D17E32100AAC8F7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AFEE108B1D17E20B00AAC8F7; + remoteInfo = Splodesic; + }; AFF2868117860E830050A578 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -7130,6 +7266,9 @@ AF1ADA0118500FA100932759 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; AF1ADA151850157400932759 /* Updater.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Updater.xib; sourceTree = SOURCE_ROOT; }; AF1ADA171850180E00932759 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; + AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hexstrut.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hexstrut.c; path = hacks/glx/hexstrut.c; sourceTree = ""; }; + AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hexstrut.xml; sourceTree = ""; }; AF241F81107C38DF00046A84 /* dropshadow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dropshadow.c; path = hacks/glx/dropshadow.c; sourceTree = ""; }; AF241F82107C38DF00046A84 /* dropshadow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = dropshadow.h; path = hacks/glx/dropshadow.h; sourceTree = ""; }; AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; @@ -7162,6 +7301,9 @@ AF3633FA18530DD90086A439 /* Updater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Updater.h; sourceTree = ""; }; AF3633FB18530DD90086A439 /* Updater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Updater.m; sourceTree = ""; }; AF3633FE18530DFF0086A439 /* Updater.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Updater.plist; sourceTree = ""; }; + AF39382F1D0FBD6A00205406 /* Discoball.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Discoball.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AF3938311D0FBEC800205406 /* discoball.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = discoball.c; path = hacks/glx/discoball.c; sourceTree = ""; }; + AF3938321D0FBEC800205406 /* discoball.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = discoball.xml; sourceTree = ""; }; AF39E296198A11F60064A58D /* WindupRobot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WindupRobot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF39E2A0198A13F50064A58D /* robot-wireframe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "robot-wireframe.c"; path = "hacks/glx/robot-wireframe.c"; sourceTree = ""; }; AF39E2A1198A13F50064A58D /* winduprobot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = winduprobot.c; path = hacks/glx/winduprobot.c; sourceTree = ""; }; @@ -7324,7 +7466,7 @@ AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubicgrid.xml; sourceTree = ""; }; AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = iSaverRunner.xib; sourceTree = ""; }; AF561DF3159651A7007CA5ED /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - AF561DF515969BC3007CA5ED /* iosgrabimage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iosgrabimage.m; sourceTree = ""; }; + AF561DF515969BC3007CA5ED /* grabclient-ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "grabclient-ios.m"; sourceTree = ""; }; AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks/AssetsLibrary.framework; sourceTree = DEVELOPER_DIR; }; AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cityflow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cityflow.xml; sourceTree = ""; }; @@ -7479,7 +7621,7 @@ AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */ = {isa = PBXFileReference; fileEncoding = 5; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverSubclass.m; sourceTree = ""; }; AF9D467609B5109C006E59CF /* DecayScreen.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DecayScreen.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D467809B5110B006E59CF /* decayscreen.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = decayscreen.c; path = hacks/decayscreen.c; sourceTree = ""; }; - AF9D468E09B51567006E59CF /* osxgrabscreen.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = osxgrabscreen.m; sourceTree = ""; }; + AF9D468E09B51567006E59CF /* grabclient-osx.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = "grabclient-osx.m"; sourceTree = ""; }; AF9D473609B52EE0006E59CF /* colorbars.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colorbars.c; path = utils/colorbars.c; sourceTree = ""; }; AF9D473709B52EE0006E59CF /* colorbars.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colorbars.h; path = utils/colorbars.h; sourceTree = ""; }; AF9D475409B5300A006E59CF /* SlideScreen.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideScreen.saver; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -7914,7 +8056,7 @@ AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = PxPlus_IBM_VGA8.ttf; sourceTree = ""; }; AFC7592B158D8E8B00C5458E /* textclient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = textclient.c; path = utils/textclient.c; sourceTree = ""; }; AFC7592C158D8E8B00C5458E /* textclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = textclient.h; path = utils/textclient.h; sourceTree = ""; }; - AFC7592F158D9A7A00C5458E /* textclient-iOS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "textclient-iOS.m"; path = "OSX/textclient-iOS.m"; sourceTree = ""; }; + AFC7592F158D9A7A00C5458E /* textclient-ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "textclient-ios.m"; path = "OSX/textclient-ios.m"; sourceTree = ""; }; AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rdbomb.xml; sourceTree = ""; }; AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SplitFlap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = splitflap.xml; sourceTree = ""; }; @@ -8005,7 +8147,7 @@ AFE1FD410981E32E00F7970E /* InvertedSlider.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = InvertedSlider.h; sourceTree = ""; }; AFE1FD420981E32E00F7970E /* InvertedSlider.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = InvertedSlider.m; sourceTree = ""; }; AFE1FD430981E32E00F7970E /* jwxyz.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = jwxyz.h; path = ../jwxyz/jwxyz.h; sourceTree = ""; }; - AFE1FD440981E32E00F7970E /* jwxyz.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = ../jwxyz/jwxyz.m; sourceTree = ""; }; + AFE1FD440981E32E00F7970E /* jwxyz.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; name = jwxyz.m; path = ../jwxyz/jwxyz.m; sourceTree = ""; }; AFE1FD470981E32E00F7970E /* PrefsReader.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = PrefsReader.h; sourceTree = ""; }; AFE1FD480981E32E00F7970E /* PrefsReader.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = PrefsReader.m; sourceTree = ""; }; AFE1FD530981E3CB00F7970E /* erase.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = erase.c; path = utils/erase.c; sourceTree = ""; }; @@ -8048,6 +8190,15 @@ AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = dymaxionmap.xml; sourceTree = ""; }; AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = OCRAStd.otf; sourceTree = ""; }; AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = YearlReg.ttf; sourceTree = ""; }; + AFEE10621D13406000AAC8F7 /* CubeTwist.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeTwist.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AFEE10641D1341E300AAC8F7 /* cubetwist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cubetwist.c; path = hacks/glx/cubetwist.c; sourceTree = ""; }; + AFEE10651D1341E300AAC8F7 /* cubetwist.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cubetwist.xml; sourceTree = ""; }; + AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeStack.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AFEE10831D15EBA600AAC8F7 /* cubestack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cubestack.c; path = hacks/glx/cubestack.c; sourceTree = ""; }; + AFEE10841D15EBA600AAC8F7 /* cubestack.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cubestack.xml; sourceTree = ""; }; + AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Splodesic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AFEE10A21D17E2B300AAC8F7 /* splodesic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splodesic.c; path = hacks/glx/splodesic.c; sourceTree = ""; }; + AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = splodesic.xml; sourceTree = ""; }; AFF1BA0E19A96D8B0016A88D /* lament_model.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lament_model.c; path = hacks/glx/lament_model.c; sourceTree = ""; }; 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 = ""; }; @@ -8067,9 +8218,9 @@ CE3D01661B76F4C100993C75 /* TestX11.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestX11.saver; sourceTree = BUILT_PRODUCTS_DIR; }; CE3D01681B76F83E00993C75 /* testx11.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = testx11.xml; sourceTree = ""; }; CE3D016A1B76F8E200993C75 /* testx11.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testx11.c; path = hacks/testx11.c; sourceTree = ""; }; - CE43C2BE1C055157004C2BC6 /* jwxyz-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "../jwxyz/jwxyz-cocoa.m"; sourceTree = ""; }; + CE43C2BE1C055157004C2BC6 /* jwxyz-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "jwxyz-cocoa.m"; path = "../jwxyz/jwxyz-cocoa.m"; sourceTree = ""; }; CE5564591C25141000645458 /* jwxyz-gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-gl.c"; path = "../jwxyz/jwxyz-gl.c"; sourceTree = ""; }; - CE8206741B89048800E35532 /* jwxyz-cocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "../jwxyz/jwxyz-cocoa.h"; sourceTree = ""; }; + CE8206741B89048800E35532 /* jwxyz-cocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jwxyz-cocoa.h"; path = "../jwxyz/jwxyz-cocoa.h"; sourceTree = ""; }; CE8C49CC1C011CC400BA2DCF /* jwxyzI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jwxyzI.h; path = ../jwxyz/jwxyzI.h; sourceTree = ""; }; CE8EA1C11C35CF10002D1020 /* jwxyz-common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-common.c"; path = "../jwxyz/jwxyz-common.c"; sourceTree = ""; }; CE9289D119BD00E200961F22 /* async_netdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = async_netdb.c; path = utils/async_netdb.c; sourceTree = ""; }; @@ -8159,6 +8310,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF1B0FAF1D7AB4740011DBE4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF1B0FB01D7AB4740011DBE4 /* libjwxyz.a in Frameworks */, + AF1B0FB11D7AB4740011DBE4 /* ScreenSaver.framework in Frameworks */, + AF1B0FB21D7AB4740011DBE4 /* QuartzCore.framework in Frameworks */, + AF1B0FB31D7AB4740011DBE4 /* Cocoa.framework in Frameworks */, + AF1B0FB41D7AB4740011DBE4 /* Carbon.framework in Frameworks */, + AF1B0FB51D7AB4740011DBE4 /* OpenGL.framework in Frameworks */, + AF1B0FB61D7AB4740011DBE4 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF32D9E80F3AD0B40080F535 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -8215,6 +8380,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF3938221D0FBD6A00205406 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF3938231D0FBD6A00205406 /* libjwxyz.a in Frameworks */, + AF3938241D0FBD6A00205406 /* ScreenSaver.framework in Frameworks */, + AF3938251D0FBD6A00205406 /* QuartzCore.framework in Frameworks */, + AF3938261D0FBD6A00205406 /* Cocoa.framework in Frameworks */, + AF3938271D0FBD6A00205406 /* Carbon.framework in Frameworks */, + AF3938281D0FBD6A00205406 /* OpenGL.framework in Frameworks */, + AF3938291D0FBD6A00205406 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF39E28A198A11F60064A58D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -11467,6 +11646,48 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFEE10551D13406000AAC8F7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10561D13406000AAC8F7 /* libjwxyz.a in Frameworks */, + AFEE10571D13406000AAC8F7 /* ScreenSaver.framework in Frameworks */, + AFEE10581D13406000AAC8F7 /* QuartzCore.framework in Frameworks */, + AFEE10591D13406000AAC8F7 /* Cocoa.framework in Frameworks */, + AFEE105A1D13406000AAC8F7 /* Carbon.framework in Frameworks */, + AFEE105B1D13406000AAC8F7 /* OpenGL.framework in Frameworks */, + AFEE105C1D13406000AAC8F7 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEE10741D15EB0800AAC8F7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10751D15EB0800AAC8F7 /* libjwxyz.a in Frameworks */, + AFEE10761D15EB0800AAC8F7 /* ScreenSaver.framework in Frameworks */, + AFEE10771D15EB0800AAC8F7 /* QuartzCore.framework in Frameworks */, + AFEE10781D15EB0800AAC8F7 /* Cocoa.framework in Frameworks */, + AFEE10791D15EB0800AAC8F7 /* Carbon.framework in Frameworks */, + AFEE107A1D15EB0800AAC8F7 /* OpenGL.framework in Frameworks */, + AFEE107B1D15EB0800AAC8F7 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEE10931D17E20B00AAC8F7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10941D17E20B00AAC8F7 /* libjwxyz.a in Frameworks */, + AFEE10951D17E20B00AAC8F7 /* ScreenSaver.framework in Frameworks */, + AFEE10961D17E20B00AAC8F7 /* QuartzCore.framework in Frameworks */, + AFEE10971D17E20B00AAC8F7 /* Cocoa.framework in Frameworks */, + AFEE10981D17E20B00AAC8F7 /* Carbon.framework in Frameworks */, + AFEE10991D17E20B00AAC8F7 /* OpenGL.framework in Frameworks */, + AFEE109A1D17E20B00AAC8F7 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFF2868717860E830050A578 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -11557,7 +11778,7 @@ 080E96DDFE201D6D7F000001 /* libjwxyz */ = { isa = PBXGroup; children = ( - AF561DF515969BC3007CA5ED /* iosgrabimage.m */, + AF561DF515969BC3007CA5ED /* grabclient-ios.m */, AFE1FD410981E32E00F7970E /* InvertedSlider.h */, AFE1FD420981E32E00F7970E /* InvertedSlider.m */, AF2D8F301CEBA10300198014 /* jwxyz-timers.c */, @@ -11572,7 +11793,7 @@ AF6048F8157C07C600CA21E4 /* jwzgles.c */, AF6048F9157C07C600CA21E4 /* jwzgles.h */, AF6048FA157C07C600CA21E4 /* jwzglesI.h */, - AF9D468E09B51567006E59CF /* osxgrabscreen.m */, + AF9D468E09B51567006E59CF /* grabclient-osx.m */, AFE1FD470981E32E00F7970E /* PrefsReader.h */, AFE1FD480981E32E00F7970E /* PrefsReader.m */, 32CA4F630368D1EE00C91783 /* xscreensaver_Prefix.pch */, @@ -11840,6 +12061,11 @@ AFACE8881CC83458008B24CD /* EnergyStream.saver */, AFA211A11CD59DAF00C0D2A1 /* RaverHoop.saver */, AFC0E8C01CDC601A008CAFAC /* Hydrostat.saver */, + AF39382F1D0FBD6A00205406 /* Discoball.saver */, + AFEE10621D13406000AAC8F7 /* CubeTwist.saver */, + AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */, + AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */, + AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */, ); name = Products; path = ..; @@ -12158,9 +12384,12 @@ AFA563290993957100F3E977 /* crackberg.c */, AFA563660993970F00F3E977 /* cube21.c */, AFA55D770993589300F3E977 /* cubenetic.c */, + AFEE10831D15EBA600AAC8F7 /* cubestack.c */, AFA55FF309936C4500F3E977 /* cubestorm.c */, + AFEE10641D1341E300AAC8F7 /* cubetwist.c */, AF4FF4D00D52CC8400666F98 /* cubicgrid.c */, AF480DD1098F4F6200FB32B8 /* dangerball.c */, + AF3938311D0FBEC800205406 /* discoball.c */, AF77787609B653DC00EA3033 /* dnalogo.c */, AF0839AA09930C4900277BE9 /* dolphin.c */, AF241F81107C38DF00046A84 /* dropshadow.c */, @@ -12205,6 +12434,7 @@ AF7777E709B64CF700EA3033 /* glslideshow.c */, AFA55C8C099349EE00F3E977 /* glsnake.c */, AFD56E080996A07A00BA26F7 /* gltext.c */, + AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */, AF78D18A142DD96E002AAF77 /* hilbert.c */, AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */, AFA55F59099362DF00F3E977 /* hypertorus.c */, @@ -12266,6 +12496,7 @@ AFA55D940993590F00F3E977 /* spheremonics.c */, AFCF83541AF5B5FD008BB7E1 /* splitflap.c */, AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */, + AFEE10A21D17E2B300AAC8F7 /* splodesic.c */, AFA55A470993351F00F3E977 /* sproingies.c */, AF7778C009B65C0F00EA3033 /* sproingies.h */, AFA55A480993351F00F3E977 /* sproingiewrap.c */, @@ -12359,7 +12590,9 @@ AFC2588D0988A468000655EE /* crystal.xml */, AFC2588E0988A468000655EE /* cube21.xml */, AFC2588F0988A468000655EE /* cubenetic.xml */, + AFEE10841D15EBA600AAC8F7 /* cubestack.xml */, AFC258900988A468000655EE /* cubestorm.xml */, + AFEE10651D1341E300AAC8F7 /* cubetwist.xml */, AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */, AFF4634B0C44046500EE6509 /* cwaves.xml */, AFC258910988A468000655EE /* cynosure.xml */, @@ -12368,6 +12601,7 @@ AFC258940988A468000655EE /* deco.xml */, AFC258950988A468000655EE /* deluxe.xml */, AFC258960988A468000655EE /* demon.xml */, + AF3938321D0FBEC800205406 /* discoball.xml */, AFC258970988A468000655EE /* discrete.xml */, AFC258980988A468000655EE /* distort.xml */, AF77787909B6545E00EA3033 /* dnalogo.xml */, @@ -12419,6 +12653,7 @@ AFC258C30988A468000655EE /* halo.xml */, AFC258C40988A468000655EE /* helix.xml */, AFB591BC178B81E600EA4005 /* hexadrop.xml */, + AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */, AF78D18E142DD99A002AAF77 /* hilbert.xml */, AFC258C50988A468000655EE /* hopalong.xml */, AFC258C60988A468000655EE /* hyperball.xml */, @@ -12514,6 +12749,7 @@ AFC259130988A469000655EE /* spheremonics.xml */, AFC259140988A469000655EE /* spiral.xml */, AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */, + AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */, AFC259150988A469000655EE /* spotlight.xml */, AFC259160988A469000655EE /* sproingies.xml */, AFC259170988A469000655EE /* squiral.xml */, @@ -12608,7 +12844,7 @@ AF77780909B64F4900EA3033 /* texfont.h */, AFC7592B158D8E8B00C5458E /* textclient.c */, AFC7592C158D8E8B00C5458E /* textclient.h */, - AFC7592F158D9A7A00C5458E /* textclient-iOS.m */, + AFC7592F158D9A7A00C5458E /* textclient-ios.m */, AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */, AFDA11231934424D003D397F /* thread_util.c */, AFDA11241934424D003D397F /* thread_util.h */, @@ -12831,6 +13067,26 @@ productReference = AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */; productType = "com.apple.product-type.application"; }; + AF1B0FA71D7AB4740011DBE4 /* Hexstrut */ = { + isa = PBXNativeTarget; + buildConfigurationList = AF1B0FB91D7AB4740011DBE4 /* Build configuration list for PBXNativeTarget "Hexstrut" */; + buildPhases = ( + AF1B0FAA1D7AB4740011DBE4 /* Resources */, + AF1B0FAC1D7AB4740011DBE4 /* Sources */, + AF1B0FAF1D7AB4740011DBE4 /* Frameworks */, + AF1B0FB71D7AB4740011DBE4 /* Rez */, + AF1B0FB81D7AB4740011DBE4 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AF1B0FA81D7AB4740011DBE4 /* PBXTargetDependency */, + ); + name = Hexstrut; + productName = DangerBall; + productReference = AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */; + productType = "com.apple.product-type.bundle"; + }; AF32D9E00F3AD0B40080F535 /* RubikBlocks */ = { isa = PBXNativeTarget; buildConfigurationList = AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */; @@ -12911,6 +13167,26 @@ productReference = AF35E8A00E63823600691F2F /* Jigsaw.saver */; productType = "com.apple.product-type.bundle"; }; + AF39381A1D0FBD6A00205406 /* Discoball */ = { + isa = PBXNativeTarget; + buildConfigurationList = AF39382C1D0FBD6A00205406 /* Build configuration list for PBXNativeTarget "Discoball" */; + buildPhases = ( + AF39381D1D0FBD6A00205406 /* Resources */, + AF39381F1D0FBD6A00205406 /* Sources */, + AF3938221D0FBD6A00205406 /* Frameworks */, + AF39382A1D0FBD6A00205406 /* Rez */, + AF39382B1D0FBD6A00205406 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AF39381B1D0FBD6A00205406 /* PBXTargetDependency */, + ); + name = Discoball; + productName = DangerBall; + productReference = AF39382F1D0FBD6A00205406 /* Discoball.saver */; + productType = "com.apple.product-type.bundle"; + }; AF39E282198A11F60064A58D /* WindupRobot */ = { isa = PBXNativeTarget; buildConfigurationList = AF39E293198A11F60064A58D /* Build configuration list for PBXNativeTarget "WindupRobot" */; @@ -17576,6 +17852,66 @@ productReference = AFEC23E21CB6EAE100DE138F /* DymaxionMap.saver */; productType = "com.apple.product-type.bundle"; }; + AFEE104D1D13406000AAC8F7 /* CubeTwist */ = { + isa = PBXNativeTarget; + buildConfigurationList = AFEE105F1D13406000AAC8F7 /* Build configuration list for PBXNativeTarget "CubeTwist" */; + buildPhases = ( + AFEE10501D13406000AAC8F7 /* Resources */, + AFEE10521D13406000AAC8F7 /* Sources */, + AFEE10551D13406000AAC8F7 /* Frameworks */, + AFEE105D1D13406000AAC8F7 /* Rez */, + AFEE105E1D13406000AAC8F7 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AFEE104E1D13406000AAC8F7 /* PBXTargetDependency */, + ); + name = CubeTwist; + productName = DangerBall; + productReference = AFEE10621D13406000AAC8F7 /* CubeTwist.saver */; + productType = "com.apple.product-type.bundle"; + }; + AFEE106C1D15EB0700AAC8F7 /* CubeStack */ = { + isa = PBXNativeTarget; + buildConfigurationList = AFEE107E1D15EB0800AAC8F7 /* Build configuration list for PBXNativeTarget "CubeStack" */; + buildPhases = ( + AFEE106F1D15EB0800AAC8F7 /* Resources */, + AFEE10711D15EB0800AAC8F7 /* Sources */, + AFEE10741D15EB0800AAC8F7 /* Frameworks */, + AFEE107C1D15EB0800AAC8F7 /* Rez */, + AFEE107D1D15EB0800AAC8F7 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AFEE106D1D15EB0700AAC8F7 /* PBXTargetDependency */, + ); + name = CubeStack; + productName = DangerBall; + productReference = AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */; + productType = "com.apple.product-type.bundle"; + }; + AFEE108B1D17E20B00AAC8F7 /* Splodesic */ = { + isa = PBXNativeTarget; + buildConfigurationList = AFEE109D1D17E20B00AAC8F7 /* Build configuration list for PBXNativeTarget "Splodesic" */; + buildPhases = ( + AFEE108E1D17E20B00AAC8F7 /* Resources */, + AFEE10901D17E20B00AAC8F7 /* Sources */, + AFEE10931D17E20B00AAC8F7 /* Frameworks */, + AFEE109B1D17E20B00AAC8F7 /* Rez */, + AFEE109C1D17E20B00AAC8F7 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AFEE108C1D17E20B00AAC8F7 /* PBXTargetDependency */, + ); + name = Splodesic; + productName = DangerBall; + productReference = AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */; + productType = "com.apple.product-type.bundle"; + }; AFF2867F17860E830050A578 /* QuasiCrystal */ = { isa = PBXNativeTarget; buildConfigurationList = AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */; @@ -17702,11 +18038,799 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0730; + LastUpgradeCheck = 0800; TargetAttributes = { + AF08398F09930B6B00277BE9 = { + DevelopmentTeam = 4627ATJELP; + }; + AF083A32099311D700277BE9 = { + DevelopmentTeam = 4627ATJELP; + }; + AF0DC7AB0C4C73F600D76972 = { + DevelopmentTeam = 4627ATJELP; + }; + AF0DCA420C4CBB0D00D76972 = { + DevelopmentTeam = 4627ATJELP; + }; + AF137D410F075C9B004DE3B2 = { + DevelopmentTeam = 4627ATJELP; + }; + AF1A17610D6D6EE3008AF328 = { + DevelopmentTeam = 4627ATJELP; + }; + AF1AD9E118500F9F00932759 = { + DevelopmentTeam = 4627ATJELP; + }; + AF1B0FA71D7AB4740011DBE4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF32D9E00F3AD0B40080F535 = { + DevelopmentTeam = 4627ATJELP; + }; + AF3581BF1431D47B00E09C51 = { + DevelopmentTeam = 4627ATJELP; + }; + AF3581FB143330F900E09C51 = { + DevelopmentTeam = 4627ATJELP; + }; + AF35E88A0E63823600691F2F = { + DevelopmentTeam = 4627ATJELP; + }; + AF39381A1D0FBD6A00205406 = { + DevelopmentTeam = 4627ATJELP; + }; + AF39E282198A11F60064A58D = { + DevelopmentTeam = 4627ATJELP; + }; + AF3C71450D624BF50030CC0D = { + DevelopmentTeam = 4627ATJELP; + }; + AF46E9CF1CBBA2B300240FBC = { + DevelopmentTeam = 4627ATJELP; + }; + AF476FB5099D154F001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF476FDA099D1686001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47704C099D4385001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477169099D4786001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47717F099D4803001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4771A7099D4949001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4771DB099D4D9A001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4771F2099D4E63001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477208099D4EE8001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47721E099D4F67001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477253099D5717001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47726B099D57B9001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477283099D5926001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477382099D65A1001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47739A099D6648001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4773C1099D67B9001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477401099D69E7001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477426099D7C70001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477442099D7D33001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477483099D89E4001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477499099D8A74001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4774B4099D8B5F001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4774CE099D8BFF001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47755D099D9A1A001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477583099D9C28001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47759F099D9CF7001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4775D8099D9F69001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4775F2099DA030001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477613099DA26C001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477644099DA6D0001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47765A099DA78E001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477670099DA849001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47768F099DAA6F001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4776AA099DABDD001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4776C0099DAC8A001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4776DB099DADDF001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4776F1099DAE7A001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47770D099DAF9F001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477723099DB044001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477752099DB61E001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477774099DB965001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477790099DBA90001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4777D1099DC183001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4778AB099DDB79001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4778C7099DDCAE001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4778E8099DDDC8001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF477909099DE379001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF47792A099DE4C7001F091E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4808C0098C3B6C00FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF480AAF098C669800FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF480C49098E301400FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF480D58098EED3D00FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF480D59098EED5100FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF480D5A098EED5E00FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF480D72098EEDDE00FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF4810EB09909FBA00FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF4812500990CE2700FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF4812B30990D3D900FB32B8 = { + DevelopmentTeam = 4627ATJELP; + }; + AF48DEEF0A0C25E000F94CF9 = { + DevelopmentTeam = 4627ATJELP; + }; + AF4A3449102A593600A81B2A = { + DevelopmentTeam = 4627ATJELP; + }; + AF4FD6E60CE7A486005EE58E = { + DevelopmentTeam = 4627ATJELP; + }; + AF4FF4930D52CA0800666F98 = { + DevelopmentTeam = 4627ATJELP; + }; + AF4FF4BA0D52CBDE00666F98 = { + DevelopmentTeam = 4627ATJELP; + }; + AF5C9AF91A0CCE6E00B0147A = { + DevelopmentTeam = 4627ATJELP; + }; + AF63A7F11AB4EDDB00593C75 = { + DevelopmentTeam = 4627ATJELP; + }; + AF63F2471C3465BE0033E133 = { + DevelopmentTeam = 4627ATJELP; + }; + AF63F4501C34682A0033E133 = { + DevelopmentTeam = 4627ATJELP; + }; + AF63F4781C3469FC0033E133 = { + DevelopmentTeam = 4627ATJELP; + }; + AF6423F2099FF9C2000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF6425CC09A18855000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF6425EC09A189EC000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF64260F09A18D6C000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF64262C09A18F54000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF64264F09A19229000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF64267B09A194B0000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF64277109A1D37A000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF6427A809A2DE36000F4CD4 = { + DevelopmentTeam = 4627ATJELP; + }; + AF68A47E19196CF800D41CD1 = { + DevelopmentTeam = 4627ATJELP; + }; + AF73FF221A09877F00E485E9 = { + DevelopmentTeam = 4627ATJELP; + }; + AF7510FF1782B5B900380EA1 = { + DevelopmentTeam = 4627ATJELP; + }; + AF7776E409B63ABF00EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF77771A09B6416100EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF77773E09B6446500EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF77777409B6497800EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF77778E09B64A5200EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF7777A809B64B2600EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF7777D009B64C6B00EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF7777EA09B64E3100EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF77781009B6504400EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF77784409B6528100EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF77786109B6536000EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF77787F09B6563500EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF7778A509B659C800EA3033 = { + DevelopmentTeam = 4627ATJELP; + }; + AF78D175142DD8F3002AAF77 = { + DevelopmentTeam = 4627ATJELP; + }; + AF794F64099748450059A8B0 = { + DevelopmentTeam = 4627ATJELP; + }; + AF794F8E09974A320059A8B0 = { + DevelopmentTeam = 4627ATJELP; + }; + AF794FCD09974FA60059A8B0 = { + DevelopmentTeam = 4627ATJELP; + }; + AF7ACFC019FF0A9200BD752B = { + DevelopmentTeam = 4627ATJELP; + }; AF918977158FC00A002B5D1E = { DevelopmentTeam = 4627ATJELP; }; + AF97572D099C317000B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975775099C374A00B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF9757C2099C3E6300B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975808099C41D500B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975865099C475900B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975A36099C681F00B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975A6C099C6AB200B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975A86099C6BC300B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975AD7099C6EB100B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975AFC099C6FE400B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975C12099C8C1500B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975C3D099C8DCF00B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975C5D099C8F3F00B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF975D52099CA0F000B05160 = { + DevelopmentTeam = 4627ATJELP; + }; + AF976FBB0989CAA2001F8B92 = { + DevelopmentTeam = 4627ATJELP; + }; + AF9770290989D1E6001F8B92 = { + DevelopmentTeam = 4627ATJELP; + }; + AF9770660989D2F6001F8B92 = { + DevelopmentTeam = 4627ATJELP; + }; + AF9771D60989DC4A001F8B92 = { + DevelopmentTeam = 4627ATJELP; + }; + AF998EDA0A083DB30051049D = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D466609B5109C006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D474409B5300A006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D475F09B53166006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D48DB09B53322006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D48F409B535DA006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D492B09B53CBA006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D495409B53FC9006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D496C09B5411D006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D499709B544C2006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D4C6909B59F27006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D4CE709B5AA8E006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D4D7E09B5B2DC006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D4DAF09B5B71E006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9D4DEC09B5BB19006E59CF = { + DevelopmentTeam = 4627ATJELP; + }; + AF9E7EBE190F4C1B00A8B01F = { + DevelopmentTeam = 4627ATJELP; + }; + AFA2118C1CD59DAF00C0D2A1 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA3392E0B058505002B0E7D = { + DevelopmentTeam = 4627ATJELP; + }; + AFA33BC60B058740002B0E7D = { + DevelopmentTeam = 4627ATJELP; + }; + AFA33C020B058E17002B0E7D = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55946099330B000F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5596D0993317900F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA559920993322100F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA559B50993328000F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA559CF0993330600F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55A030993340300F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55A20099334A000F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55A790993364300F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55ACF09933CEF00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55B0909933E0500F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55B2509933E8D00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55B7909933F7200F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55B9109933FDA00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55BAB099340CE00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55BE40993429100F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55C0E0993431300F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55C77099349A600F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55CA909934BB200F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55CCC09934CE400F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55D3C0993565300F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55D620993584B00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55D7F099358C400F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55DC809935D7000F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55DF009935E4900F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55E0D09935EDC00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55E2F09935F8E00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55E4E09935FF900F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55EC7099360E300F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55F06099361B700F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55F2A0993622F00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55F420993629000F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55F720993643600F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55FD309936BFA00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA55FF909936C6D00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5601409936CC800F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5603209936D5100F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5604A09936E2100F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5606209936F3800F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA560AE0993718D00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA560FD0993781600F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA56119099378CB00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5615609937C0D00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5617B09937CF100F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5619D09937D7E00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA562060993849F00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA5621F0993852500F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA562BF099392C600F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA562DA099393C900F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA562F20993943B00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA563130993951000F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA56331099395ED00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA56351099396C000F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA56379099397B300F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFA563A4099398BB00F3E977 = { + DevelopmentTeam = 4627ATJELP; + }; + AFACE8731CC83458008B24CD = { + DevelopmentTeam = 4627ATJELP; + }; + AFB591A7178B812C00EA4005 = { + DevelopmentTeam = 4627ATJELP; + }; + AFBFE74B178642DC00432B21 = { + DevelopmentTeam = 4627ATJELP; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 0; + }; + }; + }; + AFBFE767178647FE00432B21 = { + DevelopmentTeam = 4627ATJELP; + }; + AFC0E8AB1CDC601A008CAFAC = { + DevelopmentTeam = 4627ATJELP; + }; + AFCF833B1AF5B515008BB7E1 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD51B1B0F063B4A00471C02 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56DF10996A03800BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56EAE0996A72600BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56EDA0996A95700BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56F0B0996AAFA00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56F230996AB8A00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56F4F0996AEEE00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56F6B0996B01600BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56F8C0996B09400BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56FA30996B10F00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56FB90996B18F00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56FCF0996B20900BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD56FF80996B43800BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD5700F0996B4CC00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD570260996B56D00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD570430996B61600BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD570590996B6A300BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD5706F0996B72700BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD570850996B80300BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD5709B0996B88E00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD570B10996B93000BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD570C90996B9F800BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD570EA0996BBBF00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD571130996BE9300BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD5712C0996BF2E00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD571430996C01700BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD571590996C0CE00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD571B50996D9DC00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD572220996E4A300BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD5726D0996EE8500BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD572A50996F99600BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD572C20996FC0F00BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD572F9099701C000BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFD5735D0997411200BA26F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFDA658E178A52B70070D24B = { + DevelopmentTeam = 4627ATJELP; + }; + AFE2A4560E2E904600ADB298 = { + DevelopmentTeam = 4627ATJELP; + }; + AFE30BE80E52B14700CCF4A5 = { + DevelopmentTeam = 4627ATJELP; + }; + AFE6A1820CDD7B2E002805BF = { + DevelopmentTeam = 4627ATJELP; + }; + AFE6A41B0CDD7FAA002805BF = { + DevelopmentTeam = 4627ATJELP; + }; + AFEC23CD1CB6EAE100DE138F = { + DevelopmentTeam = 4627ATJELP; + }; + AFEE104D1D13406000AAC8F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFEE106C1D15EB0700AAC8F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFEE108B1D17E20B00AAC8F7 = { + DevelopmentTeam = 4627ATJELP; + }; + AFF2867F17860E830050A578 = { + DevelopmentTeam = 4627ATJELP; + }; + AFF3C9E817CCAC440028F240 = { + DevelopmentTeam = 4627ATJELP; + }; + AFF463360C4403E400EE6509 = { + DevelopmentTeam = 4627ATJELP; + }; + AFF463580C440AEF00EE6509 = { + DevelopmentTeam = 4627ATJELP; + }; + AFFAB31519158CE40020F021 = { + DevelopmentTeam = 4627ATJELP; + }; + CE3D01511B76F4C100993C75 = { + DevelopmentTeam = 4627ATJELP; + }; }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "xscreensaver" */; @@ -17872,9 +18996,12 @@ AFA563130993951000F3E977 /* Crackberg */, AFA56351099396C000F3E977 /* Cube21 */, AFA55D620993584B00F3E977 /* Cubenetic */, + AFEE106C1D15EB0700AAC8F7 /* CubeStack */, AFA55FD309936BFA00F3E977 /* CubeStorm */, + AFEE104D1D13406000AAC8F7 /* CubeTwist */, AF4FF4BA0D52CBDE00666F98 /* CubicGrid */, AF4810EB09909FBA00FB32B8 /* DangerBall */, + AF39381A1D0FBD6A00205406 /* Discoball */, AF77786109B6536000EA3033 /* DNAlogo */, AFEC23CD1CB6EAE100DE138F /* DymaxionMap */, AFACE8731CC83458008B24CD /* EnergyStream */, @@ -17900,6 +19027,7 @@ AF7777D009B64C6B00EA3033 /* GLSlideshow */, AFA55C77099349A600F3E977 /* GLSnake */, AFD56DF10996A03800BA26F7 /* GLText */, + AF1B0FA71D7AB4740011DBE4 /* Hexstrut */, AF78D175142DD8F3002AAF77 /* Hilbert */, AFC0E8AB1CDC601A008CAFAC /* Hydrostat */, AFA55F420993629000F3E977 /* Hypertorus */, @@ -17940,6 +19068,7 @@ AFE30BE80E52B14700CCF4A5 /* Sonar */, AFA55D7F099358C400F3E977 /* Spheremonics */, AFCF833B1AF5B515008BB7E1 /* SplitFlap */, + AFEE108B1D17E20B00AAC8F7 /* Splodesic */, AFA55A20099334A000F3E977 /* Sproingies */, AFA55A030993340300F3E977 /* Stairs */, AF77781009B6504400EA3033 /* StarWars */, @@ -18037,6 +19166,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF1B0FAA1D7AB4740011DBE4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF1B0FC11D7AB53A0011DBE4 /* hexstrut.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF32D9E30F3AD0B40080F535 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -18072,6 +19209,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF39381D1D0FBD6A00205406 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF3938331D0FBF0100205406 /* discoball.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF39E285198A11F60064A58D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -18886,6 +20031,7 @@ AF918ABF158FC53D002B5D1E /* atunnel.xml in Resources */, AF918AC0158FC53D002B5D1E /* barcode.xml in Resources */, AF73FF3D1A0988C500E485E9 /* binaryring.xml in Resources */, + AFEE10681D1341FE00AAC8F7 /* cubetwist.xml in Resources */, AF918AC1158FC53D002B5D1E /* blaster.xml in Resources */, AF918AC2158FC53D002B5D1E /* blinkbox.xml in Resources */, AF918AC3158FC53D002B5D1E /* blitspin.xml in Resources */, @@ -18913,6 +20059,7 @@ AF918ADA158FC53D002B5D1E /* crystal.xml in Resources */, AF918ADB158FC53D002B5D1E /* cube21.xml in Resources */, AF918ADC158FC53D002B5D1E /* cubenetic.xml in Resources */, + AFEE10881D15EBDC00AAC8F7 /* cubestack.xml in Resources */, AF918ADD158FC53D002B5D1E /* cubestorm.xml in Resources */, AF918ADE158FC53D002B5D1E /* cubicgrid.xml in Resources */, AF918ADF158FC53D002B5D1E /* cwaves.xml in Resources */, @@ -18923,6 +20070,7 @@ AF918AE4158FC53D002B5D1E /* deluxe.xml in Resources */, AF918AE5158FC53D002B5D1E /* demon.xml in Resources */, AF918AE6158FC53D002B5D1E /* discrete.xml in Resources */, + AF3938361D0FBF2700205406 /* discoball.xml in Resources */, AF918AE7158FC53D002B5D1E /* distort.xml in Resources */, AFCF453815986A3000E6E8CC /* dnalogo.xml in Resources */, AFEC23E81CB6EC6800DE138F /* dymaxionmap.xml in Resources */, @@ -18968,6 +20116,7 @@ AF918B12158FC53D002B5D1E /* halo.xml in Resources */, AF918B13158FC53D002B5D1E /* helix.xml in Resources */, AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */, + AF1B0FC01D7AB5330011DBE4 /* hexstrut.xml in Resources */, AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */, AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */, AFC0E8C71CDC60DE008CAFAC /* hydrostat.xml in Resources */, @@ -18981,8 +20130,8 @@ AF918B1F158FC53D002B5D1E /* jigglypuff.xml in Resources */, AF39483F15A1647A0000FFCD /* jigsaw.xml in Resources */, AF918B22158FC53D002B5D1E /* juggler3d.xml in Resources */, - AF918B23158FC53D002B5D1E /* julia.xml in Resources */, AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */, + AF918B23158FC53D002B5D1E /* julia.xml in Resources */, AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */, AF918B25158FC53D002B5D1E /* klein.xml in Resources */, AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */, @@ -19048,6 +20197,7 @@ AF918B67158FC53E002B5D1E /* speedmine.xml in Resources */, AF918B69158FC53E002B5D1E /* spheremonics.xml in Resources */, AFCF83561AF5B5FD008BB7E1 /* splitflap.xml in Resources */, + AFEE10A71D17E2CD00AAC8F7 /* splodesic.xml in Resources */, AF918B6B158FC53E002B5D1E /* spotlight.xml in Resources */, AF918B6C158FC53E002B5D1E /* sproingies.xml in Resources */, AF918B6D158FC53E002B5D1E /* squiral.xml in Resources */, @@ -19873,6 +21023,7 @@ files = ( AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */, AFD51DB90F063BE700471C02 /* photopile.xml in Resources */, + AF5BEEFD1D2AFE21002E6D51 /* OCRAStd.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -20188,6 +21339,30 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFEE10501D13406000AAC8F7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10691D13420700AAC8F7 /* cubetwist.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEE106F1D15EB0800AAC8F7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10871D15EBD900AAC8F7 /* cubestack.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEE108E1D17E20B00AAC8F7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10A61D17E2C900AAC8F7 /* splodesic.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFF2868217860E830050A578 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -20274,6 +21449,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF1B0FB71D7AB4740011DBE4 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF32D9EF0F3AD0B40080F535 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -20302,6 +21484,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF39382A1D0FBD6A00205406 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF39E291198A11F60064A58D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -21863,6 +23052,27 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFEE105D1D13406000AAC8F7 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEE107C1D15EB0800AAC8F7 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEE109B1D17E20B00AAC8F7 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFF2868D17860E830050A578 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -21968,6 +23178,21 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AF1B0FB81D7AB4740011DBE4 /* Run Update Info Plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Update Info Plist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + showEnvVarsInLog = 0; + }; AF32D9F00F3AD0B40080F535 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -22028,6 +23253,21 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AF39382B1D0FBD6A00205406 /* Run Update Info Plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Update Info Plist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + showEnvVarsInLog = 0; + }; AF39E292198A11F60064A58D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -25635,6 +26875,51 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AFEE105E1D13406000AAC8F7 /* Run Update Info Plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Update Info Plist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + showEnvVarsInLog = 0; + }; + AFEE107D1D15EB0800AAC8F7 /* Run Update Info Plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Update Info Plist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + showEnvVarsInLog = 0; + }; + AFEE109C1D17E20B00AAC8F7 /* Run Update Info Plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Update Info Plist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + showEnvVarsInLog = 0; + }; AFF2868E17860E830050A578 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -25789,6 +27074,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF1B0FAC1D7AB4740011DBE4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF1B0FC21D7AB54D0011DBE4 /* hexstrut.c in Sources */, + AF1B0FAE1D7AB4740011DBE4 /* XScreenSaverSubclass.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF32D9E50F3AD0B40080F535 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -25832,6 +27126,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF39381F1D0FBD6A00205406 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF3938211D0FBD6A00205406 /* XScreenSaverSubclass.m in Sources */, + AF3938341D0FBF1900205406 /* discoball.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF39E287198A11F60064A58D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -26332,7 +27635,7 @@ CE8EA1C21C35CF10002D1020 /* jwxyz-common.c in Sources */, AF4774E8099D8D8C001F091E /* logo.c in Sources */, AF4775C0099D9E79001F091E /* resources.c in Sources */, - AF9D468F09B51567006E59CF /* osxgrabscreen.m in Sources */, + AF9D468F09B51567006E59CF /* grabclient-osx.m in Sources */, AF9D473809B52EE0006E59CF /* colorbars.c in Sources */, AF77783409B6516900EA3033 /* grab-ximage.c in Sources */, AF77783709B6518400EA3033 /* texfont.c in Sources */, @@ -26342,8 +27645,8 @@ AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */, AF6048FB157C07C600CA21E4 /* jwzgles.c in Sources */, AFC7592D158D8E8B00C5458E /* textclient.c in Sources */, - AFC75930158D9A7A00C5458E /* textclient-iOS.m in Sources */, - AF561DF615969BC3007CA5ED /* iosgrabimage.m in Sources */, + AFC75930158D9A7A00C5458E /* textclient-ios.m in Sources */, + AF561DF615969BC3007CA5ED /* grabclient-ios.m in Sources */, CE9289D319BD00E300961F22 /* async_netdb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -26927,6 +28230,7 @@ AF918A35158FC3BB002B5D1E /* bubble3d.c in Sources */, AF918A36158FC3BB002B5D1E /* buildlwo.c in Sources */, AF918A37158FC3BB002B5D1E /* cage.c in Sources */, + AF3938351D0FBF1D00205406 /* discoball.c in Sources */, AF918A38158FC3BB002B5D1E /* carousel.c in Sources */, AF918A39158FC3BB002B5D1E /* chessmodels.c in Sources */, AF918A3A158FC3BB002B5D1E /* circuit.c in Sources */, @@ -26944,7 +28248,9 @@ AF918A41158FC3BB002B5D1E /* crackberg.c in Sources */, AF918A42158FC3BB002B5D1E /* cube21.c in Sources */, AF918A43158FC3BB002B5D1E /* cubenetic.c in Sources */, + AFEE10851D15EBB900AAC8F7 /* cubestack.c in Sources */, AF918A44158FC3BB002B5D1E /* cubestorm.c in Sources */, + AFEE10671D1341FA00AAC8F7 /* cubetwist.c in Sources */, AF918A45158FC3BB002B5D1E /* cubicgrid.c in Sources */, AF918A46158FC3BB002B5D1E /* dangerball.c in Sources */, AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */, @@ -26975,6 +28281,7 @@ AF918A67158FC3E5002B5D1E /* glslideshow.c in Sources */, AF918A68158FC3E5002B5D1E /* glsnake.c in Sources */, AF918A69158FC3E5002B5D1E /* gltext.c in Sources */, + AF1B0FC31D7AB5500011DBE4 /* hexstrut.c in Sources */, AF918A6A158FC3E5002B5D1E /* hilbert.c in Sources */, AFC0E8C41CDC60B0008CAFAC /* hydrostat.c in Sources */, AF918A6B158FC3E5002B5D1E /* hypertorus.c in Sources */, @@ -27032,6 +28339,7 @@ AF918A96158FC417002B5D1E /* spheremonics.c in Sources */, AFCF835A1AF5B5FD008BB7E1 /* splitflap.c in Sources */, AFCF83581AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */, + AFEE10A41D17E2BA00AAC8F7 /* splodesic.c in Sources */, AF918A97158FC473002B5D1E /* sproingies.c in Sources */, AF918A98158FC473002B5D1E /* sproingiewrap.c in Sources */, AF918A99158FC473002B5D1E /* stairs.c in Sources */, @@ -28343,6 +29651,33 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFEE10521D13406000AAC8F7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10661D1341F600AAC8F7 /* cubetwist.c in Sources */, + AFEE10541D13406000AAC8F7 /* XScreenSaverSubclass.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEE10711D15EB0800AAC8F7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10731D15EB0800AAC8F7 /* XScreenSaverSubclass.m in Sources */, + AFEE10861D15EBC800AAC8F7 /* cubestack.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFEE10901D17E20B00AAC8F7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFEE10A51D17E2C500AAC8F7 /* splodesic.c in Sources */, + AFEE10921D17E20B00AAC8F7 /* XScreenSaverSubclass.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFF2868417860E830050A578 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -28525,6 +29860,16 @@ target = AF1A17610D6D6EE3008AF328 /* LCDscrub */; targetProxy = AF1A17830D6D6FA7008AF328 /* PBXContainerItemProxy */; }; + AF1B0FA81D7AB4740011DBE4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AF1B0FA91D7AB4740011DBE4 /* PBXContainerItemProxy */; + }; + AF1B0FC51D7AB5740011DBE4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF1B0FA71D7AB4740011DBE4 /* Hexstrut */; + targetProxy = AF1B0FC41D7AB5740011DBE4 /* PBXContainerItemProxy */; + }; AF32D9E10F3AD0B40080F535 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; @@ -28560,6 +29905,16 @@ target = AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */; targetProxy = AF36340018540D050086A439 /* PBXContainerItemProxy */; }; + AF39381B1D0FBD6A00205406 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AF39381C1D0FBD6A00205406 /* PBXContainerItemProxy */; + }; + AF3938381D0FBF5300205406 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF39381A1D0FBD6A00205406 /* Discoball */; + targetProxy = AF3938371D0FBF5300205406 /* PBXContainerItemProxy */; + }; AF39E283198A11F60064A58D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; @@ -30875,6 +32230,36 @@ target = AFEC23CD1CB6EAE100DE138F /* DymaxionMap */; targetProxy = AFEC23EA1CB6ED0800DE138F /* PBXContainerItemProxy */; }; + AFEE104E1D13406000AAC8F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AFEE104F1D13406000AAC8F7 /* PBXContainerItemProxy */; + }; + AFEE106B1D13424C00AAC8F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AFEE104D1D13406000AAC8F7 /* CubeTwist */; + targetProxy = AFEE106A1D13424C00AAC8F7 /* PBXContainerItemProxy */; + }; + AFEE106D1D15EB0700AAC8F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AFEE106E1D15EB0700AAC8F7 /* PBXContainerItemProxy */; + }; + AFEE108A1D15EBF900AAC8F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AFEE106C1D15EB0700AAC8F7 /* CubeStack */; + targetProxy = AFEE10891D15EBF900AAC8F7 /* PBXContainerItemProxy */; + }; + AFEE108C1D17E20B00AAC8F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AFEE108D1D17E20B00AAC8F7 /* PBXContainerItemProxy */; + }; + AFEE10A91D17E32100AAC8F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AFEE108B1D17E20B00AAC8F7 /* Splodesic */; + targetProxy = AFEE10A81D17E32100AAC8F7 /* PBXContainerItemProxy */; + }; AFF2868017860E830050A578 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; @@ -31082,6 +32467,28 @@ }; name = Release; }; + AF1B0FBA1D7AB4740011DBE4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + AF1B0FBB1D7AB4740011DBE4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; AF32D9F20F3AD0B40080F535 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -31162,6 +32569,28 @@ }; name = Release; }; + AF39382D1D0FBD6A00205406 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + AF39382E1D0FBD6A00205406 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; AF39E294198A11F60064A58D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -35010,6 +36439,72 @@ }; name = Release; }; + AFEE10601D13406000AAC8F7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + AFEE10611D13406000AAC8F7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + AFEE107F1D15EB0800AAC8F7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + AFEE10801D15EB0800AAC8F7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + AFEE109E1D17E20B00AAC8F7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + AFEE109F1D17E20B00AAC8F7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; AFF2869017860E830050A578 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -35112,9 +36607,13 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_INT_CONVERSION = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 4627ATJELP; ENABLE_TESTABILITY = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -35167,7 +36666,7 @@ ); INFOPLIST_FILE = XScreenSaver.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; @@ -35191,9 +36690,13 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_INT_CONVERSION = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Jamie Zawinski (4627ATJELP)"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Distribution: Jamie Zawinski (4627ATJELP)"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application: Jamie Zawinski (4627ATJELP)"; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 4627ATJELP; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = xscreensaver_Prefix.pch; @@ -35244,7 +36747,7 @@ ); INFOPLIST_FILE = XScreenSaver.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; LLVM_LTO = NO; "LLVM_LTO[sdk=macosx*]" = NO; @@ -35342,6 +36845,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AF1B0FB91D7AB4740011DBE4 /* Build configuration list for PBXNativeTarget "Hexstrut" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF1B0FBA1D7AB4740011DBE4 /* Debug */, + AF1B0FBB1D7AB4740011DBE4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -35378,6 +36890,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AF39382C1D0FBD6A00205406 /* Build configuration list for PBXNativeTarget "Discoball" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF39382D1D0FBD6A00205406 /* Debug */, + AF39382E1D0FBD6A00205406 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AF39E293198A11F60064A58D /* Build configuration list for PBXNativeTarget "WindupRobot" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -37538,6 +39059,33 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AFEE105F1D13406000AAC8F7 /* Build configuration list for PBXNativeTarget "CubeTwist" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AFEE10601D13406000AAC8F7 /* Debug */, + AFEE10611D13406000AAC8F7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AFEE107E1D15EB0800AAC8F7 /* Build configuration list for PBXNativeTarget "CubeStack" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AFEE107F1D15EB0800AAC8F7 /* Debug */, + AFEE10801D15EB0800AAC8F7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AFEE109D1D17E20B00AAC8F7 /* Build configuration list for PBXNativeTarget "Splodesic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AFEE109E1D17E20B00AAC8F7 /* Debug */, + AFEE109F1D17E20B00AAC8F7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/README b/README index 209e9688..8f80f71d 100644 --- a/README +++ b/README @@ -23,9 +23,12 @@ To compile for a Unix system with X11: make make install + If you are on an "apt"-based system, "apt-get build-dep xscreensaver" + might install most of the compilation dependencies. + To compile for MacOS X or iOS: - Use the included XCode project. Requires XCode 4 and MacOS X 10.5 + Use the included XCode project. Requires XCode 6 and MacOS X 10.8 or newer. To compile for Android: @@ -42,13 +45,20 @@ XScreenSaver has an extensive manual -- please read it! =============================================================================== +5.36 * New hacks, `discoball', `cubetwist', `cubestack', `splodesic' + and `hexstrut'. + * OSX: loading image files works in `dymaxionmap', `glplanet', + `lavalite', `pulsar', `gleidescope' and `extrusion'. + * Several new programs in `m6502'. + * `rotzoomer -mode circle'. + * Better titles in `photopile'. 5.35 * New hacks, `dymaxionmap', `unicrud', `energystream', `raverhoop' and `hydrostat'. * Added Windows 10 to `bsod'. * X11: ignore WM_USER_TIME property changes with days-old timestamps. Thanks, KDE. - * MacOS, iOS: Better fonts in 'BSOD' and 'memscroller'. - * MacOS 10.7 or later and iOS 6.0 or later are now required, since + * MacOS, iOS: Better fonts in `BSOD' and `memscroller'. + * MacOS 10.8 or later and iOS 6.0 or later are now required, since Xcode 6 can no longer build executables that work on older OSes. * Many, many Android improvements. * iOS: Fixed rotation to work with the new iOS 8+ API. @@ -339,7 +349,7 @@ XScreenSaver has an extensive manual -- please read it! changes. 5.02 * Reworked PAM code to support fingerprint readers, etc. - * Ported 'webcollage' to MacOS. + * Ported `webcollage' to MacOS. * Added MacOS 10.2 and 10.3 kernel panics to `bsod'. * Fixed a Xinerama crash when changing the screen count. * New blobbier `mirrorblob'. diff --git a/README.hacking b/README.hacking index a7161962..3cceb577 100644 --- a/README.hacking +++ b/README.hacking @@ -139,15 +139,18 @@ Programming Tips - Don't make assumptions about the depth of the display, or whether it is colormapped. You must allocate all your colors explicitly: do not assume you can construct an RGB value and use that as a pixel value - directly. Use the utility routines provided by "utils/colors.h" to - simplify color allocation. + directly. In particular, you can't make assumptions about whether + pixels are RGB, RGBA, ARGB, ABGR, or even whether they are 32, 24, + 16 or 8 bits. Use the utility routines provided by "utils/colors.h" + to simplify color allocation. - It is better to eliminate flicker by double-buffering to a Pixmap than by erasing and re-drawing objects. Do not use drawing tricks involving XOR. - - If you use double-buffering, have a resource to turn it off. (MacOS - has double-buffering built in, so you'd be triple-buffering.) + - If you use double-buffering, have a resource to turn it off. (MacOS, + iOS and Android have double-buffering built in, so you'd end up + triple-buffering.) - Understand the differences between Pixmaps and XImages, and keep in mind which operations are happening in client memory and which are in @@ -160,20 +163,16 @@ Programming Tips ========================================================================== -The MacOS X Port +MacOS, iOS and Android ========================================================================== Though XScreenSaver started its life as an X11 program, it also now runs - on MacOS X. If you do your development on an X11 system, and follow the + on MacOS, iOS and Android, due to a maniacal collection of compatibility + shims. If you do your development on an X11 system, and follow the usual XScreenSaver APIs, you shouldn't need to do anything special for - it to also work on MacOS. + it to also work on MacOS and on phones. - The preprocessor macro HAVE_COCOA will be defined when being compiled in - a MacOS (Cocoa/Quartz) environment, and will be undefined when compiling - against "real" Xlib. - - To compile on MacOS, use the XCode project included in the source - distribution. You shouldn't need to have X11 installed, and shouldn't - need to run "configure" first. + See the READMEs in the OSX/ and android/ directories for instructions on + compiling for those platforms. ========================================================================== diff --git a/aclocal.m4 b/aclocal.m4 index e9201d78..03fbf515 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -327,7 +327,7 @@ msgstr "" # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl -glib_DEFUN([GLIB_GNU_GETTEXT], +AU_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES @@ -397,7 +397,8 @@ glib_DEFUN([GLIB_GNU_GETTEXT], rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES - ]) + ], + [[$0: This macro is deprecated. You should use upstream gettext instead.]]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- @@ -618,8 +619,8 @@ AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # nls.m4 serial 5 (gettext-0.18) -dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software +dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/android/Makefile b/android/Makefile index f2963520..35c24ec2 100644 --- a/android/Makefile +++ b/android/Makefile @@ -59,7 +59,9 @@ export ANDROID_HACKS= \ compass \ coral \ crystal \ + cubestack \ cubestorm \ + cubetwist \ cwaves \ cynosure \ dangerball \ @@ -67,6 +69,7 @@ export ANDROID_HACKS= \ deco \ demon \ discrete \ + discoball \ distort \ dnalogo \ drift \ @@ -98,6 +101,7 @@ export ANDROID_HACKS= \ greynetic \ helix \ hexadrop \ + hexstrut \ hilbert \ hopalong \ hypnowheel \ @@ -147,6 +151,7 @@ export ANDROID_HACKS= \ sierpinski \ sierpinski3d \ slidescreen \ + splodesic \ squiral \ stairs \ starfish \ @@ -269,6 +274,15 @@ CVT = -thumbnail '150x150^' -gravity center -extent 150x150 \ -quality 95 \ +dither -colors 128 +# If we are making the m6502 hack, create the header file for Android +m6502.h:: + @for h in $(ANDROID_HACKS) ; do \ + if [ $${h} = "m6502" ] ; then \ + echo "Making $${h} header ..."; \ + ../hacks/m6502.sh ../hacks/m6502.h ../hacks/images/m6502/*.asm ; \ + echo "Made $${h} header"; \ + fi; \ + done project/xscreensaver/res/drawable/%.png: @\ @@ -296,7 +310,8 @@ clean_thumbs:: for f in $(ANDROID_HACKS) $(ANDROID_TODO) ; do \ rm -f project/xscreensaver/res/drawable/$$f.png ; \ done -distclean:: clean_thumbs + +distclean:: clean_thumbs clean EXTRA_TARFILES = project/xscreensaver/res/drawable/thumbnail.png \ @@ -326,9 +341,12 @@ echo_tarfiles: | sort` ; \ echo $$FILES -debug:: +run_check:: + ../hacks/check-configs.pl --build-android $(ANDROID_HACKS) + +debug:: m6502.h run_check $(GRADLE) assembleDebug -release:: +release:: m6502.h run_check export APP_ABI=all ; \ $(GRADLE) assembleRelease @@ -380,3 +398,8 @@ apk:: release # dnalogo \ # twang \ # memscroller \ +# phosphor \ +# discoball \ +# cubetwist \ +# cubestack \ +# splodesic \ diff --git a/android/README b/android/README index 74b8097c..78fda15d 100644 --- a/android/README +++ b/android/README @@ -41,6 +41,9 @@ To build: $ANDROID_HOME/sdk/tools/android avd + E.g.: Nexus 5, Android 5, Intel Atom x86_64, RAM 2048 VM 64, + storage 200, use host GPU. + Configuration options are in $HOME/.android/avd/*.avd/config.ini To launch it: diff --git a/android/XScreenSaverDaydream.java.in b/android/XScreenSaverDaydream.java.in deleted file mode 100644 index 46c3dc77..00000000 --- a/android/XScreenSaverDaydream.java.in +++ /dev/null @@ -1,26 +0,0 @@ -/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * xscreensaver, Copyright (c) 2016 Jamie Zawinski - * and Dennis Sheil - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. No representations are made about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * The template for the generated per-saver classes. - */ - -package org.jwz.xscreensaver.gen; - -import org.jwz.xscreensaver.XScreenSaverDaydream; -import org.jwz.xscreensaver.jwxyz; - -public class @CLASS@ extends XScreenSaverDaydream { - public @CLASS@() { - super(jwxyz.API_@API@); - } -} diff --git a/android/XScreenSaverSettings.java.in b/android/XScreenSaverSettings.java.in deleted file mode 100644 index 914c653f..00000000 --- a/android/XScreenSaverSettings.java.in +++ /dev/null @@ -1,24 +0,0 @@ -/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * xscreensaver, Copyright (c) 2016 Jamie Zawinski - * and Dennis Sheil - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. No representations are made about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * The template for the generated per-saver "Settings" classes. - */ - -package org.jwz.xscreensaver.gen; - -import android.content.SharedPreferences; -import org.jwz.xscreensaver.XScreenSaverSettings; - -public class @CLASS@ extends XScreenSaverSettings - implements SharedPreferences.OnSharedPreferenceChangeListener { -} diff --git a/android/grabscreen-android.c b/android/grabscreen-android.c deleted file mode 100644 index 38710755..00000000 --- a/android/grabscreen-android.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -// -//#import "SaverRunner.h" -// -#include "jwxyz.h" -#include "grabscreen.h" -#include "colorbars.h" -#include "resources.h" -#include "usleep.h" - -Bool -osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, - XRectangle *geom_ret) -{ -abort(); -} - -Bool -osx_load_image_file (Screen *screen, Window xwindow, Drawable drawable, - const char *filename, XRectangle *geom_ret) -{ -abort(); -} diff --git a/android/project/build.gradle b/android/project/build.gradle index 41cd0d15..613cb908 100644 --- a/android/project/build.gradle +++ b/android/project/build.gradle @@ -1,11 +1,16 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { - mavenCentral() + jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.0' + classpath 'com.android.tools.build:gradle:2.1.0' } + + // This allows versions of Gradle past 2.9 to be used with the Gradle + // Android plugin. + // https://discuss.gradle.org/t/gradle-thinks-2-10-is-less-than-2-2-when-resolving-plugins/13434/2 +// System.properties['com.android.build.gradle.overrideVersionCheck'] = 'true'; } task clean(type: Delete) { diff --git a/android/project/gradle/wrapper/gradle-wrapper.jar b/android/project/gradle/wrapper/gradle-wrapper.jar index 8c0fb64a8698b08ecc4158d828ca593c4928e9dd..13372aef5e24af05341d49695ee84e5f9b594659 100644 GIT binary patch delta 46904 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�{>`y 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 diff --git a/android/project/gradle/wrapper/gradle-wrapper.properties b/android/project/gradle/wrapper/gradle-wrapper.properties index 542898db..729f41b7 100644 --- a/android/project/gradle/wrapper/gradle-wrapper.properties +++ b/android/project/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,6 @@ - -#Wed Apr 10 15:27:10 PDT 2013 +#Sun Jun 12 14:20:28 PDT 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-bin.zip diff --git a/android/project/gradlew b/android/project/gradlew index 91a7e269..9d82f789 100755 --- a/android/project/gradlew +++ b/android/project/gradlew @@ -42,11 +42,6 @@ case "`uname`" in ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" @@ -61,9 +56,9 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- +cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" -cd "$SAVED" >&- +cd "$SAVED" >/dev/null CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -114,6 +109,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` diff --git a/android/project/project.iml b/android/project/project.iml new file mode 100644 index 00000000..de3d86e0 --- /dev/null +++ b/android/project/project.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/project/xscreensaver/.idea/compiler.xml b/android/project/xscreensaver/.idea/compiler.xml new file mode 100644 index 00000000..9a8b7e5c --- /dev/null +++ b/android/project/xscreensaver/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/android/project/xscreensaver/.idea/gradle.xml b/android/project/xscreensaver/.idea/gradle.xml new file mode 100644 index 00000000..19fd5f1b --- /dev/null +++ b/android/project/xscreensaver/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/android/project/xscreensaver/.idea/misc.xml b/android/project/xscreensaver/.idea/misc.xml new file mode 100644 index 00000000..cc15a254 --- /dev/null +++ b/android/project/xscreensaver/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/project/xscreensaver/.idea/modules.xml b/android/project/xscreensaver/.idea/modules.xml new file mode 100644 index 00000000..f3179276 --- /dev/null +++ b/android/project/xscreensaver/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/android/project/xscreensaver/.idea/workspace.xml b/android/project/xscreensaver/.idea/workspace.xml new file mode 100644 index 00000000..516bf62b --- /dev/null +++ b/android/project/xscreensaver/.idea/workspace.xml @@ -0,0 +1,1863 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1475536195508 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/project/xscreensaver/build.gradle b/android/project/xscreensaver/build.gradle index 0700c946..c0f9f100 100644 --- a/android/project/xscreensaver/build.gradle +++ b/android/project/xscreensaver/build.gradle @@ -46,7 +46,8 @@ android { Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkDir = properties.getProperty('ndk.dir') - commandLine "$ndkDir/ndk-build", '-C', file('jni').absolutePath + commandLine "$ndkDir/ndk-build", '-C', file('jni').absolutePath, + '-j' + Runtime.getRuntime().availableProcessors().toString() } // generate files early in the process diff --git a/android/project/xscreensaver/gradle/wrapper/gradle-wrapper.jar b/android/project/xscreensaver/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 0 HcmV?d00001 diff --git a/android/project/xscreensaver/gradle/wrapper/gradle-wrapper.properties b/android/project/xscreensaver/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..04e285f3 --- /dev/null +++ b/android/project/xscreensaver/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Dec 28 10:00:20 PST 2015 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/android/project/xscreensaver/gradlew b/android/project/xscreensaver/gradlew new file mode 100644 index 00000000..9d82f789 --- /dev/null +++ b/android/project/xscreensaver/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/android/project/xscreensaver/gradlew.bat b/android/project/xscreensaver/gradlew.bat new file mode 100644 index 00000000..aec99730 --- /dev/null +++ b/android/project/xscreensaver/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/project/xscreensaver/jni/Android.mk b/android/project/xscreensaver/jni/Android.mk index b29a5781..d1f00b74 100644 --- a/android/project/xscreensaver/jni/Android.mk +++ b/android/project/xscreensaver/jni/Android.mk @@ -1,4 +1,4 @@ -LOCAL_PATH := $(call my-dir) +LOCAL_PATH := $(call my-dir)/../../../.. include $(CLEAR_VARS) @@ -6,138 +6,137 @@ LOCAL_MODULE := xscreensaver # The base framework files: LOCAL_SRC_FILES := \ - xscreensaver/android/screenhack-android.c \ - xscreensaver/android/grabscreen-android.c \ - xscreensaver/jwxyz/jwxyz-android.c \ - xscreensaver/jwxyz/jwxyz-common.c \ - xscreensaver/jwxyz/jwxyz-gl.c \ - xscreensaver/jwxyz/jwxyz-timers.c \ - xscreensaver/jwxyz/jwzgles.c \ + android/screenhack-android.c \ + jwxyz/jwxyz-android.c \ + jwxyz/jwxyz-common.c \ + jwxyz/jwxyz-gl.c \ + jwxyz/jwxyz-timers.c \ + jwxyz/jwzgles.c \ # Utilities used by the hacks: LOCAL_SRC_FILES += \ - xscreensaver/hacks/analogtv.c \ - xscreensaver/hacks/delaunay.c \ - xscreensaver/hacks/fps.c \ - xscreensaver/hacks/glx/dropshadow.c \ - xscreensaver/hacks/glx/chessmodels.c \ - xscreensaver/hacks/glx/fps-gl.c \ - xscreensaver/hacks/glx/gltrackball.c \ - xscreensaver/hacks/glx/glut_stroke.c \ - xscreensaver/hacks/glx/glut_swidth.c \ - xscreensaver/hacks/glx/grab-ximage.c \ - xscreensaver/hacks/glx/marching.c \ - xscreensaver/hacks/glx/normals.c \ - xscreensaver/hacks/glx/rotator.c \ - xscreensaver/hacks/glx/sphere.c \ - xscreensaver/hacks/glx/texfont.c \ - xscreensaver/hacks/glx/trackball.c \ - xscreensaver/hacks/glx/tube.c \ - xscreensaver/hacks/glx/xpm-ximage.c \ - xscreensaver/hacks/xlockmore.c \ - xscreensaver/hacks/xpm-pixmap.c \ - xscreensaver/utils/async_netdb.c \ - xscreensaver/utils/aligned_malloc.c \ - xscreensaver/utils/colorbars.c \ - xscreensaver/utils/colors.c \ - xscreensaver/utils/erase.c \ - xscreensaver/utils/grabclient.c \ - xscreensaver/utils/hsv.c \ - xscreensaver/utils/logo.c \ - xscreensaver/utils/minixpm.c \ - xscreensaver/utils/resources.c \ - xscreensaver/utils/spline.c \ - xscreensaver/utils/textclient-mobile.c \ - xscreensaver/utils/thread_util.c \ - xscreensaver/utils/usleep.c \ - xscreensaver/utils/utf8wc.c \ - xscreensaver/utils/xft.c \ - xscreensaver/utils/yarandom.c \ + hacks/analogtv.c \ + hacks/delaunay.c \ + hacks/fps.c \ + hacks/glx/dropshadow.c \ + hacks/glx/chessmodels.c \ + hacks/glx/fps-gl.c \ + hacks/glx/gltrackball.c \ + hacks/glx/glut_stroke.c \ + hacks/glx/glut_swidth.c \ + hacks/glx/grab-ximage.c \ + hacks/glx/marching.c \ + hacks/glx/normals.c \ + hacks/glx/rotator.c \ + hacks/glx/sphere.c \ + hacks/glx/texfont.c \ + hacks/glx/trackball.c \ + hacks/glx/tube.c \ + hacks/glx/xpm-ximage.c \ + hacks/xlockmore.c \ + hacks/xpm-pixmap.c \ + utils/async_netdb.c \ + utils/aligned_malloc.c \ + utils/colorbars.c \ + utils/colors.c \ + utils/erase.c \ + utils/grabclient.c \ + utils/hsv.c \ + utils/logo.c \ + utils/minixpm.c \ + utils/resources.c \ + utils/spline.c \ + utils/textclient-mobile.c \ + utils/thread_util.c \ + utils/usleep.c \ + utils/utf8wc.c \ + utils/xft.c \ + utils/yarandom.c \ # The source files of all of the currently active hacks: LOCAL_SRC_FILES += $(shell \ for f in $$ANDROID_HACKS ; do \ if [ "$$f" = "companioncube" ]; then f="companion"; fi ; \ if [ -f "../../../../hacks/$$f.c" ]; then \ - echo "xscreensaver/hacks/$$f.c" ; \ + echo "hacks/$$f.c" ; \ else \ - echo "xscreensaver/hacks/glx/$$f.c" ; \ + echo "hacks/glx/$$f.c" ; \ fi ; \ done ) # Some savers occupy more than one source file: LOCAL_SRC_FILES += \ - xscreensaver/hacks/apple2-main.c \ - xscreensaver/hacks/asm6502.c \ - xscreensaver/hacks/pacman_ai.c \ - xscreensaver/hacks/pacman_level.c \ - xscreensaver/hacks/glx/b_draw.c \ - xscreensaver/hacks/glx/b_lockglue.c \ - xscreensaver/hacks/glx/b_sphere.c \ - xscreensaver/hacks/glx/buildlwo.c \ - xscreensaver/hacks/glx/companion_quad.c \ - xscreensaver/hacks/glx/companion_disc.c \ - xscreensaver/hacks/glx/companion_heart.c \ - xscreensaver/hacks/glx/cow_face.c \ - xscreensaver/hacks/glx/cow_hide.c \ - xscreensaver/hacks/glx/cow_hoofs.c \ - xscreensaver/hacks/glx/cow_horns.c \ - xscreensaver/hacks/glx/cow_tail.c \ - xscreensaver/hacks/glx/cow_udder.c \ - xscreensaver/hacks/glx/dolphin.c \ - xscreensaver/hacks/glx/gllist.c \ - xscreensaver/hacks/glx/glschool_alg.c \ - xscreensaver/hacks/glx/glschool_gl.c \ - xscreensaver/hacks/glx/involute.c \ - xscreensaver/hacks/glx/lament_model.c \ - xscreensaver/hacks/glx/pipeobjs.c \ - xscreensaver/hacks/glx/robot.c \ - xscreensaver/hacks/glx/robot-wireframe.c \ - xscreensaver/hacks/glx/polyhedra-gl.c \ - xscreensaver/hacks/glx/s1_1.c \ - xscreensaver/hacks/glx/s1_2.c \ - xscreensaver/hacks/glx/s1_3.c \ - xscreensaver/hacks/glx/s1_4.c \ - xscreensaver/hacks/glx/s1_5.c \ - xscreensaver/hacks/glx/s1_6.c \ - xscreensaver/hacks/glx/s1_b.c \ - xscreensaver/hacks/glx/shark.c \ - xscreensaver/hacks/glx/sonar-sim.c \ - xscreensaver/hacks/glx/sonar-icmp.c \ - xscreensaver/hacks/glx/splitflap_obj.c \ - xscreensaver/hacks/glx/sproingiewrap.c \ - xscreensaver/hacks/glx/stonerview-move.c \ - xscreensaver/hacks/glx/stonerview-osc.c \ - xscreensaver/hacks/glx/stonerview-view.c \ - xscreensaver/hacks/glx/swim.c \ - xscreensaver/hacks/glx/tangram_shapes.c \ - xscreensaver/hacks/glx/teapot.c \ - xscreensaver/hacks/glx/toast.c \ - xscreensaver/hacks/glx/toast2.c \ - xscreensaver/hacks/glx/toaster.c \ - xscreensaver/hacks/glx/toaster_base.c \ - xscreensaver/hacks/glx/toaster_handle.c \ - xscreensaver/hacks/glx/toaster_handle2.c \ - xscreensaver/hacks/glx/toaster_jet.c \ - xscreensaver/hacks/glx/toaster_knob.c \ - xscreensaver/hacks/glx/toaster_slots.c \ - xscreensaver/hacks/glx/toaster_wing.c \ - xscreensaver/hacks/glx/tronbit_idle1.c \ - xscreensaver/hacks/glx/tronbit_idle2.c \ - xscreensaver/hacks/glx/tronbit_no.c \ - xscreensaver/hacks/glx/tronbit_yes.c \ - xscreensaver/hacks/glx/tunnel_draw.c \ - xscreensaver/hacks/glx/whale.c \ + hacks/apple2-main.c \ + hacks/asm6502.c \ + hacks/pacman_ai.c \ + hacks/pacman_level.c \ + hacks/glx/b_draw.c \ + hacks/glx/b_lockglue.c \ + hacks/glx/b_sphere.c \ + hacks/glx/buildlwo.c \ + hacks/glx/companion_quad.c \ + hacks/glx/companion_disc.c \ + hacks/glx/companion_heart.c \ + hacks/glx/cow_face.c \ + hacks/glx/cow_hide.c \ + hacks/glx/cow_hoofs.c \ + hacks/glx/cow_horns.c \ + hacks/glx/cow_tail.c \ + hacks/glx/cow_udder.c \ + hacks/glx/dolphin.c \ + hacks/glx/gllist.c \ + hacks/glx/glschool_alg.c \ + hacks/glx/glschool_gl.c \ + hacks/glx/involute.c \ + hacks/glx/lament_model.c \ + hacks/glx/pipeobjs.c \ + hacks/glx/robot.c \ + hacks/glx/robot-wireframe.c \ + hacks/glx/polyhedra-gl.c \ + hacks/glx/s1_1.c \ + hacks/glx/s1_2.c \ + hacks/glx/s1_3.c \ + hacks/glx/s1_4.c \ + hacks/glx/s1_5.c \ + hacks/glx/s1_6.c \ + hacks/glx/s1_b.c \ + hacks/glx/shark.c \ + hacks/glx/sonar-sim.c \ + hacks/glx/sonar-icmp.c \ + hacks/glx/splitflap_obj.c \ + hacks/glx/sproingiewrap.c \ + hacks/glx/stonerview-move.c \ + hacks/glx/stonerview-osc.c \ + hacks/glx/stonerview-view.c \ + hacks/glx/swim.c \ + hacks/glx/tangram_shapes.c \ + hacks/glx/teapot.c \ + hacks/glx/toast.c \ + hacks/glx/toast2.c \ + hacks/glx/toaster.c \ + hacks/glx/toaster_base.c \ + hacks/glx/toaster_handle.c \ + hacks/glx/toaster_handle2.c \ + hacks/glx/toaster_jet.c \ + hacks/glx/toaster_knob.c \ + hacks/glx/toaster_slots.c \ + hacks/glx/toaster_wing.c \ + hacks/glx/tronbit_idle1.c \ + hacks/glx/tronbit_idle2.c \ + hacks/glx/tronbit_no.c \ + hacks/glx/tronbit_yes.c \ + hacks/glx/tunnel_draw.c \ + hacks/glx/whale.c \ LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lEGL LOCAL_C_INCLUDES := \ - $(LOCAL_PATH)/xscreensaver \ - $(LOCAL_PATH)/xscreensaver/android \ - $(LOCAL_PATH)/xscreensaver/utils \ - $(LOCAL_PATH)/xscreensaver/jwxyz \ - $(LOCAL_PATH)/xscreensaver/hacks \ - $(LOCAL_PATH)/xscreensaver/hacks/glx \ + $(LOCAL_PATH) \ + $(LOCAL_PATH)/android \ + $(LOCAL_PATH)/utils \ + $(LOCAL_PATH)/jwxyz \ + $(LOCAL_PATH)/hacks \ + $(LOCAL_PATH)/hacks/glx \ # -Wnested-externs would also be here, but for Android unistd.h. LOCAL_CFLAGS += \ diff --git a/android/project/xscreensaver/jni/xscreensaver b/android/project/xscreensaver/jni/xscreensaver deleted file mode 120000 index c866b868..00000000 --- a/android/project/xscreensaver/jni/xscreensaver +++ /dev/null @@ -1 +0,0 @@ -../../../.. \ No newline at end of file diff --git a/android/project/xscreensaver/local.properties b/android/project/xscreensaver/local.properties new file mode 100644 index 00000000..d530e0de --- /dev/null +++ b/android/project/xscreensaver/local.properties @@ -0,0 +1,11 @@ +## This file is automatically generated by Android Studio. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +#Mon Oct 03 16:09:56 PDT 2016 +sdk.dir=/Users/jwz/Library/Android/sdk diff --git a/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverDaydream.java b/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverDaydream.java index ea04df07..8824dbe1 100644 --- a/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverDaydream.java +++ b/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverDaydream.java @@ -106,18 +106,21 @@ public class XScreenSaverDaydream extends DreamService // Extract the saver name from e.g. "BouncingCowDaydream" String name = this.getClass().getSimpleName(); - String tail = "Daydream"; - if (name.endsWith(tail)) - name = name.substring (0, name.length() - tail.length()); + int index = name.lastIndexOf('$'); + if (index != -1) { + index++; + name = name.substring (index, name.length() - index); + } name = name.toLowerCase(); WindowManager wm = (WindowManager) getSystemService (WINDOW_SERVICE); + glview = new GLSurfaceView (this); renderer = new XScreenSaverRenderer (name, api, getApplicationContext(), wm, - screenshot, this); - - glview = new GLSurfaceView (this); + screenshot, this, glview); + glview.setEGLConfigChooser (8, 8, 8, 8, 16, 0); glview.setRenderer (renderer); + glview.setRenderMode (GLSurfaceView.RENDERMODE_WHEN_DIRTY); setContentView (glview); detector = new GestureDetector (this, this); diff --git a/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java b/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java index 9889ea86..f854636c 100644 --- a/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java +++ b/android/project/xscreensaver/src/org/jwz/xscreensaver/XScreenSaverRenderer.java @@ -22,6 +22,8 @@ import android.view.KeyEvent; import android.content.Context; import android.graphics.Bitmap; import android.opengl.GLSurfaceView; +import java.util.Timer; +import java.util.TimerTask; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import org.jwz.xscreensaver.jwxyz; @@ -44,6 +46,16 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { WindowManager wm; Bitmap screenshot; + GLSurfaceView glview; + + class RenderTask extends TimerTask { + public void run() { + glview.requestRender(); + } + }; + + Timer timer = new Timer(); + private void LOG (String fmt, Object... args) { Log.d ("xscreensaver", this.getClass().getSimpleName() + ": " + @@ -59,7 +71,8 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { public XScreenSaverRenderer (String hack, int api, Context app, WindowManager wm, Bitmap screenshot, - Handler.Callback abort_callback) { + Handler.Callback abort_callback, + GLSurfaceView glview) { super(); this.hack = hack; this.api = api; @@ -68,13 +81,18 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { this.prefs = prefs; this.screenshot = screenshot; this.abort_callback = abort_callback; + this.glview = glview; LOG ("init %s %d", hack, api); } public void onDrawFrame (GL10 gl) { try { - if (jwxyz_obj != null) - jwxyz_obj.nativeRender(); + if (jwxyz_obj != null) { + long delay = jwxyz_obj.nativeRender(); + // java.util.Timer doesn't seem to like to re-use TimerTasks, so + // there's a slow object churn here: one TimerTask per frame. + timer.schedule(new RenderTask(), delay / 1000); + } } catch (RuntimeException e) { except (e); } @@ -98,6 +116,8 @@ public class XScreenSaverRenderer implements GLSurfaceView.Renderer { jwxyz_obj.nativeResize (w, h, r); + glview.requestRender(); + } catch (RuntimeException e) { except (e); } diff --git a/android/project/xscreensaver/src/org/jwz/xscreensaver/jwxyz.java b/android/project/xscreensaver/src/org/jwz/xscreensaver/jwxyz.java index a83e8cf9..1982ca49 100644 --- a/android/project/xscreensaver/src/org/jwz/xscreensaver/jwxyz.java +++ b/android/project/xscreensaver/src/org/jwz/xscreensaver/jwxyz.java @@ -40,6 +40,8 @@ import java.nio.ByteBuffer; import java.io.File; import java.io.InputStream; import java.io.FileOutputStream; +import java.lang.Runnable; +import java.lang.Thread; import android.database.Cursor; import android.provider.MediaStore; import android.provider.MediaStore.MediaColumns; @@ -66,11 +68,6 @@ public class jwxyz { SharedPreferences prefs; Hashtable defaults = new Hashtable(); - // Maps numeric IDs to Java objects, so that C code can reference them - // even if GC relocates them. - private Hashtable rootset = new Hashtable(); - private long rootset_id = 1000; - // Maps font names to either: String (system font) or Typeface (bundled). private Hashtable all_fonts = @@ -83,7 +80,7 @@ public class jwxyz { Hashtable defaults, int w, int h); public native void nativeResize (int w, int h, double rot); - public native void nativeRender (); + public native long nativeRender (); public native void nativeDone (); public native void sendButtonEvent (int x, int y, boolean down); public native void sendMotionEvent (int x, int y); @@ -354,7 +351,7 @@ public class jwxyz { } - // Returns [ Long font_id, String name, Float size, ascent, descent ] + // Returns [ Paint paint, String name, Float size, ascent, descent ] public Object[] loadFont(String name) { Object pair[]; @@ -383,34 +380,24 @@ public class jwxyz { paint.setTextSize (size); paint.setColor (Color.argb (0xFF, 0xFF, 0xFF, 0xFF)); - Long font_key = new Long(rootset_id++); - rootset.put (font_key, paint); - - LOG ("load font %s, \"%s\" = \"%s %.1f\"", - font_key.toString(), name, name2, size); + LOG ("load font \"%s\" = \"%s %.1f\"", name, name2, size); FontMetrics fm = paint.getFontMetrics(); - Object ret[] = { font_key, name2, new Float(size), + Object ret[] = { paint, name2, new Float(size), new Float(-fm.ascent), new Float(fm.descent) }; return ret; } - public void releaseFont(long font_id) { - rootset.remove (new Long(font_id)); - } - /* Returns a byte[] array containing XCharStruct with an optional bitmap appended to it. lbearing, rbearing, width, ascent, descent: 2 bytes each. Followed by a WxH pixmap, 32 bits per pixel. */ - public ByteBuffer renderText (long font_id, String text, boolean render_p) { - - Paint paint = (Paint) rootset.get(new Long(font_id)); + public ByteBuffer renderText (Paint paint, String text, boolean render_p) { if (paint == null) { - LOG ("no font %d", font_id); + LOG ("no font"); return null; } @@ -483,44 +470,78 @@ public class jwxyz { } - // Returns the contents of the URL. Blocking load. - public ByteBuffer loadURL (String url) { + /* Returns the contents of the URL. + Loads the URL in a background thread: if the URL has not yet loaded, + this will return null. Once the URL has completely loaded, the full + contents will be returned. Calling this again after that starts the + URL loading again. + */ + private String loading_url = null; + private ByteBuffer loaded_url_body = null; - int size0 = 10240; - int size = size0; - int count = 0; - ByteBuffer body = ByteBuffer.allocateDirect (size); + public synchronized ByteBuffer loadURL (String url) { - try { - LOG ("load URL: %s", url); - URL u = new URL(url); - InputStream s = u.openStream(); - byte buf[] = new byte[10240]; - while (true) { - int n = s.read (buf); - if (n == -1) break; - // LOG ("read %d", n); - if (count + n + 1 >= size) { - int size2 = (int) (size * 1.2 + size0); - // LOG ("expand %d -> %d", size, size2); - ByteBuffer body2 = ByteBuffer.allocateDirect (size2); - body.rewind(); - body2.put (body); - body2.position (count); - body = body2; - size = size2; - } - body.put (buf, 0, n); - count += n; - } - } catch (Exception e) { - LOG ("load URL error: %s", e.toString()); - body.clear(); - body.put (e.toString().getBytes()); - body.put ((byte) 0); - } + if (loaded_url_body != null) { // Thread finished + + // LOG ("textclient finished %s", loading_url); + + ByteBuffer bb = loaded_url_body; + loading_url = null; + loaded_url_body = null; + return bb; + + } else if (loading_url != null) { // Waiting on thread + // LOG ("textclient waiting..."); + return null; - return body; + } else { // Launch thread + + loading_url = url; + LOG ("textclient launching %s...", url); + + new Thread (new Runnable() { + public void run() { + int size0 = 10240; + int size = size0; + int count = 0; + ByteBuffer body = ByteBuffer.allocateDirect (size); + + try { + URL u = new URL (loading_url); + // LOG ("textclient thread loading: %s", u.toString()); + InputStream s = u.openStream(); + byte buf[] = new byte[10240]; + while (true) { + int n = s.read (buf); + if (n == -1) break; + // LOG ("textclient thread read %d", n); + if (count + n + 1 >= size) { + int size2 = (int) (size * 1.2 + size0); + // LOG ("textclient thread expand %d -> %d", size, size2); + ByteBuffer body2 = ByteBuffer.allocateDirect (size2); + body.rewind(); + body2.put (body); + body2.position (count); + body = body2; + size = size2; + } + body.put (buf, 0, n); + count += n; + } + } catch (Exception e) { + LOG ("load URL error: %s", e.toString()); + body.clear(); + body.put (e.toString().getBytes()); + body.put ((byte) 0); + } + + // LOG ("textclient thread finished %s (%d)", loading_url, size); + loaded_url_body = body; + } + }).start(); + + return null; + } } diff --git a/android/project/xscreensaver/xscreensaver.iml b/android/project/xscreensaver/xscreensaver.iml new file mode 100644 index 00000000..1af1dc54 --- /dev/null +++ b/android/project/xscreensaver/xscreensaver.iml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config.h.in b/config.h.in index 4f3251cd..c8b4fdfe 100644 --- a/config.h.in +++ b/config.h.in @@ -458,3 +458,6 @@ /* Define to `unsigned int' if does not define. */ #undef size_t + +/* Define to `int' if or does not define. */ +#undef socklen_t diff --git a/configure b/configure index 75c16008..b0a24cb0 100755 --- a/configure +++ b/configure @@ -2796,6 +2796,7 @@ fi + ############################################################################### # # Some utility functions to make checking for X things easier. @@ -6050,6 +6051,40 @@ $as_echo "$ac_cv_have_getifaddrs" >&6; } $as_echo "#define HAVE_GETIFADDRS 1" >>confdefs.h fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 +$as_echo_n "checking for socklen_t... " >&6; } +if ${ac_cv_type_socklen_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ + + socklen_t socklen; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_socklen_t=yes +else + ac_cv_type_socklen_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_socklen_t" >&5 +$as_echo "$ac_cv_type_socklen_t" >&6; } + if test "$ac_cv_type_socklen_t" != yes; then + +$as_echo "#define socklen_t int" >>confdefs.h + + fi for ac_header in crypt.h sys/select.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` @@ -13272,7 +13307,7 @@ if ${ac_cv_mesagl_version_string+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext < #ifndef MESA_MAJOR_VERSION diff --git a/configure.in b/configure.in index 0098d909..3c558358 100644 --- a/configure.in +++ b/configure.in @@ -1048,6 +1048,17 @@ AC_DEFUN([AC_CHECK_GETIFADDRS], AC_DEFINE(HAVE_GETIFADDRS) fi]) +AC_DEFUN([AC_TYPE_SOCKLEN_T], + [AC_CACHE_CHECK([for socklen_t], ac_cv_type_socklen_t, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include ]], [[ + socklen_t socklen; + ]])],[ac_cv_type_socklen_t=yes],[ac_cv_type_socklen_t=no])]) + if test "$ac_cv_type_socklen_t" != yes; then + AC_DEFINE(socklen_t, int, + [Define to `int' if or does not define.]) + fi]) ############################################################################### # @@ -1254,6 +1265,7 @@ AC_CHECK_MEMBERS([struct sockaddr.sa_len],,, [[#include ]]) AC_CHECK_ICMP AC_CHECK_ICMPHDR AC_CHECK_GETIFADDRS +AC_TYPE_SOCKLEN_T AC_CHECK_HEADERS(crypt.h sys/select.h) AC_PROG_PERL diff --git a/driver/Makefile.in b/driver/Makefile.in index c1323048..e2a600d2 100644 --- a/driver/Makefile.in +++ b/driver/Makefile.in @@ -658,7 +658,6 @@ distdepend: check_men update_ad_version XScreenSaver_ad.h XScreenSaver_Xm_ad.h -e 's@ $$(srcdir)/\(.*config\.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ - mv Makefile.in Makefile.in.bak && \ mv /tmp/distdepend.$$$$ Makefile.in # Updates the version number in the app-defaults file to be in sync with diff --git a/driver/XScreenSaver.ad.in b/driver/XScreenSaver.ad.in index 2b48a030..0e70efdc 100644 --- a/driver/XScreenSaver.ad.in +++ b/driver/XScreenSaver.ad.in @@ -4,8 +4,8 @@ ! a screen saver and locker for the X window system ! by Jamie Zawinski ! -! version 5.35 -! 24-May-2016 +! version 5.36 +! 10-Oct-2016 ! ! See "man xscreensaver" for more info. The latest version is always ! available at https://www.jwz.org/xscreensaver/ @@ -371,10 +371,15 @@ GetViewPortIsFullOfLies: False tessellimage -root \n\ @GL_KLUDGE@ GL: winduprobot -root \n\ @GL_KLUDGE@ GL: splitflap -root \n\ +@GL_KLUDGE@ GL: cubestack -root \n\ +@GL_KLUDGE@ GL: cubetwist -root \n\ +@GL_KLUDGE@ GL: discoball -root \n\ @GL_KLUDGE@ GL: dymaxionmap -root \n\ @GL_KLUDGE@ GL: energystream -root \n\ +@GL_KLUDGE@ GL: hexstrut -root \n\ @GL_KLUDGE@ GL: hydrostat -root \n\ @GL_KLUDGE@ GL: raverhoop -root \n\ +@GL_KLUDGE@ GL: splodesic -root \n\ @GL_KLUDGE@ GL: unicrud -root \n @@ -460,7 +465,9 @@ XScreenSaver.bourneShell: /bin/sh *hacks.ccurve.name: CCurve *hacks.cloudlife.name: CloudLife *hacks.companioncube.name: CompanionCube +*hacks.cubestack.name: CubeStack *hacks.cubestorm.name: CubeStorm +*hacks.cubetwist.name: CubeTwist *hacks.cubicgrid.name: CubicGrid *hacks.cwaves.name: CWaves *hacks.dangerball.name: DangerBall diff --git a/driver/XScreenSaver_ad.h b/driver/XScreenSaver_ad.h index 5ca109b4..7e0e279a 100644 --- a/driver/XScreenSaver_ad.h +++ b/driver/XScreenSaver_ad.h @@ -266,10 +266,15 @@ tessellimage -root \\n\ GL: winduprobot -root \\n\ GL: splitflap -root \\n\ + GL: cubestack -root \\n\ + GL: cubetwist -root \\n\ + GL: discoball -root \\n\ GL: dymaxionmap -root \\n\ GL: energystream -root \\n\ + GL: hexstrut -root \\n\ GL: hydrostat -root \\n\ GL: raverhoop -root \\n\ + GL: splodesic -root \\n\ GL: unicrud -root \\n", "XScreenSaver.pointerPollTime: 0:00:05", "XScreenSaver.pointerHysteresis: 10", @@ -325,7 +330,9 @@ "*hacks.ccurve.name: CCurve", "*hacks.cloudlife.name: CloudLife", "*hacks.companioncube.name: CompanionCube", +"*hacks.cubestack.name: CubeStack", "*hacks.cubestorm.name: CubeStorm", +"*hacks.cubetwist.name: CubeTwist", "*hacks.cubicgrid.name: CubicGrid", "*hacks.cwaves.name: CWaves", "*hacks.dangerball.name: DangerBall", diff --git a/driver/subprocs.c b/driver/subprocs.c index 29ad6009..0ccf7d23 100644 --- a/driver/subprocs.c +++ b/driver/subprocs.c @@ -44,6 +44,7 @@ #endif /* VMS */ #include /* for the signal names */ +#include #if !defined(SIGCHLD) && defined(SIGCLD) # define SIGCHLD SIGCLD @@ -1303,6 +1304,7 @@ get_best_gl_visual (saver_info *si, Screen *screen) { int result = 0; int wait_status = 0; + pid_t pid = -1; FILE *f = fdopen (in, "r"); unsigned long v = 0; @@ -1321,8 +1323,17 @@ get_best_gl_visual (saver_info *si, Screen *screen) close (errin); } - /* Wait for the child to die. */ - waitpid (-1, &wait_status, 0); + /* Wait for the child to die - wait for this pid only, not others. */ + pid = waitpid (forked, &wait_status, 0); + if (si->prefs.debug_p) + { + write_string (STDERR_FILENO, blurb()); + write_string (STDERR_FILENO, ": waitpid("); + write_long (STDERR_FILENO, (long) forked); + write_string (STDERR_FILENO, ") ==> "); + write_long (STDERR_FILENO, (long) pid); + write_string (STDERR_FILENO, "\n"); + } unblock_sigchld(); /* child is dead and waited, unblock now. */ diff --git a/driver/xscreensaver-getimage.c b/driver/xscreensaver-getimage.c index f22504e9..f702f679 100644 --- a/driver/xscreensaver-getimage.c +++ b/driver/xscreensaver-getimage.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2001-2013 by Jamie Zawinski +/* xscreensaver, Copyright (c) 2001-2016 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 @@ -69,7 +69,7 @@ /* On MacOS under X11, the usual X11 mechanism of getting a screen shot doesn't work, and we need to use an external program. This is only used when running under X11 on MacOS. If it's a Cocoa build, this - path is not taken, and OSX/osxgrabscreen.m is used instead. + path is not taken, and OSX/grabclient-osx.m is used instead. */ # define USE_EXTERNAL_SCREEN_GRABBER #endif diff --git a/driver/xscreensaver-text b/driver/xscreensaver-text index 1b55832d..1d0170d9 100755 --- a/driver/xscreensaver-text +++ b/driver/xscreensaver-text @@ -37,7 +37,7 @@ use Text::Wrap qw(wrap); use bytes; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.41 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.44 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $http_proxy = undef; @@ -158,6 +158,7 @@ sub get_x11_prefs_1($) { my $got_any_p = 0; $body =~ s@\\\n@@gs; + $body =~ s@^[ \t]*#[^\n]*$@@gm; if ($body =~ m/^[.*]*textMode:[ \t]*([^\s]+)\s*$/im) { $text_mode = $1; @@ -300,8 +301,9 @@ sub output() { $text_file =~ s@^~/@$ENV{HOME}/@s; # allow literal "~/" - if (open (my $in, '<', $text_file)) { + if (open (my $in, '<:raw', $text_file)) { print STDERR "$progname: reading $text_file\n" if ($verbose); + binmode (STDOUT, ':raw'); if (($wrap_columns && $wrap_columns > 0) || $truncate_lines) { # read it, then reformat it. @@ -783,6 +785,8 @@ sub main() { $load_p = 0; } elsif (m/^--?text$/) { $text_mode = 'literal'; $text_literal = shift @ARGV || ''; + $text_literal =~ s@\\n@\n@gs; + $text_literal =~ s@\\\n@\n@gs; $load_p = 0; } elsif (m/^--?file$/) { $text_mode = 'file'; $text_file = shift @ARGV || ''; diff --git a/hacks/Makefile.in b/hacks/Makefile.in index ccc0b616..c1e25eba 100644 --- a/hacks/Makefile.in +++ b/hacks/Makefile.in @@ -422,7 +422,6 @@ distdepend:: m6502.h -e 's@ $$(srcdir)/\(m6502.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ - mv Makefile.in Makefile.in.bak && \ mv /tmp/distdepend.$$$$ Makefile.in TAGS: tags diff --git a/hacks/analogtv.h b/hacks/analogtv.h index 99c7909d..0bc8b260 100644 --- a/hacks/analogtv.h +++ b/hacks/analogtv.h @@ -1,4 +1,4 @@ -/* analogtv, Copyright (c) 2003, 2004 Trevor Blackwell +/* analogtv, Copyright (c) 2003-2016 Trevor Blackwell * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -304,7 +304,7 @@ int analogtv_handle_events (analogtv *it); #else /* Need to really crank this up for it to look good on the iPhone screen. */ # define ANALOGTV_DEF_BRIGHTNESS "3" -# define ANALOGTV_DEF_CONTRAST "1000" +# define ANALOGTV_DEF_CONTRAST "400" #endif #define ANALOGTV_DEFAULTS \ diff --git a/hacks/asm6502.c b/hacks/asm6502.c index 2228a38e..b9b7e1e4 100644 --- a/hacks/asm6502.c +++ b/hacks/asm6502.c @@ -1874,7 +1874,7 @@ static BOOL translate(m6502_Opcodes *op,Param *param, machine_6502 *machine){ if (op->BRA) { pushByte(machine, op->BRA); { - int diff = (param->lbladdr - machine->defaultCodePC); + int diff = abs((int)param->lbladdr - (int)machine->defaultCodePC); int backward = (param->lbladdr < machine->defaultCodePC); pushByte(machine, (backward) ? 0xff - diff : diff - 1); } diff --git a/hacks/check-configs.pl b/hacks/check-configs.pl index d4ec7199..f8bba1de 100755 --- a/hacks/check-configs.pl +++ b/hacks/check-configs.pl @@ -21,7 +21,7 @@ use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.21 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.22 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $debug_p = 0; @@ -204,6 +204,8 @@ sub parse_src($) { return (\%res_to_val, \%switch_to_res); } +my %video_dups; + # Returns a list of: # "resource = default value" # or "resource != non-default value" @@ -427,6 +429,13 @@ sub parse_xml($$$) { # error ("$file: no video") unless $video; print STDERR "\n$file: WARNING: no video\n\n" unless $video; + if ($video && $video_dups{$video} && + $video_dups{$video} ne $saver_title) { + print STDERR "\n$file: WARNING: $saver_title: dup video with " . + $video_dups{$video} . "\n"; + } + $video_dups{$video} = $saver_title if ($video); + return ($saver_title, $gl_p, \@result, \@widgets); } @@ -696,6 +705,8 @@ sub build_android(@) { my $xml_header = "\n"; my $manifest = ''; + my $daydream_java = ''; + my $settings_java = ''; my $arrays = ''; my $strings = ''; my %write_files; @@ -721,12 +732,9 @@ sub build_android(@) { my ($saver_title, $gl_p, $xml_opts, $widgets) = parse_xml ($saver, $switchmap, $src_opts); - my $daydream_class = "${saver_title}Daydream"; - my $settings_class = "${saver_title}Settings"; - foreach ($settings_class, $daydream_class) { - s/\s+//gs; - s/^([a-z])/\U$1/gs; # upcase first letter - } + my $saver_class = "${saver_title}"; + $saver_class =~ s/\s+//gs; + $saver_class =~ s/^([a-z])/\U$1/gs; # upcase first letter $saver_title =~ s/(.[a-z])([A-Z\d])/$1 $2/gs; # Spaces in InterCaps $saver_title =~ s/^(GL|RD)[- ]?(.)/$1 \U$2/gs; # Space after "GL" @@ -932,7 +940,7 @@ sub build_android(@) { " android:summary=\"" . $localize0->("${saver_underscore}_saver_desc", $daydream_desc) . "\"\n" . - " android:name=\".gen.$daydream_class\"\n" . + " android:name=\".gen.Daydream\$$saver_class\"\n" . " android:permission=\"android.permission" . ".BIND_DREAM_SERVICE\"\n" . " android:exported=\"true\"\n" . @@ -947,23 +955,28 @@ sub build_android(@) { " android:resource=\"\@xml/${saver}_dream\" />\n" . "\n" . "\n" + "$package.gen.Settings\$$saver_class\" />\n" ); my $dream = ("\n"); + "$package.gen.Settings\$$saver_class\" />\n"); $write_files{"$xml_dir/${saver_underscore}_dream.xml"} = $dream; - $write_files{"$java_dir/$daydream_class.java"} = - read_template ("XScreenSaverDaydream.java.in", - { CLASS => $daydream_class, - API => ($gl_p ? 'GL' : 'XLIB') }); - - $write_files{"$java_dir/$settings_class.java"} = - read_template ("XScreenSaverSettings.java.in", - { CLASS => $settings_class }); + $daydream_java .= + (" public static class $saver_class extends XScreenSaverDaydream {\n" . + " public $saver_class() {\n" . + " super(jwxyz.API_" . ($gl_p ? 'GL' : 'XLIB') . ");\n" . + " }\n" . + " }\n" . + "\n"); + + $settings_java .= + (" public static class $saver_class extends XScreenSaverSettings\n" . + " implements SharedPreferences.OnSharedPreferenceChangeListener {\n" . + " }\n" . + "\n"); } $arrays =~ s/^/ /gm; @@ -1032,9 +1045,29 @@ sub build_android(@) { " \n" . "\n"); + $daydream_java = ("package org.jwz.xscreensaver.gen;\n" . + "\n" . + "import org.jwz.xscreensaver.XScreenSaverDaydream;\n" . + "import org.jwz.xscreensaver.jwxyz;\n" . + "\n" . + "public class Daydream {\n" . + $daydream_java . + "}\n"); + + $settings_java = ("package org.jwz.xscreensaver.gen;\n" . + "\n" . + "import android.content.SharedPreferences;\n" . + "import org.jwz.xscreensaver.XScreenSaverSettings;\n" . + "\n" . + "public class Settings {\n" . + $settings_java . + "}\n"); + $write_files{"$project_dir/AndroidManifest.xml"} = $manifest; $write_files{"$values_dir/settings.xml"} = $arrays; $write_files{"$values_dir/strings.xml"} = $strings; + $write_files{"$java_dir/Daydream.java"} = $daydream_java; + $write_files{"$java_dir/Settings.java"} = $settings_java; my @s2 = (); foreach my $saver (sort @savers) { @@ -1080,18 +1113,21 @@ sub build_android(@) { # if a hack is removed from $ANDROID_HACKS in android/Makefile but # the old XML files remain behind, the build blows up. # - opendir (my $dirp, $xml_dir) || error ("$xml_dir: $!"); - my @files = readdir ($dirp); - closedir $dirp; - foreach my $f (sort @files) { - next if ($f eq '.' || $f eq '..'); - $f = "$xml_dir/$f"; - next if (defined ($write_files{$f})); - if ($f =~ m/_(settings|dream)\.xml$/s) { - print STDERR "$progname: rm $f\n"; - unlink ($f) unless ($debug_p); - } else { - print STDERR "$progname: warning: unrecognised file: $f\n"; + foreach my $dd ($xml_dir, $gen_dir, $java_dir) { + opendir (my $dirp, $dd) || error ("$dd: $!"); + my @files = readdir ($dirp); + closedir $dirp; + foreach my $f (sort @files) { + next if ($f eq '.' || $f eq '..'); + $f = "$dd/$f"; + next if (defined ($write_files{$f})); + if ($f =~ m/_(settings|dream)\.xml$/s || + $f =~ m/(Settings|Daydream)\.java$/s) { + print STDERR "$progname: rm $f\n"; + unlink ($f) unless ($debug_p); + } else { + print STDERR "$progname: warning: unrecognised file: $f\n"; + } } } } diff --git a/hacks/config/README b/hacks/config/README index fa35d942..c141b17d 100644 --- a/hacks/config/README +++ b/hacks/config/README @@ -4,8 +4,8 @@ a screen saver and locker for the X window system by Jamie Zawinski - version 5.35 - 24-May-2016 + version 5.36 + 10-Oct-2016 https://www.jwz.org/xscreensaver/ diff --git a/hacks/config/cubestack.xml b/hacks/config/cubestack.xml new file mode 100644 index 00000000..68c550ec --- /dev/null +++ b/hacks/config/cubestack.xml @@ -0,0 +1,44 @@ + + + + + + + diff --git a/hacks/config/cubetwist.xml b/hacks/config/cubetwist.xml new file mode 100644 index 00000000..00f54b82 --- /dev/null +++ b/hacks/config/cubetwist.xml @@ -0,0 +1,46 @@ + + + + + + + diff --git a/hacks/config/discoball.xml b/hacks/config/discoball.xml new file mode 100644 index 00000000..61ed94cd --- /dev/null +++ b/hacks/config/discoball.xml @@ -0,0 +1,37 @@ + + + + + + + diff --git a/hacks/config/glplanet.xml b/hacks/config/glplanet.xml index dc93c8b8..877cdfa8 100644 --- a/hacks/config/glplanet.xml +++ b/hacks/config/glplanet.xml @@ -13,7 +13,8 @@ - + +
diff --git a/hacks/config/hexstrut.xml b/hacks/config/hexstrut.xml new file mode 100644 index 00000000..0823dc87 --- /dev/null +++ b/hacks/config/hexstrut.xml @@ -0,0 +1,48 @@ + + + + + + + diff --git a/hacks/config/photopile.xml b/hacks/config/photopile.xml index 6337dbd8..a174afd1 100644 --- a/hacks/config/photopile.xml +++ b/hacks/config/photopile.xml @@ -45,7 +45,7 @@ _low-label="Short" _high-label="Long" low="1" high="60" default="5"/> - + diff --git a/hacks/config/rotzoomer.xml b/hacks/config/rotzoomer.xml index bd4ce740..d610fcba 100644 --- a/hacks/config/rotzoomer.xml +++ b/hacks/config/rotzoomer.xml @@ -4,7 +4,7 @@ -