From 7b34ef992563d7bcbb64cc5597dc45fa24470b05 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Mon, 2 Mar 2009 00:43:57 -0500 Subject: [PATCH] http://www.jwz.org/xscreensaver/xscreensaver-5.08.tar.gz -rw-r--r-- 1 zblaxell zblaxell 5466460 Dec 28 02:59 xscreensaver-5.08.tar.gz 4e6889d7171eaf18b856c484a87d5701787e5dc6 xscreensaver-5.08.tar.gz --- Makefile.in | 6 +- OSX/._jwxyz.m | Bin 173 -> 0 bytes OSX/Makefile | 21 +- OSX/README | 2 +- OSX/SaverTester.plist | 4 +- OSX/XScreenSaver.plist | 4 +- OSX/bindist.rtf | 2 +- OSX/jwxyz.h | 2 +- OSX/jwxyz.m | 86 +- OSX/osxgrabscreen.m | 30 +- OSX/update-info-plist.pl | 8 +- README | 29 +- config.h.in | 4 + configure | 108 +- configure.in | 15 +- driver/XScreenSaver.ad.in | 60 +- driver/XScreenSaver_ad.h | 55 +- driver/lock.c | 8 +- driver/passwd.c | 28 + driver/screens.c | 135 +- driver/test-randr.c | 6 +- driver/timers.c | 10 +- driver/xscreensaver-getimage.c | 16 +- driver/xscreensaver-text | 21 +- driver/xscreensaver-text.man | 4 + driver/xscreensaver.c | 7 + driver/xscreensaver.man | 8 +- hacks/.gdbinit | 10 +- hacks/Makefile.in | 149 +- hacks/asm6502.c | 43 +- hacks/bubbles.man | 140 - hacks/compile_axp.com | 3 - hacks/compile_decc.com | 3 - hacks/config/README | 4 +- hacks/config/discrete.xml | 3 +- hacks/config/jigsaw.xml | 55 +- hacks/config/maze.xml | 40 +- hacks/config/mismunch.xml | 37 - hacks/config/munch.xml | 61 +- hacks/config/photopile.xml | 56 + hacks/config/sierpinski3d.xml | 2 +- hacks/config/sonar.xml | 63 +- hacks/config/timetunnel.xml | 33 +- hacks/critical.man | 94 - hacks/fireworkx.c | 2 +- hacks/flag.c | 35 +- hacks/flag.man | 92 - hacks/forest.man | 62 - hacks/glx/._jigsaw.c | Bin 0 -> 170 bytes hacks/glx/Makefile.in | 145 +- hacks/glx/carousel.man | 1 + hacks/glx/flurry.c | 2 +- hacks/glx/glforestfire.man | 130 - hacks/glx/glslideshow.man | 1 + hacks/glx/grab-ximage.c | 6 +- hacks/glx/hypnowheel.c | 4 +- hacks/glx/jigsaw.c | 1165 +++ hacks/{ => glx}/jigsaw.man | 46 +- hacks/glx/lavalite.c | 2 +- hacks/glx/molecule.c | 1 + hacks/glx/photopile.c | 694 ++ hacks/glx/photopile.man | 105 + hacks/glx/sierpinski3d.c | 115 +- hacks/glx/sonar-icmp.c | 1182 +++ hacks/glx/sonar-sim.c | 112 + hacks/glx/sonar.c | 1012 +++ hacks/glx/sonar.h | 68 + hacks/glx/sonar.man | 163 + hacks/glx/starwars.c | 4 - hacks/glx/timetunnel.c | 124 +- hacks/glx/timetunnel.man | 38 +- hacks/glx/xpm-ximage.c | 4 +- hacks/images/m6502/._amiga.asm | Bin 0 -> 225 bytes hacks/images/m6502/._colors.asm | Bin 0 -> 225 bytes hacks/images/m6502/._disco.asm | Bin 0 -> 225 bytes hacks/images/m6502/._softsprite.asm | Bin 0 -> 225 bytes hacks/images/m6502/._starfield2d.asm | Bin 0 -> 225 bytes hacks/images/m6502/amiga.asm | 120 + hacks/images/m6502/colors.asm | 46 + hacks/images/m6502/disco.asm | 23 + hacks/images/m6502/softsprite.asm | 132 + hacks/images/m6502/starfield2d.asm | 50 + hacks/jigsaw.c | 894 --- hacks/laser.man | 68 - hacks/lightning.man | 62 - hacks/lisa.man | 71 - hacks/lissie.man | 69 - hacks/lmorph.man | 65 - hacks/maze.c | 692 +- hacks/mismunch.c | 382 - hacks/mismunch.man | 79 - hacks/munch.c | 597 +- hacks/munch.man | 92 +- hacks/munge-ad.pl | 134 +- hacks/rotor.man | 68 - hacks/sonar.c | 2292 ------ hacks/sonar.man | 221 - hacks/sphere.man | 62 - hacks/spiral.man | 71 - hacks/t3d.man | 131 - hacks/vines.man | 66 - hacks/webcollage | 136 +- hacks/whirlygig.man | 137 - hacks/worm.man | 65 - hacks/xspirograph.c | 105 +- hacks/xsublim.man | 91 - po/._ja.po | Bin 0 -> 225 bytes po/._nb.po | Bin 0 -> 536 bytes po/POTFILES.in | 437 +- po/ja.po | 8507 +++++++++++----------- po/nb.po | 871 +-- po/no.po | 9276 ------------------------ setup.com | 19 - utils/version.h | 2 +- xscreensaver.spec | 2 +- xscreensaver.xcodeproj/project.pbxproj | 1408 ++-- 116 files changed, 12546 insertions(+), 21787 deletions(-) delete mode 100644 OSX/._jwxyz.m delete mode 100644 hacks/bubbles.man delete mode 100644 hacks/config/mismunch.xml create mode 100644 hacks/config/photopile.xml delete mode 100644 hacks/critical.man delete mode 100644 hacks/flag.man delete mode 100644 hacks/forest.man create mode 100644 hacks/glx/._jigsaw.c delete mode 100644 hacks/glx/glforestfire.man create mode 100644 hacks/glx/jigsaw.c rename hacks/{ => glx}/jigsaw.man (62%) create mode 100644 hacks/glx/photopile.c create mode 100644 hacks/glx/photopile.man create mode 100644 hacks/glx/sonar-icmp.c create mode 100644 hacks/glx/sonar-sim.c create mode 100644 hacks/glx/sonar.c create mode 100644 hacks/glx/sonar.h create mode 100644 hacks/glx/sonar.man create mode 100644 hacks/images/m6502/._amiga.asm create mode 100644 hacks/images/m6502/._colors.asm create mode 100644 hacks/images/m6502/._disco.asm create mode 100644 hacks/images/m6502/._softsprite.asm create mode 100644 hacks/images/m6502/._starfield2d.asm create mode 100644 hacks/images/m6502/amiga.asm create mode 100644 hacks/images/m6502/colors.asm create mode 100644 hacks/images/m6502/disco.asm create mode 100644 hacks/images/m6502/softsprite.asm create mode 100644 hacks/images/m6502/starfield2d.asm delete mode 100644 hacks/jigsaw.c delete mode 100644 hacks/laser.man delete mode 100644 hacks/lightning.man delete mode 100644 hacks/lisa.man delete mode 100644 hacks/lissie.man delete mode 100644 hacks/lmorph.man delete mode 100644 hacks/mismunch.c delete mode 100644 hacks/mismunch.man delete mode 100644 hacks/rotor.man delete mode 100644 hacks/sonar.c delete mode 100644 hacks/sonar.man delete mode 100644 hacks/sphere.man delete mode 100644 hacks/spiral.man delete mode 100644 hacks/t3d.man delete mode 100644 hacks/vines.man delete mode 100644 hacks/whirlygig.man delete mode 100644 hacks/worm.man delete mode 100644 hacks/xsublim.man create mode 100644 po/._ja.po create mode 100644 po/._nb.po delete mode 100644 po/no.po diff --git a/Makefile.in b/Makefile.in index c8e034f3..b094069d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -321,7 +321,7 @@ www:: cd $$DEST ; \ \ TMP=/tmp/xd.$$$$ ; \ - sed "s/xscreensaver-5\.[0-9][0-9ab]*/$$HEAD/g" download.html > $$TMP ; \ + sed "s/xscreensaver-5\.[0-9][0-9ab]*/$$HEAD/g" download.html > $$TMP ; \ echo '' ; \ diff -U0 download.html $$TMP ; \ echo '' ; \ @@ -334,10 +334,10 @@ www:: set -x ; \ rm $$OLDEST ; \ cvs remove $$OLDEST ; \ - else \ - set -x ; \ + set +x ; \ fi ; \ done ; \ + set -x ; \ cvs add -kb $$BNAME $$BNAME2 ; \ cat $$TMP > download.html ; \ rm -f $$TMP ; \ diff --git a/OSX/._jwxyz.m b/OSX/._jwxyz.m deleted file mode 100644 index 3281d46d31b227f981a9b9a2414cc1f41bdd3901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aWxQw_-lcf2;dkJ62xE<9R^ei(lG~! z1<|xIBE-d$^K; s@^.*/(.*)\..*$$@\L$$1@; print'`; \ + for r in $$retired ; do \ + if [ "$$ff" = "$$r" ]; then ok=no ; fi ; \ + done ; \ + if [ "$$ok" = yes ]; then \ + echo + cp -pr "$$f" "$$STAGE/" ; \ + cp -pr "$$f" "$$STAGE/" ; \ + else \ + echo skipping "$$f" ; \ + fi ; \ + done ; \ set -x ; \ cp -p bindist.rtf "$$STAGE/ READ ME.rtf" ; \ cp -p bindist-DS_Store "$$STAGE/.DS_Store" ; \ diff --git a/OSX/README b/OSX/README index 4a9ea807..551e3bb6 100644 --- a/OSX/README +++ b/OSX/README @@ -6,5 +6,5 @@ To build it, just type "make", or use the included XCode project. The executables will show up in the "build/Release/" and/or "build/Debug/" directories. -To build these programs, XCode 2.2 or later is required. +To build these programs, XCode 2.4 or later is required. To run them, MacOS 10.4.0 or later is required. diff --git a/OSX/SaverTester.plist b/OSX/SaverTester.plist index 8cddccac..4a5dcba7 100644 --- a/OSX/SaverTester.plist +++ b/OSX/SaverTester.plist @@ -17,11 +17,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 5.07 + 5.08 CFBundleSignature ???? CFBundleVersion - 5.07 + 5.08 LSMinimumSystemVersion 10.4.0 NSMainNibFile diff --git a/OSX/XScreenSaver.plist b/OSX/XScreenSaver.plist index 3d0c849a..48fcdd0d 100644 --- a/OSX/XScreenSaver.plist +++ b/OSX/XScreenSaver.plist @@ -15,11 +15,11 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 5.07 + 5.08 CFBundleSignature ???? CFBundleVersion - 5.07 + 5.08 LSMinimumSystemVersion 10.4.0 NSMainNibFile diff --git a/OSX/bindist.rtf b/OSX/bindist.rtf index fbfe64d4..76dca61f 100644 --- a/OSX/bindist.rtf +++ b/OSX/bindist.rtf @@ -15,7 +15,7 @@ XScreenSaver \f1\b0 \ by Jamie Zawinski \uc0\u8232 and many others\ \ -version 5.07 \uc0\u8232 10-Aug-2008\ +version 5.08 \uc0\u8232 27-Dec-2008\ \ {\field{\*\fldinst{HYPERLINK "http://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 http://www.jwz.org/xscreensaver/}}\ \pard\pardeftab720\li720 diff --git a/OSX/jwxyz.h b/OSX/jwxyz.h index 0835258d..150c638d 100644 --- a/OSX/jwxyz.h +++ b/OSX/jwxyz.h @@ -358,7 +358,7 @@ extern Pixmap XCreatePixmapFromBitmapData (Display *, Drawable, extern XPixmapFormatValues *XListPixmapFormats (Display *, int *count_ret); extern void jwxyz_draw_NSImage (Display *, Drawable, void *NSImage_arg, - XRectangle *geom_ret); + XRectangle *geom_ret, int exif_rotation); extern int XSetGraphicsExposures (Display *, GC, Bool); extern Bool XTranslateCoordinates (Display *, Window src_w, Window dest_w, diff --git a/OSX/jwxyz.m b/OSX/jwxyz.m index c1984c93..17a37734 100644 --- a/OSX/jwxyz.m +++ b/OSX/jwxyz.m @@ -395,6 +395,8 @@ XDrawPoints (Display *dpy, Drawable d, GC gc, int i; CGRect wr = d->frame; + push_fg_gc (d, gc, YES); + # ifdef XDRAWPOINTS_IMAGES unsigned int argb = gc->gcv.foreground; @@ -440,7 +442,6 @@ XDrawPoints (Display *dpy, Drawable d, GC gc, CGRect *rects = (CGRect *) malloc (count * sizeof(CGRect)); CGRect *r = rects; - push_fg_gc (d, gc, YES); for (i = 0; i < count; i++) { r->size.width = r->size.height = 1; if (i > 0 && mode == CoordModePrevious) { @@ -459,6 +460,8 @@ XDrawPoints (Display *dpy, Drawable d, GC gc, # endif /* ! XDRAWPOINTS_IMAGES */ + pop_gc (d, gc); + return 0; } @@ -1704,9 +1707,62 @@ XGetImage (Display *dpy, Drawable d, int x, int y, return image; } + +/* Returns a transformation matrix to do rotation as per the provided + EXIF "Orientation" value. + */ +static CGAffineTransform +exif_rotate (int rot, CGSize rect) +{ + CGAffineTransform trans = CGAffineTransformIdentity; + switch (rot) { + case 2: // flip horizontal + trans = CGAffineTransformMakeTranslation (rect.width, 0); + trans = CGAffineTransformScale (trans, -1, 1); + break; + + case 3: // rotate 180 + trans = CGAffineTransformMakeTranslation (rect.width, rect.height); + trans = CGAffineTransformRotate (trans, M_PI); + break; + + case 4: // flip vertical + trans = CGAffineTransformMakeTranslation (0, rect.height); + trans = CGAffineTransformScale (trans, 1, -1); + break; + + case 5: // transpose (UL-to-LR axis) + trans = CGAffineTransformMakeTranslation (rect.height, rect.width); + trans = CGAffineTransformScale (trans, -1, 1); + trans = CGAffineTransformRotate (trans, 3 * M_PI / 2); + break; + + case 6: // rotate 90 + trans = CGAffineTransformMakeTranslation (0, rect.width); + trans = CGAffineTransformRotate (trans, 3 * M_PI / 2); + break; + + case 7: // transverse (UR-to-LL axis) + trans = CGAffineTransformMakeScale (-1, 1); + trans = CGAffineTransformRotate (trans, M_PI / 2); + break; + + case 8: // rotate 270 + trans = CGAffineTransformMakeTranslation (rect.height, 0); + trans = CGAffineTransformRotate (trans, M_PI / 2); + break; + + default: + break; + } + + return trans; +} + + void jwxyz_draw_NSImage (Display *dpy, Drawable d, void *nsimg_arg, - XRectangle *geom_ret) + XRectangle *geom_ret, int exif_rotation) { NSImage *nsimg = (NSImage *) nsimg_arg; @@ -1721,17 +1777,30 @@ jwxyz_draw_NSImage (Display *dpy, Drawable d, void *nsimg_arg, CGImageRef cgi = CGImageSourceCreateImageAtIndex (cgsrc, 0, NULL); NSSize imgr = [nsimg size]; + Bool rot_p = (exif_rotation >= 5); + + if (rot_p) + imgr = NSMakeSize (imgr.height, imgr.width); + CGRect winr = d->frame; float rw = winr.size.width / imgr.width; float rh = winr.size.height / imgr.height; float r = (rw < rh ? rw : rh); - CGRect dst; + CGRect dst, dst2; dst.size.width = imgr.width * r; dst.size.height = imgr.height * r; dst.origin.x = (winr.size.width - dst.size.width) / 2; dst.origin.y = (winr.size.height - dst.size.height) / 2; + dst2.origin.x = dst2.origin.y = 0; + if (rot_p) { + dst2.size.width = dst.size.height; + dst2.size.height = dst.size.width; + } else { + dst2.size = dst.size; + } + // Clear the part not covered by the image to background or black. // if (d->type == WINDOW) @@ -1741,8 +1810,17 @@ jwxyz_draw_NSImage (Display *dpy, Drawable d, void *nsimg_arg, draw_rect (dpy, d, 0, 0, 0, winr.size.width, winr.size.height, NO, YES); } + CGAffineTransform trans = + exif_rotate (exif_rotation, rot_p ? dst2.size : dst.size); + + CGContextSaveGState (d->cgc); + CGContextConcatCTM (d->cgc, + CGAffineTransformMakeTranslation (dst.origin.x, + dst.origin.y)); + CGContextConcatCTM (d->cgc, trans); //Assert (CGImageGetColorSpace (cgi) == dpy->colorspace, "bad colorspace"); - CGContextDrawImage (d->cgc, dst, cgi); + CGContextDrawImage (d->cgc, dst2, cgi); + CGContextRestoreGState (d->cgc); CFRelease (cgsrc); CGImageRelease (cgi); diff --git a/OSX/osxgrabscreen.m b/OSX/osxgrabscreen.m index 14e13725..980db62d 100644 --- a/OSX/osxgrabscreen.m +++ b/OSX/osxgrabscreen.m @@ -207,6 +207,33 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable) } +/* Returns the EXIF rotation property of the image, if any. + */ +static int +exif_rotation (const char *filename) +{ + /* This is a ridiculous amount of rigamarole to go through, but for some + reason the "Orientation" tag does not exist in the "NSImageEXIFData" + dictionary inside the NSBitmapImageRep of the NSImage. Several other + EXIF tags are there (e.g., shutter speed) but not orientation. WTF? + */ + CFStringRef s = CFStringCreateWithCString (NULL, filename, + kCFStringEncodingUTF8); + CFURLRef url = CFURLCreateWithFileSystemPath (NULL, s, + kCFURLPOSIXPathStyle, 0); + CGImageSourceRef cgimg = CGImageSourceCreateWithURL (url, NULL); + if (! cgimg) return -1; + + NSDictionary *props = (NSDictionary *) + CGImageSourceCopyPropertiesAtIndex (cgimg, 0, NULL); + int rot = [[props objectForKey:@"Orientation"] intValue]; + CFRelease (cgimg); + CFRelease (url); + CFRelease (s); + return rot; +} + + /* Loads an image file and splats it onto the drawable. The image is drawn as large as possible while preserving its aspect ratio. If geom_ret is provided, the actual rectangle the rendered image takes @@ -222,7 +249,8 @@ osx_load_image_file (Screen *screen, Window xwindow, Drawable drawable, if (!img) return False; - jwxyz_draw_NSImage (DisplayOfScreen (screen), drawable, img, geom_ret); + jwxyz_draw_NSImage (DisplayOfScreen (screen), drawable, img, geom_ret, + exif_rotation (filename)); [img release]; return True; } diff --git a/OSX/update-info-plist.pl b/OSX/update-info-plist.pl index aac1f48c..069d0c3b 100755 --- a/OSX/update-info-plist.pl +++ b/OSX/update-info-plist.pl @@ -23,7 +23,7 @@ require 5; use strict; my $progname = $0; $progname =~ s@.*/@@g; -my $version = q{ $Revision: 1.9 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/; +my $version = q{ $Revision: 1.10 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/; my $verbose = 1; @@ -75,14 +75,15 @@ sub update_saver_xml($$) { $desc =~ s/^.* version \d[^\n]*\n//s; $desc =~ s/^From the XScreenSaver.*\n//m; $desc =~ s@^http://www\.jwz\.org/xscreensaver.*\n@@m; - $desc =~ s/^Copyright [^ \r\n\t]+ (\d{4})(-\d{4})? (.*)\.$/Written $3; $1./m; + $desc =~ + s/\nCopyright [^ \r\n\t]+ (\d{4})(-\d{4})? (.*)\.$/\nWritten $3; $1./s; $desc =~ s/^\n+//s; error ("$filename: description contains bad characters") if ($desc =~ m/([^\t\n -~]|[<>])/); error ("$filename: can't extract authors") - unless ($desc =~ m@^(.*)\nWritten by[ \t]+([^\n]+)$@s); + unless ($desc =~ m@^(.*)\nWritten by[ \t]+(.+)$@s); $desc = $1; my $authors = $2; $desc =~ s/\s*$//s; @@ -93,6 +94,7 @@ sub update_saver_xml($$) { $year = $2; } + error ("$filename: can't extract year") unless $year; my $cyear = 1900 + ((localtime())[5]); $year = "$cyear" unless $year; if ($year && ! ($year =~ m/$cyear/)) { diff --git a/README b/README index f0bc5f86..98179791 100644 --- a/README +++ b/README @@ -38,9 +38,32 @@ XScreenSaver has an extensive manual -- please read it! =============================================================================== +Changes since 5.07: * New hack, `photopile'. + * Rewrote `sonar' and `jigsaw' as OpenGL programs. + * Minor tweaks to `maze', `m6502', `hypnowheel', and + `timetunnel'. + * Savers that load images now obey EXIF rotation tags. + * Arrgh, more RANDR noise! Fixes this time for rotated + screens, and for systems where RANDR lies and says the + screen size is 0x0. + * When the password dialog has timed out or been + cancelled, don't pop it right back up a second time. + * Password timeouts/cancels don't count as + "failed logins". + * Retired some of the older, less interesting savers: + say goodbye to `bubbles', `critical', `flag', `forest', + `glforestfire', `lmorph', `laser', `lightning', `lisa', + `lissie', `rotor', `sphere', `spiral', `t3d', `vines', + `whirlygig', and `worm'. + * Merged `munch' and `mismunch'. + * Updated `webcollage' to use twitpics.com as well. Changes since 5.06: * Xinerama/RANDR tweaks for old-style multi-screen. - * Fixed the bouncing ball in `stairs'. + * Added bumpy skin and cel shading to `skytentacles'. * `flipflop' can load images onto the tiles. + * Fixed the bouncing ball in `stairs'. + * Added the missing Utah Teapotahedron to `polyhedra'. + * `blitspin' works with color images on OSX now. + * Added transparency to `stonerview'. * Improved layout of the preferences dialogs: they should all now be usable even on ridiculously tiny laptop screens. @@ -51,10 +74,6 @@ Changes since 5.06: * Xinerama/RANDR tweaks for old-style multi-screen. saver descriptions. * All hacks support the `-fps' option, not just GL ones. * The `-fps' option now shows CPU load. - * Added bumpy skin and cel shading to `skytentacles'. - * Added the missing Utah Teapotahedron to `polyhedra'. - * `blitspin' works with color images on OSX now. - * Added transparency to `stonerview'. Changes since 5.05: * Xinerama/RANDR fixes: this time for sure. It should now work to add/remove monitors or resize screens at any time. diff --git a/config.h.in b/config.h.in index 21b68cd4..4ea77aa3 100644 --- a/config.h.in +++ b/config.h.in @@ -96,6 +96,10 @@ can make use of this if it is available. */ #undef HAVE_GDK_PIXBUF +/* Define this if you have the gdk_pixbuf_apply_embedded_orientation function + (gdk-pixbuf 2.12). */ +#undef HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION + /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD diff --git a/configure b/configure index 4e352b60..fe4156a9 100755 --- a/configure +++ b/configure @@ -759,6 +759,7 @@ LOCK_SRCS LOCK_OBJS JPEG_EXES GL_EXES +SUID_EXES GL_UTIL_EXES GL_MEN GL_KLUDGE @@ -2059,6 +2060,9 @@ echo "command line was: $0 $@" + + + @@ -7921,7 +7925,7 @@ _ACEOF -ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl no pl pt pt_BR ru sk sv vi wa zh_CN zh_TW" +ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 @@ -16761,7 +16765,7 @@ if test "${ac_cv_mesagl_version_string+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat > conftest.$ac_ext < #ifndef MESA_MAJOR_VERSION @@ -18269,6 +18273,100 @@ _ACEOF { echo "$as_me:$LINENO: result: checking for gdk_pixbuf usability... no" >&5 echo "${ECHO_T}checking for gdk_pixbuf usability... no" >&6; } fi + + if test "$have_gdk_pixbuf" = yes; then + + ac_save_CPPFLAGS="$CPPFLAGS" + ac_save_LDFLAGS="$LDFLAGS" +# ac_save_LIBS="$LIBS" + + if test \! -z "$includedir" ; then + CPPFLAGS="$CPPFLAGS -I$includedir" + fi + # note: $X_CFLAGS includes $x_includes + CPPFLAGS="$CPPFLAGS $X_CFLAGS" + + if test \! -z "$libdir" ; then + LDFLAGS="$LDFLAGS -L$libdir" + fi + # note: $X_LIBS includes $x_libraries + LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" + + CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` + LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` + { echo "$as_me:$LINENO: checking for gdk_pixbuf_apply_embedded_orientation in -lc" >&5 +echo $ECHO_N "checking for gdk_pixbuf_apply_embedded_orientation in -lc... $ECHO_C" >&6; } +if test "${ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gdk_pixbuf_apply_embedded_orientation (); +int +main () +{ +return gdk_pixbuf_apply_embedded_orientation (); + ; + return 0; +} +_ACEOF +rm -rf conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -rf conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&5 +echo "${ECHO_T}$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&6; } +if test $ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION 1 +_ACEOF + +fi + + CPPFLAGS="$ac_save_CPPFLAGS" + LDFLAGS="$ac_save_LDFLAGS" +# LIBS="$ac_save_LIBS" + + fi fi @@ -20216,6 +20314,8 @@ fi tab=' ' if test "$have_gl" = yes; then GL_EXES='$(GL_EXES)' + SUID_EXES='$(SUID_EXES)' + RETIRED_GL_EXES='$(RETIRED_EXES)' GL_UTIL_EXES='$(GL_UTIL_EXES)' GL_MEN='$(GL_MEN)' GL_KLUDGE=" " @@ -20357,6 +20457,7 @@ INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'` + APPDEFAULTS=$ac_x_app_defaults @@ -21198,6 +21299,7 @@ LOCK_SRCS!$LOCK_SRCS$ac_delim LOCK_OBJS!$LOCK_OBJS$ac_delim JPEG_EXES!$JPEG_EXES$ac_delim GL_EXES!$GL_EXES$ac_delim +SUID_EXES!$SUID_EXES$ac_delim GL_UTIL_EXES!$GL_UTIL_EXES$ac_delim GL_MEN!$GL_MEN$ac_delim GL_KLUDGE!$GL_KLUDGE$ac_delim @@ -21220,7 +21322,7 @@ LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 69; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 70; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/configure.in b/configure.in index c486f2a1..25c5d29c 100644 --- a/configure.in +++ b/configure.in @@ -145,6 +145,10 @@ AH_TEMPLATE([HAVE_GDK_PIXBUF], [Define this if you have the GDK_Pixbuf library installed. Some of the demos can make use of this if it is available.]) +AH_TEMPLATE([HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION], + [Define this if you have the gdk_pixbuf_apply_embedded_orientation + function (gdk-pixbuf 2.12).]) + AH_TEMPLATE([HAVE_JPEGLIB], [Define this if you have the Independent JPEG Group's JPEG library installed. Some of the demos can make use of this if it @@ -1181,7 +1185,7 @@ AC_DEFINE_UNQUOTED(PACKAGE, "$GETTEXT_PACKAGE", generated code.]) AC_SUBST(GETTEXT_PACKAGE) -ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl no pl pt pt_BR ru sk sv vi wa zh_CN zh_TW" +ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW" AM_GLIB_GNU_GETTEXT MKINSTALLDIRS="$INSTALL_DIRS" @@ -3087,6 +3091,12 @@ if test "$with_gdk_pixbuf" = yes; then else AC_MSG_RESULT(checking for gdk_pixbuf usability... no) fi + + if test "$have_gdk_pixbuf" = yes; then + AC_CHECK_X_LIB(c, gdk_pixbuf_apply_embedded_orientation, + [AC_DEFINE(HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION)],, + $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm) + fi fi @@ -3590,6 +3600,8 @@ fi tab=' ' if test "$have_gl" = yes; then GL_EXES='$(GL_EXES)' + SUID_EXES='$(SUID_EXES)' + RETIRED_GL_EXES='$(RETIRED_EXES)' GL_UTIL_EXES='$(GL_UTIL_EXES)' GL_MEN='$(GL_MEN)' GL_KLUDGE=" " @@ -3716,6 +3728,7 @@ AC_SUBST(LOCK_SRCS) AC_SUBST(LOCK_OBJS) AC_SUBST(JPEG_EXES) AC_SUBST(GL_EXES) +AC_SUBST(SUID_EXES) AC_SUBST(GL_UTIL_EXES) AC_SUBST(GL_MEN) AC_SUBST(GL_KLUDGE) diff --git a/driver/XScreenSaver.ad.in b/driver/XScreenSaver.ad.in index 43bb50f8..af651d73 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.07 -! 10-Aug-2008 +! version 5.08 +! 27-Dec-2008 ! ! See "man xscreensaver" for more info. The latest version is always ! available at http://www.jwz.org/xscreensaver/ @@ -61,6 +61,7 @@ *textFile: @DEFAULT_TEXT_FILE@ *textProgram: fortune *textURL: http://www.livejournal.com/stats/latest-rss.bml +!*textURL: http://twitter.com/statuses/public_timeline.atom *overlayTextForeground: #FFFF00 *overlayTextBackground: #000000 @@ -150,47 +151,38 @@ GetViewPortIsFullOfLies: False ! screen savers interactively. ! *programs: \ -- sphere -root \n\ + maze -root \n\ @GL_KLUDGE@ GL: superquadrics -root \n\ -- worm -root \n\ attraction -root \n\ blitspin -root \n\ greynetic -root \n\ helix -root \n\ hopalong -root \n\ - hypercube -root \n\ +- hypercube -root \n\ imsmap -root \n\ - maze -root \n\ - noseguy -root \n\ - pyro -root \n\ +- noseguy -root \n\ +- pyro -root \n\ qix -root \n\ - rocks -root \n\ +- rocks -root \n\ rorschach -root \n\ decayscreen -root \n\ flame -root \n\ halo -root \n\ slidescreen -root \n\ -- lmorph -root \n\ pedal -root \n\ - bubbles -root \n\ bouboule -root \n\ - braid -root \n\ +- braid -root \n\ coral -root \n\ deco -root \n\ drift -root \n\ - fadeplot -root \n\ - flag -root \n\ - forest -root \n\ +- fadeplot -root \n\ galaxy -root \n\ goop -root \n\ grav -root \n\ ifs -root \n\ +@GL_KLUDGE@ GL: jigsaw -root \n\ julia -root \n\ - kaleidescope -root \n\ -- laser -root \n\ -- lightning -root \n\ -- lisa -root \n\ -- lissie -root \n\ +- kaleidescope -root \n\ @GL_KLUDGE@ GL: moebius -root \n\ moire -root \n\ @GL_KLUDGE@ GL: morph3d -root \n\ @@ -199,36 +191,32 @@ GetViewPortIsFullOfLies: False penrose -root \n\ @GL_KLUDGE@ GL: pipes -root \n\ rd-bomb -root \n\ -- rotor -root \n\ @GL_KLUDGE@ GL: rubik -root \n\ - sierpinski -root \n\ slip -root \n\ -- spiral -root \n\ @GL_KLUDGE@ GL: sproingies -root \n\ starfish -root \n\ strange -root \n\ swirl -root \n\ triangle -root \n\ -- vines -root \n\ xjack -root \n\ xlyap -root \n\ @GL_KLUDGE@ GL: atlantis -root \n\ bsod -root \n\ @GL_KLUDGE@ GL: bubble3d -root \n\ @GL_KLUDGE@ GL: cage -root \n\ - crystal -root \n\ +- crystal -root \n\ cynosure -root \n\ discrete -root \n\ distort -root \n\ epicycle -root \n\ flow -root \n\ -@GL_KLUDGE@ GL: glplanet -root \n\ +- GL: glplanet -root \n\ interference -root \n\ - jigsaw -root \n\ kumppa -root \n\ @GL_KLUDGE@ GL: lament -root \n\ moire2 -root \n\ - sonar -root \n\ +@GL_KLUDGE@ GL: sonar -root \n\ @GL_KLUDGE@ GL: stairs -root \n\ truchet -root \n\ - vidwhacker -root \n\ @@ -236,7 +224,6 @@ GetViewPortIsFullOfLies: False bumps -root \n\ ccurve -root \n\ compass -root \n\ -- critical -root \n\ deluxe -root \n\ - demon -root \n\ @GLE_KLUDGE@ GL: extrusion -root \n\ @@ -250,14 +237,13 @@ GetViewPortIsFullOfLies: False @GL_KLUDGE@ GL: sierpinski3d -root \n\ spotlight -root \n\ squiral -root \n\ - t3d -root \n\ wander -root \n\ - webcollage -root \n\ xflame -root \n\ xmatrix -root \n\ @GL_KLUDGE@ GL: gflux -root \n\ - hyperball -root \n\ - nerverot -root \n\ +- nerverot -root \n\ xrayswarm -root \n\ xspirograph -root \n\ @GL_KLUDGE@ GL: circuit -root \n\ @@ -274,7 +260,6 @@ GetViewPortIsFullOfLies: False @GL_KLUDGE@ GL: stonerview -root \n\ vermiculate -root \n\ whirlwindwarp -root \n\ - whirlygig -root \n\ zoom -root \n\ anemone -root \n\ apollonian -root \n\ @@ -285,18 +270,17 @@ GetViewPortIsFullOfLies: False fluidballs -root \n\ @GL_KLUDGE@ GL: flurry -root \n\ - GL: glblur -root \n\ -- GL: glforestfire -root \n\ @GL_KLUDGE@ GL: glsnake -root \n\ halftone -root \n\ - juggle -root \n\ @GL_KLUDGE@ GL: lavalite -root \n\ - polyominoes -root \n\ +- polyominoes -root \n\ @GL_KLUDGE@ GL: queens -root \n\ - GL: sballs -root \n\ @GL_KLUDGE@ GL: spheremonics -root \n\ - thornbird -root \n\ twang -root \n\ -@GL_KLUDGE@ GL: antspotlight -root \n\ +- GL: antspotlight -root \n\ apple2 -root \n\ @GL_KLUDGE@ GL: atunnel -root \n\ barcode -root \n\ @@ -314,7 +298,7 @@ GetViewPortIsFullOfLies: False @GL_KLUDGE@ GL: glmatrix -root \n\ - GL: glslideshow -root \n\ @GL_KLUDGE@ GL: hypertorus -root \n\ -@GL_KLUDGE@ GL: jigglypuff -root \n\ +- GL: jigglypuff -root \n\ @GL_KLUDGE@ GL: klein -root \n\ metaballs -root \n\ @GL_KLUDGE@ GL: mirrorblob -root \n\ @@ -331,18 +315,17 @@ GetViewPortIsFullOfLies: False interaggregate -root \n\ intermomentary -root \n\ memscroller -root \n\ - mismunch -root \n\ @GL_KLUDGE@ GL: noof -root \n\ pacman -root \n\ @GL_KLUDGE@ GL: pinion -root \n\ @GL_KLUDGE@ GL: polyhedra -root \n\ -@GL_KLUDGE@ GL: providence -root \n\ +- GL: providence -root \n\ substrate -root \n\ wormhole -root \n\ - GL: antmaze -root \n\ @GL_KLUDGE@ GL: boing -root \n\ boxfit -root \n\ -- GL: carousel -root \n\ +@GL_KLUDGE@ GL: carousel -root \n\ celtic -root \n\ @GL_KLUDGE@ GL: crackberg -root \n\ @GL_KLUDGE@ GL: cube21 -root \n\ @@ -364,6 +347,7 @@ GetViewPortIsFullOfLies: False @GL_KLUDGE@ GL: voronoi -root \n\ @GL_KLUDGE@ GL: hypnowheel -root \n\ - lcdscrub -root \n\ +@GL_KLUDGE@ GL: photopile -root \n\ @GL_KLUDGE@ GL: skytentacles -root \n diff --git a/driver/XScreenSaver_ad.h b/driver/XScreenSaver_ad.h index 833a26a2..8255fa0e 100644 --- a/driver/XScreenSaver_ad.h +++ b/driver/XScreenSaver_ad.h @@ -50,47 +50,38 @@ "*dateFormat: %d-%b-%y (%a); %I:%M %p", "*installColormap: True", "*programs: \ -- sphere -root \\n\ + maze -root \\n\ GL: superquadrics -root \\n\ -- worm -root \\n\ attraction -root \\n\ blitspin -root \\n\ greynetic -root \\n\ helix -root \\n\ hopalong -root \\n\ - hypercube -root \\n\ +- hypercube -root \\n\ imsmap -root \\n\ - maze -root \\n\ - noseguy -root \\n\ - pyro -root \\n\ +- noseguy -root \\n\ +- pyro -root \\n\ qix -root \\n\ - rocks -root \\n\ +- rocks -root \\n\ rorschach -root \\n\ decayscreen -root \\n\ flame -root \\n\ halo -root \\n\ slidescreen -root \\n\ -- lmorph -root \\n\ pedal -root \\n\ - bubbles -root \\n\ bouboule -root \\n\ - braid -root \\n\ +- braid -root \\n\ coral -root \\n\ deco -root \\n\ drift -root \\n\ - fadeplot -root \\n\ - flag -root \\n\ - forest -root \\n\ +- fadeplot -root \\n\ galaxy -root \\n\ goop -root \\n\ grav -root \\n\ ifs -root \\n\ + GL: jigsaw -root \\n\ julia -root \\n\ - kaleidescope -root \\n\ -- laser -root \\n\ -- lightning -root \\n\ -- lisa -root \\n\ -- lissie -root \\n\ +- kaleidescope -root \\n\ GL: moebius -root \\n\ moire -root \\n\ GL: morph3d -root \\n\ @@ -99,36 +90,32 @@ penrose -root \\n\ GL: pipes -root \\n\ rd-bomb -root \\n\ -- rotor -root \\n\ GL: rubik -root \\n\ - sierpinski -root \\n\ slip -root \\n\ -- spiral -root \\n\ GL: sproingies -root \\n\ starfish -root \\n\ strange -root \\n\ swirl -root \\n\ triangle -root \\n\ -- vines -root \\n\ xjack -root \\n\ xlyap -root \\n\ GL: atlantis -root \\n\ bsod -root \\n\ GL: bubble3d -root \\n\ GL: cage -root \\n\ - crystal -root \\n\ +- crystal -root \\n\ cynosure -root \\n\ discrete -root \\n\ distort -root \\n\ epicycle -root \\n\ flow -root \\n\ - GL: glplanet -root \\n\ +- GL: glplanet -root \\n\ interference -root \\n\ - jigsaw -root \\n\ kumppa -root \\n\ GL: lament -root \\n\ moire2 -root \\n\ - sonar -root \\n\ + GL: sonar -root \\n\ GL: stairs -root \\n\ truchet -root \\n\ - vidwhacker -root \\n\ @@ -136,7 +123,6 @@ bumps -root \\n\ ccurve -root \\n\ compass -root \\n\ -- critical -root \\n\ deluxe -root \\n\ - demon -root \\n\ - GL: extrusion -root \\n\ @@ -150,14 +136,13 @@ GL: sierpinski3d -root \\n\ spotlight -root \\n\ squiral -root \\n\ - t3d -root \\n\ wander -root \\n\ - webcollage -root \\n\ xflame -root \\n\ xmatrix -root \\n\ GL: gflux -root \\n\ - hyperball -root \\n\ - nerverot -root \\n\ +- nerverot -root \\n\ xrayswarm -root \\n\ xspirograph -root \\n\ GL: circuit -root \\n\ @@ -174,7 +159,6 @@ GL: stonerview -root \\n\ vermiculate -root \\n\ whirlwindwarp -root \\n\ - whirlygig -root \\n\ zoom -root \\n\ anemone -root \\n\ apollonian -root \\n\ @@ -185,18 +169,17 @@ fluidballs -root \\n\ GL: flurry -root \\n\ - GL: glblur -root \\n\ -- GL: glforestfire -root \\n\ GL: glsnake -root \\n\ halftone -root \\n\ - juggle -root \\n\ GL: lavalite -root \\n\ - polyominoes -root \\n\ +- polyominoes -root \\n\ GL: queens -root \\n\ - GL: sballs -root \\n\ GL: spheremonics -root \\n\ - thornbird -root \\n\ twang -root \\n\ - GL: antspotlight -root \\n\ +- GL: antspotlight -root \\n\ apple2 -root \\n\ GL: atunnel -root \\n\ barcode -root \\n\ @@ -214,7 +197,7 @@ GL: glmatrix -root \\n\ - GL: glslideshow -root \\n\ GL: hypertorus -root \\n\ - GL: jigglypuff -root \\n\ +- GL: jigglypuff -root \\n\ GL: klein -root \\n\ metaballs -root \\n\ GL: mirrorblob -root \\n\ @@ -231,18 +214,17 @@ interaggregate -root \\n\ intermomentary -root \\n\ memscroller -root \\n\ - mismunch -root \\n\ GL: noof -root \\n\ pacman -root \\n\ GL: pinion -root \\n\ GL: polyhedra -root \\n\ - GL: providence -root \\n\ +- GL: providence -root \\n\ substrate -root \\n\ wormhole -root \\n\ - GL: antmaze -root \\n\ GL: boing -root \\n\ boxfit -root \\n\ -- GL: carousel -root \\n\ + GL: carousel -root \\n\ celtic -root \\n\ GL: crackberg -root \\n\ GL: cube21 -root \\n\ @@ -264,6 +246,7 @@ GL: voronoi -root \\n\ GL: hypnowheel -root \\n\ - lcdscrub -root \\n\ + GL: photopile -root \\n\ GL: skytentacles -root \\n", "XScreenSaver.pointerPollTime: 0:00:05", "XScreenSaver.pointerHysteresis: 10", diff --git a/driver/lock.c b/driver/lock.c index 159c6a0f..2f3108c1 100644 --- a/driver/lock.c +++ b/driver/lock.c @@ -1912,6 +1912,12 @@ gui_auth_conv(int num_msg, const char *info_msg, *prompt; struct auth_response *responses; + if (si->unlock_state == ul_cancel || + si->unlock_state == ul_time) + /* If we've already cancelled or timed out in this PAM conversation, + don't prompt again even if PAM asks us to! */ + return -1; + if (!(responses = calloc(num_msg, sizeof(struct auth_response)))) goto fail; @@ -2049,7 +2055,7 @@ auth_finished_cb (saver_info *si) event.xany.type == Expose) draw_passwd_window (si); else if (event.xany.type == ButtonPress || - event.xany.type == ButtonRelease) + event.xany.type == KeyPress) break; XSync (si->dpy, False); } diff --git a/driver/passwd.c b/driver/passwd.c index 066bc81f..fd42c552 100644 --- a/driver/passwd.c +++ b/driver/passwd.c @@ -249,6 +249,8 @@ xss_authenticate(saver_info *si, Bool verbose_p) { int i, j; + si->unlock_state = ul_read; + for (i = 0; i < countof(methods); i++) { if (!methods[i].initted_p) @@ -267,6 +269,20 @@ xss_authenticate(saver_info *si, Bool verbose_p) check_for_leaks (methods[i].name); + /* If password authentication failed, but the password was NULL + (meaning the user just hit RET) then treat that as "cancel". + This means that if the password is literally NULL, it will + work; but if not, then NULL passwords are treated as cancel. + */ + if (si->unlock_state == ul_fail && + si->cached_passwd && + !*si->cached_passwd) + { + fprintf (stderr, "%s: assuming null password means cancel.\n", + blurb()); + si->unlock_state = ul_cancel; + } + if (si->unlock_state == ul_success) { /* If we successfully authenticated by method N, but attempting @@ -287,6 +303,18 @@ xss_authenticate(saver_info *si, Bool verbose_p) } goto DONE; /* Successfully authenticated! */ } + else if (si->unlock_state == ul_cancel || + si->unlock_state == ul_time) + { + /* If any auth method gets a cancel or timeout, don't try the + next auth method! We're done! */ + fprintf (stderr, + "%s: authentication via %s %s.\n", + blurb(), methods[i].name, + (si->unlock_state == ul_cancel + ? "cancelled" : "timed out")); + goto DONE; + } } if (verbose_p) diff --git a/driver/screens.c b/driver/screens.c index 6516ade7..689e2698 100644 --- a/driver/screens.c +++ b/driver/screens.c @@ -99,7 +99,7 @@ * monitors, xscreensaver just ignores them (which allows them to * display duplicates or overlaps). * - * 5a) Nvidia fucks it up: + * 5a) Nvidia fucks it up: * * Nvidia drivers as of Aug 2008 running in "TwinView" mode * apparently report correct screen geometry via Xinerama, but @@ -108,6 +108,10 @@ * instead." Which is a seriously lame answer. So, xscreensaver * has to query *both* extensions, and make a guess as to which * is to be believed. + * + * 5b) Also sometimes RANDR says stupid shit like, "You have one + * screen, and it has no available orientations or sizes." + * */ #ifdef HAVE_CONFIG_H @@ -151,6 +155,8 @@ struct _monitor { int x, y, width, height; monitor_sanity sanity; /* I'm not crazy you're the one who's crazy */ int enemy; /* which monitor it overlaps or duplicates */ + char *err; /* msg to print at appropriate later time; + exists only on monitor #0. */ }; static Bool layouts_differ_p (monitor **a, monitor **b); @@ -164,6 +170,7 @@ free_monitors (monitor **monitors) while (*m2) { if ((*m2)->desc) free ((*m2)->desc); + if ((*m2)->err) free ((*m2)->err); free (*m2); m2++; } @@ -171,10 +178,24 @@ free_monitors (monitor **monitors) } +static char * +append (char *s1, const char *s2) +{ + char *s = (char *) malloc ((s1 ? strlen(s1) : 0) + + (s2 ? strlen(s2) : 0) + 3); + *s = 0; + if (s1) strcat (s, s1); + if (s1 && s2) strcat (s, "\n"); + if (s2) strcat (s, s2); + if (s1) free (s1); + return s; +} + + #ifdef HAVE_XINERAMA static monitor ** -xinerama_scan_monitors (Display *dpy) +xinerama_scan_monitors (Display *dpy, char **errP) { Screen *screen = DefaultScreenOfDisplay (dpy); int event, error, nscreens, i; @@ -213,7 +234,7 @@ xinerama_scan_monitors (Display *dpy) #ifdef HAVE_XF86VMODE static monitor ** -vidmode_scan_monitors (Display *dpy) +vidmode_scan_monitors (Display *dpy, char **errP) { int event, error, nscreens, i; monitor **monitors; @@ -312,7 +333,7 @@ vidmode_scan_monitors (Display *dpy) #ifdef HAVE_RANDR static monitor ** -randr_scan_monitors (Display *dpy) +randr_scan_monitors (Display *dpy, char **errP) { int event, error, major, minor, nscreens, i, j; monitor **monitors; @@ -350,6 +371,13 @@ randr_scan_monitors (Display *dpy) # endif /* HAVE_RANDR_12 */ } + if (nscreens <= 0) + { + *errP = append (*errP, + "WARNING: RANDR reported no screens! Ignoring it."); + return 0; + } + monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors)); if (!monitors) return 0; @@ -402,39 +430,37 @@ randr_scan_monitors (Display *dpy) int k; XRRScreenResources *res = XRRGetScreenResources (dpy, RootWindowOfScreen (screen)); - for (k = 0; k < res->noutput; k++) + for (k = 0; k < res->noutput; k++, j++) { monitor *m = (monitor *) calloc (1, sizeof (monitor)); XRROutputInfo *rroi = XRRGetOutputInfo (dpy, res, res->outputs[k]); - RRCrtc crtc = (rroi->crtc ? rroi->crtc : rroi->crtcs[0]); - XRRCrtcInfo *crtci = XRRGetCrtcInfo (dpy, res, crtc); + RRCrtc crtc = (rroi->crtc ? rroi->crtc : + rroi->crtcs ? rroi->crtcs[0] : 0); + XRRCrtcInfo *crtci = (crtc ? XRRGetCrtcInfo(dpy, res, crtc) : 0); monitors[j] = m; m->screen = screen; m->id = (i * 1000) + j; m->desc = (rroi->name ? strdup (rroi->name) : 0); - m->x = crtci->x; - m->y = crtci->y; - if (crtci->rotation & (RR_Rotate_90|RR_Rotate_270)) - { - m->width = crtci->height; - m->height = crtci->width; - } - else + if (crtci) { + /* Note: if the screen is rotated, XRRConfigSizes contains + the unrotated WxH, but XRRCrtcInfo contains rotated HxW. + */ + m->x = crtci->x; + m->y = crtci->y; m->width = crtci->width; m->height = crtci->height; } - j++; - if (rroi->connection == RR_Disconnected) m->sanity = S_DISABLED; /* #### do the same for RR_UnknownConnection? */ - XRRFreeCrtcInfo (crtci); + if (crtci) + XRRFreeCrtcInfo (crtci); XRRFreeOutputInfo (rroi); } XRRFreeScreenResources (res); @@ -442,6 +468,25 @@ randr_scan_monitors (Display *dpy) } } + /* Work around more fucking brain damage. */ + { + int ok = 0; + int i = 0; + while (monitors[i]) + { + if (monitors[i]->width != 0 && monitors[i]->height != 0) + ok++; + i++; + } + if (! ok) + { + *errP = append (*errP, + "WARNING: RANDR says all screens are 0x0! Ignoring it."); + free_monitors (monitors); + monitors = 0; + } + } + return monitors; } @@ -449,7 +494,7 @@ randr_scan_monitors (Display *dpy) static monitor ** -basic_scan_monitors (Display *dpy) +basic_scan_monitors (Display *dpy, char **errP) { int nscreens = ScreenCount (dpy); int i; @@ -492,14 +537,15 @@ basic_scan_monitors (Display *dpy) modifying xscreensaver to try to get this information from RandR. */ static monitor ** -randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors) +randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors, + char **errP) { monitor **xinerama_monitors; if (!randr_monitors) return 0; - xinerama_monitors = xinerama_scan_monitors (dpy); + xinerama_monitors = xinerama_scan_monitors (dpy, errP); if (!xinerama_monitors) return randr_monitors; @@ -511,19 +557,17 @@ randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors) else if ( randr_monitors[0] && !randr_monitors[1] && /* 1 monitor */ xinerama_monitors[0] && xinerama_monitors[1]) /* >1 monitor */ { - fprintf (stderr, - "%s: WARNING: RANDR reports 1 screen but Xinerama\n" - "%s: reports multiple. Believing Xinerama.\n", - blurb(), blurb()); + *errP = append (*errP, + "WARNING: RANDR reports 1 screen but Xinerama\n" + "\t\treports multiple. Believing Xinerama."); free_monitors (randr_monitors); return xinerama_monitors; } else { - fprintf (stderr, - "%s: WARNING: RANDR and Xinerama report different\n" - "%s: screen layouts! Believing RANDR.\n", - blurb(), blurb()); + *errP = append (*errP, + "WARNING: RANDR and Xinerama report different\n" + "\t\tscreen layouts! Believing RANDR."); free_monitors (xinerama_monitors); return randr_monitors; } @@ -540,7 +584,7 @@ randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors) for stress-testing purposes. */ static monitor ** -debug_scan_monitors (Display *dpy) +debug_scan_monitors (Display *dpy, char **errP) { static const char * const geoms[] = { "1600x1028+0+22", @@ -587,7 +631,7 @@ debug_scan_monitors (Display *dpy) #ifdef QUAD_MODE static monitor ** -quadruple (monitor **monitors, Bool debug_p) +quadruple (monitor **monitors, Bool debug_p, char **errP) { int i, j, count = 0; monitor **monitors2; @@ -627,35 +671,38 @@ scan_monitors (saver_info *si) { saver_preferences *p = &si->prefs; monitor **monitors = 0; + char *err = 0; # ifdef DEBUG_MULTISCREEN - if (! monitors) monitors = debug_scan_monitors (si->dpy); + if (! monitors) monitors = debug_scan_monitors (si->dpy, &err); # endif # ifdef HAVE_RANDR if (! p->getviewport_full_of_lies_p) - if (! monitors) monitors = randr_scan_monitors (si->dpy); + if (! monitors) monitors = randr_scan_monitors (si->dpy, &err); # ifdef HAVE_XINERAMA - monitors = randr_versus_xinerama_fight (si->dpy, monitors); + monitors = randr_versus_xinerama_fight (si->dpy, monitors, &err); # endif # endif /* HAVE_RANDR */ # ifdef HAVE_XF86VMODE - if (! monitors) monitors = vidmode_scan_monitors (si->dpy); + if (! monitors) monitors = vidmode_scan_monitors (si->dpy, &err); # endif # ifdef HAVE_XINERAMA - if (! monitors) monitors = xinerama_scan_monitors (si->dpy); + if (! monitors) monitors = xinerama_scan_monitors (si->dpy, &err); # endif - if (! monitors) monitors = basic_scan_monitors (si->dpy); + if (! monitors) monitors = basic_scan_monitors (si->dpy, &err); # ifdef QUAD_MODE if (p->quad_p) - monitors = quadruple (monitors, p->debug_p); + monitors = quadruple (monitors, p->debug_p, &err); # endif + if (monitors && err) monitors[0]->err = err; + return monitors; } @@ -840,6 +887,18 @@ describe_monitor_layout (saver_info *si) count++; } + if (monitors[0]->err) /* deferred error msg */ + { + char *token = strtok (monitors[0]->err, "\n"); + while (token) + { + fprintf (stderr, "%s: %s\n", blurb(), token); + token = strtok (0, "\n"); + } + free (monitors[0]->err); + monitors[0]->err = 0; + } + if (count == 0) fprintf (stderr, "%s: no screens!\n", blurb()); else diff --git a/driver/test-randr.c b/driver/test-randr.c index 0d57895a..74ead37f 100644 --- a/driver/test-randr.c +++ b/driver/test-randr.c @@ -285,7 +285,11 @@ main (int argc, char **argv) } XSync (dpy, False); - fprintf (stderr, "\n%s: awaiting events...\n", progname); + + fprintf (stderr, "\n%s: awaiting events...\n\n" + "\t(If you resize the screen or add/remove monitors, this should\n" + "\tnotice that and print stuff. Otherwise, hit ^C.)\n\n", + progname); while (1) { XEvent event; diff --git a/driver/timers.c b/driver/timers.c index 584a6d0d..9ab7ae6e 100644 --- a/driver/timers.c +++ b/driver/timers.c @@ -612,6 +612,7 @@ swallow_unlock_typeahead_events (saver_info *si, XEvent *e) break; case '\025': case '\030': /* Erase line */ case '\012': case '\015': /* Enter */ + case '\033': /* ESC */ i = 0; break; case '\040': /* Space */ @@ -817,9 +818,12 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) break; case KeyPress: - case KeyRelease: case ButtonPress: - case ButtonRelease: + /* Ignore release events so that hitting ESC at the password dialog + doesn't result in the password dialog coming right back again when + the fucking release key is seen! */ + /* case KeyRelease:*/ + /* case ButtonRelease:*/ case MotionNotify: if (p->debug_p) @@ -1083,8 +1087,6 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) if (until_idle_p && si->cycle_id) /* no cycle timer when inactive */ abort (); - - return; } diff --git a/driver/xscreensaver-getimage.c b/driver/xscreensaver-getimage.c index 68637a7b..856e05a6 100644 --- a/driver/xscreensaver-getimage.c +++ b/driver/xscreensaver-getimage.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2001-2006 by Jamie Zawinski +/* xscreensaver, Copyright (c) 2001-2008 by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -405,6 +405,20 @@ read_file_gdk (Screen *screen, Window window, Drawable drawable, int srcx, srcy, destx, desty, w2, h2; Bool bg_p = False; +# ifdef HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION + { + int ow = w, oh = h; + GdkPixbuf *opb = pb; + pb = gdk_pixbuf_apply_embedded_orientation (opb); + gdk_pixbuf_unref (opb); + w = gdk_pixbuf_get_width (pb); + h = gdk_pixbuf_get_height (pb); + if (verbose_p && (w != ow || h != oh)) + fprintf (stderr, "%s: rotated %dx%d to %dx%d\n", + progname, ow, oh, w, h); + } +# endif + compute_image_scaling (w, h, win_width, win_height, verbose_p, &srcx, &srcy, &destx, &desty, &w2, &h2); if (w != w2 || h != h2) diff --git a/driver/xscreensaver-text b/driver/xscreensaver-text index 2f737251..8eeaf896 100755 --- a/driver/xscreensaver-text +++ b/driver/xscreensaver-text @@ -30,7 +30,7 @@ use Text::Wrap qw(wrap); use bytes; my $progname = $0; $progname =~ s@.*/@@g; -my $version = q{ $Revision: 1.15 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/; +my $version = q{ $Revision: 1.17 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/; my $verbose = 0; my $http_proxy = undef; @@ -74,7 +74,20 @@ my %entity_table = ( "ocirc" => 'ô', "otilde" => 'õ', "ouml" => 'ö', "divide" => '÷', "oslash" => 'ø', "ugrave" => 'ù', "uacute" => 'ú', "ucirc" => 'û', "uuml" => 'ü', "yacute" => 'ý', "thorn" => 'þ', "yuml" => 'ÿ', - "apos" => '\'' + "apos" => '\'', + + # HTML 4 entities that do not have 1:1 Latin1 mappings. + "bull" => "*", "hellip"=> "...", "prime" => "'", "Prime" => "\"", + "frasl" => "/", "trade" => "[tm]", "larr" => "<-", "rarr" => "->", + "harr" => "<->", "lArr" => "<=", "rArr" => "=>", "hArr" => "<=>", + "empty" => "Ø", "minus" => "-", "lowast"=> "*", "sim" => "~", + "cong" => "=~", "asymp" => "~", "ne" => "!=", "equiv" => "==", + "le" => "<=", "ge" => ">=", "lang" => "<", "rang" => ">", + "loz" => "<>", "OElig" => "OE", "oelig" => "oe", "Yuml" => "Y", + "circ" => "^", "tilde" => "~", "ensp" => " ", "emsp" => " ", + "thinsp"=> " ", "ndash" => "-", "mdash" => "-", "lsquo" => "`", + "rsquo" => "'", "sbquo" => "'", "ldquo" => "\"", "rdquo" => "\"", + "bdquo" => "\"", "lsaquo"=> "<", "rsaquo"=> ">", ); # Maps certain UTF8 characters (2 or 3 bytes) to the corresponding @@ -631,6 +644,8 @@ sub reformat_html($$) { s/[ \t]+$//gm; # lose whitespace at end of line again } + s/^\n+//gs; + y/A-Za-z/N-ZA-Mn-za-m/ if ($nyarlathotep_p); print STDOUT $_; } @@ -695,6 +710,8 @@ sub reformat_rss($) { $title = rss_field_to_html ($title || ''); $body1 = rss_field_to_html ($body1 || ''); + $title = '' if ($body1 eq $title); # Identical in Twitter's atom feed. + reformat_html ("$title

$body1", 1); print "\n"; } diff --git a/driver/xscreensaver-text.man b/driver/xscreensaver-text.man index 7c189425..caa7bd7f 100644 --- a/driver/xscreensaver-text.man +++ b/driver/xscreensaver-text.man @@ -65,7 +65,11 @@ URLs should be cached, use "If-Modified-Since", and obey "Expires". .BR fontglide (MANSUFFIX), .BR dadadodo (1), .BR webcollage (MANSUFFIX), +.RS 0 .I http://www.livejournal.com/stats/latest-rss.bml, +.RS 0 +.I http://twitter.com/statuses/public_timeline.atom, +.RS 0 .BR driftnet (1), .BR EtherPEG , .BR EtherPeek diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c index 1ac1d68c..c092777c 100644 --- a/driver/xscreensaver.c +++ b/driver/xscreensaver.c @@ -574,6 +574,9 @@ lock_initialization (saver_info *si, int *argc, char **argv) } } + if (si->prefs.debug_p) /* But allow locking anyway in debug mode. */ + si->locking_disabled_p = False; + #endif /* NO_LOCKING */ } @@ -2124,6 +2127,10 @@ analyze_display (saver_info *si) # endif }, { "DRI", "DRI", True, 0 + }, { "NV-CONTROL", "NVidia", + True, 0 + }, { "NV-GLX", "NVidia GLX", + True, 0 }, { "Apple-DRI", "Apple-DRI (XDarwin)", True, 0 }, diff --git a/driver/xscreensaver.man b/driver/xscreensaver.man index d285f799..dfb21d67 100644 --- a/driver/xscreensaver.man +++ b/driver/xscreensaver.man @@ -237,15 +237,15 @@ called \fIxscreensaver.desktop\fP that contains the following five lines: .EX [Desktop Entry] Exec=xscreensaver -Name=XScreensaver +Name=XScreenSaver Type=Application X-KDE-StartupNotify=false .EE .TP 3 \fB4: Make the various "lock session" buttons call xscreensaver.\fP -Replace the file \fI/usr/bin/kdesktop_lock\fP (or -possibly \fI/usr/kde/3.5/bin/kdesktop_lock\fP) -with these two lines: +Replace the file \fIkdesktop_lock\fP or \fIkrunner_lock\fP +in \fI/usr/bin/\fP (or possibly \fI/usr/kde/3.5/bin/\fP +or \fI/usr/lib/kde4/libexec/\fP) with these two lines: .EX #!/bin/sh xscreensaver-command -lock diff --git a/hacks/.gdbinit b/hacks/.gdbinit index 78a72360..56491789 100644 --- a/hacks/.gdbinit +++ b/hacks/.gdbinit @@ -1,4 +1,12 @@ -set args -geom =600x480+0+0 -sync +set args -geom =800x600+0+0 -sync +set env MallocScribble 1 +set env MallocPreScribble 1 +set env MallocErrorAbort 1 +set env MallocCheckHeapAbort 1 +set env MallocGuardEdges 1 +#set env MallocCheckHeapStart 130000 +#set env MallocCheckHeapEach 1 b screenhack_ehandler +b malloc_error_break b exit b abort diff --git a/hacks/Makefile.in b/hacks/Makefile.in index 6c3954a1..148a7624 100644 --- a/hacks/Makefile.in +++ b/hacks/Makefile.in @@ -37,10 +37,8 @@ DEPEND_DEFINES = @DEPEND_DEFINES@ SHELL = /bin/sh INSTALL = @INSTALL@ -SUID_FLAGS = -o root -m 4755 INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_SETUID = @INSTALL_SETUID@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DIRS = @INSTALL_DIRS@ @@ -94,10 +92,10 @@ SRCS = attraction.c blitspin.c bouboule.c braid.c bubbles.c \ slip.c sphere.c spiral.c strange.c swirl.c xlockmore.c \ fps.c goop.c starfish.c munch.c fadeplot.c \ rd-bomb.c coral.c mountain.c triangle.c lissie.c worm.c \ - rotor.c ant.c xjack.c xlyap.c jigsaw.c xscreensaver-sgigl.c \ + rotor.c ant.c xjack.c xlyap.c xscreensaver-sgigl.c \ cynosure.c moire2.c flow.c epicycle.c interference.c \ truchet.c bsod.c crystal.c discrete.c distort.c kumppa.c \ - sonar.c demon.c loop.c t3d.c penetrate.c deluxe.c compass.c \ + demon.c loop.c t3d.c penetrate.c deluxe.c compass.c \ squiral.c xflame.c wander.c spotlight.c critical.c \ phosphor.c xmatrix.c petri.c shadebobs.c xsublim.c ccurve.c \ blaster.c bumps.c ripples.c xspirograph.c \ @@ -108,7 +106,7 @@ SRCS = attraction.c blitspin.c bouboule.c braid.c bubbles.c \ anemone.c halftone.c metaballs.c eruption.c popsquares.c \ barcode.c piecewise.c cloudlife.c fontglide.c apple2.c \ apple2-main.c analogtv.c xanalogtv.c pong.c wormhole.c \ - mismunch.c pacman.c pacman_ai.c pacman_level.c \ + pacman.c pacman_ai.c pacman_level.c \ fuzzyflakes.c anemotaxis.c memscroller.c substrate.c \ intermomentary.c fireworkx.c fireworkx_mmx.S fiberlamp.c \ boxfit.c interaggregate.c celtic.c cwaves.c m6502.c \ @@ -133,10 +131,10 @@ OBJS = attraction.o blitspin.o bouboule.o braid.o bubbles.o \ slip.o sphere.o spiral.o strange.o swirl.o xlockmore.o \ fps.o goop.o starfish.o munch.o fadeplot.o \ rd-bomb.o coral.o mountain.o triangle.o lissie.o worm.o \ - rotor.o ant.o xjack.o xlyap.o jigsaw.o xscreensaver-sgigl.o \ + rotor.o ant.o xjack.o xlyap.o xscreensaver-sgigl.o \ cynosure.o moire2.o flow.o epicycle.o interference.o \ truchet.o bsod.o crystal.o discrete.o distort.o kumppa.o \ - sonar.o demon.o loop.o t3d.o penetrate.o deluxe.o compass.o \ + demon.o loop.o t3d.o penetrate.o deluxe.o compass.o \ squiral.o xflame.o wander.o spotlight.o critical.o \ phosphor.o xmatrix.o petri.o shadebobs.o xsublim.o ccurve.o \ blaster.o bumps.o ripples.o xspirograph.o \ @@ -147,37 +145,39 @@ OBJS = attraction.o blitspin.o bouboule.o braid.o bubbles.o \ anemone.o halftone.o metaballs.o eruption.o popsquares.o \ barcode.o piecewise.o cloudlife.o fontglide.o apple2.o \ apple2-main.o analogtv.o xanalogtv.o pong.o wormhole.o \ - mismunch.o pacman.o pacman_ai.o pacman_level.o \ + pacman.o pacman_ai.o pacman_level.o \ fuzzyflakes.o anemotaxis.o memscroller.o substrate.o \ intermomentary.o fireworkx.o fiberlamp.o boxfit.o \ interaggregate.o celtic.o cwaves.o webcollage-cocoa.o \ - webcollage-helper-cocoa.o m6502.0 asm6502.o abstractile.o \ + webcollage-helper-cocoa.o m6502.o asm6502.o abstractile.o \ lcdscrub.o -NEXES = attraction blitspin bouboule braid bubbles decayscreen deco \ - drift flag flame forest vines galaxy grav greynetic halo \ +EXES = attraction blitspin bouboule braid decayscreen deco \ + drift flame galaxy grav greynetic halo \ helix hopalong hypercube ifs imsmap julia kaleidescope \ - laser lightning lisa lmorph maze moire noseguy pedal \ + maze moire noseguy pedal \ penrose pyro qix rocks rorschach sierpinski slidescreen \ - slip sphere spiral strange swirl goop starfish munch \ - fadeplot rd-bomb coral mountain triangle lissie worm rotor \ - xjack xlyap jigsaw cynosure moire2 flow epicycle \ + slip strange swirl goop starfish munch \ + fadeplot rd-bomb coral mountain triangle \ + xjack xlyap cynosure moire2 flow epicycle \ interference truchet bsod crystal discrete distort kumppa \ - demon loop t3d penetrate deluxe compass squiral xflame \ - wander spotlight critical phosphor xmatrix petri shadebobs \ + demon loop penetrate deluxe compass squiral xflame \ + wander spotlight phosphor xmatrix petri shadebobs \ ccurve blaster bumps ripples xspirograph \ nerverot xrayswarm hyperball zoom whirlwindwarp rotzoomer \ - whirlygig speedmine vermiculate twang apollonian euler2d \ + speedmine vermiculate twang apollonian euler2d \ juggle polyominoes thornbird fluidballs anemone halftone \ metaballs eruption popsquares barcode piecewise cloudlife \ - fontglide apple2 xanalogtv pong wormhole mismunch \ + fontglide apple2 xanalogtv pong wormhole \ pacman fuzzyflakes anemotaxis memscroller substrate \ intermomentary fireworkx fiberlamp boxfit interaggregate \ celtic cwaves m6502 abstractile lcdscrub \ @JPEG_EXES@ -SEXES = sonar JPEG_EXES = webcollage-helper -EXES = $(NEXES) $(SEXES) + +RETIRED_EXES = ant bubbles critical flag forest laser lightning lisa \ + lissie lmorph rotor sphere spiral t3d vines whirlygig \ + worm xsublim HACK_OBJS_1 = fps.o $(UTILS_BIN)/resources.o $(UTILS_BIN)/visual.o \ $(UTILS_BIN)/usleep.o $(UTILS_BIN)/yarandom.o @XMU_OBJS@ @@ -194,36 +194,42 @@ HDRS = screenhack.h screenhackI.h fps.h fpsI.h xlockmore.h \ asm6502.h MEN = anemone.man apollonian.man attraction.man \ blaster.man blitspin.man bouboule.man braid.man bsod.man \ - bubbles.man bumps.man ccurve.man compass.man coral.man \ - critical.man crystal.man cynosure.man decayscreen.man \ + bumps.man ccurve.man compass.man coral.man \ + crystal.man cynosure.man decayscreen.man \ deco.man deluxe.man demon.man discrete.man distort.man \ - drift.man epicycle.man euler2d.man fadeplot.man flag.man \ - flame.man flow.man fluidballs.man forest.man galaxy.man \ + drift.man epicycle.man euler2d.man fadeplot.man \ + flame.man flow.man fluidballs.man galaxy.man \ goop.man grav.man greynetic.man halo.man helix.man \ hopalong.man hyperball.man hypercube.man ifs.man imsmap.man \ - interference.man jigsaw.man juggle.man julia.man \ - kaleidescope.man kumppa.man laser.man lightning.man \ - lisa.man lissie.man lmorph.man loop.man maze.man moire.man \ + interference.man juggle.man julia.man \ + kaleidescope.man kumppa.man \ + loop.man maze.man moire.man \ moire2.man mountain.man munch.man nerverot.man noseguy.man \ pedal.man penetrate.man penrose.man petri.man phosphor.man \ polyominoes.man pyro.man qix.man rd-bomb.man ripples.man \ - rocks.man rorschach.man rotor.man rotzoomer.man \ + rocks.man rorschach.man rotzoomer.man \ shadebobs.man sierpinski.man slidescreen.man slip.man \ - sonar.man speedmine.man sphere.man spiral.man \ + speedmine.man \ spotlight.man squiral.man starfish.man strange.man \ - swirl.man t3d.man thornbird.man triangle.man truchet.man \ - twang.man vermiculate.man vidwhacker.man vines.man \ - wander.man webcollage.man whirlwindwarp.man whirlygig.man \ - worm.man xflame.man xjack.man xlyap.man xmatrix.man \ - xrayswarm.man xspirograph.man xsublim.man \ + swirl.man thornbird.man triangle.man truchet.man \ + twang.man vermiculate.man vidwhacker.man \ + wander.man webcollage.man whirlwindwarp.man \ + xflame.man xjack.man xlyap.man xmatrix.man \ + xrayswarm.man xspirograph.man \ zoom.man halftone.man eruption.man metaballs.man \ barcode.man piecewise.man cloudlife.man ljlatest.man \ fontglide.man apple2.man xanalogtv.man pong.man \ - wormhole.man mismunch.man pacman.man fuzzyflakes.man \ + wormhole.man pacman.man fuzzyflakes.man \ anemotaxis.man memscroller.man substrate.man \ intermomentary.man fireworkx.man fiberlamp.man boxfit.man \ interaggregate.man celtic.man cwaves.man abstractile.man \ lcdscrub.man + +RETIRED_MEN = ant.man bubbles.man critical.man flag.man forest.man \ + laser.man lightning.man lisa.man lissie.man lmorph.man \ + rotor.man sphere.man spiral.man t3d.man vines.man \ + whirlygig.man worm.man xsublim.man + STAR = * EXTRAS = README Makefile.in xml2man.pl m6502.sh .gdbinit \ euler2d.tex check-configs.pl munge-ad.pl \ @@ -248,7 +254,7 @@ TARFILES = $(SRCS) $(HDRS) $(SCRIPTS) $(MEN) $(EXTRAS) $(VMSFILES) default: all -all: $(EXES) +all: $(EXES) $(RETIRED_EXES) install: install-program install-scripts install-xml install-man uninstall: uninstall-program uninstall-xml uninstall-man @@ -262,36 +268,12 @@ install-program:: $(EXES) @if [ ! -d $(install_prefix)$(HACKDIR) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(HACKDIR) ; \ fi ; \ - for program in $(NEXES); do \ + for program in $(EXES); do \ echo $(INSTALL_PROGRAM) $$program \ $(install_prefix)$(HACKDIR)/$$program ; \ $(INSTALL_PROGRAM) $$program \ $(install_prefix)$(HACKDIR)/$$program ; \ done ; \ - if [ @SETUID_HACKS@ = yes ]; then \ - sinst="$(INSTALL_SETUID)" ; \ - else \ - sinst="$(INSTALL_PROGRAM)" ; \ - fi ; \ - for program in $(SEXES); do \ - instargs="$$program $(install_prefix)$(HACKDIR)/$$program" ; \ - echo $$sinst $$instargs ; \ - if $$sinst $$instargs ; then \ - true ; \ - elif [ @SETUID_HACKS@ = yes ]; then \ - echo $(INSTALL_PROGRAM) $$instargs ; \ - if $(INSTALL_PROGRAM) $$instargs ; then \ - echo "" ; \ - echo "WARNING: unable to install $$program setuid:" \ - "installed non-setuid instead." ; \ - echo "" ; \ - else \ - exit 1 ; \ - fi ; \ - else \ - exit 1 ; \ - fi ; \ - done install-scripts: $(SCRIPTS) munge-scripts @for program in $(SCRIPTS); do \ @@ -658,9 +640,6 @@ xjack: xjack.o $(HACK_OBJS) xlyap: xlyap.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) -jigsaw: jigsaw.o $(HACK_OBJS) $(SPL) $(GRAB) - $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(SPL) $(GRAB) $(HACK_LIBS) - cynosure: cynosure.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) @@ -688,9 +667,6 @@ distort: distort.o $(HACK_OBJS) $(GRAB) $(SHM) kumppa: kumppa.o $(HACK_OBJS) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(HACK_LIBS) -sonar: sonar.o $(HACK_OBJS) $(COL) - $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) - t3d: t3d.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) @@ -811,9 +787,6 @@ pong: pong.o $(HACK_OBJS) $(ATV) $(GRAB) $(XPM) wormhole: wormhole.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) -mismunch: mismunch.o $(HACK_OBJS) $(COL) $(SPL) - $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SPL) $(HACK_LIBS) - fuzzyflakes: fuzzyflakes.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) @@ -1818,18 +1791,6 @@ intermomentary.o: $(UTILS_SRC)/resources.h intermomentary.o: $(UTILS_SRC)/usleep.h intermomentary.o: $(UTILS_SRC)/visual.h intermomentary.o: $(UTILS_SRC)/yarandom.h -jigsaw.o: ../config.h -jigsaw.o: $(srcdir)/fps.h -jigsaw.o: $(srcdir)/screenhackI.h -jigsaw.o: $(srcdir)/screenhack.h -jigsaw.o: $(UTILS_SRC)/colors.h -jigsaw.o: $(UTILS_SRC)/grabscreen.h -jigsaw.o: $(UTILS_SRC)/hsv.h -jigsaw.o: $(UTILS_SRC)/resources.h -jigsaw.o: $(UTILS_SRC)/spline.h -jigsaw.o: $(UTILS_SRC)/usleep.h -jigsaw.o: $(UTILS_SRC)/visual.h -jigsaw.o: $(UTILS_SRC)/yarandom.h juggle.o: ../config.h juggle.o: $(srcdir)/fps.h juggle.o: $(srcdir)/screenhackI.h @@ -2017,17 +1978,6 @@ metaballs.o: $(UTILS_SRC)/resources.h metaballs.o: $(UTILS_SRC)/usleep.h metaballs.o: $(UTILS_SRC)/visual.h metaballs.o: $(UTILS_SRC)/yarandom.h -mismunch.o: ../config.h -mismunch.o: $(srcdir)/fps.h -mismunch.o: $(srcdir)/screenhackI.h -mismunch.o: $(srcdir)/screenhack.h -mismunch.o: $(UTILS_SRC)/colors.h -mismunch.o: $(UTILS_SRC)/grabscreen.h -mismunch.o: $(UTILS_SRC)/hsv.h -mismunch.o: $(UTILS_SRC)/resources.h -mismunch.o: $(UTILS_SRC)/usleep.h -mismunch.o: $(UTILS_SRC)/visual.h -mismunch.o: $(UTILS_SRC)/yarandom.h moire2.o: ../config.h moire2.o: $(srcdir)/fps.h moire2.o: $(srcdir)/screenhackI.h @@ -2452,17 +2402,6 @@ slip.o: $(UTILS_SRC)/xshm.h slip.o: $(UTILS_SRC)/yarandom.h slip.o: $(srcdir)/xlockmoreI.h slip.o: $(srcdir)/xlockmore.h -sonar.o: ../config.h -sonar.o: $(srcdir)/fps.h -sonar.o: $(srcdir)/screenhackI.h -sonar.o: $(srcdir)/screenhack.h -sonar.o: $(UTILS_SRC)/colors.h -sonar.o: $(UTILS_SRC)/grabscreen.h -sonar.o: $(UTILS_SRC)/hsv.h -sonar.o: $(UTILS_SRC)/resources.h -sonar.o: $(UTILS_SRC)/usleep.h -sonar.o: $(UTILS_SRC)/visual.h -sonar.o: $(UTILS_SRC)/yarandom.h speedmine.o: ../config.h speedmine.o: $(srcdir)/fps.h speedmine.o: $(srcdir)/screenhackI.h diff --git a/hacks/asm6502.c b/hacks/asm6502.c index 101ee5a6..90eed8d1 100644 --- a/hacks/asm6502.c +++ b/hacks/asm6502.c @@ -1027,7 +1027,7 @@ static void jmpSTY(machine_6502 *machine, AddrMode adm){ static void assignOpCodes(Opcodes *opcodes){ #define SETOP(num, _name, _Imm, _ZP, _ZPX, _ZPY, _ABS, _ABSX, _ABSY, _INDX, _INDY, _SNGL, _BRA, _func) \ -{opcodes[num].name[4] = '\0'; \ +{opcodes[num].name[3] = '\0'; \ strncpy(opcodes[num].name, _name, 3); opcodes[num].Imm = _Imm; opcodes[num].ZP = _ZP; \ opcodes[num].ZPX = _ZPX; opcodes[num].ZPY = _ZPY; opcodes[num].ABS = _ABS; \ opcodes[num].ABSX = _ABSX; opcodes[num].ABSY = _ABSY; opcodes[num].INDX = _INDX; \ @@ -1897,12 +1897,11 @@ static BOOL translate(Opcodes *op,Param *param, machine_6502 *machine){ else { if (op->BRA) { pushByte(machine, op->BRA); - if (param->lbladdr < (machine->codeLen + PROG_START)) - pushByte(machine, - (0xff - (machine->codeLen-param->lbladdr)) & 0xff); - else - pushByte(machine, - (param->lbladdr - machine->codeLen-1) & 0xff); + { + int diff = abs(param->lbladdr - machine->defaultCodePC); + int backward = (param->lbladdr < machine->defaultCodePC); + pushByte(machine, (backward) ? 0xff - diff : diff - 1); + } } else { fprintf(stderr,"%s does not take BRANCH parameters.\n",op->name); @@ -1993,14 +1992,28 @@ static BOOL compileLine(AsmLine *asmline, void *args){ static BOOL indexLabels(AsmLine *asmline, void *arg){ machine_6502 *machine; int thisPC; + Bit16 oldDefault; machine = arg; + oldDefault = machine->defaultCodePC; thisPC = machine->regPC; /* Figure out how many bytes this instruction takes */ machine->codeLen = 0; + if ( ! compileLine(asmline, machine) ){ return FALSE; } - machine->regPC += machine->codeLen; + + /* If the machine's defaultCodePC has changed then we encountered a + *= which changes the load address. We need to initials our code + *counter with the current default. */ + if (oldDefault == machine->defaultCodePC){ + machine->regPC += machine->codeLen; + } + else { + machine->regPC = machine->defaultCodePC; + oldDefault = machine->defaultCodePC; + } + if (asmline->labelDecl) { asmline->label->addr = thisPC; } @@ -2040,6 +2053,20 @@ static BOOL compileCode(machine_6502 *machine, const char *code){ return FALSE; /* update label references */ linkLabels(asmlist); + +#if 0 /* prints out some debugging information */ + { + AsmLine *p; + if(asmlist != NULL){ + for (p = asmlist; p != NULL; p = p->next) + fprintf(stderr,"%s lbl: %s addr: %d ParamLbl: %s ParamAddr: %d\n", + p->command, p->label->label, p->label->addr, + p->param->label, p->param->lbladdr); + } + } + +#endif + /* Second pass: translate the instructions */ machine->codeLen = 0; /* Link label call push_byte which increments defaultCodePC. diff --git a/hacks/bubbles.man b/hacks/bubbles.man deleted file mode 100644 index f9b892e6..00000000 --- a/hacks/bubbles.man +++ /dev/null @@ -1,140 +0,0 @@ -.de EX \"Begin example -.ne 5 -.if n .sp 1 -.if t .sp .5 -.nf -.in +.5i -.. -.de EE -.fi -.in -.5i -.if n .sp 1 -.if t .sp .5 -.. -.TH XScreenSaver 1 "14-Dec-95" "X Version 11" -.SH NAME -bubbles - frying pan / soft drink simulation -.SH SYNOPSIS -.B bubbles -[\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-simple] [\-broken] [\-3D] [\-rise|\-drop] [-trails] -[\-fps] -.SH DESCRIPTION -\fIBubbles\fP sprays lots of little random bubbles all over the window which -then grow until they reach their maximum size and go pop. The inspiration -for this was watching little globules of oil on the bottom of a frying pan -and it also looks a little like bubbles in fizzy soft drink. The default -mode uses fancy ray-traced bubbles but there is also a mode which just draws -circles in case the default mode is too taxing on your hardware. -.SH OPTIONS -Depending on how your -.I bubbles -was compiled, it accepts the following options: -.TP 8 -.B \-foreground -Colour of circles if \fI\-simple\fP mode is selected. -.TP 8 -.B \-background -Colour of window background. -.TP 8 -.B \-window -Draw on a newly-created window. This is the default. -.TP 8 -.B \-root -Draw on the root window. -.TP 8 -.B \-mono -If on a color display, pretend we're on a monochrome display. -.TP 8 -.B \-install -Install a private colormap for the window. -.TP 8 -.B \-visual \fIvisual\fP -Specify which visual to use. Legal values are the name of a visual class, -or the id number (decimal or hex) of a specific visual. -.TP 8 -.B \-delay microseconds -How much of a delay should be introduced between steps of the animation. -Default 800, or about 800 microsecond. Actually, this is the delay between each -group of 15 new bubbles since such a delay between each step results in a -very slow animation rate. -.TP 8 -.B \-nodelay -Same as \fI\-delay 0\fP. -.TP 8 -.B \-simple -Don't use the default fancy pixmap bubbles. Just draw circles instead. -This may give more bearable performance if your hardware wasn't made for -this sort of thing. -.TP 8 -.B \-broken -Don't hide bubbles when they pop. This was a bug during development -but the results were actually quite attractive. -.TP 8 -.B \-3D -Normally, the simulation is done completely in two dimensions. When a -bubble swallows up another bubble, the areas of each are added to get -the area of the resulting bubble. This option changes the algorithm -to instead add volume (imagining each to be a sphere in 3D space). The -whole thing looks more realistic but I find it attracts attention to -the flickering of each bubble as they are move and are redrawn. Your -mileage may vary. -.TP 8 -.B \-quiet -Don't print messages explaining why one or several command line options -were ignored. This is disabled by default. -.TP 8 -.B \-rise | \-drop -.TP 8 -.B \-trails -.TP 8 -.B \-fps -Display the current frame rate and CPU load. -.SH NOTES -If you find the pace of things too slow, remember that there is a delay -even though you specify no \fI\-delay\fP option. Try using \fI\-nodelay\fP -although beware of the effects of irritation of other users if you're on a -shared system as you bleed their CPU time away. - -Some tools to assist in creation of new bubbles are included in the source -distribution. These can either be loaded with the \fI\-file\fP or -\fI\-directory\fP options (if available) or they can be used in place -of the distributed default bubble (bubble_default.c). -You might like to copy these scripts to a permanent location and -use them. Read bubbles.README. - -Rendered bubbles are not supported on monochrome displays. I'm not -convinced that small bubbles, even dithered properly are going to look -like anything more than a jumble of random dots. -.SH BUGS -There is a delay before something appears on the screen when using -rendered bubbles. The XPM library seems to take a \fBlong\fP time to make -pixmaps out of raw data. This can be irritating on slower systems. - -The movement of the bubbles looks jerky if an incomplete set of bubbles -is used. - -The hide/display algorithm could do with some work to avoid flickering -when \fI\-nodelay\fP is set. -.SH ENVIRONMENT -.PP -.TP 8 -.B DISPLAY -to get the default host and display number. -.TP 8 -.B XENVIRONMENT -to get the name of a resource file that overrides the global resources -stored in the RESOURCE_MANAGER property. -.SH SEE ALSO -.BR X (1), -.BR xscreensaver (1) -.SH DISTRIBUTION POLICY -This work is Copyright \(co 1995, 1996 by James Macnicol. Permission -to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided -that the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. No representations are made about the suitability of -this software for any purpose. It is provided "as is" without express -or implied warranty. -.SH AUTHOR -James Macnicol diff --git a/hacks/compile_axp.com b/hacks/compile_axp.com index 96d04d69..23ca552d 100644 --- a/hacks/compile_axp.com +++ b/hacks/compile_axp.com @@ -64,7 +64,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERAGGREGATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERFERENCE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERMOMENTARY.C -$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JIGSAW.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JUGGLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JULIA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) KALEIDESCOPE.C @@ -80,7 +79,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MAZE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MEMSCROLLER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) METABALLS.C -$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MISMUNCH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE2.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOUNTAIN.C @@ -112,7 +110,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SIERPINSKI.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIDESCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIP.C -$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SONAR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPEEDMINE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPHERE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPIRAL.C diff --git a/hacks/compile_decc.com b/hacks/compile_decc.com index 96d04d69..23ca552d 100644 --- a/hacks/compile_decc.com +++ b/hacks/compile_decc.com @@ -64,7 +64,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERAGGREGATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERFERENCE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERMOMENTARY.C -$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JIGSAW.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JUGGLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JULIA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) KALEIDESCOPE.C @@ -80,7 +79,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MAZE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MEMSCROLLER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) METABALLS.C -$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MISMUNCH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE2.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOUNTAIN.C @@ -112,7 +110,6 @@ $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SIERPINSKI.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIDESCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIP.C -$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SONAR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPEEDMINE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPHERE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPIRAL.C diff --git a/hacks/config/README b/hacks/config/README index ec3cb5f8..95c408a3 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.07 - 10-Aug-2008 + version 5.08 + 27-Dec-2008 http://www.jwz.org/xscreensaver/ diff --git a/hacks/config/discrete.xml b/hacks/config/discrete.xml index 9640a2c9..8a3916b0 100644 --- a/hacks/config/discrete.xml +++ b/hacks/config/discrete.xml @@ -21,7 +21,8 @@ <_description> More "discrete map" systems, including new variants of Hopalong and -Julia, and a few others. +Julia, and a few others. See also the "Hopalong" and "Julia" +screen savers. Written by Tim Auckland; 1998. diff --git a/hacks/config/jigsaw.xml b/hacks/config/jigsaw.xml index e2661d18..c026c30c 100644 --- a/hacks/config/jigsaw.xml +++ b/hacks/config/jigsaw.xml @@ -4,28 +4,45 @@ - - - - - - - +

+ + + + + + + + + + +
+ +
+ + + + + + + +
<_description> This grabs a screen image, carves it up into a jigsaw puzzle, -shuffles it, and then solves the puzzle. This works especially well -when you feed it an external video signal instead of letting it grab -the screen image (actually, I guess this is generally true...) When -it is grabbing a video image, it is sometimes pretty hard to guess -what the image is going to look like once the puzzle is solved. +shuffles it, and then solves the puzzle. + +http://en.wikipedia.org/wiki/Jigsaw_puzzle +http://en.wikipedia.org/wiki/Tessellation -Written by Jamie Zawinski; 1998. +Written by Jamie Zawinski; 1997. diff --git a/hacks/config/maze.xml b/hacks/config/maze.xml index fbbb65c4..0bd981a7 100644 --- a/hacks/config/maze.xml +++ b/hacks/config/maze.xml @@ -23,35 +23,33 @@ _label="Grid size" low="0" high="100" default="0"/> - - - - - - - - +
+ - + +
<_description> -This generates random mazes (with various different algorithms), and -then solves them. Backtracking and look-ahead paths are displayed in -different colors. +This generates random mazes (with three different maze-generation +algorithms), and then solves them. Backtracking and look-ahead paths +are displayed in different colors. + +http://en.wikipedia.org/wiki/Maze_generation_algorithm -Written by Jim Randell and many others; 1992. +Written by Martin Weiss, Dave Lemke, Jim Randell, Jamie Zawinski, +Johannes Keukelaar, and Zack Weinberg; 1985. diff --git a/hacks/config/mismunch.xml b/hacks/config/mismunch.xml deleted file mode 100644 index 7963932c..00000000 --- a/hacks/config/mismunch.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - <_description> -Munching errors! This is a creatively broken misimplementation of the -classic munching squares graphics hack. See the "Munch" screen saver -for the original. - -http://en.wikipedia.org/wiki/HAKMEM -http://en.wikipedia.org/wiki/Munching_square - -Written by Steven Hazel; 2004. - - diff --git a/hacks/config/munch.xml b/hacks/config/munch.xml index 2a0a0b31..df7f92ee 100644 --- a/hacks/config/munch.xml +++ b/hacks/config/munch.xml @@ -4,25 +4,36 @@ - - - - - - - - - - - +
+ + + + + + + + + + + + + + +
<_description> DATAI 2 @@ -31,13 +42,17 @@ XOR 1,2 JRST .-4 -As reported by HAKMEM, in 1962, Jackson Wright wrote the above PDP-1 -code. That code still lives on here, some 46 years later. The number -of lines of enclosing code has increased substantially, however. +As reported by HAKMEM (MIT AI Memo 239, 1972), Jackson Wright wrote +the above PDP-1 code in 1962. That code still lives on here, some 46 +years later. + +In "mismunch" mode, it displays a creatively broken misimplementation +of the classic munching squares algorithm instead. http://en.wikipedia.org/wiki/HAKMEM http://en.wikipedia.org/wiki/Munching_square -Written by Jackson Wright and Tim Showalter; 1997. +Written by Jackson Wright, Tim Showalter, Jamie Zawinski and +Steven Hazel; 1997. diff --git a/hacks/config/photopile.xml b/hacks/config/photopile.xml new file mode 100644 index 00000000..f14657ed --- /dev/null +++ b/hacks/config/photopile.xml @@ -0,0 +1,56 @@ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + <_description> +Loads several random images, and displays them as if lying in a random pile. +The pile is periodically reshuffled, with new images coming in and old ones +being thrown out. + +Written by Jens Kilian; 2008. + +
diff --git a/hacks/config/sierpinski3d.xml b/hacks/config/sierpinski3d.xml index 70ae366f..105e55a3 100644 --- a/hacks/config/sierpinski3d.xml +++ b/hacks/config/sierpinski3d.xml @@ -26,6 +26,6 @@ variant of the recursive Sierpinski triangle. http://en.wikipedia.org/wiki/Sierpinski_triangle#Analogs_in_higher_dimension -Written by Tim Robinson and Jamie Zawinski; 1999. +Written by Jamie Zawinski and Tim Robinson; 1999. diff --git a/hacks/config/sonar.xml b/hacks/config/sonar.xml index 8a3265df..baffcbf9 100644 --- a/hacks/config/sonar.xml +++ b/hacks/config/sonar.xml @@ -4,39 +4,58 @@ - - - +
+ + + + + + + + + + + + + +
+
+ _label="A count" low="1" high="100" default="4"/>
+ _label="B count" low="1" high="100" default="4"/>
- - + + +
@@ -52,6 +71,6 @@ Alternately, it can run a simulation that doesn't involve hosts. http://en.wikipedia.org/wiki/Ping#History -Written by Stephen Martin and Jamie Zawinski; 1998. +Written by Jamie Zawinski and Stephen Martin; 1998. diff --git a/hacks/config/timetunnel.xml b/hacks/config/timetunnel.xml index 56a23898..40913e78 100644 --- a/hacks/config/timetunnel.xml +++ b/hacks/config/timetunnel.xml @@ -6,16 +6,29 @@ - - - -