From: Zygo Blaxell Date: Sat, 21 Mar 2020 07:44:35 +0000 (-0400) Subject: From http://www.jwz.org/xscreensaver/xscreensaver-5.44.tar.gz X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1f484cfa47f4a0862140421480bb536ad66ede9;p=xscreensaver From http://www.jwz.org/xscreensaver/xscreensaver-5.44.tar.gz -rw-rw-r-- 1 zblaxell zblaxell 27001826 Mar 20 21:50 xscreensaver-5.44.tar.gz 3e93aa745aa986cf521de31b6e731f990302c920 xscreensaver-5.44.tar.gz --- diff --git a/Makefile.in b/Makefile.in index e0795b2f..52f1b4f0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -69,6 +69,10 @@ tar:: rm -f configure ; \ $(MAKE2) configure ; \ $(MAKE2) version-date distdepend ; \ + $(MAKE2) _tar + +_tar: + @ \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ NAME="xscreensaver-$$VERS" ; \ rm -rf $$NAME ; ln -s . $$NAME ; \ diff --git a/OSX/LaunchScreen.storyboard b/OSX/LaunchScreen.storyboard new file mode 100644 index 00000000..bb1a3700 --- /dev/null +++ b/OSX/LaunchScreen.storyboard @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OSX/LaunchScreen.xib b/OSX/LaunchScreen.xib deleted file mode 100644 index 15cdbc56..00000000 --- a/OSX/LaunchScreen.xib +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/OSX/Makefile b/OSX/Makefile index 4f2312b3..ca0ed5f0 100644 --- a/OSX/Makefile +++ b/OSX/Makefile @@ -19,6 +19,10 @@ XCODEBUILD = $(XCODE_APP)/Contents/Developer/usr/bin/xcodebuild SETFILE = $(XCODE_APP)/Contents/Developer/Tools/SetFile SETICON = ./seticon.pl +# Using $(MAKE) directly means the shell executes things even with "make -n" +MAKE2 = $(MAKE) + + default: release all: debug release @@ -30,7 +34,8 @@ distclean: -rm -f config.status config.cache config.log \ *.bak *.rej TAGS *~ "#"* -rm -rf autom4te*.cache - -rm -rf build Sparkle.framework + -rm -rf build +# -rm -rf Sparkle.framework distdepend:: Sparkle.framework distdepend:: update_plist_version @@ -228,7 +233,7 @@ update_plist_version: updates.xml:: ./updates.pl xscreensaver ../README ../archive ~/www/xscreensaver - @$(MAKE) $(MAKEFLAGS) test_sig + @$(MAKE2) test_sig test_sig:: @ \ @@ -312,7 +317,7 @@ _dmg:: DST="$$STAGE/Screen Savers" ; \ PKG="$$STAGE/Install Everything.pkg" ; \ rm -f "$$DMG" ; \ - rm -rf "$$STAGE" ; \ + sudo rm -rf "$$STAGE" ; \ echo + mkdir -p "$$DST" ; \ mkdir -p "$$DST" ; \ \ @@ -345,6 +350,10 @@ _dmg:: fi ; \ done ; \ \ + true codesign --force --sign $(CERT2) "$$DST/"*.app/Contents/Resources/*.saver ; \ + rm -rf "$$DST/"*.app/Contents/Resources/*.saver/Contents/_CodeSignature ; \ + codesign --force --sign $(CERT2) "$$DST/"*.app ; \ + \ set -x ; \ cp -p bindist.rtf "$$STAGE/Read Me.rtf" ; \ cp -p build/Release/installer.pkg "$$PKG" ; \ @@ -364,6 +373,11 @@ _dmg:: mv "$$STAGE/bindist.webloc" "$$STAGE/Get the iPhone:iPad Version.webloc" ; \ mv "$$STAGE/bindist2.webloc" "$$STAGE/Get the Android Version.webloc" ; \ \ + echo Fuck this shit. ; \ + rm -r "$$DST"/Apple2.app ; \ + rm -r "$$DST"/Phosphor.app ; \ + rm -r "$$DST"/WebCollage.saver ; \ + \ set +x ; \ \ echo "Chowning..." ; \ @@ -372,7 +386,7 @@ _dmg:: echo "Checking signatures..." ; \ spctl --assess --type install "$$PKG" ; \ spctl --assess --type execute "$$SRC/XScreenSaverUpdater.app" ; \ - spctl --assess --type execute "$$DST/"*.app ; \ + true spctl --assess --type execute "$$DST/"*.app ; \ spctl --assess --type install "$$DST/"*.saver ; \ set -x ; \ \ @@ -380,7 +394,7 @@ _dmg:: -hfs-openfolder "$$STAGE" "$$STAGE" -o "$$TMPDMG" ; \ echo "Chowning back and deleting..." ; \ sudo chown -R `whoami` "$$STAGE/"* ; \ - rm -rf "$$STAGE" ; \ + sudo rm -rf "$$STAGE" ; \ \ hdiutil convert -quiet -ov -format UDBZ -imagekey zlib-level=9 \ "$$TMPDMG" -o "$$DMG" ; \ @@ -391,7 +405,7 @@ _dmg:: spctl --assess --type install "$$DMG" ; \ \ ls -ldhgF "$$DMG" ; \ - $(MAKE) $(MAKEFLAGS) notarize ; \ + $(MAKE2) notarize ; \ # To set up notarization: @@ -425,7 +439,7 @@ notarize:: --file "$$DMG" $(NOTARGS) ; \ echo "" ; \ sleep 3 ; \ - $(MAKE) $(MAKEFLAGS) notarize_wait staple updates.xml + $(MAKE2) notarize_wait staple updates.xml notarize_wait:: @TODAY=`date +%Y-%m-%d` ; \ diff --git a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/1242x2208.png b/OSX/Media-iOS.xcassets/LaunchImage.launchimage/1242x2208.png deleted file mode 100644 index 2f3cd23c..00000000 Binary files a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/1242x2208.png and /dev/null differ diff --git a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/640x1136.png b/OSX/Media-iOS.xcassets/LaunchImage.launchimage/640x1136.png deleted file mode 100644 index 6763abe7..00000000 Binary files a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/640x1136.png and /dev/null differ diff --git a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/640x960.png b/OSX/Media-iOS.xcassets/LaunchImage.launchimage/640x960.png deleted file mode 100644 index 0bfc1a93..00000000 Binary files a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/640x960.png and /dev/null differ diff --git a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/750x1334.png b/OSX/Media-iOS.xcassets/LaunchImage.launchimage/750x1334.png deleted file mode 100644 index 4ec452de..00000000 Binary files a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/750x1334.png and /dev/null differ diff --git a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/Contents.json b/OSX/Media-iOS.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index bc0812f1..00000000 --- a/OSX/Media-iOS.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "images" : [ - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "736h", - "filename" : "1242x2208.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "3x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "667h", - "filename" : "750x1334.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "640x960.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "retina4", - "filename" : "640x1136.png", - "minimum-system-version" : "7.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "640x1136.png", - "extent" : "full-screen", - "subtype" : "retina4", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/OSX/SaverListController.h b/OSX/SaverListController.h index 9b461335..421ea2e4 100644 --- a/OSX/SaverListController.h +++ b/OSX/SaverListController.h @@ -17,6 +17,11 @@ @interface SaverListController : UITableViewController { + UIView *v; + UILabel *label1; + UILabel *label2; + UISearchBar *search; + int active_section_count; NSMutableArray *list_by_letter[26]; // 27 to get "#" after "Z". NSMutableArray *letter_sections; diff --git a/OSX/SaverListController.m b/OSX/SaverListController.m index 71b5fb5e..ae91d16d 100644 --- a/OSX/SaverListController.m +++ b/OSX/SaverListController.m @@ -51,7 +51,7 @@ [year stringByAppendingString: @" Jamie Zawinski "]]; - UIView *v = [[UIView alloc] initWithFrame:CGRectZero]; + v = [[UIView alloc] initWithFrame:CGRectZero]; // The "go to web page" button on the right @@ -72,8 +72,8 @@ // The title bar - UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectZero]; - UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectZero]; + label1 = [[UILabel alloc] initWithFrame:CGRectZero]; + label2 = [[UILabel alloc] initWithFrame:CGRectZero]; [label1 setText: line1]; [label2 setText: line2]; [label1 setBackgroundColor:[UIColor clearColor]]; @@ -84,33 +84,10 @@ [label1 sizeToFit]; [label2 sizeToFit]; - CGRect r1 = [label1 frame]; - CGRect r2 = [label2 frame]; - CGRect r3 = r2; + label2.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; - CGRect win = [self view].frame; - if (win.size.width > 414 && win.size.height > 414) { // iPad - [label1 setTextAlignment: NSTextAlignmentLeft]; - [label2 setTextAlignment: NSTextAlignmentRight]; - label2.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; - r3.size.width = win.size.width; - r1 = r3; - r1.origin.x += 6; - r1.size.width -= 12; - r2 = r1; - - } else { // iPhone - r3.size.width = win.size.width; // force it to be flush-left - [label1 setTextAlignment: NSTextAlignmentLeft]; - [label2 setTextAlignment: NSTextAlignmentLeft]; - r1.origin.y = -1; // make it fit in landscape - r2.origin.y = r1.origin.y + r1.size.height - 2; - r3.size.height = r1.size.height + r2.size.height; - } v.autoresizingMask = UIViewAutoresizingFlexibleWidth; - [label1 setFrame:r1]; - [label2 setFrame:r2]; - [v setFrame:r3]; + [v setFrame:CGRectMake(0, 0, self.view.frame.size.width, 0)]; [v addSubview:label1]; [v addSubview:label2]; @@ -120,10 +97,7 @@ self.navigationItem.titleView = v; - win.origin.x = 0; - win.origin.y = 0; - win.size.height = 44; // #### This cannot possibly be right. - UISearchBar *search = [[UISearchBar alloc] initWithFrame:win]; + search = [[UISearchBar alloc] init]; search.delegate = self; search.placeholder = NSLocalizedString(@"Search...", @""); self.tableView.tableHeaderView = search; @@ -136,6 +110,46 @@ # endif } +- (void)viewWillLayoutSubviews +{ + CGRect r1 = [label1 frame]; + CGRect r2 = [label2 frame]; + CGRect r3 = [v frame]; + + CGRect win = [self view].frame; + if (r3.size.width > 385) { + [label1 setTextAlignment: NSTextAlignmentLeft]; + [label2 setTextAlignment: NSTextAlignmentRight]; + r1.origin = CGPointMake(6, 0); + r1.size.width = r3.size.width - 12; + r2 = r1; + r3.size.height = r2.size.height; + + } else { + [label1 setTextAlignment: NSTextAlignmentLeft]; + [label2 setTextAlignment: NSTextAlignmentLeft]; + r1.origin = CGPointMake(0, -1); // make it fit in landscape + r1.size.width = r3.size.width; + r2.origin = CGPointMake(0, r1.origin.y + r1.size.height - 2); + r2.size.width = r3.size.width; + r3.size.height = r1.size.height + r2.size.height; + } + + r3.size.width = win.size.width; + + [label1 setFrame:r1]; + [label2 setFrame:r2]; + [v setFrame:r3]; + + win.origin.x = 0; + win.origin.y = 0; + win.size.height = 44; // #### This cannot possibly be right. + + search.frame = win; + + [super viewWillLayoutSubviews]; +} + - (id)initWithNames:(NSArray *)_names descriptions:(NSDictionary *)_descs; { diff --git a/OSX/SaverRunner.h b/OSX/SaverRunner.h index 399eec0e..e8f96820 100644 --- a/OSX/SaverRunner.h +++ b/OSX/SaverRunner.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2006-2016 Jamie Zawinski +/* xscreensaver, Copyright (c) 2006-2019 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 @@ -42,17 +42,6 @@ SaverRunner *_parent; NSString *_saverName; XScreenSaverView *_saverView; - - /* When a the SaverViewController is presented, iOS automatically changes - the status bar orientation. (And, by extension, the notification center - orientation.) But there's no willPresentAsModal: event for a - UIViewController so that it knows when this is going to happen, and the - other event handlers occur after the status bar is changed. So save the - orientation just before the view controller is modal-presented, and - restore the proper status bar orientation just before the saverView is - created so it can pick it up in didRotate:. */ - // UIInterfaceOrientation _storedOrientation; - BOOL _showAboutBox; UIView *aboutBox; NSTimer *splashTimer; diff --git a/OSX/SaverRunner.m b/OSX/SaverRunner.m index dc4352ec..7fd42477 100644 --- a/OSX/SaverRunner.m +++ b/OSX/SaverRunner.m @@ -98,7 +98,6 @@ self = [super init]; if (self) { _parent = parent; - // _storedOrientation = UIInterfaceOrientationUnknown; _showAboutBox = showAboutBox; self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; @@ -346,14 +345,6 @@ [_saverView release]; } -# if 0 - if (_storedOrientation != UIInterfaceOrientationUnknown) { - [[UIApplication sharedApplication] - setStatusBarOrientation:_storedOrientation - animated:NO]; - } -# endif - _saverView = [_parent newSaverView:_saverName withSize:parentView.bounds.size]; @@ -385,7 +376,7 @@ [_saverView becomeFirstResponder]; // For shakes on iOS 6. [_saverView startAnimation]; [self aboutPanel:_saverView - orientation:/* _storedOrientation */ UIInterfaceOrientationPortrait]; + orientation: UIInterfaceOrientationPortrait]; } @@ -436,9 +427,6 @@ [name retain]; [_saverName release]; _saverName = name; - // _storedOrientation = - // [UIApplication sharedApplication].statusBarOrientation; - if (_saverView) [self createSaverView]; } @@ -462,17 +450,39 @@ [self aboutOff:TRUE]; // It does goofy things if we rotate while it's up +# if 1 + NSLog(@"## orient"); + [CATransaction commit]; + [_saverView orientationChanged]; + return; +# endif + + BOOL queued = [coordinator animateAlongsideTransition:^ (id context) { // This executes repeatedly during the rotation. +NSLog(@"## animate %@", context); } completion:^(id context) { +NSLog(@"## completion %@", context); // This executes once when the rotation has finished. [CATransaction commit]; [_saverView orientationChanged]; }]; // No code goes here, as it would execute before the above completes. + + NSLog(@"## queued = %d", queued); + } +/* Not called +- (void)willTransitionToTraitCollection:(UITraitCollection *)collection + withTransitionCoordinator: + (id)coordinator +{ + NSLog(@"#### %@ %@", collection, coordinator); +} +*/ + @end #endif // USE_IPHONE @@ -949,6 +959,10 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) showAboutBox:[saverNames count] != 1]; nonrotating_controller.saverName = name; + // Necessary to prevent "card"-like presentation on Xcode 11 with iOS 13: + nonrotating_controller.modalPresentationStyle = + UIModalPresentationFullScreen; + /* LAUNCH: */ [rotating_nav presentViewController:nonrotating_controller animated:NO completion:nil]; @@ -1257,17 +1271,6 @@ FAIL: { rotating_nav.view.hidden = NO; // In case it was hidden during startup. - /* The XScreenSaverView screws with the status bar orientation, mostly to - keep the simulator oriented properly. But on iOS 8.1 (and maybe 8.0 - and/or 8.2), this confuses the UINavigationController, so put the - orientation back to portrait before dismissing the SaverViewController. - */ -# if 0 - [[UIApplication sharedApplication] - setStatusBarOrientation:UIInterfaceOrientationPortrait - animated:NO]; -# endif - /* Make sure the most-recently-run saver is visible. Sometimes it ends up scrolled half a line off the bottom of the screen. */ diff --git a/OSX/SaverRunner.plist b/OSX/SaverRunner.plist index 61045303..d7fd9497 100644 --- a/OSX/SaverRunner.plist +++ b/OSX/SaverRunner.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleGetInfoString - 5.43 + 5.44 CFBundleIconFile SaverRunner CFBundleIdentifier @@ -15,21 +15,21 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 5.43 + 5.44 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 5.43 + 5.44 CFBundleSignature ???? CFBundleVersion - 5.43 + 5.44 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright - 5.43 + 5.44 NSMainNibFile SaverRunner NSPrincipalClass diff --git a/OSX/Updater.plist b/OSX/Updater.plist index 47088928..270d72fe 100644 --- a/OSX/Updater.plist +++ b/OSX/Updater.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleGetInfoString - 5.43 + 5.44 CFBundleIconFile SaverRunner CFBundleIdentifier @@ -17,23 +17,23 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 5.43 + 5.44 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 5.43 + 5.44 CFBundleSignature ???? CFBundleVersion - 5.43 + 5.44 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} LSUIElement NSHumanReadableCopyright - 5.43 + 5.44 NSMainNibFile Updater NSPrincipalClass diff --git a/OSX/XScreenSaver.plist b/OSX/XScreenSaver.plist index c3fa8c9c..d8433d02 100644 --- a/OSX/XScreenSaver.plist +++ b/OSX/XScreenSaver.plist @@ -15,11 +15,11 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 5.43 + 5.44 CFBundleSignature ???? CFBundleVersion - 5.43 + 5.44 LSMinimumSystemVersion 10.8 NSMainNibFile diff --git a/OSX/XScreenSaverConfigSheet.m b/OSX/XScreenSaverConfigSheet.m index 185377c9..2b1bde82 100644 --- a/OSX/XScreenSaverConfigSheet.m +++ b/OSX/XScreenSaverConfigSheet.m @@ -332,6 +332,18 @@ typedef enum { SimpleXMLCommentKind, [h retain]; if (html) [html release]; html = h; + + BOOL dark_mode_p = FALSE; + { + UITraitCollection *t = [self traitCollection]; +# pragma clang diagnostic push // "only available on iOS 12.0 or newer" +# pragma clang diagnostic ignored "-Wunguarded-availability-new" + if (t && [t respondsToSelector:@selector(userInterfaceStyle)] && + [t userInterfaceStyle] == UIUserInterfaceStyleDark) + dark_mode_p = TRUE; +# pragma clang diagnostic pop + } + NSString *h2 = [NSString stringWithFormat: @"\n" "" "" @@ -359,9 +373,12 @@ typedef enum { SimpleXMLCommentKind, "%@" "" "", - [font fontName], + // [font fontName], // Returns ".SFUI-Regular", doesn't work. + @"Helvetica", // "SanFranciscoDisplay-Regular" also doesn't work. [font pointSize], [font lineHeight], + (dark_mode_p ? @"#FFF" : @"#000"), + (dark_mode_p ? @"#0DF" : @"#00E"), h]; [webView stopLoading]; [webView loadHTMLString:h2 baseURL:[NSURL URLWithString:@""]]; @@ -1992,7 +2009,8 @@ set_menu_item_object (NSMenuItem *item, NSObject *obj) # else // USE_IPHONE txt.adjustsFontSizeToFitWidth = YES; - txt.textColor = [UIColor blackColor]; + // Why did I do this? Messes up dark mode. + // txt.textColor = [UIColor blackColor]; txt.font = [UIFont systemFontOfSize: FONT_SIZE]; txt.placeholder = @""; txt.borderStyle = UITextBorderStyleRoundedRect; diff --git a/OSX/XScreenSaverView.m b/OSX/XScreenSaverView.m index ad505bda..53e27c45 100644 --- a/OSX/XScreenSaverView.m +++ b/OSX/XScreenSaverView.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2006-2019 Jamie Zawinski +/* xscreensaver, Copyright (c) 2006-2020 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 @@ -18,6 +18,9 @@ #import #import #import +#ifdef LOG_STACK +# include +#endif #import "XScreenSaverView.h" #import "XScreenSaverConfigSheet.h" #import "Updater.h" @@ -51,6 +54,10 @@ # define DO_GC_HACKERY #endif +#undef countof +#define countof(x) (sizeof((x))/sizeof((*x))) + + /* Duplicated in xlockmoreI.h and XScreenSaverGLView.m. */ extern void clear_gl_error (void); extern void check_gl_error (const char *type); @@ -377,6 +384,54 @@ add_default_options (const XrmOptionDescRec *opts, } +static void sighandler (int sig) +{ + const char *s = strsignal(sig); + if (!s) s = "Unknowng"; +# ifdef USE_IPHONE + jwxyz_abort ("Signal: %s", s); // Throw NSException, show dialog +# else + NSLog (@"Signal: %s", s); // Just make sure it is logged + + // Log stack trace too. + // Same info shows up in Library/Logs/DiagnosticReports/ScreenSaverEngine* +# ifdef LOG_STACK + void *stack [20]; + int frames = backtrace (stack, countof(stack)); + char **strs = backtrace_symbols (stack, frames); + NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames]; + for (int i = 2; i < frames; i++) { + if (strs[i]) + [backtrace addObject:[NSString stringWithUTF8String: strs[i]]]; + } + // Can't embed newlines in the message for /usr/bin/log + NSLog(@"Stack:\\n\t%@", [backtrace componentsJoinedByString:@"\\n\t"]); + // free (strs); +# endif // LOG_STACK + + signal (sig, SIG_DFL); + kill (getpid (), sig); +# endif +} + +static void catch_signals (void) +{ + signal (SIGINT, sighandler); + signal (SIGQUIT, sighandler); + signal (SIGILL, sighandler); + signal (SIGTRAP, sighandler); + signal (SIGABRT, sighandler); + signal (SIGEMT, sighandler); + signal (SIGFPE, sighandler); + signal (SIGBUS, sighandler); + signal (SIGSEGV, sighandler); + signal (SIGSYS, sighandler); + signal (SIGTERM, sighandler); + signal (SIGXCPU, sighandler); + signal (SIGXFSZ, sighandler); +} + + - (id) initWithFrame:(NSRect)frame saverName:(NSString *)saverName isPreview:(BOOL)isPreview @@ -384,6 +439,7 @@ add_default_options (const XrmOptionDescRec *opts, if (! (self = [super initWithFrame:frame isPreview:isPreview])) return 0; + catch_signals(); xsft = [self findFunctionTable: saverName]; if (! xsft) { [self release]; @@ -444,6 +500,27 @@ add_default_options (const XrmOptionDescRec *opts, } +#ifndef USE_IPHONE +/* On 10.15, if "use random screen saver" is checked, then startAnimation + is never called. This may be related to Apple's buggy code in + ScreenSaverEngine calling nonexistent beginExtensionRequestWithUserInfo, + but on 10.15 we're not even running in that process: now we're in the + not-at-all-ominously-named legacyScreenSaver process. + */ +- (void) viewDidMoveToWindow +{ + if (self.window) + [self startAnimation]; +} + +- (void) viewWillMoveToWindow:(NSWindow *)window +{ + if (window == nil) + [self stopAnimation]; +} +#endif // USE_IPHONE + + #ifdef USE_TOUCHBAR - (id) initWithFrame:(NSRect)frame saverName:(NSString *)saverName @@ -581,6 +658,8 @@ add_default_options (const XrmOptionDescRec *opts, - (void) startAnimation { + if ([self isAnimating]) return; // macOS 10.15 stupidity + NSAssert(![self isAnimating], @"already animating"); NSAssert(!initted_p && !xdata, @"already initialized"); @@ -940,9 +1019,17 @@ screenhack_do_fps (Display *dpy, Window w, fps_state *fpst, void *closure) CGFloat s = self.window.backingScaleFactor; # endif + /* This notion of "scale fonts differently than the viewport seemed + like it made sense for BSOD but it makes -fps text be stupidly + large for all other hacks. So instead let's just make BSOD not + be lowrez. There are no other lowrez hacks that make heavy use + of fonts. */ + fonts_p = 0; + if (_lowrez_p && !fonts_p) { NSSize b = [self bounds].size; // This is in points, not pixels CGFloat wh = b.width > b.height ? b.width : b.height; + wh *= s; // points -> pixels // Scale down to as close to 1024 as we can get without going under, // while keeping an integral scale factor so that we don't get banding @@ -1644,14 +1731,15 @@ gl_check_ver (const struct gl_version *caps, if (_lowrez_p) { resized_p = YES; -# if !defined __OPTIMIZE__ || TARGET_IPHONE_SIMULATOR NSSize b = [self bounds].size; CGFloat s = self.hackedContentScaleFactor; -# ifdef USE_IPHONE +# ifdef USE_IPHONE CGFloat o = self.contentScaleFactor; -# else +# else CGFloat o = self.window.backingScaleFactor; -# endif +# endif + +# if !defined __OPTIMIZE__ || TARGET_IPHONE_SIMULATOR if (o != s) NSLog(@"lowrez: scaling %.0fx%.0f -> %.0fx%.0f (%.02f)", b.width * o, b.height * o, @@ -1866,6 +1954,18 @@ gl_check_ver (const struct gl_version *caps, [self handleException: e]; } # endif // USE_IPHONE + +# if 0 + { + static int frame = 0; + if (++frame == 100) { + fprintf(stderr,"BOOM\n"); + int y = 0; + // int aa = *((int*)y); + int x = 30/y; + } + } +# endif } diff --git a/OSX/bindist.rtf b/OSX/bindist.rtf index 59770556..d03e99bd 100644 --- a/OSX/bindist.rtf +++ b/OSX/bindist.rtf @@ -16,8 +16,8 @@ \b0 by Jamie Zawinski\ and many others\ \ -version 5.43\ -09-Jul-2019\ +version 5.44\ +20-Mar-2020\ \ {\field{\*\fldinst{HYPERLINK "https://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 https://www.jwz.org/xscreensaver/}}\ \pard\pardeftab720 diff --git a/OSX/build-fntable.pl b/OSX/build-fntable.pl index 1ba18a09..cc89cbfc 100755 --- a/OSX/build-fntable.pl +++ b/OSX/build-fntable.pl @@ -31,6 +31,7 @@ my $verbose = 1; # my %disable = ( 'extrusion' => 1, + 'flurry' => 1, 'glitchpeg' => 1, 'lcdscrub' => 1, 'lockward' => 1, @@ -38,56 +39,51 @@ my %disable = ( 'testx11' => 1, ); -# Parse the RETIRED_EXES variable from the Makefiles to populate %disable. -# Duplicated in ../hacks/munge-ad.pl. +# Parse specified variables from a Makefile. +# ../hacks/munge-ad.pl also parses Makefiles. # -sub parse_makefiles() { - foreach my $mf ( "../hacks/Makefile.in", "../hacks/glx/Makefile.in" ) { - open (my $in, '<', $mf) || error ("$mf: $!"); - print STDERR "$progname: reading $mf\n" if ($verbose > 1); - local $/ = undef; # read entire file - my $body = <$in>; - close $in; - - $body =~ s/\\\n//gs; - my ($var) = ($body =~ m/^RETIRED_EXES\s*=\s*(.*)$/mi); - my ($var2) = ($body =~ m/^RETIRED_GL_EXES\s*=\s*(.*)$/mi); - error ("no RETIRED_EXES in $mf") unless $var; - $var .= " $var2" if $var2; - foreach my $hack (split (/\s+/, $var)) { - $disable{$hack} = 2; +sub parse_makefile_vars($@) +{ + my ($mf, @vars) = @_; + + open (my $in, '<', $mf) || error ("$mf: $!"); + print STDERR "$progname: reading $mf\n" if ($verbose > 1); + local $/ = undef; # read entire file + my $body = <$in>; + close $in; + + my %vars = map { $_ => 1 } @vars; + my %result; + while ($body =~ /^([^:#=\s]+)\s*=\s*((?:\\\n|.)*)/mg) + { + my ($key, $value) = ($1, $2); + if (!%vars || $vars{$key}) { + $value =~ s/\\\n/ /g; + $result{$key} = $value; } } + return \%result; } sub build_h($) { my ($outfile) = @_; - parse_makefiles(); - - my @schemes = (glob('xscreensaver.xcodeproj/xcuserdata/' . - '*.xcuserdatad/xcschemes/*.xcscheme'), - glob('xscreensaver.xcodeproj/xcshareddata/' . - 'xcschemes/*.xcscheme')); - error ("no scheme files") unless (@schemes); - my %names = (); - foreach my $s (@schemes) { - open (my $in, '<', $s) || error ("$s: $!"); - local $/ = undef; # read entire file - my $body = <$in>; - close $in; - my ($name) = ($body =~ m@BuildableName *= *"([^\"<>]+?)\.saver"@s); - next unless $name; - $name = lc($name); - if ($disable{$name}) { - print STDERR "$progname: skipping $name\n" if ($verbose > 1); - next; + foreach my $var ( + (values parse_makefile_vars ('../hacks/Makefile.in', 'EXES')), + (values parse_makefile_vars ('../hacks/glx/Makefile.in', 'GL_EXES', + 'SUID_EXES'))) { + foreach my $name (split (/\s+/, $var)) { + if ($name =~ /@/ || $disable{$name}) { + print STDERR "$progname: skipping $name\n" if ($verbose > 1); + next; + } + $name =~ s/-//g; + print STDERR "$progname: found $name\n" if ($verbose > 1); + $names{$name} = 1; } - print STDERR "$progname: found $name\n" if ($verbose > 1); - $names{$name} = 1; } my @names = sort (keys %names); diff --git a/OSX/en.lproj/SaverRunner.nib/designable.nib b/OSX/en.lproj/SaverRunner.nib/designable.nib index 1facee5e..4161cc4b 100644 --- a/OSX/en.lproj/SaverRunner.nib/designable.nib +++ b/OSX/en.lproj/SaverRunner.nib/designable.nib @@ -1,1790 +1,242 @@ - - - 1050 - 10K549 - 851 - 1038.36 - 461.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 851 - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - - NSApplication - - - - FirstResponder - - - NSApplication - - - MainMenu - - - - XScreenSaver - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - XScreenSaver - - - - About XScreenSaver - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - YES - Preferences… - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - - Services - - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide XScreenSaver - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit XScreenSaver - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 1048576 - 2147483647 - - - submenuAction: - - - File - - - - - Close - w - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Page Setup… - P - 1048576 - 2147483647 - - - - - - Print… - p - 1048576 - 2147483647 - - - - - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - - Edit - - - - - Undo - z - 1048576 - 2147483647 - - - - - - Redo - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cut - x - 1048576 - 2147483647 - - - - - - Copy - c - 1048576 - 2147483647 - - - - - - Paste - v - 1048576 - 2147483647 - - - - - - Paste and Match Style - V - 1572864 - 2147483647 - - - - - - Delete - - 1048576 - 2147483647 - - - - - - Select All - a - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Find - - 1048576 - 2147483647 - - - submenuAction: - - - Find - - - - - Find… - f - 1048576 - 2147483647 - - - 1 - - - - Find Next - g - 1048576 - 2147483647 - - - 2 - - - - Find Previous - G - 1048576 - 2147483647 - - - 3 - - - - Use Selection for Find - e - 1048576 - 2147483647 - - - 7 - - - - Jump to Selection - j - 1048576 - 2147483647 - - - - - - - - - Spelling - - 1048576 - 2147483647 - - - submenuAction: - - Spelling - - - - Spelling… - : - 1048576 - 2147483647 - - - - - - Check Spelling - ; - 1048576 - 2147483647 - - - - - - Check Spelling as You Type - - 1048576 - 2147483647 - - - - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - - Window - - - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - _NSWindowsMenu - - - - - Help - - 1048576 - 2147483647 - - - submenuAction: - - Help - - - - YES - XScreenSaver Help - ? - 1048576 - 2147483647 - - - - - - - - _NSMainMenu - - - SaverRunner - - - - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - print: - - - - 86 - - - - runPageLayout: - - - - 87 - - - - showHelp: - - - - 122 - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - cut: - - - - 175 - - - - paste: - - - - 176 - - - - redo: - - - - 178 - - - - selectAll: - - - - 179 - - - - undo: - - - - 180 - - - - copy: - - - - 181 - - - - showGuessPanel: - - - - 188 - - - - checkSpelling: - - - - 190 - - - - toggleContinuousSpellChecking: - - - - 192 - - - - performClose: - - - - 193 - - - - delete: - - - - 195 - - - - performZoom: - - - - 198 - - - - performFindPanelAction: - - - - 199 - - - - performFindPanelAction: - - - - 200 - - - - performFindPanelAction: - - - - 201 - - - - performFindPanelAction: - - - - 202 - - - - centerSelectionInVisibleArea: - - - - 203 - - - - pasteAsPlainText: - - - - 205 - - - - delegate - - - - 207 - - - - menubar - - - - 209 - - - - openPreferences: - - - - 212 - - - - aboutPanel: - - - - 213 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 24 - - - - - - - - - - - 5 - - - - - 23 - - - - - 92 - - - - - 197 - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - 58 - - - - - 129 - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 143 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 196 - - - - - 83 - - - - - - - - 81 - - - - - - - - - - - 73 - - - - - 74 - - - - - 77 - - - - - 78 - - - - - 103 - - - - - - - - 106 - - - - - - - - 111 - - - - - 163 - - - - - - - - 169 - - - - - - - - - - - - - - - - - - - 156 - - - - - 157 - - - - - 158 - - - - - 160 - - - - - 164 - - - - - 168 - - - - - - - - 159 - - - - - - - - - - - - 154 - - - - - 155 - - - - - 161 - - - - - 162 - - - - - 167 - - - - - 171 - - - - - 172 - - - - - 173 - - - - - 174 - - - - - 184 - - - - - - - - 185 - - - - - - - - - - 187 - - - - - 189 - - - - - 191 - - - - - 204 - - - - - 206 - - - SaverRunner - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{72, 1365}, {344, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{84, 1182}, {225, 183}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - 213 - - - - - SaverRunner - NSObject - - id - id - - - - aboutPanel: - id - - - openPreferences: - id - - - - menubar - NSMenu - - - menubar - - menubar - NSMenu - - - - IBProjectSource - OSX/SaverRunner.h - - - - - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSApplicationScripting.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSColorPanel.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSHelpManager.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSPageLayout.h - - - - NSBrowser - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSBrowser.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSDocument - NSObject - - id - id - id - id - id - id - - - - printDocument: - id - - - revertDocumentToSaved: - id - - - runPageLayout: - id - - - saveDocument: - id - - - saveDocumentAs: - id - - - saveDocumentTo: - id - - - - IBFrameworkSource - AppKit.framework/Headers/NSDocument.h - - - - NSDocument - - IBFrameworkSource - AppKit.framework/Headers/NSDocumentScripting.h - - - - NSMatrix - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSMatrix.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSMovieView - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSMovieView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAccessibility.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAlert.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAnimation.h - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSComboBox.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSComboBoxCell.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDatePickerCell.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDragging.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDrawer.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontPanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSImage.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSKeyValueBinding.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSNibLoading.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSOutlineView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSPasteboard.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSavePanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSound.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSpeechRecognizer.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSpeechSynthesizer.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSplitView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTabView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSText.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTextStorage.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTextView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTokenField.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTokenFieldCell.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbar.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbarItem.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSInterfaceStyle.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSTableView - NSControl - - - - NSText - NSView - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSClipView.h - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSRulerView.h - - - - NSView - NSResponder - - - - NSWindow - - - - NSWindow - NSResponder - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSWindowScripting.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - ../../xscreensaver.xcodeproj - 3 - - {9, 8} - {7, 2} - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OSX/en.lproj/SaverRunner.nib/keyedobjects.nib b/OSX/en.lproj/SaverRunner.nib/keyedobjects.nib index 96d6891c..7c2b9334 100644 Binary files a/OSX/en.lproj/SaverRunner.nib/keyedobjects.nib and b/OSX/en.lproj/SaverRunner.nib/keyedobjects.nib differ diff --git a/OSX/grabclient-ios.m b/OSX/grabclient-ios.m index 7b873acc..ea9220a6 100644 --- a/OSX/grabclient-ios.m +++ b/OSX/grabclient-ios.m @@ -67,7 +67,7 @@ ios_load_random_image (void (*callback) (void *uiimage, const char *fn, contentMode: PHImageContentModeDefault options: opt resultHandler:^void (UIImage *image, NSDictionary *info) { - img = image; + img = [image retain]; }]; // Get the image name. diff --git a/OSX/iSaverRunner.plist b/OSX/iSaverRunner.plist index cfede1e7..002ef166 100644 --- a/OSX/iSaverRunner.plist +++ b/OSX/iSaverRunner.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleGetInfoString - 5.43 + 5.44 CFBundleIcons CFBundleIcons~ipad @@ -19,23 +19,25 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 5.43 + 5.44 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 5.43 + 5.44 CFBundleSignature ???? CFBundleVersion - 5.43 + 5.44 LSRequiresIPhoneOS NSHumanReadableCopyright - 5.43 + 5.44 NSMainNibFile iSaverRunner + NSPhotoLibraryUsageDescription + XScreenSaver displays manipulated versions of your photos. UIAppFonts OCRAStd.otf @@ -67,6 +69,5 @@ UIViewControllerBasedStatusBarAppearance - NSPhotoLibraryUsageDescription - XScreenSaver displays manipulated versions of your photos. + diff --git a/OSX/icmp-warning.pl b/OSX/icmp-warning.pl index b0225637..13b63ecc 100755 --- a/OSX/icmp-warning.pl +++ b/OSX/icmp-warning.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2012-2018 Jamie Zawinski +# Copyright © 2012-2019 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 @@ -16,7 +16,7 @@ require 5; use strict; 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; @@ -54,9 +54,8 @@ sub sanity_check() { print STDERR "ERROR:\t" . join(' ', # "\n\t", 'The "Sonar" module won\'t build properly unless you repair your', - 'SDK first. With some versions of Xcode, the ICMP header files', - 'are present in the iPhone Simulator SDK but are missing from', - 'the "real device" SDK. You can fix it by doing this:') . + 'SDK first. The ICMP header files are missing from the SDK.', + 'Fix it by doing this:') . "\n\n$fail\n"; exit (1); } diff --git a/OSX/installer.sh b/OSX/installer.sh index baa38ea5..b3e03e7a 100755 --- a/OSX/installer.sh +++ b/OSX/installer.sh @@ -1,5 +1,5 @@ #!/bin/sh -# XScreenSaver, Copyright © 2013-2018 Jamie Zawinski +# XScreenSaver, Copyright © 2013-2019 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 @@ -65,7 +65,6 @@ if [ "$DEBUG" != 0 ]; then DSTVOLUME=/tmp; fi SRC=`dirname "$PACKAGE_PATH"`/"Screen Savers" 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 as a compressed tar file instead of an app, and we unpack @@ -131,14 +130,46 @@ for f in *.{saver,app} "$UPDATER_SRC" ; do spctl --add "$DD" fi - # If this saver or app is also installed in the per-user directory, - # delete that copy so that we don't have conflicts. + # If this saver or app is also installed in any per-user directory, + # delete those copies so that we don't have conflicts. # if [ "$DEBUG" = 0 ]; then - rm -rf "$PU/$f" + rm -rf "$DSTVOLUME/Users/"*"/Library/Screen Savers/$f" fi done + +# Savers are sandboxed as of 10.15, which means the preferences files +# moved. If this is 10.15 or later, and there are old preferences files, +# move them to the new location. Without this, all saver preferences +# would be wiped by the upgrade. +# +V=`sw_vers -productVersion` +V0=`echo $V | sed 's/^\([^.]*\).*/\1/'` +V1=`echo $V | sed 's/^[^.]*\.\([^.]*\).*$/\1/'` + +if [ "$V0" == 10 -a \! "$V1" \< 15 ]; then # If >= 10.15 + for HOME2 in "$DSTVOLUME/Users/"* ; do # for each user + + CON="$HOME2/Library/Containers" + LEG="$CON/com.apple.ScreenSaver.Engine.legacyScreenSaver" + NBH="$LEG/Data/Library/Preferences/ByHost" + OBH="$HOME2/Library/Preferences/ByHost" + + if [ -d "$CON" ]; then # if there are Containers + if ! [ -d "$LEG" ]; then # but no legacyScreenSaver already + UG=`stat -f %u:%g "$CON"` + umask 077 + mkdir -p "$NBH" # create tree + chown -R "$UG" "$LEG" # correct user/group + echo "Moving old prefs to $NBH" >&2 + mv "$OBH/org.jwz.xscreensaver."* "$NBH/" + fi + fi + done +fi + + # Launch System Preferences with the Screen Saver pane selected. # open /System/Library/PreferencePanes/DesktopScreenEffectsPref.prefPane & diff --git a/OSX/ios-function-table.m b/OSX/ios-function-table.m index 6cb8b7f6..6f2e4a01 100644 --- a/OSX/ios-function-table.m +++ b/OSX/ios-function-table.m @@ -1,5 +1,5 @@ /* Generated file, do not edit. - Created: Sat Apr 27 19:53:47 2019 by build-fntable.pl 1.7. + Created: Sat Mar 14 14:46:37 2020 by build-fntable.pl 1.7. */ #import @@ -64,7 +64,6 @@ extern struct xscreensaver_function_table discoball_xscreensaver_function_table, discrete_xscreensaver_function_table, distort_xscreensaver_function_table, - dnalogo_xscreensaver_function_table, drift_xscreensaver_function_table, dymaxionmap_xscreensaver_function_table, endgame_xscreensaver_function_table, @@ -73,6 +72,7 @@ extern struct xscreensaver_function_table epicycle_xscreensaver_function_table, eruption_xscreensaver_function_table, esper_xscreensaver_function_table, + etruscanvenus_xscreensaver_function_table, euler2d_xscreensaver_function_table, fadeplot_xscreensaver_function_table, fiberlamp_xscreensaver_function_table, @@ -92,6 +92,7 @@ extern struct xscreensaver_function_table geodesic_xscreensaver_function_table, geodesicgears_xscreensaver_function_table, gflux_xscreensaver_function_table, + gibson_xscreensaver_function_table, glblur_xscreensaver_function_table, glcells_xscreensaver_function_table, gleidescope_xscreensaver_function_table, @@ -186,6 +187,7 @@ extern struct xscreensaver_function_table rubik_xscreensaver_function_table, rubikblocks_xscreensaver_function_table, sballs_xscreensaver_function_table, + scooter_xscreensaver_function_table, shadebobs_xscreensaver_function_table, sierpinski_xscreensaver_function_table, sierpinski3d_xscreensaver_function_table, @@ -306,7 +308,6 @@ NSDictionary *make_function_table_dict(void) [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", [NSValue valueWithPointer:&drift_xscreensaver_function_table], @"drift", [NSValue valueWithPointer:&dymaxionmap_xscreensaver_function_table], @"dymaxionmap", [NSValue valueWithPointer:&endgame_xscreensaver_function_table], @"endgame", @@ -315,6 +316,7 @@ NSDictionary *make_function_table_dict(void) [NSValue valueWithPointer:&epicycle_xscreensaver_function_table], @"epicycle", [NSValue valueWithPointer:&eruption_xscreensaver_function_table], @"eruption", [NSValue valueWithPointer:&esper_xscreensaver_function_table], @"esper", + [NSValue valueWithPointer:&etruscanvenus_xscreensaver_function_table], @"etruscanvenus", [NSValue valueWithPointer:&euler2d_xscreensaver_function_table], @"euler2d", [NSValue valueWithPointer:&fadeplot_xscreensaver_function_table], @"fadeplot", [NSValue valueWithPointer:&fiberlamp_xscreensaver_function_table], @"fiberlamp", @@ -334,6 +336,7 @@ NSDictionary *make_function_table_dict(void) [NSValue valueWithPointer:&geodesic_xscreensaver_function_table], @"geodesic", [NSValue valueWithPointer:&geodesicgears_xscreensaver_function_table], @"geodesicgears", [NSValue valueWithPointer:&gflux_xscreensaver_function_table], @"gflux", + [NSValue valueWithPointer:&gibson_xscreensaver_function_table], @"gibson", [NSValue valueWithPointer:&glblur_xscreensaver_function_table], @"glblur", [NSValue valueWithPointer:&glcells_xscreensaver_function_table], @"glcells", [NSValue valueWithPointer:&gleidescope_xscreensaver_function_table], @"gleidescope", @@ -428,6 +431,7 @@ NSDictionary *make_function_table_dict(void) [NSValue valueWithPointer:&rubik_xscreensaver_function_table], @"rubik", [NSValue valueWithPointer:&rubikblocks_xscreensaver_function_table], @"rubikblocks", [NSValue valueWithPointer:&sballs_xscreensaver_function_table], @"sballs", + [NSValue valueWithPointer:&scooter_xscreensaver_function_table], @"scooter", [NSValue valueWithPointer:&shadebobs_xscreensaver_function_table], @"shadebobs", [NSValue valueWithPointer:&sierpinski_xscreensaver_function_table], @"sierpinski", [NSValue valueWithPointer:&sierpinski3d_xscreensaver_function_table], @"sierpinski3d", diff --git a/OSX/textclient-ios.m b/OSX/textclient-ios.m index 4759b05b..c5bc6b7f 100644 --- a/OSX/textclient-ios.m +++ b/OSX/textclient-ios.m @@ -81,12 +81,26 @@ textclient_mobile_date_string (void) - (void) startLoading { - // NSLog(@"textclient thread loading %@", self.url); +# ifndef __OPTIMIZE__ + NSLog(@"textclient thread loading %@", self.url); +# endif + NSError *e = 0; self.result = [NSString stringWithContentsOfURL: self.url encoding: NSUTF8StringEncoding - error: nil]; - // NSLog(@"textclient thread finished %@ (length %d)", self.url, - // (unsigned int) [self.result length]); + error: &e]; + if (!self.result || [self.result length] == 0) { + // Aug 2019: loading URLs in the simulator no longer works, hooray! + NSLog(@"URL error: %@: %@", self.url, e); + self.result = [[[[self.url host] + stringByAppendingString:@": "] + stringByAppendingString: + (e ? [e localizedDescription] : @"null response")] + stringByAppendingString:@"\n\n"]; + } +# ifndef __OPTIMIZE__ + NSLog(@"textclient thread finished %@ (length %d)", self.url, + (unsigned int) [self.result length]); +# endif } @end @@ -110,19 +124,25 @@ textclient_mobile_url_string (Display *dpy, const char *url) // 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]); +# ifndef __OPTIMIZE__ + NSLog(@"textclient finished %s (length %d)", url, + (unsigned int) [result length]); +# endif char *s = strdup ([result cStringUsingEncoding:NSUTF8StringEncoding]); loader.url = nil; loader.result = nil; return s; } else if ([loader url]) { // Waiting on thread - // NSLog(@"textclient waiting..."); +# ifndef __OPTIMIZE__ + NSLog(@"textclient waiting..."); +# endif return 0; } else { // Launch thread - // NSLog(@"textclient launching %s...", url); +# ifndef __OPTIMIZE__ + NSLog(@"textclient launching %s...", url); +# endif loader.url = [NSURL URLWithString: [NSString stringWithCString: url diff --git a/OSX/updates.pl b/OSX/updates.pl index 21ead069..0e08a00e 100755 --- a/OSX/updates.pl +++ b/OSX/updates.pl @@ -81,8 +81,17 @@ sub generate_xml($$$$) { $entry =~ s/^\s*\d\d?[- ][A-Z][a-z][a-z][- ]\d{4}:?\s+//s; # lose date - $entry =~ s/^\s+|\s+$//gs; + # unwrap continuation lines + $entry =~ s/^[ \t]*[-*][ \t]+/\001/gm; + $entry =~ s/\s+/ /gs; + $entry =~ s/\001/\n* /gs; $entry =~ s/^\s+|\s+$//gm; + + # Since this updater is only for macOS, omit any changelog entry + # beginning with "X11:", "Android:" etc. + $entry =~ s/^[-*] (X11|Android|Linux|iOS): [^\n]+(\n|$)//gm; + $entry =~ s/^([-*] )macOS: /$1/gm; + $entry =~ s/^[-*] /
• /gm; $entry =~ s/^
//si; $entry =~ s/\s+/ /gs; @@ -90,6 +99,9 @@ sub generate_xml($$$$) { my $v2 = $v1; $v2 =~ s/\.//gs; my $zip = undef; DONE: + # It only makes sense to include entries in this file for releases for + # which a DMG still exists. Expired releases and non-macOS releases + # aren't helpful. #foreach my $ext ('zip', 'dmg', 'tar.gz', 'tar.Z') { foreach my $ext ('dmg') { foreach my $v ($v1, $v2) { diff --git a/OSX/xscreensaver.xcodeproj/project.pbxproj b/OSX/xscreensaver.xcodeproj/project.pbxproj index 8179ca2c..f652906a 100644 --- a/OSX/xscreensaver.xcodeproj/project.pbxproj +++ b/OSX/xscreensaver.xcodeproj/project.pbxproj @@ -172,6 +172,7 @@ AF7779A909B6608100EA3033 /* PBXTargetDependency */, AF7779A709B6608100EA3033 /* PBXTargetDependency */, AF7779A509B6608100EA3033 /* PBXTargetDependency */, + AF436414241D850500966603 /* PBXTargetDependency */, AF7779A109B6608100EA3033 /* PBXTargetDependency */, AF77799B09B6608100EA3033 /* PBXTargetDependency */, AF77799909B6608100EA3033 /* PBXTargetDependency */, @@ -220,6 +221,7 @@ AFACE8911CC8365F008B24CD /* PBXTargetDependency */, AF777A3B09B660B500EA3033 /* PBXTargetDependency */, AF21078F1FD23D9800B61EA9 /* PBXTargetDependency */, + AF2D0D43241D7D9F0001D8B8 /* PBXTargetDependency */, AF777A3909B660B400EA3033 /* PBXTargetDependency */, AF777A3709B660B400EA3033 /* PBXTargetDependency */, AF777A3509B660B400EA3033 /* PBXTargetDependency */, @@ -230,6 +232,7 @@ AF7ACFDC19FF0BDB00BD752B /* PBXTargetDependency */, AF777A2D09B660B400EA3033 /* PBXTargetDependency */, AF777A2B09B660B400EA3033 /* PBXTargetDependency */, + AFA0B13C241CE82D0071E35D /* PBXTargetDependency */, AF777A2909B660B400EA3033 /* PBXTargetDependency */, AFF4636F0C440B3B00EE6509 /* PBXTargetDependency */, AF777A2509B660B400EA3033 /* PBXTargetDependency */, @@ -342,7 +345,6 @@ 557BF07F1EE90D3B00846DCE /* settings@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 557BF07B1EE90C8B00846DCE /* settings@3x.png */; }; 557BF0801EE90D3B00846DCE /* stop@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 557BF07C1EE90C8B00846DCE /* stop@2x.png */; }; 557BF0811EE90D3B00846DCE /* stop@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 557BF07D1EE90C8B00846DCE /* stop@3x.png */; }; - 55EDCB3D1AD498A800251909 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF012918157C1E4C00C396E1 /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; }; AF01590A2077F56000F624F5 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AF0839A609930BAC00277BE9 /* atlantis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258700988A468000655EE /* atlantis.xml */; }; @@ -1534,6 +1536,18 @@ AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AF2D0D2C241D7C870001D8B8 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AF2D0D2E241D7C870001D8B8 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AF2D0D2F241D7C870001D8B8 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AF2D0D30241D7C870001D8B8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AF2D0D31241D7C870001D8B8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AF2D0D32241D7C870001D8B8 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AF2D0D33241D7C870001D8B8 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AF2D0D34241D7C870001D8B8 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AF2D0D3D241D7D610001D8B8 /* etruscanvenus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF2D0D3C241D7D600001D8B8 /* etruscanvenus.xml */; }; + AF2D0D3E241D7D610001D8B8 /* etruscanvenus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF2D0D3C241D7D600001D8B8 /* etruscanvenus.xml */; }; + AF2D0D40241D7D7F0001D8B8 /* etruscanvenus.c in Sources */ = {isa = PBXBuildFile; fileRef = AF2D0D3F241D7D7F0001D8B8 /* etruscanvenus.c */; }; + AF2D0D41241D7D7F0001D8B8 /* etruscanvenus.c in Sources */ = {isa = PBXBuildFile; fileRef = AF2D0D3F241D7D7F0001D8B8 /* etruscanvenus.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF2D8F321CEBA10300198014 /* jwxyz-timers.c in Sources */ = {isa = PBXBuildFile; fileRef = AF2D8F301CEBA10300198014 /* jwxyz-timers.c */; }; AF2D8F331CEBA10300198014 /* jwxyz-timers.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2D8F311CEBA10300198014 /* jwxyz-timers.h */; }; AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; @@ -1615,6 +1629,18 @@ AF41E96C201D4B6B0098E253 /* razzledazzle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF41E969201D4B6B0098E253 /* razzledazzle.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF41E96E201D4B940098E253 /* razzledazzle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF41E96D201D4B940098E253 /* razzledazzle.xml */; }; AF41E96F201D4B940098E253 /* razzledazzle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF41E96D201D4B940098E253 /* razzledazzle.xml */; }; + AF436403241D84CE00966603 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AF436405241D84CE00966603 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AF436406241D84CE00966603 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AF436407241D84CE00966603 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AF436408241D84CE00966603 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AF436409241D84CE00966603 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AF43640A241D84CE00966603 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AF43640B241D84CE00966603 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AF436416241D85B900966603 /* scooter.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF436415241D85B900966603 /* scooter.xml */; }; + AF436417241D85B900966603 /* scooter.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF436415241D85B900966603 /* scooter.xml */; }; + AF436419241D85CD00966603 /* scooter.c in Sources */ = {isa = PBXBuildFile; fileRef = AF436418241D85CD00966603 /* scooter.c */; }; + AF43641A241D85CD00966603 /* scooter.c in Sources */ = {isa = PBXBuildFile; fileRef = AF436418241D85CD00966603 /* scooter.c */; }; AF46E9D61CBBA2B300240FBC /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF46E9D81CBBA2B300240FBC /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF46E9D91CBBA2B300240FBC /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; @@ -1895,7 +1921,6 @@ AF63A80C1AB4EF5D00593C75 /* romanboy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF63A8091AB4EF5D00593C75 /* romanboy.c */; }; AF63A80D1AB4EF5D00593C75 /* romanboy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF63A8091AB4EF5D00593C75 /* romanboy.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF63F2511C3465BE0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; - AF63F2521C3465BE0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F2531C3465BE0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F25D1C3465BE0033E133 /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF63F2B71C3465BE0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; @@ -1916,7 +1941,6 @@ AF63F4481C3465BE0033E133 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AF63F4491C3465BE0033E133 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF63F4591C34682A0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; - AF63F45A1C34682A0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F45B1C34682A0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F45D1C34682A0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; AF63F45F1C34682A0033E133 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; @@ -1935,7 +1959,6 @@ AF63F4761C3469410033E133 /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF63F4771C3469570033E133 /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF63F4811C3469FC0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; - AF63F4821C3469FC0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F4831C3469FC0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F4851C3469FC0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; AF63F4871C3469FC0033E133 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; @@ -2966,6 +2989,19 @@ AF9D4E0409B5BC85006E59CF /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF9D4E0609B5BC9D006E59CF /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9E7EC8190F4C4000A8B01F /* enable_gc.c */; }; + AFA0B122241CE69E0071E35D /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; + AFA0B125241CE69E0071E35D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AFA0B127241CE69E0071E35D /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AFA0B128241CE69E0071E35D /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AFA0B129241CE69E0071E35D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AFA0B12A241CE69E0071E35D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AFA0B12B241CE69E0071E35D /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AFA0B12C241CE69E0071E35D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AFA0B12D241CE69E0071E35D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AFA0B136241CE7B60071E35D /* gibson.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA0B135241CE7B60071E35D /* gibson.c */; }; + AFA0B137241CE7B60071E35D /* gibson.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA0B135241CE7B60071E35D /* gibson.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFA0B139241CE7E10071E35D /* gibson.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFA0B138241CE7E10071E35D /* gibson.xml */; }; + AFA0B13A241CE7E10071E35D /* gibson.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFA0B138241CE7E10071E35D /* gibson.xml */; }; AFA211891CD1AA2E00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; AFA2118A1CD1AA3A00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; AFA2118B1CD1AA3F00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; @@ -3242,6 +3278,7 @@ 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 */; }; + AFCE26332337332000BDCE10 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AFCE26322337332000BDCE10 /* LaunchScreen.storyboard */; }; AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77787609B653DC00EA3033 /* dnalogo.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFCF453815986A3000E6E8CC /* dnalogo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF77787909B6545E00EA3033 /* dnalogo.xml */; }; AFCF4545159878C300E6E8CC /* polyhedra-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B209937DCB00F3E977 /* polyhedra-gl.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; @@ -3978,6 +4015,20 @@ remoteGlobalIDString = AF2107711FD23BDD00B61EA9; remoteInfo = Esper; }; + AF2D0D27241D7C870001D8B8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AF2D0D42241D7D9F0001D8B8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF2D0D25241D7C870001D8B8; + remoteInfo = EtruscanVenus; + }; AF32D9E20F3AD0B40080F535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -4097,6 +4148,20 @@ remoteGlobalIDString = AF3C71450D624BF50030CC0D; remoteInfo = Hypnowheel; }; + AF4363FE241D84CE00966603 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AF436413241D850500966603 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4363FC241D84CE00966603; + remoteInfo = Scooter; + }; AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -6477,6 +6542,20 @@ remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; + AFA0B120241CE69E0071E35D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AFA0B13B241CE82D0071E35D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AFA0B11E241CE69E0071E35D; + remoteInfo = Gibson; + }; AFA160911052FF87009B93AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -7606,7 +7685,6 @@ 557BF07B1EE90C8B00846DCE /* settings@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "settings@3x.png"; sourceTree = ""; }; 557BF07C1EE90C8B00846DCE /* stop@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stop@2x.png"; sourceTree = ""; }; 557BF07D1EE90C8B00846DCE /* stop@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stop@3x.png"; sourceTree = ""; }; - 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; }; 8D1107310486CEB800E47090 /* XScreenSaver.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = XScreenSaver.plist; sourceTree = ""; }; AF01294C157D31DD00C396E1 /* iSaverRunner.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = iSaverRunner.plist; sourceTree = SOURCE_ROOT; }; AF0839A209930B6B00277BE9 /* Atlantis.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Atlantis.saver; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -7654,6 +7732,9 @@ 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; }; + AF2D0D3A241D7C870001D8B8 /* EtruscanVenus.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EtruscanVenus.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AF2D0D3C241D7D600001D8B8 /* etruscanvenus.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = etruscanvenus.xml; sourceTree = ""; }; + AF2D0D3F241D7D7F0001D8B8 /* etruscanvenus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = etruscanvenus.c; path = hacks/glx/etruscanvenus.c; sourceTree = ""; }; AF2D522513E954A0002AA818 /* SaverRunner.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = SaverRunner.icns; sourceTree = ""; }; AF2D8F301CEBA10300198014 /* jwxyz-timers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-timers.c"; path = "../jwxyz/jwxyz-timers.c"; sourceTree = ""; }; AF2D8F311CEBA10300198014 /* jwxyz-timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "jwxyz-timers.h"; path = "../jwxyz/jwxyz-timers.h"; sourceTree = ""; }; @@ -7699,6 +7780,9 @@ AF41E967201D49DD0098E253 /* RazzleDazzle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RazzleDazzle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF41E969201D4B6B0098E253 /* razzledazzle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = razzledazzle.c; path = hacks/glx/razzledazzle.c; sourceTree = ""; }; AF41E96D201D4B940098E253 /* razzledazzle.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = razzledazzle.xml; sourceTree = ""; }; + AF436411241D84CE00966603 /* Scooter.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Scooter.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AF436415241D85B900966603 /* scooter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = scooter.xml; sourceTree = ""; }; + AF436418241D85CD00966603 /* scooter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = scooter.c; path = hacks/scooter.c; sourceTree = ""; }; AF46E9E41CBBA2B300240FBC /* Unicrud.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Unicrud.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF46E9E61CBBA3F900240FBC /* unicrud.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = unicrud.xml; sourceTree = ""; }; AF46E9E71CBBA3F900240FBC /* unicrud.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unicrud.c; path = hacks/glx/unicrud.c; sourceTree = ""; }; @@ -8060,6 +8144,9 @@ AF9D4E0509B5BC9D006E59CF /* apple2-main.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "apple2-main.c"; path = "hacks/apple2-main.c"; sourceTree = ""; }; AF9E7EBF190F4C1B00A8B01F /* enable_gc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = enable_gc; sourceTree = BUILT_PRODUCTS_DIR; }; AF9E7EC8190F4C4000A8B01F /* enable_gc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = enable_gc.c; sourceTree = ""; }; + AFA0B133241CE69E0071E35D /* Gibson.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gibson.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AFA0B135241CE7B60071E35D /* gibson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gibson.c; path = hacks/glx/gibson.c; sourceTree = ""; }; + AFA0B138241CE7E10071E35D /* gibson.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = gibson.xml; sourceTree = ""; }; AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "textclient-mobile.c"; path = "utils/textclient-mobile.c"; sourceTree = ""; }; AFA211A11CD59DAF00C0D2A1 /* RaverHoop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RaverHoop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA211A31CD59FD800C0D2A1 /* raverhoop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = raverhoop.c; path = hacks/glx/raverhoop.c; sourceTree = ""; }; @@ -8473,6 +8560,7 @@ 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 = ""; }; AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rdbomb.xml; sourceTree = ""; }; + AFCE26322337332000BDCE10 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; 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 = ""; }; AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splitflap_obj.c; path = hacks/glx/splitflap_obj.c; sourceTree = ""; }; @@ -8762,6 +8850,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF2D0D2D241D7C870001D8B8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF2D0D2E241D7C870001D8B8 /* libjwxyz.a in Frameworks */, + AF2D0D2F241D7C870001D8B8 /* ScreenSaver.framework in Frameworks */, + AF2D0D30241D7C870001D8B8 /* QuartzCore.framework in Frameworks */, + AF2D0D31241D7C870001D8B8 /* Cocoa.framework in Frameworks */, + AF2D0D32241D7C870001D8B8 /* Carbon.framework in Frameworks */, + AF2D0D33241D7C870001D8B8 /* OpenGL.framework in Frameworks */, + AF2D0D34241D7C870001D8B8 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF32D9E80F3AD0B40080F535 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -8888,6 +8990,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF436404241D84CE00966603 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF436405241D84CE00966603 /* libjwxyz.a in Frameworks */, + AF436406241D84CE00966603 /* ScreenSaver.framework in Frameworks */, + AF436407241D84CE00966603 /* QuartzCore.framework in Frameworks */, + AF436408241D84CE00966603 /* Cocoa.framework in Frameworks */, + AF436409241D84CE00966603 /* Carbon.framework in Frameworks */, + AF43640A241D84CE00966603 /* OpenGL.framework in Frameworks */, + AF43640B241D84CE00966603 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF46E9D71CBBA2B300240FBC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -10744,6 +10860,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFA0B126241CE69E0071E35D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AFA0B127241CE69E0071E35D /* libjwxyz.a in Frameworks */, + AFA0B128241CE69E0071E35D /* ScreenSaver.framework in Frameworks */, + AFA0B129241CE69E0071E35D /* QuartzCore.framework in Frameworks */, + AFA0B12A241CE69E0071E35D /* Cocoa.framework in Frameworks */, + AFA0B12B241CE69E0071E35D /* Carbon.framework in Frameworks */, + AFA0B12C241CE69E0071E35D /* OpenGL.framework in Frameworks */, + AFA0B12D241CE69E0071E35D /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFA211941CD59DAF00C0D2A1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -12671,6 +12801,9 @@ AF62D62D2180070600C57C42 /* Handsy.saver */, AF6C6D89226AE4FC0065A748 /* GravityWell.saver */, AFF449F52275494400DB8EDB /* DeepStars.saver */, + AFA0B133241CE69E0071E35D /* Gibson.saver */, + AF2D0D3A241D7C870001D8B8 /* EtruscanVenus.saver */, + AF436411241D84CE00966603 /* Scooter.saver */, ); name = Products; path = ..; @@ -12699,7 +12832,7 @@ AF14EE300E3CEF1A004CBBD2 /* XScreenSaver.icns */, AF9772E10989DFC6001F8B92 /* SaverRunner.nib */, AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */, - 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */, + AFCE26322337332000BDCE10 /* LaunchScreen.storyboard */, 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */, AF2D522513E954A0002AA818 /* SaverRunner.icns */, AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */, @@ -12944,6 +13077,7 @@ AFD5700C0996B49D00BA26F7 /* penrose.c */, AFD572800996EF2B00BA26F7 /* polyominoes.c */, AFD570C40996B98500BA26F7 /* rotor.c */, + AF436418241D85CD00966603 /* scooter.c */, AFD570220996B52700BA26F7 /* sierpinski.c */, AF47793D099DE56A001F091E /* slip.c */, AFD5703B0996B5E300BA26F7 /* sphere.c */, @@ -13020,6 +13154,7 @@ AFACE88A1CC83578008B24CD /* energystream.c */, AFA55C230993435300F3E977 /* engine.c */, AF21078B1FD23D5000B61EA9 /* esper.c */, + AF2D0D3F241D7D7F0001D8B8 /* etruscanvenus.c */, AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */, AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */, AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */, @@ -13038,6 +13173,7 @@ AFF3CA0217CCAEB70028F240 /* geodesic.c */, AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */, AFA55BA60993401A00F3E977 /* gflux.c */, + AFA0B135241CE7B60071E35D /* gibson.c */, AFA55E4509935FD300F3E977 /* glblur.c */, AFF463710C440B9200EE6509 /* glcells.c */, AF77778B09B64A2A00EA3033 /* gleidescope.c */, @@ -13246,6 +13382,7 @@ AFC2589D0988A468000655EE /* epicycle.xml */, AFC2589E0988A468000655EE /* eruption.xml */, AF2107881FD23D2800B61EA9 /* esper.xml */, + AF2D0D3C241D7D600001D8B8 /* etruscanvenus.xml */, AFC2589F0988A468000655EE /* euler2d.xml */, AFC258A00988A468000655EE /* extrusion.xml */, AFC258A10988A468000655EE /* fadeplot.xml */, @@ -13269,6 +13406,7 @@ AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */, AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */, AFC258B30988A468000655EE /* gflux.xml */, + AFA0B138241CE7E10071E35D /* gibson.xml */, AFC258B40988A468000655EE /* glblur.xml */, AFF463730C440BAC00EE6509 /* glcells.xml */, AFC258B50988A468000655EE /* gleidescope.xml */, @@ -13378,6 +13516,7 @@ AFC259080988A469000655EE /* rubik.xml */, AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */, AFC259090988A469000655EE /* sballs.xml */, + AF436415241D85B900966603 /* scooter.xml */, AFC2590A0988A469000655EE /* shadebobs.xml */, AFC2590B0988A469000655EE /* sierpinski.xml */, AFC2590C0988A469000655EE /* sierpinski3d.xml */, @@ -13769,6 +13908,26 @@ productReference = AF2107861FD23BDE00B61EA9 /* Esper.saver */; productType = "com.apple.product-type.bundle"; }; + AF2D0D25241D7C870001D8B8 /* EtruscanVenus */ = { + isa = PBXNativeTarget; + buildConfigurationList = AF2D0D37241D7C870001D8B8 /* Build configuration list for PBXNativeTarget "EtruscanVenus" */; + buildPhases = ( + AF2D0D28241D7C870001D8B8 /* Resources */, + AF2D0D2A241D7C870001D8B8 /* Sources */, + AF2D0D2D241D7C870001D8B8 /* Frameworks */, + AF2D0D35241D7C870001D8B8 /* Rez */, + AF2D0D36241D7C870001D8B8 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AF2D0D26241D7C870001D8B8 /* PBXTargetDependency */, + ); + name = EtruscanVenus; + productName = DangerBall; + productReference = AF2D0D3A241D7C870001D8B8 /* EtruscanVenus.saver */; + productType = "com.apple.product-type.bundle"; + }; AF32D9E00F3AD0B40080F535 /* RubikBlocks */ = { isa = PBXNativeTarget; buildConfigurationList = AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */; @@ -13949,6 +14108,26 @@ productReference = AF41E967201D49DD0098E253 /* RazzleDazzle.saver */; productType = "com.apple.product-type.bundle"; }; + AF4363FC241D84CE00966603 /* Scooter */ = { + isa = PBXNativeTarget; + buildConfigurationList = AF43640E241D84CE00966603 /* Build configuration list for PBXNativeTarget "Scooter" */; + buildPhases = ( + AF4363FF241D84CE00966603 /* Resources */, + AF436401241D84CE00966603 /* Sources */, + AF436404241D84CE00966603 /* Frameworks */, + AF43640C241D84CE00966603 /* Rez */, + AF43640D241D84CE00966603 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AF4363FD241D84CE00966603 /* PBXTargetDependency */, + ); + name = Scooter; + productName = Attraction; + productReference = AF436411241D84CE00966603 /* Scooter.saver */; + productType = "com.apple.product-type.bundle"; + }; AF46E9CF1CBBA2B300240FBC /* Unicrud */ = { isa = PBXNativeTarget; buildConfigurationList = AF46E9E11CBBA2B300240FBC /* Build configuration list for PBXNativeTarget "Unicrud" */; @@ -16614,6 +16793,26 @@ productReference = AF9E7EBF190F4C1B00A8B01F /* enable_gc */; productType = "com.apple.product-type.tool"; }; + AFA0B11E241CE69E0071E35D /* Gibson */ = { + isa = PBXNativeTarget; + buildConfigurationList = AFA0B130241CE69E0071E35D /* Build configuration list for PBXNativeTarget "Gibson" */; + buildPhases = ( + AFA0B121241CE69E0071E35D /* Resources */, + AFA0B123241CE69E0071E35D /* Sources */, + AFA0B126241CE69E0071E35D /* Frameworks */, + AFA0B12E241CE69E0071E35D /* Rez */, + AFA0B12F241CE69E0071E35D /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AFA0B11F241CE69E0071E35D /* PBXTargetDependency */, + ); + name = Gibson; + productName = DangerBall; + productReference = AFA0B133241CE69E0071E35D /* Gibson.saver */; + productType = "com.apple.product-type.bundle"; + }; AFA2118C1CD59DAF00C0D2A1 /* RaverHoop */ = { isa = PBXNativeTarget; buildConfigurationList = AFA2119E1CD59DAF00C0D2A1 /* Build configuration list for PBXNativeTarget "RaverHoop" */; @@ -18942,7 +19141,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1130; TargetAttributes = { AF08398F09930B6B00277BE9 = { DevelopmentTeam = 4627ATJELP; @@ -18971,6 +19170,9 @@ AF2107711FD23BDD00B61EA9 = { DevelopmentTeam = 4627ATJELP; }; + AF2D0D25241D7C870001D8B8 = { + DevelopmentTeam = 4627ATJELP; + }; AF32D9E00F3AD0B40080F535 = { DevelopmentTeam = 4627ATJELP; }; @@ -18998,6 +19200,9 @@ AF41E952201D49DB0098E253 = { DevelopmentTeam = 4627ATJELP; }; + AF4363FC241D84CE00966603 = { + DevelopmentTeam = 4627ATJELP; + }; AF46E9CF1CBBA2B300240FBC = { DevelopmentTeam = 4627ATJELP; }; @@ -19412,6 +19617,9 @@ AF9E7EBE190F4C1B00A8B01F = { DevelopmentTeam = 4627ATJELP; }; + AFA0B11E241CE69E0071E35D = { + DevelopmentTeam = 4627ATJELP; + }; AFA2118C1CD59DAF00C0D2A1 = { DevelopmentTeam = 4627ATJELP; }; @@ -19917,6 +20125,7 @@ AF77771A09B6416100EA3033 /* Pacman */, AFD56FF80996B43800BA26F7 /* Penrose */, AFD5726D0996EE8500BA26F7 /* Polyominoes */, + AF4363FC241D84CE00966603 /* Scooter */, AFD5700F0996B4CC00BA26F7 /* Sierpinski */, AFD5735D0997411200BA26F7 /* Strange */, AFD572220996E4A300BA26F7 /* Swirl */, @@ -19956,6 +20165,7 @@ AFA55E0D09935EDC00F3E977 /* Endgame */, AFA55C0E0993431300F3E977 /* Engine */, AF2107711FD23BDD00B61EA9 /* Esper */, + AF2D0D25241D7C870001D8B8 /* EtruscanVenus */, AF6423F2099FF9C2000F4CD4 /* Extrusion */, AFA5603209936D5100F3E977 /* FlipFlop */, AF77773E09B6446500EA3033 /* FlipScreen3D */, @@ -19965,6 +20175,7 @@ AFF3C9E817CCAC440028F240 /* Geodesic */, AF7ACFC019FF0A9200BD752B /* GeodesicGears */, AFA55B9109933FDA00F3E977 /* GFlux */, + AFA0B11E241CE69E0071E35D /* Gibson */, AFA55E2F09935F8E00F3E977 /* GLBlur */, AFF463580C440AEF00EE6509 /* GLCells */, AF77777409B6497800EA3033 /* Gleidescope */, @@ -20140,6 +20351,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF2D0D28241D7C870001D8B8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF2D0D3D241D7D610001D8B8 /* etruscanvenus.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF32D9E30F3AD0B40080F535 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -20216,6 +20435,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF4363FF241D84CE00966603 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF436416241D85B900966603 /* scooter.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF46E9D21CBBA2B300240FBC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -20729,7 +20956,6 @@ buildActionMask = 2147483647; files = ( AF63F2511C3465BE0033E133 /* iSaverRunner.xib in Resources */, - AF63F2521C3465BE0033E133 /* LaunchScreen.xib in Resources */, AF63F2531C3465BE0033E133 /* iSaverRunner57t.png in Resources */, AF63F25D1C3465BE0033E133 /* apple2.xml in Resources */, AF63F2B71C3465BE0033E133 /* Media-iOS.xcassets in Resources */, @@ -20741,7 +20967,6 @@ buildActionMask = 2147483647; files = ( AF63F4591C34682A0033E133 /* iSaverRunner.xib in Resources */, - AF63F45A1C34682A0033E133 /* LaunchScreen.xib in Resources */, AF63F45B1C34682A0033E133 /* iSaverRunner57t.png in Resources */, AF63F4761C3469410033E133 /* phosphor.xml in Resources */, AF63F45D1C34682A0033E133 /* Media-iOS.xcassets in Resources */, @@ -20753,7 +20978,6 @@ buildActionMask = 2147483647; files = ( AF63F4811C3469FC0033E133 /* iSaverRunner.xib in Resources */, - AF63F4821C3469FC0033E133 /* LaunchScreen.xib in Resources */, AF63F4831C3469FC0033E133 /* iSaverRunner57t.png in Resources */, AF63F49C1C346B0A0033E133 /* testx11.xml in Resources */, AF63F4851C3469FC0033E133 /* Media-iOS.xcassets in Resources */, @@ -21026,9 +21250,9 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + AFCE26332337332000BDCE10 /* LaunchScreen.storyboard in Resources */, AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */, AF73FF211A08AB9400E485E9 /* iSaverRunner57t.png in Resources */, - 55EDCB3D1AD498A800251909 /* LaunchScreen.xib in Resources */, 550FB6001AD64424001A4FA5 /* Media-iOS.xcassets in Resources */, AFEC68371BD6CA85004C1B64 /* OCRAStd.otf in Resources */, AFC43E741C68364B00C89999 /* PxPlus_IBM_VGA8.ttf in Resources */, @@ -21106,6 +21330,7 @@ AF918AEC158FC53D002B5D1E /* epicycle.xml in Resources */, AF918AED158FC53D002B5D1E /* eruption.xml in Resources */, AF21078A1FD23D2800B61EA9 /* esper.xml in Resources */, + AF2D0D3E241D7D610001D8B8 /* etruscanvenus.xml in Resources */, AF918AEE158FC53D002B5D1E /* euler2d.xml in Resources */, AF918AF0158FC53D002B5D1E /* fadeplot.xml in Resources */, AFD77E7820C2419600A3638D /* filmleader.xml in Resources */, @@ -21125,6 +21350,7 @@ AFF3C9FF17CCAD9A0028F240 /* geodesic.xml in Resources */, AF7ACFDA19FF0BA600BD752B /* geodesicgears.xml in Resources */, AF918B01158FC53D002B5D1E /* gflux.xml in Resources */, + AFA0B13A241CE7E10071E35D /* gibson.xml in Resources */, AF918B02158FC53D002B5D1E /* glblur.xml in Resources */, AF918B03158FC53D002B5D1E /* glcells.xml in Resources */, AF918B04158FC53D002B5D1E /* gleidescope.xml in Resources */, @@ -21135,8 +21361,8 @@ AF918B0A158FC53D002B5D1E /* glschool.xml in Resources */, AF918B0B158FC53D002B5D1E /* glslideshow.xml in Resources */, AF918B0C158FC53D002B5D1E /* glsnake.xml in Resources */, - AF918B10158FC53D002B5D1E /* greynetic.xml in Resources */, AF918B0D158FC53D002B5D1E /* gltext.xml in Resources */, + AF918B10158FC53D002B5D1E /* greynetic.xml in Resources */, AF918B0E158FC53D002B5D1E /* goop.xml in Resources */, AF918B0F158FC53D002B5D1E /* grav.xml in Resources */, AF6C6D8F226AE6370065A748 /* gravitywell.xml in Resources */, @@ -21219,6 +21445,7 @@ AF918B5D158FC53E002B5D1E /* rubik.xml in Resources */, AF918B5E158FC53E002B5D1E /* rubikblocks.xml in Resources */, AF918B5F158FC53E002B5D1E /* sballs.xml in Resources */, + AF436417241D85B900966603 /* scooter.xml in Resources */, AF918B60158FC53E002B5D1E /* shadebobs.xml in Resources */, AF918B61158FC53E002B5D1E /* sierpinski.xml in Resources */, AF918B62158FC53E002B5D1E /* sierpinski3d.xml in Resources */, @@ -21555,6 +21782,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFA0B121241CE69E0071E35D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFA0B122241CE69E0071E35D /* dangerball.xml in Resources */, + AFA0B139241CE7E10071E35D /* gibson.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFA2118F1CD59DAF00C0D2A1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -22540,6 +22776,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF2D0D35241D7C870001D8B8 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF32D9EF0F3AD0B40080F535 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -22603,6 +22846,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF43640C241D84CE00966603 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF46E9DF1CBBA2B300240FBC /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -23485,6 +23735,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFA0B12E241CE69E0071E35D /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFA2119C1CD59DAF00C0D2A1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -24388,6 +24645,21 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AF2D0D36241D7C870001D8B8 /* 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; @@ -24523,6 +24795,21 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AF43640D241D84CE00966603 /* 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; + }; AF46E9E01CBBA2B300240FBC /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -24892,7 +25179,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "$SOURCE_ROOT/icmp-warning.pl"; + shellScript = "$SOURCE_ROOT/icmp-warning.pl\n"; }; AF7E08021592661100D81407 /* ICMP Sanity Check */ = { isa = PBXShellScriptBuildPhase; @@ -24952,6 +25239,21 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AFA0B12F241CE69E0071E35D /* 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; + }; AFA2119D1CD59DAF00C0D2A1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -28452,6 +28754,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF2D0D2A241D7C870001D8B8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF2D0D40241D7D7F0001D8B8 /* etruscanvenus.c in Sources */, + AF2D0D2C241D7C870001D8B8 /* XScreenSaverSubclass.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF32D9E50F3AD0B40080F535 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -28544,6 +28855,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF436401241D84CE00966603 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF436403241D84CE00966603 /* XScreenSaverSubclass.m in Sources */, + AF436419241D85CD00966603 /* scooter.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF46E9D41CBBA2B300240FBC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -29559,6 +29879,7 @@ AF918A04158FC38A002B5D1E /* discrete.c in Sources */, AF9189B2158FC311002B5D1E /* distort.c in Sources */, AF918A05158FC38A002B5D1E /* drift.c in Sources */, + AF4C300F208569AA00BE1DEF /* dymaxionmap-coords.c in Sources */, AF9189B3158FC311002B5D1E /* epicycle.c in Sources */, AF9189B4158FC311002B5D1E /* eruption.c in Sources */, AF918A06158FC38A002B5D1E /* euler2d.c in Sources */, @@ -29604,7 +29925,6 @@ AF918A19158FC38A002B5D1E /* pacman_ai.c in Sources */, AF918A1A158FC38A002B5D1E /* pacman_level.c in Sources */, AF9189D4158FC334002B5D1E /* pedal.c in Sources */, - AF4C300F208569AA00BE1DEF /* dymaxionmap-coords.c in Sources */, AF9189D5158FC334002B5D1E /* penetrate.c in Sources */, AF9189D6158FC334002B5D1E /* petri.c in Sources */, AF9189D7158FC334002B5D1E /* phosphor.c in Sources */, @@ -29621,6 +29941,7 @@ AF9189DF158FC35D002B5D1E /* rocks.c in Sources */, AF9189E0158FC35D002B5D1E /* rorschach.c in Sources */, AF9189E1158FC35D002B5D1E /* rotzoomer.c in Sources */, + AF43641A241D85CD00966603 /* scooter.c in Sources */, AF9189E2158FC35D002B5D1E /* shadebobs.c in Sources */, AF9189E3158FC35D002B5D1E /* slidescreen.c in Sources */, AF9189E4158FC35D002B5D1E /* speedmine.c in Sources */, @@ -29700,6 +30021,7 @@ AFACE88F1CC83617008B24CD /* energystream.c in Sources */, AF918A4B158FC3E5002B5D1E /* engine.c in Sources */, AF21078D1FD23D5000B61EA9 /* esper.c in Sources */, + AF2D0D41241D7D7F0001D8B8 /* etruscanvenus.c in Sources */, AF918A54158FC3E5002B5D1E /* flipflop.c in Sources */, AF918A55158FC3E5002B5D1E /* flipscreen3d.c in Sources */, AF918A56158FC3E5002B5D1E /* fliptext.c in Sources */, @@ -29708,6 +30030,7 @@ AF918A5A158FC3E5002B5D1E /* gears.c in Sources */, AFDDCCED19FF0EBD0072365B /* geodesicgears.c in Sources */, AF918A5B158FC3E5002B5D1E /* gflux.c in Sources */, + AFA0B137241CE7B60071E35D /* gibson.c in Sources */, AF918A5C158FC3E5002B5D1E /* glblur.c in Sources */, AF918A5D158FC3E5002B5D1E /* glcells.c in Sources */, AF918A5E158FC3E5002B5D1E /* gleidescope.c in Sources */, @@ -30141,6 +30464,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFA0B123241CE69E0071E35D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFA0B136241CE7B60071E35D /* gibson.c in Sources */, + AFA0B125241CE69E0071E35D /* XScreenSaverSubclass.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFA211911CD59DAF00C0D2A1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -31377,6 +31709,16 @@ target = AF2107711FD23BDD00B61EA9 /* Esper */; targetProxy = AF21078E1FD23D9800B61EA9 /* PBXContainerItemProxy */; }; + AF2D0D26241D7C870001D8B8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AF2D0D27241D7C870001D8B8 /* PBXContainerItemProxy */; + }; + AF2D0D43241D7D9F0001D8B8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF2D0D25241D7C870001D8B8 /* EtruscanVenus */; + targetProxy = AF2D0D42241D7D9F0001D8B8 /* PBXContainerItemProxy */; + }; AF32D9E10F3AD0B40080F535 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; @@ -31462,6 +31804,16 @@ target = AF3C71450D624BF50030CC0D /* Hypnowheel */; targetProxy = AF42C5150D624E9200B27FF6 /* PBXContainerItemProxy */; }; + AF4363FD241D84CE00966603 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AF4363FE241D84CE00966603 /* PBXContainerItemProxy */; + }; + AF436414241D850500966603 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4363FC241D84CE00966603 /* Scooter */; + targetProxy = AF436413241D850500966603 /* PBXContainerItemProxy */; + }; AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE30BE80E52B14700CCF4A5 /* Sonar */; @@ -33162,6 +33514,16 @@ target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4DEE09B5BB19006E59CF /* PBXContainerItemProxy */; }; + AFA0B11F241CE69E0071E35D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AFA0B120241CE69E0071E35D /* PBXContainerItemProxy */; + }; + AFA0B13C241CE82D0071E35D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AFA0B11E241CE69E0071E35D /* Gibson */; + targetProxy = AFA0B13B241CE82D0071E35D /* PBXContainerItemProxy */; + }; AFA160921052FF87009B93AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6425CC09A18855000F4CD4 /* HyperCube */; @@ -34140,6 +34502,28 @@ }; name = Release; }; + AF2D0D38241D7C870001D8B8 /* 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; + }; + AF2D0D39241D7C870001D8B8 /* 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 = { @@ -34328,6 +34712,20 @@ }; name = Release; }; + AF43640F241D84CE00966603 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + AF436410241D84CE00966603 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; AF46E9E21CBBA2B300240FBC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -35284,7 +35682,6 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.apple2"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -35309,7 +35706,6 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.apple2"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -35334,7 +35730,6 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.phosphor"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -35359,7 +35754,6 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.phosphor"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -35384,7 +35778,6 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.testX11"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -35409,7 +35802,6 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.testX11"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -35932,7 +36324,6 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -35957,7 +36348,6 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -36184,6 +36574,7 @@ AF9771DB0989DC4B001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; @@ -36194,6 +36585,7 @@ AF9771DC0989DC4B001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; @@ -36392,6 +36784,7 @@ AF9E7EC6190F4C1C00A8B01F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -36401,12 +36794,35 @@ AF9E7EC7190F4C1C00A8B01F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Release; }; + AFA0B131241CE69E0071E35D /* 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; + }; + AFA0B132241CE69E0071E35D /* 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; + }; AFA2119F1CD59DAF00C0D2A1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -36446,6 +36862,7 @@ AFA33BCC0B058754002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; INSTALL_PATH = "$(HOME)/bin"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; @@ -36460,6 +36877,7 @@ AFA33BCD0B058754002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; INSTALL_PATH = "$(HOME)/bin"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; @@ -37648,6 +38066,7 @@ AFBFE75C178642DC00432B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; COPY_PHASE_STRIP = NO; INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; @@ -37672,6 +38091,7 @@ AFBFE77C178647FE00432B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; COPY_PHASE_STRIP = NO; INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; @@ -38809,6 +39229,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AF2D0D37241D7C870001D8B8 /* Build configuration list for PBXNativeTarget "EtruscanVenus" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF2D0D38241D7C870001D8B8 /* Debug */, + AF2D0D39241D7C870001D8B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -38890,6 +39319,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AF43640E241D84CE00966603 /* Build configuration list for PBXNativeTarget "Scooter" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF43640F241D84CE00966603 /* Debug */, + AF436410241D84CE00966603 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AF46E9E11CBBA2B300240FBC /* Build configuration list for PBXNativeTarget "Unicrud" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -40132,6 +40570,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AFA0B130241CE69E0071E35D /* Build configuration list for PBXNativeTarget "Gibson" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AFA0B131241CE69E0071E35D /* Debug */, + AFA0B132241CE69E0071E35D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AFA2119E1CD59DAF00C0D2A1 /* Build configuration list for PBXNativeTarget "RaverHoop" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/README b/README index 118a0615..0b55bd16 100644 --- a/README +++ b/README @@ -46,6 +46,20 @@ XScreenSaver has an extensive manual -- please read it! =============================================================================== +5.44 * New hacks, `gibson', `etruscanvenus' and `scooter'. + * BSOD supports Tivo and Nintendo. + * New color options in `romanboy', `projectiveplane', `hypertorus' + and `klein'. + * macOS: Fixed "Use random screen saver" on macOS 10.15. + * iOS: Supports dark mode. + * iOS: Fixed image loading on iOS 13. + * iOS: Fixed rotation on iOS 13 (Apple incompatibly breaks rotation + every two years as a matter of policy). + * Performance tweaks for `eruption', `fireworkx', `halftone', `halo', + `moire2', `rd-bomb'. + * X11: Always use $HOME/.xscreensaver, not getpwuid's directory. + * Various bug fixes. + 5.43 * New hacks, `GravityWell', `DeepStars'. * GLPlanet now supports the Mercator projection. * Bouncing Cow has mathematically ideal cows (spherical, frictionless). diff --git a/README.hacking b/README.hacking index 451aec15..f2958b47 100644 --- a/README.hacking +++ b/README.hacking @@ -90,7 +90,7 @@ The XScreenSaver API state machine. You may not store global state in global variables, or in function-local - static variables. All of your runtime state must be encapsulted in the + static variables. All of your runtime state must be encapsulated in the "state" object created by your "init" function. If you use global or static variables, your screen saver will not work properly on macOS. diff --git a/android/Makefile b/android/Makefile index 868d7f12..0e52e124 100644 --- a/android/Makefile +++ b/android/Makefile @@ -6,10 +6,21 @@ GRADLE = ./gradlew default:: debug all:: release -clean:: - $(GRADLE) clean +# Your sdk.dir and ndk.dir might go in here; gradle wants the file to exist. +local.properties: + touch local.properties + +clean:: local.properties + @\ + if [ "x" == x"$$JAVA_HOME" ] && ! ( which java >&- 2>&- ) ; then \ + echo "android: not cleaning: no java" >&2 ; \ + else \ + echo $(GRADLE) clean ; \ + $(GRADLE) clean ; \ + fi -distdepend:: + +distdepend:: local.properties # Set this to the set of platforms you want to compile for in debug mode. # E.g., if you are running an x86 emulator, there's no point in compiling @@ -97,6 +108,7 @@ export ANDROID_HACKS= \ epicycle \ eruption \ esper \ + etruscanvenus \ euler2d \ fadeplot \ fiberlamp \ @@ -114,6 +126,7 @@ export ANDROID_HACKS= \ geodesic \ geodesicgears \ gflux \ + gibson \ glblur \ glcells \ gleidescope \ @@ -129,6 +142,7 @@ export ANDROID_HACKS= \ grav \ gravitywell \ greynetic \ + halftone \ halo \ handsy \ helix \ @@ -197,6 +211,7 @@ export ANDROID_HACKS= \ rubik \ rubikblocks \ sballs \ + scooter \ shadebobs \ sierpinski \ sierpinski3d \ @@ -251,7 +266,6 @@ ANDROID_TODO= \ carousel \ fliptext \ fontglide \ - halftone \ juggler3d \ molecule \ pedal \ @@ -323,6 +337,7 @@ clean_thumbs:: done distclean:: clean_thumbs clean + rm -rf .gradle EXTRA_TARFILES = xscreensaver/res/drawable/thumbnail.png \ @@ -337,16 +352,19 @@ echo_tarfiles: -o -name '*_settings.xml' \ -o -name '*_wallpaper.xml' \ -o -name AndroidManifest.xml \ - -o -name strings.xml \ - -o -name settings.xml \ - -o -name attrs.xml \ -o -name .gitignore \ -o -name .gradle \ - -o -name drawable \ + -o -name .idea \ + -o -name attrs.xml \ -o -name build \ + -o -name caches \ + -o -name drawable \ -o -name gen \ -o -name libs \ + -o -name local.properties \ -o -name obj \ + -o -name settings.xml \ + -o -name strings.xml \ \) -prune \) \ -o \( \( -type f -o -type l \) \ -print \) \ @@ -360,9 +378,9 @@ images_png_h: run_check:: ../hacks/check-configs.pl --build-android $(ANDROID_HACKS) -debug:: m6502.h run_check images_png_h +debug:: local.properties m6502.h run_check images_png_h $(GRADLE) assembleDebug -release:: m6502.h run_check images_png_h +release:: local.properties m6502.h run_check images_png_h export APP_ABI=all ; \ $(GRADLE) assembleRelease diff --git a/android/README b/android/README index 28432965..c355a88a 100644 --- a/android/README +++ b/android/README @@ -23,6 +23,7 @@ To set up your Android development environment: On MacOS, the value you want is probably ~/Library/Android/sdk/ Also set "ndk.dir" in local.properties. + To build: ./configure @@ -76,6 +77,19 @@ To build: thing to boot up again, it will probably work next time. Probably. +WTF is Gradle? + + "gradle" is a yet another re-invention of "make" that is written + in Java, because we needed that like another hole in the head. + The actual gradle app is bundled here, in a .jar file. + + "gradlew" is an sh script that tries to figure out how to invoke + Java to run gradle properly. + + There are identical copies of gradle and gradlew in both + "android/" and in "android/xscreensaver/". I don't know why. + + Directory structure: Boilerplate for the Java version of "make": diff --git a/android/build.gradle b/android/build.gradle index 978b94c0..542b4920 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:3.5.3' } } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 0ac000f5..4f404982 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip diff --git a/android/local.properties b/android/local.properties deleted file mode 100644 index 238a21c0..00000000 --- a/android/local.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# 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 Ant -# For customization when using a Version Control System, please read the -# header note. -sdk.dir=/Users/jwz/Library/Android/sdk -ndk.dir=/Users/jwz/Library/Android/sdk/ndk diff --git a/android/xscreensaver/.idea/caches/build_file_checksums.ser b/android/xscreensaver/.idea/caches/build_file_checksums.ser deleted file mode 100644 index c2ab27f0..00000000 Binary files a/android/xscreensaver/.idea/caches/build_file_checksums.ser and /dev/null differ diff --git a/android/xscreensaver/.idea/codeStyles/Project.xml b/android/xscreensaver/.idea/codeStyles/Project.xml deleted file mode 100644 index 30aa626c..00000000 --- a/android/xscreensaver/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/compiler.xml b/android/xscreensaver/.idea/compiler.xml deleted file mode 100644 index 9a8b7e5c..00000000 --- a/android/xscreensaver/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/gradle.xml b/android/xscreensaver/.idea/gradle.xml deleted file mode 100644 index 3ac097ad..00000000 --- a/android/xscreensaver/.idea/gradle.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__android_arch_core_common_1_1_0_jar.xml b/android/xscreensaver/.idea/libraries/Gradle__android_arch_core_common_1_1_0_jar.xml deleted file mode 100644 index 98698037..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__android_arch_core_common_1_1_0_jar.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__android_arch_core_runtime_1_1_0.xml b/android/xscreensaver/.idea/libraries/Gradle__android_arch_core_runtime_1_1_0.xml deleted file mode 100644 index 03529f74..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__android_arch_core_runtime_1_1_0.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_0_jar.xml b/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_0_jar.xml deleted file mode 100644 index 29c00493..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_0_jar.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_0.xml b/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_0.xml deleted file mode 100644 index c43180e1..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_0.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_0.xml b/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_0.xml deleted file mode 100644 index 6031fb97..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_0.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_0.xml b/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_0.xml deleted file mode 100644 index 11a24fb3..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_0.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_annotations_27_1_1_jar.xml b/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_annotations_27_1_1_jar.xml deleted file mode 100644 index 1517ad9c..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_annotations_27_1_1_jar.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_compat_27_1_1.xml b/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_compat_27_1_1.xml deleted file mode 100644 index fba52e87..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_compat_27_1_1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_core_ui_27_1_1.xml b/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_core_ui_27_1_1.xml deleted file mode 100644 index 3ccece02..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_core_ui_27_1_1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_core_utils_27_1_1.xml b/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_core_utils_27_1_1.xml deleted file mode 100644 index 69d23f29..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_core_utils_27_1_1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_fragment_27_1_1.xml b/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_fragment_27_1_1.xml deleted file mode 100644 index 8eb356f8..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_fragment_27_1_1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_media_compat_27_1_1.xml b/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_media_compat_27_1_1.xml deleted file mode 100644 index c577eba6..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_media_compat_27_1_1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_v4_27_1_1.xml b/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_v4_27_1_1.xml deleted file mode 100644 index 10d31088..00000000 --- a/android/xscreensaver/.idea/libraries/Gradle__com_android_support_support_v4_27_1_1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/misc.xml b/android/xscreensaver/.idea/misc.xml deleted file mode 100644 index 99202cc2..00000000 --- a/android/xscreensaver/.idea/misc.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/modules.xml b/android/xscreensaver/.idea/modules.xml deleted file mode 100644 index 33191fe7..00000000 --- a/android/xscreensaver/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/runConfigurations.xml b/android/xscreensaver/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460d..00000000 --- a/android/xscreensaver/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/.idea/workspace.xml b/android/xscreensaver/.idea/workspace.xml deleted file mode 100644 index 9f2ef734..00000000 --- a/android/xscreensaver/.idea/workspace.xml +++ /dev/null @@ -1,2205 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1475536195508 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/xscreensaver/build.gradle b/android/xscreensaver/build.gradle index 038e6137..dae6d48e 100644 --- a/android/xscreensaver/build.gradle +++ b/android/xscreensaver/build.gradle @@ -6,8 +6,8 @@ dependencies { } android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 28 + buildToolsVersion "28.0.3" compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 @@ -101,7 +101,7 @@ android { // Note that the Java class tree is still "org.jwz.xscreensaver". applicationId "org.jwz.android.xscreensaver" minSdkVersion 15 - targetSdkVersion 27 + targetSdkVersion 28 } productFlavors { } diff --git a/android/xscreensaver/gradle/wrapper/gradle-wrapper.properties b/android/xscreensaver/gradle/wrapper/gradle-wrapper.properties index 3524910b..cedd244d 100644 --- a/android/xscreensaver/gradle/wrapper/gradle-wrapper.properties +++ b/android/xscreensaver/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Feb 10 21:20:31 PST 2018 +#Mon Jan 13 18:13:30 PST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/android/xscreensaver/local.properties b/android/xscreensaver/local.properties deleted file mode 100644 index d530e0de..00000000 --- a/android/xscreensaver/local.properties +++ /dev/null @@ -1,11 +0,0 @@ -## 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/xscreensaver/xscreensaver.iml b/android/xscreensaver/xscreensaver.iml index 18e9fb05..67713388 100644 --- a/android/xscreensaver/xscreensaver.iml +++ b/android/xscreensaver/xscreensaver.iml @@ -4,6 +4,8 @@ @@ -15,7 +17,8 @@ generateDebugSources @@ -25,19 +28,17 @@ - - - + + - - - + + @@ -65,13 +66,6 @@ - - - - - - - @@ -79,39 +73,29 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - + - - + + + + + + + + + + \ No newline at end of file diff --git a/driver/Makefile.in b/driver/Makefile.in index 4ca00b68..7baf5049 100644 --- a/driver/Makefile.in +++ b/driver/Makefile.in @@ -301,7 +301,7 @@ install-program: $(EXES) echo $$inst xscreensaver $(install_prefix)$(bindir)/xscreensaver ; \ $$inst xscreensaver $(install_prefix)$(bindir)/xscreensaver @for exe in xscreensaver-command xscreensaver-demo \ - xscreensaver-getimage @EXES_OSX@ ; do \ + xscreensaver-getimage @EXES_OSX@ @EXES_SYSTEMD@ ; do \ echo $(INSTALL_PROGRAM) $$exe $(install_prefix)$(bindir)/$$exe ; \ $(INSTALL_PROGRAM) $$exe $(install_prefix)$(bindir)/$$exe ; \ done @@ -633,7 +633,9 @@ clean: distclean: clean -rm -f Makefile XScreenSaver.ad \ - TAGS *~ "#"* screensaver-properties.desktop + TAGS *~ "#"* screensaver-properties.desktop \ + xscreensaver-demo.glade2 \ + xscreensaver.pam # Adds all current dependencies to Makefile depend: XScreenSaver_ad.h XScreenSaver_Xm_ad.h @@ -651,9 +653,10 @@ distdepend: check_men update_ad_version XScreenSaver_ad.h XScreenSaver_Xm_ad.h $(DEPEND) -w 0 -f - \ -s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ - $(SAVER_SRCS_1) $(MOTIF_SRCS) $(GTK_SRCS) $(GETIMG_SRCS_1) \ - $(PWENT_SRCS) $(LOCK_SRCS_1) $(DEMO_SRCS_1) $(CMD_SRCS) \ - $(SYSTEMD_SRCS) $(TEST_SRCS) 2>/dev/null | \ + $(SAVER_SRCS_1) $(SYSTEMD_SRCS) $(MOTIF_SRCS) $(GTK_SRCS) \ + $(PWENT_SRCS) $(PWHELPER_SRCS) $(KERBEROS_SRCS) $(PAM_SRCS) \ + $(LOCK_SRCS_1) $(DEMO_SRCS_1) $(CMD_SRCS) $(GETIMG_SRCS_1) \ + $(PDF2JPEG_SRCS) $(TEST_SRCS) 2>/dev/null | \ sort -d | \ ( \ awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \ @@ -866,7 +869,7 @@ test-mlstring.o: mlstring.c test-mlstring: test-mlstring.o $(CC) -DTEST $(LDFLAGS) -o $@ test-mlstring.o $(SAVER_LIBS) -TEST_FADE_OBJS = test-fade.o $(UTILS_SRC)/fade.o $(DEMO_UTIL_OBJS) +TEST_FADE_OBJS = test-fade.o $(UTILS_BIN)/fade.o $(DEMO_UTIL_OBJS) test-fade: test-fade.o $(UTILS_BIN)/fade.o $(CC) $(LDFLAGS) -o $@ $(TEST_FADE_OBJS) $(SAVER_LIBS) @@ -923,11 +926,19 @@ lock.o: $(srcdir)/types.h lock.o: $(UTILS_SRC)/resources.h lock.o: $(srcdir)/xscreensaver.h mlstring.o: $(srcdir)/mlstring.h +passwd-helper.o: ../config.h +passwd-helper.o: $(srcdir)/prefs.h +passwd-helper.o: $(srcdir)/types.h +passwd-helper.o: $(srcdir)/xscreensaver.h +passwd-kerberos.o: ../config.h passwd.o: $(srcdir)/auth.h passwd.o: ../config.h passwd.o: $(srcdir)/prefs.h passwd.o: $(srcdir)/types.h passwd.o: $(srcdir)/xscreensaver.h +passwd-pam.o: $(srcdir)/auth.h +passwd-pam.o: ../config.h +passwd-pam.o: $(srcdir)/types.h passwd-pwent.o: ../config.h prefs.o: ../config.h prefs.o: $(srcdir)/prefs.h diff --git a/driver/XScreenSaver.ad.in b/driver/XScreenSaver.ad.in index 5deb3344..cfdd1a23 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.43 -! 09-Jul-2019 +! version 5.44 +! 20-Mar-2020 ! ! See "man xscreensaver" for more info. The latest version is always ! available at https://www.jwz.org/xscreensaver/ @@ -323,7 +323,7 @@ XScreenSaver.bourneShell: /bin/sh *passwd.user.label: Username: *splash.heading.label: XScreenSaver %s -*splash.body.label: Copyright \251 1991-2019 by +*splash.body.label: Copyright \251 1991-2020 by *splash.body2.label: Jamie Zawinski *splash.demo.label: Settings *splash.help.label: Help @@ -445,6 +445,7 @@ XScreenSaver.bourneShell: /bin/sh @GL_KLUDGE@ GL: menger -root \n\ @GL_KLUDGE@ GL: molecule -root \n\ rotzoomer -root \n\ + scooter -root \n\ speedmine -root \n\ @GL_KLUDGE@ GL: starwars -root \n\ @GL_KLUDGE@ GL: stonerview -root \n\ @@ -577,7 +578,9 @@ XScreenSaver.bourneShell: /bin/sh @GL_KLUDGE@ GL: razzledazzle -root \n\ vfeedback -root \n\ @GL_KLUDGE@ GL: deepstars -root \n\ -@GL_KLUDGE@ GL: gravitywell -root \n +@GL_KLUDGE@ GL: gravitywell -root \n\ +@GL_KLUDGE@ GL: etruscanvenus -root \n\ +@GL_KLUDGE@ GL: gibson -root \n @@ -613,6 +616,7 @@ XScreenSaver.bourneShell: /bin/sh *hacks.dnalogo.name: DNA Logo *hacks.dymaxionmap.name: DymaxionMap *hacks.energystream.name: EnergyStream +*hacks.etruscanvenus.name: EtruscanVenus *hacks.euler2d.name: Euler2D *hacks.fadeplot.name: FadePlot *hacks.filmleader.name: FilmLeader diff --git a/driver/XScreenSaver_ad.h b/driver/XScreenSaver_ad.h index 2b2dab85..d9fc3042 100644 --- a/driver/XScreenSaver_ad.h +++ b/driver/XScreenSaver_ad.h @@ -87,7 +87,7 @@ "*passwd.login.label: New Login", "*passwd.user.label: Username:", "*splash.heading.label: XScreenSaver %s", -"*splash.body.label: Copyright \\251 1991-2019 by", +"*splash.body.label: Copyright \\251 1991-2020 by", "*splash.body2.label: Jamie Zawinski ", "*splash.demo.label: Settings", "*splash.help.label: Help", @@ -194,6 +194,7 @@ GL: menger -root \\n\ GL: molecule -root \\n\ rotzoomer -root \\n\ + scooter -root \\n\ speedmine -root \\n\ GL: starwars -root \\n\ GL: stonerview -root \\n\ @@ -326,7 +327,9 @@ GL: razzledazzle -root \\n\ vfeedback -root \\n\ GL: deepstars -root \\n\ - GL: gravitywell -root \\n", + GL: gravitywell -root \\n\ + GL: etruscanvenus -root \\n\ + GL: gibson -root \\n", "*hacks.antinspect.name: AntInspect", "*hacks.antmaze.name: AntMaze", "*hacks.antspotlight.name: AntSpotlight", @@ -352,6 +355,7 @@ "*hacks.dnalogo.name: DNA Logo", "*hacks.dymaxionmap.name: DymaxionMap", "*hacks.energystream.name: EnergyStream", +"*hacks.etruscanvenus.name: EtruscanVenus", "*hacks.euler2d.name: Euler2D", "*hacks.fadeplot.name: FadePlot", "*hacks.filmleader.name: FilmLeader", diff --git a/driver/demo-Gtk.c b/driver/demo-Gtk.c index be4a2387..da98c535 100644 --- a/driver/demo-Gtk.c +++ b/driver/demo-Gtk.c @@ -1,5 +1,5 @@ /* demo-Gtk.c --- implements the interactive demo-mode and options dialogs. - * xscreensaver, Copyright (c) 1993-2019 Jamie Zawinski + * xscreensaver, Copyright (c) 1993-2020 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 @@ -550,7 +550,10 @@ warning_dialog (GtkWidget *parent, const char *message, if (!parent || !GET_WINDOW (parent)) /* too early to pop up transient dialogs */ { - fprintf (stderr, "%s: too early for dialog?\n", progname); + fprintf (stderr, + "%s: too early for warning dialog?" + "\n\n\t%s\n\n", + progname, message); free(msg); return False; } @@ -1043,7 +1046,9 @@ await_xscreensaver (state *s) strcat (buf, STFU _("You are running as root. This usually means that xscreensaver\n" "was unable to contact your X server because access control is\n" - "turned on. Try running this command:\n" + "turned on." +/* + " Try running this command:\n" "\n" " xhost +localhost\n" "\n" @@ -1053,9 +1058,10 @@ await_xscreensaver (state *s) "on to this machine to access your screen, which might be\n" "considered a security problem. Please read the xscreensaver\n" "manual and FAQ for more information.\n" + */ "\n" "You shouldn't run X as root. Instead, you should log in as a\n" - "normal user, and `su' as necessary.")); + "normal user, and `sudo' as necessary.")); else strcat (buf, _("Please check your $PATH and permissions.")); @@ -4422,7 +4428,8 @@ kde_screensaver_active_p (void) FILE *p = popen ("dcop kdesktop KScreensaverIface isEnabled 2>/dev/null", "r"); char buf[255]; - fgets (buf, sizeof(buf)-1, p); + if (!p) return False; + if (!fgets (buf, sizeof(buf)-1, p)) return False; pclose (p); if (!strcmp (buf, "true\n")) return True; @@ -4433,7 +4440,11 @@ kde_screensaver_active_p (void) static void kill_kde_screensaver (void) { - system ("dcop kdesktop KScreensaverIface enable false"); + /* Use empty body to kill warning from gcc -Wall with + "warning: ignoring return value of 'system', + declared with attribute warn_unused_result" + */ + if (system ("dcop kdesktop KScreensaverIface enable false")) {} } diff --git a/driver/lock.c b/driver/lock.c index 7696f301..d36481e1 100644 --- a/driver/lock.c +++ b/driver/lock.c @@ -1400,6 +1400,8 @@ destroy_passwd_window (saver_info *si) memset (pw, 0, sizeof(*pw)); free (pw); si->pw_data = 0; + + si->unlock_dismiss_time = time((time_t *) 0); } @@ -2216,6 +2218,7 @@ Bool unlock_p (saver_info *si) { saver_preferences *p = &si->prefs; + time_t now = time ((time_t *) 0); if (!si->unlock_cb) { @@ -2225,6 +2228,18 @@ unlock_p (saver_info *si) raise_window (si, True, True, True); + /* If your cat is sitting on the return key, don't thrash the window. + Only one failed/cancelled unlock per 2 seconds. + */ + if (si->unlock_dismiss_time >= now - 1) + { + if (p->verbose_p) + fprintf (stderr, "%s: unlock: thrashing: RET held down?\n", blurb()); + XSync (si->dpy, False); +# undef sleep + sleep (2); /* This is less than ideal, but fine */ + } + xss_authenticate(si, p->verbose_p); return (si->unlock_state == ul_success); diff --git a/driver/passwd.c b/driver/passwd.c index f4437268..68e1a0b7 100644 --- a/driver/passwd.c +++ b/driver/passwd.c @@ -1,5 +1,5 @@ /* passwd.c --- verifying typed passwords with the OS. - * xscreensaver, Copyright (c) 1993-2018 Jamie Zawinski + * xscreensaver, Copyright (c) 1993-2019 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 @@ -251,7 +251,7 @@ do_syslog (saver_info *si, Bool verbose_p) { # ifdef HAVE_SYSLOG struct passwd *pw = getpwuid (getuid ()); - char *d = DisplayString (si->dpy); + char *d = (si->dpy ? DisplayString (si->dpy) : 0); char *u = (pw && pw->pw_name ? pw->pw_name : "???"); int opt = 0; int fac = 0; @@ -324,8 +324,9 @@ xss_authenticate(saver_info *si, Bool verbose_p) si->cached_passwd && !*si->cached_passwd) { - fprintf (stderr, "%s: assuming null password means cancel.\n", - blurb()); + if (verbose_p) + fprintf (stderr, "%s: assuming null password means cancel.\n", + blurb()); si->unlock_state = ul_cancel; } @@ -354,11 +355,11 @@ xss_authenticate(saver_info *si, Bool verbose_p) { /* If any auth method gets a cancel or timeout, don't try the next auth method! We're done! */ - fprintf (stderr, - "%s: authentication via %s %s.\n", - blurb(), methods[i].name, - (si->unlock_state == ul_cancel - ? "cancelled" : "timed out")); + if (verbose_p) + fprintf (stderr, "%s: authentication via %s %s.\n", + blurb(), methods[i].name, + (si->unlock_state == ul_cancel + ? "cancelled" : "timed out")); goto DONE; } } diff --git a/driver/prefs.c b/driver/prefs.c index 8fb029ee..94e7a0ce 100644 --- a/driver/prefs.c +++ b/driver/prefs.c @@ -1,5 +1,5 @@ /* dotfile.c --- management of the ~/.xscreensaver file. - * xscreensaver, Copyright (c) 1998-2018 Jamie Zawinski + * xscreensaver, Copyright (c) 1998-2020 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 @@ -136,33 +136,34 @@ init_file_name (void) if (!file) { uid_t uid = getuid (); - struct passwd *p = getpwuid (uid); + const char *home = getenv("HOME"); - if (i_am_a_nobody (uid)) - /* If we're running as nobody, then use root's .xscreensaver file - (since ~root/.xscreensaver and ~nobody/.xscreensaver are likely - to be different -- if we didn't do this, then xscreensaver-demo - would appear to have no effect when the luser is running as root.) - */ - uid = 0; - - p = getpwuid (uid); - - if (!p || !p->pw_name || !*p->pw_name) - { - fprintf (stderr, "%s: couldn't get user info of uid %d\n", - blurb(), getuid ()); - file = ""; - } - else if (!p->pw_dir || !*p->pw_dir) + if (i_am_a_nobody (uid) || !home || !*home) { - fprintf (stderr, "%s: couldn't get home directory of \"%s\"\n", - blurb(), (p->pw_name ? p->pw_name : "???")); - file = ""; + /* If we're running as nobody, then use root's .xscreensaver file + (since ~root/.xscreensaver and ~nobody/.xscreensaver are likely + to be different -- if we didn't do this, then xscreensaver-demo + would appear to have no effect when the luser is running as root.) + */ + struct passwd *p = getpwuid (uid); + uid = 0; + if (!p || !p->pw_name || !*p->pw_name) + { + fprintf (stderr, "%s: couldn't get user info of uid %d\n", + blurb(), getuid ()); + } + else if (!p->pw_dir || !*p->pw_dir) + { + fprintf (stderr, "%s: couldn't get home directory of \"%s\"\n", + blurb(), (p->pw_name ? p->pw_name : "???")); + } + else + { + home = p->pw_dir; + } } - else + if (home && *home) { - const char *home = p->pw_dir; const char *name = ".xscreensaver"; file = (char *) malloc(strlen(home) + strlen(name) + 2); strcpy(file, home); @@ -170,6 +171,10 @@ init_file_name (void) strcat(file, "/"); strcat(file, name); } + else + { + file = ""; + } } if (file && *file) @@ -1653,7 +1658,7 @@ stop_the_insanity (saver_preferences *p) if (p->watchdog_timeout > 57000) p->watchdog_timeout = 57000; /* 57 secs */ if (p->pointer_hysteresis < 0) p->pointer_hysteresis = 0; - if (p->pointer_hysteresis > 100) p->pointer_hysteresis = 100; +/* if (p->pointer_hysteresis > 100) p->pointer_hysteresis = 100; */ if (p->auth_warning_slack < 0) p->auth_warning_slack = 0; if (p->auth_warning_slack > 300) p->auth_warning_slack = 300; diff --git a/driver/subprocs.c b/driver/subprocs.c index d500f70e..e2518420 100644 --- a/driver/subprocs.c +++ b/driver/subprocs.c @@ -264,8 +264,8 @@ make_job (pid_t pid, int screen, const char *cmd) clean_job_list(); AGAIN: - while (isspace(*in)) in++; /* skip whitespace */ - while (!isspace(*in) && *in != ':') { + while (*in && isspace(*in)) in++; /* skip whitespace */ + while (*in && !isspace(*in) && *in != ':') { if (*in == '=') got_eq = 1; *out++ = *in++; /* snarf first token */ } @@ -277,7 +277,7 @@ make_job (pid_t pid, int screen, const char *cmd) goto AGAIN; } - while (isspace(*in)) in++; /* skip whitespace */ + while (*in && isspace(*in)) in++; /* skip whitespace */ *out = 0; job->name = strdup(name); diff --git a/driver/timers.c b/driver/timers.c index ea97f346..5aa568c1 100644 --- a/driver/timers.c +++ b/driver/timers.c @@ -1,5 +1,5 @@ /* timers.c --- detecting when the user is idle, and other timer-related tasks. - * xscreensaver, Copyright (c) 1991-2017 Jamie Zawinski + * xscreensaver, Copyright (c) 1991-2019 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 @@ -311,6 +311,12 @@ activate_lock_timer (XtPointer closure, XtIntervalId *id) if (p->verbose_p) fprintf (stderr, "%s: timed out; activating lock.\n", blurb()); + + if (!si->locked_p) + /* So that "xscreensaver-command -watch" reports the time that the + screen was locked, instead of duplicating the blank time. */ + si->blank_time = time ((time_t *) 0); + set_locked_p (si, True); } diff --git a/driver/types.h b/driver/types.h index 35992ae9..ebea9e03 100644 --- a/driver/types.h +++ b/driver/types.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1993-2019 Jamie Zawinski +/* xscreensaver, Copyright (c) 1993-2020 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 @@ -275,6 +275,7 @@ struct saver_info { int unlock_failures; /* Counts failed login attempts while the screen is locked. */ time_t unlock_failure_time; /* Time of first failed login attempt. */ + time_t unlock_dismiss_time; /* Time lock dialog most recently dismissed. */ char *unlock_typeahead; /* If the screen is locked, and the user types a character, we assume that it is the first diff --git a/driver/windows.c b/driver/windows.c index b7bea528..9e47c452 100644 --- a/driver/windows.c +++ b/driver/windows.c @@ -1,5 +1,5 @@ /* windows.c --- turning the screen black; dealing with visuals, virtual roots. - * xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski + * xscreensaver, Copyright (c) 1991-2020 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 @@ -1463,6 +1463,7 @@ resize_screensaver_window (saver_info *si) if (ssi->cmap) XInstallColormap (si->dpy, ssi->cmap); XMapRaised (si->dpy, ssi->screensaver_window); + XSync (si->dpy, False); if (! ssi->pid) spawn_screenhack (ssi); @@ -1586,6 +1587,7 @@ raise_window (saver_info *si, if (!dont_clear || ssi->stderr_overlay_window) clear_stderr (ssi); XMapRaised (si->dpy, ssi->screensaver_window); + XSync (si->dpy, False); #ifdef HAVE_MIT_SAVER_EXTENSION if (ssi->server_mit_saver_window && window_exists_p (si->dpy, ssi->server_mit_saver_window)) @@ -1792,15 +1794,18 @@ unblank_screen (saver_info *si) { Window focus = 0; int revert_to; + XSync (si->dpy, False); XGetInputFocus (si->dpy, &focus, &revert_to); if (focus && focus != PointerRoot && focus != None) { + XErrorHandler old_handler = XSetErrorHandler (BadWindow_ehandler); XWindowAttributes xgwa; xgwa.colormap = 0; - XGetWindowAttributes (si->dpy, focus, &xgwa); - if (xgwa.colormap && + if (XGetWindowAttributes (si->dpy, focus, &xgwa) && + xgwa.colormap && xgwa.colormap != DefaultColormapOfScreen (xgwa.screen)) XInstallColormap (si->dpy, xgwa.colormap); + XSetErrorHandler (old_handler); } } diff --git a/driver/xscreensaver-getimage-file b/driver/xscreensaver-getimage-file index ba1ef308..3a5c7f4e 100755 --- a/driver/xscreensaver-getimage-file +++ b/driver/xscreensaver-getimage-file @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2001-2018 Jamie Zawinski . +# Copyright © 2001-2020 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 @@ -53,7 +53,7 @@ BEGIN { eval 'use LWP::Simple;' } my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.52 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.53 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; @@ -1256,6 +1256,7 @@ sub main() { elsif (m/^--?no-spotlight$/s) { $use_spotlight_p = 0; } elsif (m/^--?cache$/s) { $cache_p = 1; } elsif (m/^--?no-?cache$/s) { $cache_p = 0; } + elsif (m/^--?flush-?cache$/s) { $feed_max_age = $cache_max_age = 0; } elsif (m/^--?cocoa$/) { $cocoa_id = shift @ARGV; } elsif (m/^--?abs(olute)?$/) { $abs_p = 1; } elsif (m/^-./) { usage; } diff --git a/driver/xscreensaver-text b/driver/xscreensaver-text index e965bede..eca1fbf7 100755 --- a/driver/xscreensaver-text +++ b/driver/xscreensaver-text @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2005-2017 Jamie Zawinski +# Copyright © 2005-2019 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 @@ -37,7 +37,7 @@ use Text::Wrap qw(wrap); #use bytes; # This breaks shit. my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.46 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.48 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $http_proxy = undef; @@ -344,6 +344,11 @@ sub output() { last if ($truncate_lines && $lines > $truncate_lines); } close $pipe; + + # I don't understand why we must do this here, but must not do this + # in the 'file' branch above, which reads the file with :raw... + utf8::decode ($body); # Pack multi-byte UTF-8 back into wide chars. + $body = reformat_text ($body); print STDOUT $body; } else { @@ -573,9 +578,10 @@ sub reformat_rss($) { foreach (@items) { $i++; - my ($title, $body1, $body2, $body3); + my ($title, $author, $body1, $body2, $body3); $title = $3 if (m@<((TITLE) [^<>\s]*)[^<>]*>\s*(.*?)\s*@xsi); + $author= $3 if (m@<((DC:CREATOR) [^<>\s]*)[^<>]*>\s*(.*?)\s*@xsi); $body1 = $3 if (m@<((DESCRIPTION) [^<>\s]*)[^<>]*>\s*(.*?)\s*@xsi); $body2 = $3 if (m@<((CONTENT) [^<>\s]*)[^<>]*>\s*(.*?)\s*@xsi); $body3 = $3 if (m@<((SUMMARY) [^<>\s]*)[^<>]*>\s*(.*?)\s*@xsi); @@ -602,10 +608,19 @@ sub reformat_rss($) { } $title = rss_field_to_html ($title || ''); + $author= rss_field_to_html ($author || ''); $body1 = rss_field_to_html ($body1 || ''); $title = '' if ($body1 eq $title); # Identical in Twitter's atom feed. + # Omit author if it's in the title or body + $author = '' if ($author && + ($title =~ m/\Q$author\E/si || + $body1 =~ m/\Q$author\E/si)); + + $title = $author if ($author && !$title); + $title = "$author: $title" if ($author && $title); + $out .= reformat_html ("$title

$body1", $wiki_p ? 'wiki' : 'rss'); $out .= "\n"; } diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c index 2add3b87..40f8207f 100644 --- a/driver/xscreensaver.c +++ b/driver/xscreensaver.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski +/* xscreensaver, Copyright (c) 1991-2020 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 @@ -443,6 +443,11 @@ saver_ehandler (Display *dpy, XErrorEvent *error) } +#ifdef __GNUC__ /* Silence warning */ +static void startup_ehandler (String, String, String, String, String *, + Cardinal *) __attribute__((noreturn)); +#endif /* __GNUC__ */ + /* This error handler is used only while the X connection is being set up; after we've got a connection, we don't use this handler again. The only reason for having this is so that we can present a more idiot-proof error @@ -1561,6 +1566,7 @@ main (int argc, char **argv) if (ssi->real_screen_p) if (ensure_no_screensaver_running (si->dpy, si->screens[i].screen)) exit (1); + ssi->current_hack = -1; } lock_initialization (si, &argc, argv); @@ -1590,6 +1596,8 @@ main (int argc, char **argv) initialize_stderr (si); handle_signals (si); + store_saver_status (si); /* for xscreensaver-command -status */ + # ifdef HAVE_LIBSYSTEMD /* Launch it in the background */ si->systemd_pid = fork_and_exec_1 (si, 0, "xscreensaver-systemd"); # endif @@ -1904,13 +1912,13 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) "suspending."); si->selection_mode = 0; si->demoing_p = False; - si->emergency_lock_p = True; si->throttled_p = True; /* When suspending, immediately lock, if locking enabled. */ # ifndef NO_LOCKING if (p->lock_p && !si->locked_p && !si->locking_disabled_p) { + si->emergency_lock_p = True; if (p->verbose_p) fprintf (stderr, "%s: locking.\n", blurb()); set_locked_p (si, True); diff --git a/hacks/Makefile.in b/hacks/Makefile.in index 63e69be2..7acaeb33 100644 --- a/hacks/Makefile.in +++ b/hacks/Makefile.in @@ -122,7 +122,7 @@ SRCS = attraction.c blitspin.c bouboule.c braid.c bubbles.c \ boxfit.c interaggregate.c celtic.c cwaves.c m6502.c \ asm6502.c abstractile.c lcdscrub.c hexadrop.c \ tessellimage.c delaunay.c recanim.c binaryring.c \ - glitchpeg.c vfeedback.c webcollage-cocoa.m \ + glitchpeg.c vfeedback.c scooter.c webcollage-cocoa.m \ webcollage-helper-cocoa.m testx11.c SCRIPTS = vidwhacker webcollage ljlatest @@ -164,7 +164,7 @@ OBJS = attraction.o blitspin.o bouboule.o braid.o bubbles.o \ webcollage-cocoa.o webcollage-helper-cocoa.o m6502.o \ asm6502.o abstractile.o lcdscrub.o hexadrop.o \ tessellimage.o delaunay.o recanim.o binaryring.o \ - glitchpeg.o vfeedback.o testx11.o + glitchpeg.o vfeedback.o scooter.o testx11.o EXES = attraction blitspin bouboule braid decayscreen deco \ drift flame galaxy grav greynetic halo \ @@ -186,7 +186,7 @@ EXES = attraction blitspin bouboule braid decayscreen deco \ pacman fuzzyflakes anemotaxis memscroller substrate \ intermomentary fireworkx fiberlamp boxfit interaggregate \ celtic cwaves m6502 abstractile lcdscrub hexadrop \ - tessellimage binaryring glitchpeg vfeedback \ + tessellimage binaryring glitchpeg vfeedback scooter \ @JPEG_EXES@ JPEG_EXES = webcollage-helper @@ -245,7 +245,7 @@ MEN = anemone.man apollonian.man attraction.man \ intermomentary.man fireworkx.man fiberlamp.man boxfit.man \ interaggregate.man celtic.man cwaves.man abstractile.man \ lcdscrub.man hexadrop.man tessellimage.man binaryring.man \ - glitchpeg.man vfeedback.man + glitchpeg.man vfeedback.man scooter.man RETIRED_MEN = ant.man bubbles.man critical.man flag.man forest.man \ laser.man lightning.man lisa.man lissie.man lmorph.man \ @@ -291,7 +291,10 @@ install-program:: $(EXES) done install-scripts: $(SCRIPTS) munge-scripts - @for program in $(SCRIPTS); do \ + @if [ ! -d $(install_prefix)$(HACKDIR) ]; then \ + $(INSTALL_DIRS) $(install_prefix)$(HACKDIR) ; \ + fi ; \ + for program in $(SCRIPTS); do \ if [ -r $$program ] ; then \ p=$$program ; \ else \ @@ -814,8 +817,8 @@ halftone: halftone.o $(HACK_OBJS) $(COL) metaballs: metaballs.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) -eruption: eruption.o $(HACK_OBJS) - $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) +eruption: eruption.o $(HACK_OBJS) $(SHM) + $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(SHM) $(HACK_LIBS) $(THRL) popsquares: popsquares.o $(HACK_OBJS) $(DBE) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(COL) $(HACK_LIBS) @@ -1030,6 +1033,9 @@ pacman: pacman.o $(PACOBJS) $(XLOCK_OBJS) $(PNG) fiberlamp: fiberlamp.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) +scooter: scooter.o $(XLOCK_OBJS) + $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) + # These are not like the others. # xsublim: xsublim.o $(HACK_OBJS_1) @@ -1655,6 +1661,7 @@ eruption.o: $(UTILS_SRC)/hsv.h eruption.o: $(UTILS_SRC)/resources.h eruption.o: $(UTILS_SRC)/usleep.h eruption.o: $(UTILS_SRC)/visual.h +eruption.o: $(UTILS_SRC)/xshm.h eruption.o: $(UTILS_SRC)/yarandom.h euler2d.o: ../config.h euler2d.o: $(srcdir)/fps.h @@ -2711,6 +2718,21 @@ rotzoomer.o: $(UTILS_SRC)/usleep.h rotzoomer.o: $(UTILS_SRC)/visual.h rotzoomer.o: $(UTILS_SRC)/xshm.h rotzoomer.o: $(UTILS_SRC)/yarandom.h +scooter.o: ../config.h +scooter.o: $(srcdir)/fps.h +scooter.o: $(srcdir)/recanim.h +scooter.o: $(srcdir)/screenhackI.h +scooter.o: $(UTILS_SRC)/colors.h +scooter.o: $(UTILS_SRC)/erase.h +scooter.o: $(UTILS_SRC)/font-retry.h +scooter.o: $(UTILS_SRC)/grabscreen.h +scooter.o: $(UTILS_SRC)/hsv.h +scooter.o: $(UTILS_SRC)/resources.h +scooter.o: $(UTILS_SRC)/usleep.h +scooter.o: $(UTILS_SRC)/visual.h +scooter.o: $(UTILS_SRC)/yarandom.h +scooter.o: $(srcdir)/xlockmoreI.h +scooter.o: $(srcdir)/xlockmore.h screenhack.o: ../config.h screenhack.o: $(srcdir)/fps.h screenhack.o: $(srcdir)/recanim.h diff --git a/hacks/analogtv-cli.c b/hacks/analogtv-cli.c index d70db1b6..aeec9012 100644 --- a/hacks/analogtv-cli.c +++ b/hacks/analogtv-cli.c @@ -1,4 +1,4 @@ -/* xanalogtv-cli, Copyright (c) 2018 Jamie Zawinski +/* xanalogtv-cli, Copyright (c) 2018-2019 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 @@ -15,7 +15,7 @@ * --duration Length in seconds of MP4. * --powerup Do the power-on animation at the beginning. * --logo FILE Small image overlayed onto the colorbars image. - * --audio FILE Add a soundtrack. Must be as long or longer. + * --audio FILE Add a soundtrack. * * Created: 10-Dec-2018 by jwz. */ @@ -573,7 +573,8 @@ analogtv_write_mp4 (struct state *st, const char *outfile, " -map 0:v:0" " -map 1:a:0" " -acodec aac" - " -shortest", + /* Truncate or pad audio to length of video */ + " -filter_complex '[1:0] apad' -shortest", audiofile); sprintf (cmd + strlen(cmd), " -c:v libx264" @@ -642,10 +643,11 @@ analogtv_convert (const char *infile, const char *outfile, unsigned long curticks = 0; time_t lastlog = time((time_t *)0); int frames_left; + int channel_changes = 0; int fps = 30; if (verbose_p) - fprintf (stderr, "%s: progname: loaded %s %dx%d\n", + fprintf (stderr, "%s: loaded %s %dx%d\n", progname, infile, ximage->width, ximage->height); flip_ximage (ximage); @@ -663,12 +665,30 @@ analogtv_convert (const char *infile, const char *outfile, calloc (st->output_frame->height, st->output_frame->bytes_per_line); { - char *s1, *s2; - st->framefile_fmt = malloc (strlen(outfile) + 100); + char *s0, *slash, *dot; + st->framefile_fmt = calloc (1, strlen(outfile) + 100); + + s0 = st->framefile_fmt; strcpy (st->framefile_fmt, outfile); - s1 = strrchr (st->framefile_fmt, '/'); - s2 = strrchr (st->framefile_fmt, '.'); - if (s2 && s2 > s1) *s2 = 0; + + slash = strrchr (st->framefile_fmt, '/'); + dot = strrchr (st->framefile_fmt, '.'); + if (dot && dot > slash) *dot = 0; + + /* Make tmp files be dotfiles */ + if (slash) { + memmove (slash+1, slash, strlen(slash)+1); + slash[1] = '.'; + } else { + memmove (s0+1, s0, strlen(s0)+1); + s0[0] = '.'; + } + + /* Can't have percents in the tmp file names */ + for (s0 = (slash ? slash : s0); *s0; s0++) { + if (*s0 == '%') *s0 = '_'; + } + sprintf (st->framefile_fmt + strlen(st->framefile_fmt), ".%08x.%%06d.png", (random() % 0xFFFFFFFF)); } @@ -677,7 +697,7 @@ analogtv_convert (const char *infile, const char *outfile, int x, y; st->logo = file_to_ximage (0, 0, logofile); if (verbose_p) - fprintf (stderr, "%s: progname: loaded %s %dx%d\n", + fprintf (stderr, "%s: loaded %s %dx%d\n", progname, logofile, st->logo->width, st->logo->height); flip_ximage (st->logo); /* Pull the alpha out of the logo and make a separate mask ximage. */ @@ -799,6 +819,8 @@ analogtv_convert (const char *infile, const char *outfile, st->curinputi=0; st->cs = &st->chansettings[st->curinputi]; + + /* First channel (initial unadulterated image) stays for this long */ frames_left = fps * (2 + frand(1.5)); st->tv->powerup=0.0; @@ -832,17 +854,35 @@ analogtv_convert (const char *infile, const char *outfile, frames_left--; if (frames_left <= 0) { - frames_left = fps * (0.5 + frand(2.5)); - if (st->curinputi != 0 && !(random() % 3)) { - st->curinputi = 0; /* unadulterated image */ + channel_changes++; + + if (channel_changes == 1) { + /* Second channel has short duration */ + frames_left = fps * (0.25 + frand(0.5)); } else { + frames_left = fps * (0.5 + frand(2.5)); + } + + if (channel_changes == 2) { + /* Always use the unadulterated image for the third channel: + So the effect is, plain, brief blip, plain, then random. */ + st->curinputi = 0; + } else if (st->curinputi != 0 && !(random() % 3)) { + /* Use the unadulterated image 1/3 of the time */ + st->curinputi = 0; + } else { + /* Otherwise random */ st->curinputi = 1 + (random() % (N_CHANNELS - 1)); } st->cs = &st->chansettings[st->curinputi]; /* Set channel change noise flag */ st->tv->channel_change_cycles=200000; + + if (verbose_p) + fprintf (stderr, "%s: %.1f: channel %d\n", + progname, curticks/1000.0, st->curinputi); } for (i=0; ifont->ascent + bst->font->descent; int line_height1 = bst->fontA->ascent + bst->fontA->descent; @@ -2528,7 +2528,7 @@ macsbug (Display *dpy, Window window) if (xoff < 0) xoff = 0; if (yoff < 0) yoff = 0; - BSOD_MARGINS (bst, xoff, yoff); + BSOD_MARGINS (bst, xoff, xoff); BSOD_COLOR (bst, bc, bg); BSOD_RECT (bst, True, 0, 0, bst->xgwa.width, bst->xgwa.height); @@ -2552,7 +2552,9 @@ macsbug (Display *dpy, Window window) BSOD_MOVETO (bst, xoff + col_right + char_width, yoff + body_top + line_height); - BSOD_MARGINS (bst, xoff + col_right + char_width, yoff); + BSOD_MARGINS (bst, + xoff + col_right + char_width, + xoff + col_right + char_width); BSOD_TEXT (bst, LEFT, body); BSOD_RECT (bst, False, xoff-2, yoff, page_right+4, page_bottom); /* again */ @@ -3265,28 +3267,21 @@ sparc_solaris (Display *dpy, Window window) Pixmap pixmap = image_data_to_pixmap (dpy, window, sun_png, sizeof(sun_png), &pix_w, &pix_h, &mask); -# if 0 - if (pixmap && - pix_w < bst->xgwa.width / 2 && - pix_h < bst->xgwa.height / 2) - { - int i, n = 1; - if (bst->xgwa.width > 2560) n++; /* Retina displays */ - for (i = 0; i < n; i++) - { - pixmap = double_pixmap (dpy, bst->xgwa.visual, - bst->xgwa.depth, pixmap, pix_w, pix_h); - mask = double_pixmap (dpy, bst->xgwa.visual, 1, mask, pix_w, pix_h); - pix_w *= 2; - pix_h *= 2; - } - } -# endif char_width = (bst->font->per_char ? bst->font->per_char['n'-bst->font->min_char_or_byte2].width : bst->font->min_bounds.width); + if (pixmap) + while (pix_w < char_width * 4) + { + pixmap = double_pixmap (dpy, bst->xgwa.visual, + bst->xgwa.depth, pixmap, pix_w, pix_h); + mask = double_pixmap (dpy, bst->xgwa.visual, 1, mask, pix_w, pix_h); + pix_w *= 2; + pix_h *= 2; + } + bst->pixmap = pixmap; bst->mask = mask; @@ -3384,13 +3379,13 @@ sparc_solaris (Display *dpy, Window window) BSOD_PIXMAP (bst, 0, 0, pix_w, pix_h, ~0, ~0); BSOD_MARGINS (bst, - bst->left_margin + char_width * 12, - bst->top_margin); + bst->left_margin + pix_w + char_width * 2, + bst->left_margin + pix_w + char_width * 2); BSOD_TEXT (bst, LEFT, "SPARCstation IPC, Keyboard Present\n" "ROM Rev. 2.9, 16 MB memory installed, Serial #12648190.\n" "Ethernet address 8:0:20:37:1:87, Host ID: 52c0fefe.\n"); - BSOD_MARGINS (bst, bst->left_margin, bst->top_margin); + BSOD_MARGINS (bst, bst->left_margin, bst->left_margin); BSOD_TEXT (bst, LEFT, "\n\n\033"); BSOD_PAUSE (bst, 3000000); @@ -5653,6 +5648,121 @@ dvd (Display *dpy, Window window) } +static struct bsod_state * +tivo (Display *dpy, Window window) +{ + struct bsod_state *bst = make_bsod_state (dpy, window, "tivo", "Tivo"); + int char_width = + (bst->font->per_char + ? bst->font->per_char['n'-bst->font->min_char_or_byte2].width + : bst->font->min_bounds.width); + int line_height = bst->font->ascent + bst->font->descent; + + int left = (bst->xgwa.width - char_width * 44) / 2; + int top = (bst->xgwa.height - line_height * 15) / 2; + if (left < 0) left = 0; + if (top < 0) top = 0; + + XClearWindow (dpy, window); + + BSOD_MARGINS (bst, left, left); + BSOD_MOVETO (bst, left, top); + + BSOD_FONT (bst, 1); + BSOD_TEXT (bst, LEFT, "\nA severe error has occurred.\n\n"); + BSOD_FONT (bst, 0); + BSOD_TEXT (bst, LEFT, + "Please leave the Receiver plugged in and connected\n" + "to the phone line for the next three hours while the\n" + "Receiver attempts to repair itself."); + BSOD_FONT (bst, 1); + BSOD_TEXT (bst, LEFT, + "\n\n" + "DO NOT UNPLUG OR RESTART\nTHE RECEIVER.\n\n"); + BSOD_FONT (bst, 0); + BSOD_TEXT (bst, LEFT, + "If, after three hours, the Receiver does not restart\n" + "itself, call Customer Care."); + + BSOD_PAUSE (bst, 1000000 * 60); + return bst; +} + + +/* Error message for corrupted (and therefore presumed bootleg) cartridges. + */ +static struct bsod_state * +nintendo (Display *dpy, Window window) +{ + struct bsod_state *bst = make_bsod_state (dpy, window, + "nintendo", "Nintendo"); + unsigned long bg = get_pixel_resource (dpy, bst->xgwa.colormap, + "nintendo.background", + "Nintendo.Background"); + unsigned long bg2 = get_pixel_resource (dpy, bst->xgwa.colormap, + "nintendo.background2", + "Nintendo.Background"); + unsigned long fg = get_pixel_resource (dpy, bst->xgwa.colormap, + "nintendo.foreground", + "Nintendo.Foreground"); + int char_width = + (bst->font->per_char + ? bst->font->per_char['n'-bst->font->min_char_or_byte2].width + : bst->font->min_bounds.width); + int line_height = bst->font->ascent + bst->font->descent; + + int left = (bst->xgwa.width - char_width * 30) / 2; + int top = (bst->xgwa.height - line_height * 9) / 2; + int left2 = left - char_width * 4; + int top2 = top - line_height; + if (left < 0) left = 0; + if (top < 0) top = 0; + if (left2 < 0) left2 = 0; + if (top2 < 0) top2 = 0; + if (left2 > char_width * 8) left2 = char_width * 8; + if (top2 > line_height * 10) top2 = line_height * 10; + + XClearWindow (dpy, window); + + BSOD_COLOR (bst, bg2, bg); + BSOD_RECT (bst, True, left2, top2 - line_height*2, + bst->xgwa.width - left2*2, + bst->xgwa.height - top2*2 + line_height*2); + + BSOD_MARGINS (bst, left, left); + BSOD_MOVETO (bst, left, top - line_height/2); + + BSOD_FONT (bst, 1); + BSOD_COLOR (bst, bg, bg2); + + /* a variant crash has a second box above the English text that says: + + 警告 + ビデオゲームのコピーは法律で禁じられています。 + 詳しくは取扱説明書をご覧になってください。 + + but BSOD_TEXT doesn't do Xft, and more importantly, "PxPlus IBM VGA8" + doesn't contain Japanese characters. + */ + + BSOD_TEXT (bst, CENTER, "WARNING"); + BSOD_FONT (bst, 0); + BSOD_COLOR (bst, fg, bg2); + BSOD_TEXT (bst, LEFT, + "\n\n" + "IT IS A SERIOUS CRIME\n" + "TO COPY VIDEO GAMES\n" + "ACCORDING TO COPYRIGHT LAW.\n" + "PLEASE REFER TO\n" + "YOUR NINTENDO GAME\n" + "INSTRUCTION BOOKLET\n" + "FOR FURTHER INFORMATION."); + + BSOD_PAUSE (bst, 1000000 * 60); + return bst; +} + + /* An Android phone boot loader, by jwz. */ static struct bsod_state * @@ -5930,6 +6040,8 @@ static const struct { { "VMware", vmware }, { "Encom", encom }, { "DVD", dvd }, + { "Tivo", tivo }, + { "Nintendo", nintendo }, }; @@ -6247,10 +6359,12 @@ static const char *bsod_defaults [] = { "*doNvidia: True", "*doATM: True", "*doGLaDOS: True", - "*doAndroid: True", + "*doAndroid: False", "*doVMware: True", "*doEncom: True", "*doDVD: True", + "*doTivo: True", + "*doNintendo: True", ".foreground: White", ".background: Black", @@ -6362,6 +6476,13 @@ static const char *bsod_defaults [] = { ".vmware.foreground2: Yellow", ".vmware.background: #a700a8", /* purple */ + ".tivo.background: #339020", + ".tivo.foreground: #B8E6BA", + + ".nintendo.background: #F76D0A", + ".nintendo.background2: #085C89", + ".nintendo.foreground: #EEAACF", + "*dontClearRoot: True", ANALOGTV_DEFAULTS @@ -6370,6 +6491,8 @@ static const char *bsod_defaults [] = { "*useSHM: True", #endif + ".lowrez: false", /* This is required on macOS */ + "*fontB: ", "*fontC: ", @@ -6400,6 +6523,11 @@ static const char *bsod_defaults [] = { ".ransomware.fontB: Arial 9, Helvetica 9", ".ransomware.fontC: Arial Bold 11, Arial-BoldMT 11, Helvetica Bold 11", + ".tivo.font: Helvetica-Bold 13", + ".tivo.fontB: Helvetica-Bold 17", + + ".nintendo.font: PxPlus IBM VGA8 18, Courier-Bold 18", + # elif defined(HAVE_ANDROID) "*font: PxPlus IBM VGA8 16", @@ -6424,6 +6552,11 @@ static const char *bsod_defaults [] = { ".ransomware.fontB: -*-helvetica-medium-r-*-*-*-80-*-*-*-*-*-*", ".ransomware.fontC: -*-helvetica-bold-r-*-*-*-100-*-*-*-*-*-*", + ".tivo.font: -*-helvetica-medium-r-*-*-*-180-*-*-*-*-*-*", + ".tivo.fontB: -*-helvetica-bold-r-*-*-*-240-*-*-*-*-*-*", + + ".nintendo.font: PxPlus IBM VGA8 18", + # elif defined(HAVE_COCOA) "*font: PxPlus IBM VGA8 8, Courier Bold 9", @@ -6455,10 +6588,16 @@ static const char *bsod_defaults [] = { ".win10.fontB: Arial 100, Helvetica 100", ".win10.fontC: Arial 16, Helvetica 16", - ".ransomware.font: Arial 24, Helvetica 24", - ".ransomware.bigFont: Arial 24, Helvetica 24", - ".ransomware.fontB: Arial 16, Helvetica 16", - ".ransomware.fontC: Arial Bold 24, Helvetica Bold 24", + ".ransomware.font: Arial 24, Helvetica 24", + ".ransomware.bigFont: Arial 24, Helvetica 24", + ".ransomware.fontB: Arial 16, Helvetica 16", + ".ransomware.fontC: Arial Bold 24, Helvetica Bold 24", + + ".tivo.font: Helvetica 36", + ".tivo.fontB: Helvetica 48", + + ".nintendo.font: PxPlus IBM VGA8 12, Courier Bold 12", + ".nintendo.bigFont: PxPlus IBM VGA8 48, Courier Bold 48", # else /* X11 */ @@ -6506,6 +6645,11 @@ static const char *bsod_defaults [] = { ".ransomware.fontB: -*-helvetica-medium-r-*-*-*-140-*-*-*-*-*-*", ".ransomware.fontC: -*-helvetica-bold-r-*-*-*-180-*-*-*-*-*-*", + ".tivo.font: -*-helvetica-medium-r-*-*-*-180-*-*-*-*-*-*", + ".tivo.fontB: -*-helvetica-bold-r-*-*-*-240-*-*-*-*-*-*", + + ".nintendo.font: -*-courier-bold-r-*-*-*-180-*-*-m-*-*-*", + ".nintendo.bigFont: -*-courier-bold-r-*-*-*-360-*-*-m-*-*-*", # endif /* X11 */ @@ -6580,8 +6724,12 @@ static const XrmOptionDescRec bsod_options [] = { { "-no-vmware", ".doVMware", XrmoptionNoArg, "False" }, { "-encom", ".doEncom", XrmoptionNoArg, "True" }, { "-no-encom", ".doEncom", XrmoptionNoArg, "False" }, - { "-dvd", ".doDVD", XrmoptionNoArg, "True" }, - { "-no-dvd", ".doDVD", XrmoptionNoArg, "False" }, + { "-dvd", ".doDVD", XrmoptionNoArg, "True" }, + { "-no-dvd", ".doDVD", XrmoptionNoArg, "False" }, + { "-tivo", ".doTivo", XrmoptionNoArg, "True" }, + { "-no-tivo", ".doTivo", XrmoptionNoArg, "False" }, + { "-nintendo", ".doNintendo", XrmoptionNoArg, "True" }, + { "-no-nintendo", ".doNintendo", XrmoptionNoArg, "False" }, ANALOGTV_OPTIONS { 0, 0, 0, 0 } }; diff --git a/hacks/compile_axp.com b/hacks/compile_axp.com index 9fab0079..caf116c2 100644 --- a/hacks/compile_axp.com +++ b/hacks/compile_axp.com @@ -111,6 +111,7 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RORSCHACH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROTOR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROTZOOMER.C +$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SCOOTER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SCREENHACK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SHADEBOBS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SIERPINSKI.C diff --git a/hacks/compile_decc.com b/hacks/compile_decc.com index 9fab0079..caf116c2 100644 --- a/hacks/compile_decc.com +++ b/hacks/compile_decc.com @@ -111,6 +111,7 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RORSCHACH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROTOR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROTZOOMER.C +$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SCOOTER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SCREENHACK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SHADEBOBS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SIERPINSKI.C diff --git a/hacks/config/README b/hacks/config/README index 58c41953..5ba2e7ba 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.43 - 09-Jul-2019 + version 5.44 + 20-Mar-2020 https://www.jwz.org/xscreensaver/ diff --git a/hacks/config/bsod.xml b/hacks/config/bsod.xml index 0d182187..6a3ac4ac 100644 --- a/hacks/config/bsod.xml +++ b/hacks/config/bsod.xml @@ -24,7 +24,7 @@ - + @@ -43,19 +43,21 @@ - + + + - + diff --git a/hacks/config/deepstars.xml b/hacks/config/deepstars.xml index e1118e27..d690d2de 100644 --- a/hacks/config/deepstars.xml +++ b/hacks/config/deepstars.xml @@ -19,6 +19,8 @@ _label="Smear" _low-label="Low" _high-label="High" low="0.1" high="5.0" default="1.0"/> + + <_description> diff --git a/hacks/config/dnalogo.xml b/hacks/config/dnalogo.xml index ac10f15a..48cd2ee6 100644 --- a/hacks/config/dnalogo.xml +++ b/hacks/config/dnalogo.xml @@ -33,18 +33,6 @@ DNA Lounge San Francisco, CA 94103 -Codeword - - Restaurant -- Bar -- Nightclub -- Cafe -- Est. 2015. - - 917 Folsom Street - San Francisco, CA - 94107 - - https://www.dnalounge.com/ - http://www.dnapizza.com/ - https://www.codeword-sf.com/ - Written by Jamie Zawinski; 2001. diff --git a/hacks/config/etruscanvenus.xml b/hacks/config/etruscanvenus.xml new file mode 100644 index 00000000..090b102d --- /dev/null +++ b/hacks/config/etruscanvenus.xml @@ -0,0 +1,143 @@ + + + + +

+ + + +
+ +
+ + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + <_description> +A 3D immersion of of a Klein bottle that smoothly deforms between the +Etruscan Venus surface, the Roman surface, the Boy surface, and the +Ida surface. Topologically, all surfaces are Klein bottles, even the +Roman and Boy surfaces, which are doubly covered and therefore appear +to be an immersed real projective plane. + +You can walk on the Klein bottle or rotate it in 3D. Since all the +surfaces except the Ida surfaces have points where the surface normal +is not well defined for some points, walking is performed on the Ida +surface. Furthermore, it is possible to smoothly deform the surface +between the Etruscan Venus surface, the Roman surface, the Boy +surface, and the Ida surface surface while turning it. + +Inspired by George K. Francis's book "A Topological Picturebook", +Springer, 1987, George K. Francis's paper "The Etruscan Venus" in +P. Concus, R. Finn, and D. A. Hoffman: "Geometric Analysis and +Computer Graphics", Springer, 1991, and a video entitled "The Etruscan +Venus" by Donna J. Cox, George K. Francis, and Raymond L. Idaszak, +presented at SIGGRAPH 1989. + +https://en.wikipedia.org/wiki/Boy%27s_surface +https://en.wikipedia.org/wiki/Roman_surface +https://en.wikipedia.org/wiki/Klein_bottle +http://mathworld.wolfram.com/BoySurface.html +http://mathworld.wolfram.com/RomanSurface.html +http://mathworld.wolfram.com/EtruscanVenusSurface.html +http://mathworld.wolfram.com/IdaSurface.html + +Written by Carsten Steger; 2020. + + diff --git a/hacks/config/gibson.xml b/hacks/config/gibson.xml new file mode 100644 index 00000000..3e69a9cc --- /dev/null +++ b/hacks/config/gibson.xml @@ -0,0 +1,65 @@ + + + + + + + diff --git a/hacks/config/hypertorus.xml b/hacks/config/hypertorus.xml index a82e090a..899d0cba 100644 --- a/hacks/config/hypertorus.xml +++ b/hacks/config/hypertorus.xml @@ -40,10 +40,14 @@ + + -